/****************************************************************************   
DHTML library from DHTMLCentral.com
*   Copyright (C) 2001 Thomas Brattli 2001
*   This script was released at DHTMLCentral.com
*   Visit for more great scripts!
*   This may be used and changed freely as long as this msg is intact!
*   We will also appreciate any links you could give us.
*
*   Made by Thomas Brattli 2001
***************************************************************************/

function addEvent(oTarget, sType, fpDest) {
	var oOldEvent = oTarget[sType];
	if (typeof oOldEvent != "function") {
		oTarget[sType] = fpDest;
	} else {
		oTarget[sType] = function(e) {
			oOldEvent(e);
			fpDest(e);
		}
	}
}


//Browsercheck (needed) ***************
function lib_bwcheck(){ 
	this.ver=navigator.appVersion
	this.agent=navigator.userAgent
	this.dom=document.getElementById?1:0
	this.safari=this.agent.indexOf("Safari")>-1;
	this.opera=this.agent.indexOf("Opera")>-1;
	this.opera5=this.agent.indexOf("Opera 5")>-1;
	this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom && !this.opera5)?1:0; 
	this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom && !this.opera5)?1:0;
	this.ie4=(document.all && !this.dom && !this.opera5)?1:0;
	this.ie=this.ie4||this.ie5||this.ie6
	this.mac=this.agent.indexOf("Mac")>-1
	this.ns6=(this.dom && parseInt(this.ver) >= 5) ?1:0; 
	this.ns4=(document.layers && !this.dom)?1:0;
	this.bw=(this.ie6||this.ie5||this.ie4||this.ns4||this.ns6||this.opera5||this.safari)
	return this
}
bw=new lib_bwcheck() //Browsercheck object

//Debug function ******************
function lib_message(txt){alert(txt); return false}

//Lib objects  ********************
function lib_obj(obj,nest){ 
  if(!bw.bw) return lib_message('Old browser')
  nest=(!nest) ? "":'document.'+nest+'.'
  this.evnt=bw.dom? document.getElementById(obj):
    bw.ie4?document.all[obj]:bw.ns4?eval(nest+"document.layers." +obj):0;	
  if(!this.evnt) return lib_message('The layer does not exist ('+obj+')' 
    +'- \nIf your using Netscape please check the nesting of your tags!')
  this.css=bw.dom||bw.ie4?this.evnt.style:this.evnt; 
  this.ref=bw.dom||bw.ie4?document:this.css.document;
  this.x=parseInt(this.css.left)||this.css.pixelLeft||this.evnt.offsetLeft||0;
  this.y=parseInt(this.css.top)||this.css.pixelTop||this.evnt.offsetTop||0
  this.w=this.evnt.offsetWidth||this.css.clip.width||
    this.ref.width||this.css.pixelWidth||0; 
  this.h=this.evnt.offsetHeight||this.css.clip.height||
    this.ref.height||this.css.pixelHeight||0
  this.c=0 //Clip values
  if((bw.dom || bw.ie4) && this.css.clip) {
  this.c=this.css.clip; this.c=this.c.slice(5,this.c.length-1); 
  this.c=this.c.split(' ');
  for(var i=0;i<4;i++){this.c[i]=parseInt(this.c[i])}
  }
  this.ct=this.css.clip.top||this.c[0]||0; 
  this.cr=this.css.clip.right||this.c[1]||this.w||0
  this.cb=this.css.clip.bottom||this.c[2]||this.h||0; 
  this.cl=this.css.clip.left||this.c[3]||0
  this.obj = obj + "Object"; 
  eval(this.obj + "=this")
  return this
}

//Moving object to **************
lib_obj.prototype.moveIt = function(x,y){
  this.x=x;this.y=y; this.css.left=x;this.css.top=y
}

//Moving object by ***************
lib_obj.prototype.moveBy = function(x,y){
  this.css.left=this.x+=x; this.css.top=this.y+=y
}

//Showing object ************
lib_obj.prototype.showIt = function(){this.css.visibility="visible"}

//Hiding object **********
lib_obj.prototype.hideIt = function(){this.css.visibility="hidden"}

//Changing backgroundcolor ***************
lib_obj.prototype.bg = function(color){ 
	if(bw.opera) this.css.background=color
	else if(bw.dom || bw.ie4) this.css.backgroundColor=color
	else if(bw.ns4) this.css.bgColor=color  
}

//Writing content to object ***
lib_obj.prototype.writeIt = function(text,startHTML,endHTML){
	if(bw.ns4){
		if(!startHTML){startHTML=""; endHTML=""}
		this.ref.open("text/html"); 
		this.ref.write(startHTML+text+endHTML); 
		this.ref.close()
	}else this.evnt.innerHTML=text
}

