function transform(Parameters){
	
	Obj = document.getElementById(Parameters.objID);
	if(!Obj) return;
	if(Obj.Transformer)	clearInterval(Obj.Transformer.interval);
	
	Obj.Transformer = new Object();
	
	//x transformation
	if(Parameters.x0 == '!') Obj.Transformer.x0 = Obj.offsetLeft;
	else Obj.Transformer.x0 = Parameters.x0;
	if(Parameters.x1 == '!') Obj.Transformer.x1 = Obj.offsetLeft;
	else Obj.Transformer.x1 = Parameters.x1;
	Obj.Transformer.xRange = Obj.Transformer.x1 - Obj.Transformer.x0;
	
	//y transformation
	if(Parameters.y0 == '!') Obj.Transformer.y0 = Obj.offsetTop;
	else Obj.Transformer.y0 = Parameters.y0;
	if(Parameters.y1 == '!') Obj.Transformer.y1 = Obj.offsetTop;
	else Obj.Transformer.y1 = Parameters.y1;
	Obj.Transformer.yRange = Obj.Transformer.y1 - Obj.Transformer.y0;
	
	//width transformation
	if(Parameters.w0 == '!') Obj.Transformer.w0 = Obj.offsetWidth;
	else Obj.Transformer.w0 = Parameters.w0;
	if(Parameters.w1 == '!') Obj.Transformer.w1 = Obj.offsetWidth;
	else Obj.Transformer.w1 = Parameters.w1;
	Obj.Transformer.wRange = Obj.Transformer.w1 - Obj.Transformer.w0;
	
	//height transformation
	if(Parameters.h0 == '!') Obj.Transformer.h0 = Obj.offsetHeight;
	else Obj.Transformer.h0 = Parameters.h0;
	if(Parameters.h1 == '!') Obj.Transformer.h1 = Obj.offsetHeight;
	else Obj.Transformer.h1 = Parameters.h1;
	Obj.Transformer.hRange = Obj.Transformer.h1 - Obj.Transformer.h0;
	
	//opacity transformation
	if((Parameters.op0 == '!') && (Parameters.op1 == '!')){
		Obj.Transformer.opRange = 0;
	}else{
		if(Parameters.op0 == '!'){
			if(Obj.style.opacity === '') Obj.Transformer.op0 = 100;
			else Obj.Transformer.op0 = Obj.style.opacity*100;
		}else Obj.Transformer.op0 = Parameters.op0;
			
		if(Parameters.op1 == '!'){
			if(Obj.style.opacity === '') Obj.Transformer.op1 = 100;
			else Obj.Transformer.op1 = Obj.style.opacity*100;
		}else Obj.Transformer.op1 = Parameters.op1;
	}
	Obj.Transformer.opRange = Obj.Transformer.op1 - Obj.Transformer.op0;
	
	Obj.Transformer.steps = Parameters.steps;
	Obj.Transformer.CurrentStep = 1;
	if(Obj.OnTransformStart) Obj.TransformStart(Obj);
	
	Obj.style.display = 'block';
	Obj.Transformer.interval = setInterval("do_transform_step('"+Obj.id+"')", Math.round(Parameters.time/Parameters.steps));
	
	
}

function transOpacity(objID, op0, op1, time, steps){
	p = new transparams(objID,'!','!','!','!','!','!','!','!','!','!',op0, op1, time,steps);
	transform(p);
}

function transPosition(objID,x0,x1,y0,y1,time,steps){
	
	p = new transparams(objID,x0,x1,y0,y1,'!','!','!','!','!','!','!','!',time,steps);
	transform(p);
}

function transGeometry(objID,w0,w1,h0,h1,time,steps){
	p = new transparams(objID,'!','!','!','!',w0,w1,h0,h1,'!','!','!','!',time,steps);
	transform(p);
}

function transGeoPos(objID,x0,x1,y0,y1,w0,w1,h0,h1,time,steps){
	p = new transparams(objID,x0,x1,y0,y1,w0,w1,h0,h1,'!','!','!','!',time,steps);
	transform(p);
}

function do_transform_step(objID){
	Obj = document.getElementById(objID);
	if(!Obj) return;
	if(!Obj.Transformer) return;
	
	if(Obj.Transformer.CurrentStep > Obj.Transformer.steps){
		clearInterval(Obj.Transformer.interval);
		Obj.Transformer = null;
		if(Obj.OnTransformEnd) Obj.OnTransformEnd(Obj);
		return;
	}

	if(Obj.Transformer.CurrentStep == Obj.Transformer.steps){
		newX = 1*Obj.Transformer.x1;
		newY = 1*Obj.Transformer.y1;
		newW = 1*Obj.Transformer.w1;
		newH = 1*Obj.Transformer.h1;
		newOp = 1*Obj.Transformer.op1;
		if(newOp == 0)Obj.style.display='none';
	}else{
		C = Obj.Transformer.CurrentStep / Obj.Transformer.steps;
		C = (1+Math.sin(3.1415*(C-0.5)))/2;
		newX = Math.round(1*Obj.Transformer.x0 + C*Obj.Transformer.xRange);
		newY = Math.round(1*Obj.Transformer.y0 + C*Obj.Transformer.yRange);
		newW = Math.round(1*Obj.Transformer.w0 + C*Obj.Transformer.wRange);
		newH = Math.round(1*Obj.Transformer.h0 + C*Obj.Transformer.hRange);
		newOp = 1*Obj.Transformer.op0 + C*Obj.Transformer.opRange;
	}
	
	newIEOp = newOp;
	/*
	if(document.all){
		newIEOp = newOp;
	}else newIEOp = false;*/
	newOp = newOp/100;
	
	
	Obj.style.left = newX + "px";
	Obj.style.top = newY + "px";
	if(Obj.Transformer.wRange != 0) Obj.style.width = newW + "px";
	if(Obj.Transformer.hRange != 0) Obj.style.height = newH + "px";
	if(Obj.Transformer.opRange != 0){
		Obj.style.opacity = newOp;
		Obj.style.filter = 'alpha\(opacity='+newIEOp+'\)';
	}
	
	Obj.Transformer.CurrentStep++;	
}

function transparams(objID,x0,x1,y0,y1,w0,w1,h0,h1,r0,r1,op0,op1,time,steps){
	this.objID = objID;	
	this.x0 = x0;
	this.x1 = x1;
	this.y0 = y0;
	this.y1 = y1;
	this.w0 = w0;
	this.w1 = w1;
	this.h0 = h0;
	this.h1 = h1;
	this.op0 = op0;
	this.op1 = op1;
	
		
	if(!time) this.time = 200;
	else this.time = time;
		
	if(!steps) this.steps = Math.round(this.time/1000*32);
	else this.steps = steps;	
}