var browserName=navigator.appName; 
var traceWin;

function trace(str) {
  if(!traceWin){
	  traceWin = window.open('trace.html','trace');	
  } 
  traceWin.focus();	 
  traceWin.document.body.innerHTML += str+'<br />';
  traceWin.scrollTo(0,traceWin.document.body.scrollHeight);
}




function tween(property,final_value,seconds,anim_type,delay, callback, extra1, extra2) {
	
	if(!delay){
		 var pre ="";
		 var suf ="";
		 var interval = 20;
		 if (!this.tweens){
			this.tweens=new Object();
		 }
		 if (!this.tweens[property]){
			this.tweens[property]=new Object();
		 }
		 vars = this.tweens[property];
		 
		 
		  if (vars.timer) {
			clearTimeout(vars.timer);
		  }  
		  var numbers = new Array('-','.',0,1,2,3,4,5,6,7,8,9);
		  var num = "";
		  for (i=0; i<final_value.length; i++){
			for (var n in numbers){
				if(final_value.charAt(i)==numbers[n]) num+=numbers[n];
			}
		  }
		  
		  var presuf = final_value.split(num);
		  if(presuf[0]) var pre = presuf[0];
		  if(presuf[1]) var suf = presuf[1];  
		  var value = this.style[property]; 
		
		  value = value.replace(pre, '');
		  value = value.replace(suf, '');
		  value = parseFloat(value);
		  
		 
		 if (!value){
			  if (property == "MozOpacity") value=.99;
			  else if (property=="filter") value=100;
			  else value = 0;
		  }   
		  
		  if (final_value == vars.f){// update time
			vars.t += interval;
			if (vars.t > vars.d || vars.c==0){
			  if(callback) callback();
			  return true;
			}	
		  } else {// create  	
			vars.d = seconds * 1000
			vars.t = 0;
			vars.b = value;
			vars.c = parseFloat(num)-value;
			vars.f = final_value;
			vars.a = extra1;
			vars.p = extra2;
		  }  
		  if(vars.d != 0){
			value = Math[anim_type.toLowerCase()](vars.t, vars.b, vars.c, vars.d, vars.a, vars.p);
			this.style[property] = pre+value+suf;
			//alert("property: "+property+"\nvalue:  "+value+"\nactual: "+this.style[property]);
		  }else{
			  this.style[property] = final_value;
			 // alert("property: "+property+"\nvalue:  "+value+"\nactual: "+this.style[property]+"\nFINAL: "+final_value);
		  }
		  
		 // alert(value);
		  
	} else {
		var interval = delay*1000;
	}	
	var repeat = "document.getElementById('"+this.id+"').tween('"+property+"','"+final_value+"',"+seconds+",'"+anim_type+"',0,"+callback+",'"+extra1+"','"+extra2+"')";
	vars.timer = setTimeout(repeat,interval);
}