var rfw_transientVersion=1;
var rfw_transientData=new Array();

	function rfw_transientColor(oid,tid,style,from,to,resolution,delay,callback) {
		cb='';
		if(style=='color') var cb="document.getElementById('"+oid+"').style.color='#%value_r%%value_g%%value_b%';";
		if(style=='border-color') var cb="document.getElementById('"+oid+"').style.borderColor='#%value_r%%value_g%%value_b%';";
		if(style=='background-color') var cb="document.getElementById('"+oid+"').style.backgroundColor='#%value_r%%value_g%%value_b%';";

		if(cb.length>0) {
			rfw_transient(tid,'color',from,to,resolution,'round',delay,cb,callback);
		} else {
			alert("RFW_Transient ERROR: The [style] parameter ("+style+") is not supported!");
		}
	}

	function rfw_transientStyle(oid,tid,style,from,to,resolution,delay,callback) {
		var cb='';
		if(style=='left') var cb="document.getElementById('"+oid+"').style.left='%value%px';";
		if(style=='top') var cb="document.getElementById('"+oid+"').style.top='%value%px';";
		if(style=='right') var cb="document.getElementById('"+oid+"').style.right='%value%px';";
		if(style=='bottom') var cb="document.getElementById('"+oid+"').style.bottom='%value%px';";
		if(style=='width') var cb="document.getElementById('"+oid+"').style.width='%value%px';";
		if(style=='height') var cb="document.getElementById('"+oid+"').style.height='%value%px';";
		if(style=='margin') var cb="document.getElementById('"+oid+"').style.margin='%value%px';";

		if(style=='margin-left') var cb="document.getElementById('"+oid+"').style.marginLeft='%value%px';";
		if(style=='margin-top') var cb="document.getElementById('"+oid+"').style.marginTop='%value%px';";
		if(style=='margin-right') var cb="document.getElementById('"+oid+"').style.marginRight='%value%px';";
		if(style=='margin-bottom') var cb="document.getElementById('"+oid+"').style.marginBottom='%value%px';";

		if(style=='padding') var cb="document.getElementById('"+oid+"').style.padding='%value%px';";

		if(style=='padding-left') var cb="document.getElementById('"+oid+"').style.paddingLeft='%value%px';";
		if(style=='padding-top') var cb="document.getElementById('"+oid+"').style.paddingTop='%value%px';";
		if(style=='padding-right') var cb="document.getElementById('"+oid+"').style.paddingRight='%value%px';";
		if(style=='padding-bottom') var cb="document.getElementById('"+oid+"').style.paddingBottom='%value%px';";

		if(style=='z-index') var cb="document.getElementById('"+oid+"').style.zIndex=%value%;";

		if(style=='border-radius') var cb="document.getElementById('"+oid+"').style.borderRadius='%value%px'; document.getElementById('"+oid+"').style.MozBorderRadius='%value%px'; document.getElementById('"+oid+"').style.WebkitBorderRadius='%value%px';";

		if(cb.length>0) {
			rfw_transient(tid,'number',from,to,resolution,'round',delay,cb,callback);
		} else {
			alert("RFW_Transient ERROR: The [style] parameter ("+style+") is not supported!");
			return false;
		}
	}

	function rfw_transientStop(id) {
		if (typeof(rfw_transientData[id])=='object') {
			clearTimeout(rfw_transientData[id]['timer']);
			delete rfw_transientData[id];
		}
	}

	function rfw_transient(id,type,from,to,resolution,rounding,delay,callback,endcallback) {
		rfw_transientStop(id);

		if(id==null || id.length==0) id=rfw_transientGenerateRandomIndex();

		if(typeof(rfw_transientData[id])!='array') {
			rfw_transientData[id]=new Array();
		}

		if(typeof(resolution)!='number') {
			alert("RFW_Transient ERROR [id: "+id+"]: The [resolution] parameter is not a number");
			return false;
		}
		if(resolution<=0) {
			alert("RFW_Transient ERROR [id: "+id+"]: The [resolution] parameter is less or equals to zero.\n\nIt must be a positive number!");
			return false;
		}

		if(typeof(delay)!='number') {
			alert("RFW_Transient ERROR [id: "+id+"]: The [delay] parameter is not a number");
			return false;
		}
		if(delay<=0) {
			alert("RFW_Transient ERROR [id: "+id+"]: The [delay] parameter is less or equals to zero.\n\nIt must be a positive number!");
			return false;
		}

		rfw_transientData[id]['rounding']=rounding;
		rfw_transientData[id]['resolution']=resolution;
		rfw_transientData[id]['delay']=delay;
		rfw_transientData[id]['callBack']=callback;
		rfw_transientData[id]['endCallBack']=endcallback;

		if(type=='number') {
			if(typeof(from)!='number') {
				alert("RFW_Transient ERROR [id: "+id+"]: The [from] parameter is not a number");
				return false;
			}
			if(typeof(to)!='number') {
				alert("RFW_Transient ERROR [id: "+id+"]: The [to] parameter is not a number");
				return false;
			}
			rfw_transientData[id]['type']='number';
			if(from<to) var a='inc';
			if(from>to) var a='dec';
			rfw_transientData[id]['value']=from;
			rfw_transientData[id]['action']=a;
			rfw_transientData[id]['start']=from;
			rfw_transientData[id]['end']=to;
		}
		if(type=='color') {
			rfw_transientData[id]['type']='color';
			from=from.replace(/[^0-9A-F]*/gi,'');
			to=to.replace(/[^0-9A-F]*/gi,'');
			from=from.rfw_lPad('0',6);
			to=to.rfw_lPad('0',6);
			rfw_transientData[id]['start_red_hex']=from.substr(0,2);
			rfw_transientData[id]['start_red_dec']=rfw_transientData[id]['start_red_hex'].rfw_hex2dec();
			rfw_transientData[id]['start_green_hex']=from.substr(2, 2);
			rfw_transientData[id]['start_green_dec']=rfw_transientData[id]['start_green_hex'].rfw_hex2dec();
			rfw_transientData[id]['start_blue_hex']=from.substr(4, 2);
			rfw_transientData[id]['start_blue_dec']=rfw_transientData[id]['start_blue_hex'].rfw_hex2dec();
			rfw_transientData[id]['end_red_hex']=to.substr(0, 2);
			rfw_transientData[id]['end_red_dec']=rfw_transientData[id]['end_red_hex'].rfw_hex2dec();
			rfw_transientData[id]['end_green_hex']=to.substr(2, 2);
			rfw_transientData[id]['end_green_dec']=rfw_transientData[id]['end_green_hex'].rfw_hex2dec();
			rfw_transientData[id]['end_blue_hex']=to.substr(4, 2);
			rfw_transientData[id]['end_blue_dec']=rfw_transientData[id]['end_blue_hex'].rfw_hex2dec();
			rfw_transientData[id]['value_red_dec']=rfw_transientData[id]['start_red_dec'];
			rfw_transientData[id]['value_green_dec']=rfw_transientData[id]['start_green_dec'];
			rfw_transientData[id]['value_blue_dec']=rfw_transientData[id]['start_blue_dec'];
			if(rfw_transientData[id]['start_red_dec']<rfw_transientData[id]['end_red_dec']) rfw_transientData[id]['action_red']='inc';
			if(rfw_transientData[id]['start_red_dec']>rfw_transientData[id]['end_red_dec']) rfw_transientData[id]['action_red']='dec';
			if(rfw_transientData[id]['start_red_dec']==rfw_transientData[id]['end_red_dec']) rfw_transientData[id]['action_red']='none';
			if(rfw_transientData[id]['start_green_dec']<rfw_transientData[id]['end_green_dec']) rfw_transientData[id]['action_green']='inc';
			if(rfw_transientData[id]['start_green_dec']>rfw_transientData[id]['end_green_dec']) rfw_transientData[id]['action_green']='dec';
			if(rfw_transientData[id]['start_green_dec']==rfw_transientData[id]['end_green_dec']) rfw_transientData[id]['action_green']='none';
			if(rfw_transientData[id]['start_blue_dec']<rfw_transientData[id]['end_blue_dec']) rfw_transientData[id]['action_blue']='inc';
			if(rfw_transientData[id]['start_blue_dec']>rfw_transientData[id]['end_blue_dec']) rfw_transientData[id]['action_blue']='dec';
			if(rfw_transientData[id]['start_blue_dec']==rfw_transientData[id]['end_blue_dec']) rfw_transientData[id]['action_blue']='none';
		}

		if(from==to) {
			rfw_transientData[id]['value']=from;
			rfw_transientCallBack(id);
			return;
		}

		rfw_transientCallBack(id,false);
		rfw_transientData[id]['timer']=setInterval("rfw_transientAction('"+id+"');",rfw_transientData[id]['delay']);
	}

	function rfw_transientAction(id) {
		if(rfw_transientData[id].type=='number') {
			if(rfw_transientData[id]['action']=='inc') {
				var step=(rfw_transientData[id]['end']-rfw_transientData[id]['start'])/rfw_transientData[id]['resolution'];
				rfw_transientData[id]['value']=rfw_transientData[id]['value']+step;
				if(rfw_transientData[id]['value']>=rfw_transientData[id]['end']) {
					rfw_transientData[id]['value']=rfw_transientData[id]['end'];
					clearInterval(rfw_transientData[id]['timer']);
					rfw_transientCallBack(id,true);
					return;
				}
			}
			if(rfw_transientData[id]['action']=="dec") {
				var step=(rfw_transientData[id]['start']-rfw_transientData[id]['end'])/rfw_transientData[id]['resolution'];
				rfw_transientData[id]['value']=rfw_transientData[id]['value']-step;
				if(rfw_transientData[id]['value']<=rfw_transientData[id]['end']) {
					rfw_transientData[id]['value']=rfw_transientData[id]['end'];
					clearInterval(rfw_transientData[id]['timer']);
					rfw_transientCallBack(id,true);
					return;
				}
			}

		}
		if(rfw_transientData[id].type=='color') {
			if(rfw_transientData[id]['action_red']=='inc') {
				var step=(rfw_transientData[id]['end_red_dec']-rfw_transientData[id]['start_red_dec'])/rfw_transientData[id]['resolution'];
				rfw_transientData[id]['value_red_dec']=rfw_transientData[id]['value_red_dec']+step;
				if(rfw_transientData[id]['value_red_dec']>=rfw_transientData[id]['end_red_dec']) {
					rfw_transientData[id]['value_red_dec']=rfw_transientData[id]['end_red_dec'];
				}
			}
			if(rfw_transientData[id]['action_red']=='dec') {
				var step=(rfw_transientData[id]['start_red_dec']-rfw_transientData[id]['end_red_dec'])/rfw_transientData[id]['resolution'];
				rfw_transientData[id]['value_red_dec']=rfw_transientData[id]['value_red_dec']-step;
				if(rfw_transientData[id]['value_red_dec']<=rfw_transientData[id]['end_red_dec']) {
					rfw_transientData[id]['value_red_dec']=rfw_transientData[id]['end_red_dec'];
				}
			}

			if(rfw_transientData[id]['action_green']=='inc') {
				var step=(rfw_transientData[id]['end_green_dec']-rfw_transientData[id]['start_green_dec'])/rfw_transientData[id]['resolution'];
				rfw_transientData[id]['value_green_dec']=rfw_transientData[id]['value_green_dec']+step;
				if(rfw_transientData[id]['value_green_dec']>=rfw_transientData[id]['end_green_dec']) {
					rfw_transientData[id]['value_green_dec']=rfw_transientData[id]['end_green_dec'];
				}
			}
			if(rfw_transientData[id]['action_green']=='dec') {
				var step=(rfw_transientData[id]['start_green_dec']-rfw_transientData[id]['end_green_dec'])/rfw_transientData[id]['resolution'];
				rfw_transientData[id]['value_green_dec']=rfw_transientData[id]['value_green_dec']-step;
				if(rfw_transientData[id]['value_green_dec']<=rfw_transientData[id]['end_green_dec']) {
					rfw_transientData[id]['value_green_dec']=rfw_transientData[id]['end_green_dec'];
				}
			}

			if(rfw_transientData[id]['action_blue']=='inc') {
				var step=(rfw_transientData[id]['end_blue_dec']-rfw_transientData[id]['start_blue_dec'])/rfw_transientData[id]['resolution'];
				rfw_transientData[id]['value_blue_dec']=rfw_transientData[id]['value_blue_dec']+step;
				if(rfw_transientData[id]['value_blue_dec']>=rfw_transientData[id]['end_blue_dec']) {
					rfw_transientData[id]['value_blue_dec']=rfw_transientData[id]['end_blue_dec'];
				}
			}

			if(rfw_transientData[id]['action_blue']=='dec') {
				var step=(rfw_transientData[id]['start_blue_dec']-rfw_transientData[id]['end_blue_dec'])/rfw_transientData[id]['resolution'];
				rfw_transientData[id]['value_blue_dec']=rfw_transientData[id]['value_blue_dec']-step;
				if(rfw_transientData[id]['value_blue_dec']<=rfw_transientData[id]['end_blue_dec']) {
					rfw_transientData[id]['value_blue_dec']=rfw_transientData[id]['end_blue_dec'];
				}
			}

			if(rfw_transientData[id]['value_red_dec']==rfw_transientData[id]['end_red_dec'] && rfw_transientData[id]['value_green_dec']==rfw_transientData[id]['end_green_dec'] && rfw_transientData[id]['value_blue_dec']==rfw_transientData[id]['end_blue_dec']) {
				clearInterval(rfw_transientData[id]['timer']);
				rfw_transientCallBack(id,true);
				return;
			}
		}
		rfw_transientCallBack(id,false);
	}

	function rfw_transientCallBack(id,end) {
		var cb=rfw_transientData[id].callBack;
		if(rfw_transientData[id].type=='number') {
			var val=rfw_transientData[id]['value'];
			if(rfw_transientData[id]['rounding']=='round') val=Math.round(val);
			if(rfw_transientData[id]['rounding']=='floor') val=Math.floor(val);
			if(rfw_transientData[id]['rounding']=='ceil') val=Math.ceil(val);
			cb=cb.replace(/%value%/gi,val);
		}
		if(rfw_transientData[id]['type']=='color') {
			var val = rfw_transientData[id]['value_red_dec'];
			if(rfw_transientData[id]['rounding']=='round') val=Math.round(val);
			if(rfw_transientData[id]['rounding']=='floor') val=Math.floor(val);
			if(rfw_transientData[id]['rounding']=='ceil') val=Math.ceil(val);
			val=val.rfw_dec2hex();
			val=val.rfw_lPad('0',2);
			cb=cb.replace(/%value_r%/gi,val);

			var val=rfw_transientData[id]['value_green_dec'];
			if(rfw_transientData[id]['rounding']=='round') val=Math.round(val);
			if(rfw_transientData[id]['rounding']=='floor') val=Math.floor(val);
			if(rfw_transientData[id]['rounding']=='ceil') val=Math.ceil(val);
			val=val.rfw_dec2hex();
			val=val.rfw_lPad('0',2);
			cb=cb.replace(/%value_g%/gi,val);

			var val=rfw_transientData[id]['value_blue_dec'];
			if(rfw_transientData[id]['rounding']=='round') val=Math.round(val);
			if(rfw_transientData[id]['rounding']=='floor') val=Math.floor(val);
			if(rfw_transientData[id]['rounding']=='ceil') val=Math.ceil(val);
			val=val.rfw_dec2hex();
			val=val.rfw_lPad('0',2);
			cb= cb.replace(/%value_b%/gi,val);
		}

		try {
			eval(cb);
		} catch(err) {
			rfw_transientStop(id);
			alert("RFW_Transient ERROR: Function error\n\n"+cb+"\n\nDescription: "+err.description);
		}

		if(end) {
			try {
				eval(rfw_transientData[id]['endCallBack']);
			} catch(err) {
				rfw_transientStop(id);
				alert("RFW_Transient ERROR: EndCallBack error\n\n"+rfw_transientData[id]['endCallBack']+"\n\nDescription: "+err.description);
			}
		}
	}

	function rfw_transientGenerateRandomIndex() {
		var r;
		do {
			r=Math.floor(Math.random()*1000000000);
		} while(typeof(rfw_transientData[r])=='object');
		return r;
	}