//Clipping object to ******
lib_obj.prototype.clipTo = function(t,r,b,l,setwidth){ 
  this.ct=t; this.cr=r; this.cb=b; this.cl=l
  if(bw.ns4){
	this.css.clip.top=t;this.css.clip.right=r
	this.css.clip.bottom=b;this.css.clip.left=l
  }else{
	if(t<0)t=0;if(r<0)r=0;if(b<0)b=0;if(b<0)b=0;
	this.css.clip="rect("+t+","+r+","+b+","+l+")";
	if(setwidth){this.css.pixelWidth=this.css.width=r;this.css.pixelHeight=this.css.height=b;}
  }
}

lib_obj.prototype.clipCrushTo = function(t,r,b,l){ 
this.css.clip="rect("+t+","+r+","+b+","+l+")";
}

//Clipping object by ******
lib_obj.prototype.clipBy = function(t,r,b,l,setwidth){ 
  this.clipTo(this.ct+t,this.cr+r,this.cb+b,this.cl+l,setwidth)
}

//Clip animation ************
lib_obj.prototype.clipIt = function(t,r,b,l,step,fn,wh){
  tstep=Math.max(Math.max(Math.abs((t-this.ct)/step),Math.abs((r-this.cr)/step)),
    Math.max(Math.abs((b-this.cb)/step),Math.abs((l-this.cl)/step)))
  if(!this.clipactive){
    this.clipactive=true; if(!wh) wh=0; if(!fn) fn=0
    this.clip(t,r,b,l,(t-this.ct)/tstep,(r-this.cr)/tstep,
      (b-this.cb)/tstep,(l-this.cl)/tstep,tstep,0, fn,wh)
  }
}
lib_obj.prototype.clip = function(t,r,b,l,ts,rs,bs,ls,tstep,astep,fn,wh){
  if(astep<tstep){
    if(wh) eval(wh); 
    astep++
    this.clipBy(ts,rs,bs,ls,1);
    setTimeout(this.obj+".clip("+t+","+r+","+b+","+l+","+ts+","+rs+","
      +bs+","+ls+","+tstep+","+astep+",'"+fn+"','"+wh+"')",50)
  }else{
    this.clipactive=false; this.clipTo(t,r,b,l,1);
    if(fn) eval(fn)
  }
}

//Slide animation ***********
lib_obj.prototype.slideIt = function(endx,endy,inc,speed,fn,wh){
  if(!this.slideactive){
    var distx = endx - this.x;
    var disty = endy - this.y
    var num = Math.sqrt(Math.pow(distx,2)+Math.pow(disty,2))/inc
    var dx = distx/num; var dy = disty/num
    this.slideactive = 1; 
    if(!wh) wh=0; if(!fn) fn=0
    this.slide(dx,dy,endx,endy,speed,fn,wh)
    }
}
lib_obj.prototype.slide = function(dx,dy,endx,endy,speed,fn,wh) {
  if(this.slideactive&&
  (Math.floor(Math.abs(dx))<Math.floor(Math.abs(endx-this.x))|| 
    Math.floor(Math.abs(dy))<Math.floor(Math.abs(endy-this.y)))){
    this.moveBy(dx,dy); 
    if(wh) eval(wh)
    setTimeout(this.obj+".slide("+dx+","+dy+","+endx+","+endy+","+speed+",'"
    +fn+"','"+wh+"')",speed)
  }else{
    this.slideactive = 0; 
    this.moveIt(endx,endy);
    if(fn) eval(fn)
  }
}

//Circle animation ****************
lib_obj.prototype.circleIt = function(rad,ainc,a,enda,xc,yc,speed,fn) {
  if((Math.abs(ainc)<Math.abs(enda-a))) {
    a += ainc
    var x = xc + rad*Math.cos(a*Math.PI/180)
    var y = yc - rad*Math.sin(a*Math.PI/180)
    this.moveIt(x,y)
    setTimeout(this.obj+".circleIt("+rad+","+ainc+","+a+","+enda+","
      +xc+","+yc+","+speed+",'"+fn+"')",speed)
  }else if(fn&&fn!="undefined") eval(fn)
}

//Document size object ********
function lib_doc_size(){ 
  this.x=0;this.x2=bw.ie && document.body.offsetWidth-20||innerWidth||0;
  this.y=0;this.y2=bw.ie && document.body.offsetHeight-5||innerHeight||0;
  if(!this.x2||!this.y2) return message('Document has no width or height') 
  this.x50=this.x2/2;this.y50=this.y2/2;
  return this;
}

