// Eduard Prats Molner
// Updated by Ivan Vergés

/** Dynamic Layer library v 2.0
  * Remember to include checkbrowser.js in your html document to work properly
  * To use correctly clip & scroll functions you have to declare width & height dimensions in the DIV tag!!!
  */
  
  /** Constructor */
  function CapaDin(id){
  	//Properties
	this.id = id;
	
	if(document.getElementById) {
		this.sty = document.getElementById(this.id).style;
		this.obj = document.getElementById(this.id);
		this.width = this.obj.offsetWidth;
		this.height =this.obj.offsetHeight;
		this.x = parseInt(this.sty.left);
		this.y = parseInt(this.sty.top);
	}
	else if(document.layers){
		this.sty = document.layers[this.id];
		this.width = parseInt(this.sty.clip.width);
		this.height =parseInt(this.sty.clip.height);
		this.x = parseInt(this.sty.left);
		this.y = parseInt(this.sty.top);
	}
	else if(document.all){
		this.sty = document.all[this.id].style;
		this.obj = document.all[this.id];
		this.width = (is.ie5)? this.sty.offsetWidth : this.sty.pixelWidth;
		this.height = (is.ie5)?  this.sty.offsetHeight : this.sty.pixelHeight;
		this.x = this.obj.offsetLeft;
		this.y = this.obj.offsetTop;
	}
	else alert("Browser not supported!");
	
	this.incX = 0;
	this.incY = 0;
	this.step = 0;
	this.steps = 0;
	this.stepc = 0;
	this.stepsc = 0;
	this.speed = 0;
	this.acc = 0;
	this.endX = this.x;
	this.endY = this.y;
	this.mv = false;
	this.scroll = null; //You need to include Scroll.js library in your HTML document.
	this.lyr = id + "CapaDin";
	eval(this.lyr + "=this");
	this.ct = 0;
	this.cr = parseInt(this.width);
	this.cb = parseInt(this.height);
	this.cl = 0;
	this.cincT = 0;
	this.cincR = 0;
	this.cincB = 0;
	this.cincL = 0;
	this.drag = false; //You need to iclude Drag & Mouseevents lib to work properly.

	//Event handlers
	this.onDespEnd = new Function();
	this.onDespStart = new Function();
	this.onMostra = new Function();
	this.onOculta = new Function();
	this.onClipEnd = new Function();
  }

  function CapaDinSetPos(x,y){
  	if(x!=null){
		this.x = x;
		if(is.ns) this.sty.left = (is.ns6)?this.x + "px":this.x;
		else this.sty.pixelLeft = this.x;
	}
	if(y!=null){
		this.y = y;
		if(is.ns) this.sty.top = (is.ns6)?this.y + "px":this.y;
		else this.sty.pixelTop = this.y;
	}
  }
  
  function CapaDinDesplaza(X,Y,nf,spd,a){
  	this.endX = X;
	this.endY = Y;
	if(!a) this.acc = 0;
	else this.acc = a;
	if(nf > 0) this.steps = nf;
	else this.steps = 5; //Default value
	this.incX = parseInt((this.endX-this.x)/this.steps);
	this.incY = parseInt((this.endY-this.y)/this.steps);
	if(spd>0) this.speed = spd;
	else this.speed = 1; //Default value
	this.mv = true;
	this.onDespStart();
	this.mou();
  }
  
  function CapaDinMou(){
  	if(this.mv){
  	if(this.step < this.steps){
		this.step++;
		this.setPos(this.x+this.incX,this.y+this.incY);
		if ((this.speed-this.acc) < 0) setTimeout(this.lyr+".mou()",0);
		else setTimeout(this.lyr+".mou()",(this.speed-this.acc));
		this.speed = this.speed - this.acc;
	}
	else{
		if(is.ns){
			this.sty.left = this.endX;
			this.sty.top = this.endY;
		}
		else{
			this.sty.pixelLeft = this.endX;
			this.sty.pixelTop = this.endY;
		}
		this.x = this.endX;
		this.y = this.endY;
		this.step = 0;
		this.mv = false;
		this.onDespEnd();
	}
	}
	else{}
  }
  
  function CapaDinMostra(){
  	this.sty.visibility = 'visible';
	this.onMostra();
  }
  
  function CapaDinOculta(){
  	this.sty.visibility = 'hidden';
	this.onOculta();
  }
  
  function CapaDinClip(t,r,b,l){
  	if(document.layers) {
		this.sty.clip.top = t;
		this.sty.clip.right = r;
		this.sty.clip.bottom = b;
		this.sty.clip.left = l;
	}
	else this.sty.clip = "rect("+t+"px "+r+"px "+b+"px "+l+"px)";
  }
  
  function CapaDinClipTo(t,r,b,l,steps){
	if(steps) this.stepsc = steps;
	else this.stepsc = 5; //Default value
	this.cincT = this.ct;
	this.cincR = this.cr;
	this.cincB = this.cb;
	this.cincL = this.cl;
	this.cincT = this.cincR = this.cincB = this.cincL = 0;
	if(t){
		if(t != this.ct){
			this.cincT = parseInt((t - this.ct)/steps);
		}
	}
	if(r){
		if(r != this.cr){
			this.cincR = parseInt((r - this.cr)/steps);
		}
	}
	if(b){
		if(b != this.cb){
			this.cincB = parseInt((b - this.cb)/steps);
		}
	}
	if(l){
		if(l != this.cl){
			this.cincL = parseInt((l - this.cl)/steps);
		}
	}
	this.clipInit();
  }
  
  function CapaDinClipInit(){
  	if(this.stepc < this.stepsc){
		this.stepc++;
		this.ct+=this.cincT;
		this.cr+=this.cincR;
		this.cb+=this.cincB;
		this.cl+=this.cincL;
		this.clip(this.ct,this.cr,this.cb,this.cl);
		setTimeout(this.lyr+".clipInit()",1);
	}
	else{
		this.stepc = 0;
		this.onClipEnd();
	}
  }
  
  //Scroll functions: based on Scroll.js library
  
  function CapaDinCreaScroll(w,h,v){
  	this.scroll = new Scroll(this.id,w,h,this.width,this.height,v);
  }
  
  function CapaDinScrollUp(){
  	if(this.scroll!=null){
		this.scroll.ScUp = true;
		this.scroll.up();
	}
  }
  
  function CapaDinScrollDown(){
  	if(this.scroll!=null){
		this.scroll.ScDown = true;
		this.scroll.down();
	}
  }
  
  function CapaDinScrollLeft(){
  	if(this.scroll!=null){
		this.scroll.ScLeft = true;
		this.scroll.left();
	}
  }
  
  function CapaDinScrollRight(){
  	if(this.scroll!=null){
		this.scroll.ScRight = true;
		this.scroll.right();
	}
  }
  
  function CapaDinScrollStop(){
  	if(this.scroll!=null){
		this.scroll.ScUp = false;
		this.scroll.ScDown = false;
		this.scroll.ScLeft = false;
		this.scroll.ScRight = false;
	}
  }
  
  function CapaDinSetDraggable(){
  	initMouseEvents();
  	this.drag = true;
	drag.add(this);
  }
  
  function CapaDinNotDraggable(){
  	this.drag = false;
	drag.remove(this);
  }
  
  function CapaDinWrite(html) {
  
	if(document.layers){
		this.sty.document.open();
		this.sty.document.write(html);
		this.sty.document.close();
	}
	else{
		this.obj.innerHTML = html;
	}
}

  //Function definition
	CapaDin.prototype.setPos = CapaDinSetPos;
	CapaDin.prototype.desplaza = CapaDinDesplaza;
  	CapaDin.prototype.mou = CapaDinMou;
	CapaDin.prototype.mostra = CapaDinMostra;
	CapaDin.prototype.oculta = CapaDinOculta;
	CapaDin.prototype.clip = CapaDinClip;
	CapaDin.prototype.clipTo = CapaDinClipTo;
	CapaDin.prototype.clipInit = CapaDinClipInit;
	CapaDin.prototype.creaScroll = CapaDinCreaScroll;
	CapaDin.prototype.scrollUp = CapaDinScrollUp;
	CapaDin.prototype.scrollDown = CapaDinScrollDown;
	CapaDin.prototype.scrollLeft = CapaDinScrollLeft;
	CapaDin.prototype.scrollRight = CapaDinScrollRight;
	CapaDin.prototype.scrollStop = CapaDinScrollStop;
	CapaDin.prototype.setDraggable = CapaDinSetDraggable;
	CapaDin.prototype.notDraggable = CapaDinNotDraggable;
	CapaDin.prototype.write = CapaDinWrite;