
var bblib = new Object();

	bblib.transitions = {
		// Reequires trgt (DOM Element or Element ID)
		// Optional args [object] with values for: delay[number], increment[number], finish[number] oncomplete[function]
		//	All values in args are optional
		//	EXAMPLE bblib.transitions.height('activeColumn', {finish:600, oncomplete:function(){alert('done')}})
		height:function(trgt, args){
				var target = $(trgt);
				if(target.transHeight) clearTimeout(target.transHeight);
				//target.isinanim = true;
				var myArgs =  bblib.transitions.createArgs({height:parseInt(Element.getHeight(target)), iter:0,  finish:1, speed:1, oncomplete:null, init:parseInt(target.offsetHeight)}, args);
				if(target.style.overflow != 'scroll' && target.style.overflow != 'auto') target.style.overflow = 'hidden';
				if(isNaN(myArgs.height)) myArgs.height = myArgs.finish;
				target.style.height = myArgs.height+'px';
				var diff = myArgs.height - myArgs.finish;
				if(isNaN(diff)) diff = 0;
				var maxSpeed = Math.abs(Math.floor((myArgs.init-myArgs.finish)/10))*myArgs.speed;
				var pctCom = Math.abs(myArgs.height-myArgs.init)/Math.abs(myArgs.init-myArgs.finish);
				myArgs.increment = (isNaN((1-pctCom)*maxSpeed + 1))?1:(1-pctCom)*maxSpeed + 1;
				myArgs.iter = myArgs.iter+1;
				/*DEBUG
					var sp = document.createElement('div');
					$('debug').style.position='relative';
					sp.style.position = 'absolute';
					sp.style.top = Math.floor(myArgs.increment)*10+'px';
					sp.style.left = myArgs.iter*10+'px';
					sp.innerHTML = Math.floor(myArgs.increment);
					$('debug').appendChild(sp);
				 DEBUG
				*/
				//myArgs.increment = Math.abs(Math.sqrt(diff))*myArgs.speed;
				if(Math.abs(diff) < myArgs.increment) {
					target.style.height = myArgs.finish+'px';
					if(myArgs.oncomplete) myArgs.oncomplete(target);
				} else {
					myArgs.height = myArgs.height + ((diff<0)?myArgs.increment:myArgs.increment*-1);
					target.transHeight = setTimeout(function(){
						bblib.transitions.height(target, myArgs);
					}, 20);
				}
		},
		width:function(trgt, args){
			var target = $(trgt);
			if(target.transWidth) clearTimeout(target.transWidth);
			var myArgs =  bblib.transitions.createArgs({width:parseInt(target.offsetWidth), finish:1, speed:1, oncomplete:null, init:parseInt(target.offsetHeight)}, args);
			if(target.style.overflow != 'scroll' && target.style.overflow != 'auto') target.style.overflow = 'hidden';
			$(trgt).style.width = myArgs.width+'px';
			var diff = myArgs.width - myArgs.finish;
			var maxSpeed = Math.abs(Math.floor((myArgs.init-myArgs.finish)/10))*myArgs.speed;
			var pctCom = Math.abs(myArgs.width-myArgs.init)/Math.abs(myArgs.init-myArgs.finish);
			myArgs.increment = (isNaN((1-pctCom)*maxSpeed + 1))?1:(1-pctCom)*maxSpeed + 1;
			if(Math.abs(diff) < myArgs.increment) {
				target.style.width = myArgs.finish+'px';
				if(myArgs.oncomplete) myArgs.oncomplete(target);
			} else {
				myArgs.width = myArgs.width + ((diff<0)?myArgs.increment:myArgs.increment*-1);
					target.transWidth = setTimeout(function(){
						bblib.transitions.width(target, myArgs);
					}, 20);
			}
		},
		xPos:function(trgt, args){
			var target = $(trgt);
			if(target.transXpos) clearTimeout(target.transXpos);
			var myArgs =  bblib.transitions.createArgs({left:target.offsetLeft, finish:1, speed:1, oncomplete:null, init:target.offsetLeft}, args);
			//alert(myArgs.finish)
			$(trgt).style.left = myArgs.left+'px';
			var diff = myArgs.left - myArgs.finish;
			var maxSpeed = Math.abs(Math.floor((myArgs.init-myArgs.finish)/10))*myArgs.speed;
			var pctCom = Math.abs(myArgs.left-myArgs.init)/Math.abs(myArgs.init-myArgs.finish);
			myArgs.increment = (isNaN((1-pctCom)*maxSpeed + 1))?1:(1-pctCom)*maxSpeed + 1;
			if(Math.abs(diff) <= myArgs.increment) {
				//alert(myArgs.finish)
				target.style.left = myArgs.finish+'px';
				if(myArgs.oncomplete) myArgs.oncomplete(target);
			} else {
				myArgs.left = myArgs.left + ((diff<0)?myArgs.increment:myArgs.increment*-1);
				target.transXpos = setTimeout(function(){
					bblib.transitions.xPos(target, myArgs);
				}, 20);
			}
		},
		yPos:function(trgt, args){
			var target = $(trgt);
			if(target.transYpos) clearTimeout(target.transYpos);
			var myArgs =  bblib.transitions.createArgs({top:target.offsetTop, finish:1, speed:1, oncomplete:null, init:target.offsetTop}, args);
			$(trgt).style.top = myArgs.top+'px';
			var diff = myArgs.top - myArgs.finish;
			var maxSpeed = Math.abs(Math.floor((myArgs.init-myArgs.finish)/10))*myArgs.speed;
			var pctCom = Math.abs(myArgs.top-myArgs.init)/Math.abs(myArgs.init-myArgs.finish);
			myArgs.increment = (isNaN((1-pctCom)*maxSpeed + 1))?1:(1-pctCom)*maxSpeed + 1;
			if(Math.abs(diff) <= myArgs.increment) {
				target.style.top = myArgs.finish+'px';
				if(myArgs.oncomplete) myArgs.oncomplete(target);
			} else {
				myArgs.top = myArgs.top + ((diff<0)?myArgs.increment:myArgs.increment*-1);
				target.transYpos = setTimeout(function(){
					bblib.transitions.yPos(target, myArgs);
				}, 20);
			}
		},
		opacity:function(trgt, args){
			var target = $(trgt);
			var myArgs = bblib.transitions.createArgs({delay:20, opacity:0, increment:5, finish:0, oncomplete:null}, args);
			bblib.setOpacity(target, myArgs.opacity/100);
			var diff = myArgs.opacity - myArgs.finish;
			if(Math.abs(diff) < myArgs.increment) {
				 bblib.setOpacity(target, myArgs.opacity/100);
				if(myArgs.oncomplete) myArgs.oncomplete(target);
			} else {
				myArgs.opacity = myArgs.opacity + ((diff<0)?myArgs.increment:myArgs.increment*-1);
				setTimeout(function(){
					bblib.transitions.opacity(target, myArgs);
				}, myArgs.delay);
			}
		},
		scale:function(el, newX, newY, speed){
			bblib.transitions.height(el, {speed:speed,finish:newX})
			bblib.transitions.width(el, {speed:speed,finish:newY})			
		},
		move:function(el, newX, newY, speed){
			bblib.transitions.yPos(el, {speed:speed,finish:newY})
			bblib.transitions.xPos(el, {speed:speed,finish:newX})			
		},
		createArgs:function(fnDefault, passed){
			if(passed){
				var newArgs = new Object();
				for (x in fnDefault) {
					newArgs[x] = (typeof passed[x] != 'undefined')? passed[x] : fnDefault[x];
				}
			} else {
				var newArgs = fnDefault;
			}
			return newArgs;
		}
	}
	bblib.setOpacity = function(elem, opacity) {
	    var object = $(elem).style;
		$(elem).setOpacity(opacity);
	}
	bblib.isClass = function(c, n){
		var tagname = n?n:'div';
		var newlist = [];
		var elList = document.getElementsByTagName(n);
		for(e=0; e<elList.length; e++){
			var classList = elList[e].className.split(' ');
			for(var cls=0; cls < classList.length; cls++){
				if(classList[cls]==c) newlist.push(elList[e]);
			}
		}
		return newlist;
	}
	function newcolor(){
	var newcolor = showModalDialog(_editor_url + "select_color.html", oldcolor,
                                   "dialogWidth:238px; dialogHeight: 187px; "
                                   + "resizable: no; help: no; status: no; scroll: no; "
                                   + wPosition);
	}