//Drag drop functions start *******************
dd_is_active=0; dd_obj=0; dd_mobj=0
function lib_dd(){
  dd_is_active=1
  if(bw.ns4){
    document.captureEvents(Event.MOUSEMOVE|Event.MOUSEDOWN|Event.MOUSEUP)
  }
  document.onmousemove=lib_dd_move;
  document.onmousedown=lib_dd_down
  document.onmouseup=lib_dd_up
}
lib_obj.prototype.dragdrop = function(obj, parentObj){
	if(!dd_is_active) lib_dd()
	this.evnt.onmouseover=new Function("lib_dd_over("+this.obj+")")
	this.evnt.onmouseout=new Function("dd_mobj=0")
	if(obj) this.ddobj=obj
	if(parentObj) this.parentObj=parentObj
}
lib_obj.prototype.nodragdrop = function(){
	this.evnt.onmouseover=""; this.evnt.onmouseout=""
	dd_obj=0; dd_mobj=0
}
//Drag drop event functions
function lib_dd_over(obj){
	if(obj.cursorType)obj.css.cursor=obj.cursorType;
	dd_mobj=obj;
}
function lib_dd_up(e){
	if(dd_obj.cursorType)dd_obj.css.cursor=dd_obj.cursorType;
	dd_obj=0;
}
function lib_dd_down(e){ //Mousedown
	if(dd_mobj){
		x=(bw.ns4 || bw.ns6)?e.pageX:event.x||event.clientX
		y=(bw.ns4 || bw.ns6)?e.pageY:event.y||event.clientY
		dd_obj=dd_mobj
		dd_obj.clX=x-dd_obj.x; 
		dd_obj.clY=y-dd_obj.y;
		if(dd_obj.cursorTypeDown)dd_obj.css.cursor=dd_obj.cursorTypeDown;
	}
}
function lib_dd_move(e,y,rresize){ //Mousemove
	x=(bw.ns4 || bw.ns6)?e.pageX:event.x||event.clientX
	y=(bw.ns4 || bw.ns6)?e.pageY:event.y||event.clientY
	if(dd_obj){
		// this is where you do the moving
		// these are the newX and newY
		nx=x-dd_obj.clX;
		ny=y-dd_obj.clY;

		// if you args[1] or the so called "parentObj" parameter is an obj..
		// you move WITHIN him not anywhere outside...
		if(dd_obj.parentObj) {

			if(nx<0)nx=0;if(nx>dd_obj.parentObj.w-dd_obj.w)nx=dd_obj.parentObj.w-dd_obj.w;
			if(ny<0)ny=0;if(ny>dd_obj.parentObj.h-dd_obj.h)ny=dd_obj.parentObj.h-dd_obj.h;
			dd_obj.moveIt(nx,ny);

		} else {

			// if you args[0] or the so called "obj" parameter is an obj..
			// you move him not any other but him...
			if(dd_obj.ddobj) dd_obj.ddobj.moveIt(nx,ny)
		
			// ..ooh you just wanted a simple basic draggging
			// well then..here it is for ya..
			else {

				if(dd_obj.startX!=null){

					if(nx<dd_obj.startX)nx=dd_obj.startX;
					if(nx>dd_obj.endX)nx=dd_obj.endX;

					if(ny<dd_obj.startY)ny=dd_obj.startY;
					if(ny>dd_obj.endY)ny=dd_obj.endY;

				}

				dd_obj.moveIt(nx,ny)
			}

		}


	}
	if(!bw.ns4) return false 
}
//Drag drop functions end *************









//Changing backgroundcolor ***************
lib_obj.prototype.bgOver = function(){ 
	if(bw.opera) this.css.background="#F9B900"
	else if(bw.dom || bw.ie4) this.css.backgroundColor="#F9B900"
	else if(bw.ns4) this.css.bgColor="#F9B900"
}
lib_obj.prototype.bgOut = function(){ 
	if(bw.opera) this.css.background="#333399"
	else if(bw.dom || bw.ie4) this.css.backgroundColor="#333399"
	else if(bw.ns4) this.css.bgColor="#333399"
}
lib_obj.prototype.changeClass = function( newClass ){
	var classRef = (bw.ie)?"className":"class";
	this.evnt.setAttribute(classRef, newClass);
}



Array.prototype.writeEmail = function(emailName) {
	var resultStr = "";
	resultStr+="<a "; 
	resultStr+="href=\"mailto:";
	for (i=0;i<this.length;i++) {
		if (this[i]=="") return;
		resultStr+=this[i];
		if (i==0) resultStr+="@";
	}
	resultStr+="\"> ";
	resultStr+=emailName+"</a>"
	document.write(resultStr);
}

function CurrencyFormatted(amount) {
	var i = parseFloat(amount);
	if(isNaN(i)) { i = 0.00; }
	var minus = '';
	if(i < 0) { minus = '-'; }
	i = Math.abs(i);
	i = parseInt((i + .005) * 100);
	i = i / 100;
	s = new String(i);
	if(s.indexOf('.') < 0) { s += '.00'; }
	if(s.indexOf('.') == (s.length - 2)) { s += '0'; }
	s = minus + s;
	return s;
} // end of function CurrencyFormatted()



function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}


