/* 
Document Wipes effect- By Dynamic Web Coding (www.dyn-web.com)
Copyright 2002 by Sharon Paine
Visit http://www.dynamicdrive.com for this script
Idea and math for time-based animation from:
Aaron Boodman at www.youngpup.net 
and Mike Foster at www.cross-browser.com
*/

dom = (document.getElementById) ? true : false;
ns5 = ((navigator.userAgent.indexOf("Gecko")>-1) && dom) ? true: false;
opr = navigator.userAgent.indexOf("Opera")!=-1
ie5 = ((navigator.userAgent.indexOf("MSIE")>-1) && dom) ? true : false;
ns4 = (document.layers && !dom) ? true : false;
ie4 = (document.all && !dom) ? true : false;
if (opr) ns5 = true;
nodyn = (!ns5 && !ns4 && !ie4 && !ie5) ? true : false;

var lowest = -1;
var highest = 1;

var origWidth, origHeight;
if (ns4) {
  origWidth = window.innerWidth;
  origHeight = window.innerHeight;
}
// reload or reposition on resize
function reDo() {
	if (ns4) {
	 if (window.innerWidth != origWidth || window.innerHeight != origHeight) 
	    window.location.reload();
	} else setTimeout("rePosition()",200);
}
window.onresize = reDo;

function rePosition() {
	positionBotmRt('skipDiv');
	if (typeof wipeLyr1!="undefined") wipeLyr1.centerIn(window);
	if (typeof wipeLyr2!="undefined") wipeLyr2.centerIn(window);
	if (typeof wipeLyr3!="undefined") wipeLyr3.centerIn(window);
	if (typeof wipeLyr4!="undefined") wipeLyr4.centerIn(window);
	if (typeof wipeLyr5!="undefined") wipeLyr5.centerIn(window);
	if (typeof wipeLyr6!="undefined") wipeLyr6.centerIn(window);
	if (typeof wipeLyr7!="undefined") wipeLyr7.centerIn(window);
	if (typeof wipeLyr8!="undefined") wipeLyr8.centerIn(window);
	if (typeof wipeLyr9!="undefined") wipeLyr9.centerIn(window);
	if (typeof wipeLyr10!="undefined") wipeLyr10.centerIn(window);
	if (typeof wipeLyr11!="undefined") wipeLyr11.centerIn(window);
	if (typeof wipeLyr12!="undefined") wipeLyr12.centerIn(window);
}

// for positioning "skip intro" link-layer
function positionBotmRt(lyr) {
	var lyrcss = (ns4)? document.layers[lyr]: (ie4)? document.all[lyr].style: (ie5|ns5)? document.getElementById(lyr).style: null;
	var winWd=(ie4||ie5)? document.body.clientWidth: window.innerWidth;
	var winHt=(ie4||ie5)? document.body.clientHeight: window.innerHeight;
	var x=winWd-getWidth(lyrcss,'skipLnk')-16;
	var y=winHt-getHeight(lyrcss,'skipLnk')-16;
	lyrcss.left=(ns4)? x: x+"px";
	lyrcss.top=(ns4)? y: y+"px";
	lyrcss.visibility = "visible";
}

//not needed                   var wipe_count=0;	// to keep track

function wipeObj(start, stop, text, _class, lyr_num, bmf, _in, _out, intime, outtime, _x, _y) {

    if (_class != "img") {
      text = text.replace(/ /g, "&nbsp;");
      text = text.replace(/<br>/g, "<br />");
      text = "<span class='"+_class+"'>"+text+"</span>";
    }
    
    this.cntnt = '<table id="w'+lyr_num+'" border="0" cellpadding="0" cellspacing="0"><tr><td class="wipe">'+  text +'</td></tr></table>';

    this.lyr = wipeLyrs[lyr_num-1];

    this.lyr_num=lyr_num;
    this.bmf = bmf;
    this._in = _in;
    this._out = _out;
    this.intime = intime;
    this.outtime = outtime;
    this._x = _x;
    this._y = _y;
    this.start = start+base;
    this.stop = stop+base;
    

}
wipeObj.prototype.wipeIn=function() {
/////////////////////////////////////////////////////////////////////
// This is set up for text on 1 line.
// It wraps wipe layer content in table 
// so you can get rendered width/height.
// NOTE: uses nowrap minimized attribute. 

// If you want to be xhtml valid, you could remove that 
// and use non-breaking spaces between words instead.
		with (this.lyr) {
			hide();
			// restore, for ns4, or new content is visible...
			clipTo(0,this.lyr.width,this.lyr.height,0);	
			writeLyr(this.cntnt);
			width=getWidth(this.lyr.el,'w'+this.lyr_num);
			height=getHeight(this.lyr.el,'w'+this.lyr_num);
			centerIn(window);
            shiftBy(this._x,this._y);
		}
        switch(this.bmf) {
          case "b":
            lowest-=10;
            this.lyr.doc.style.zIndex = lowest;
            break;
          case "m":
            this.lyr.doc.style.zIndex = 0;
            break;
          case "f":
            highest+=10;
            this.lyr.doc.style.zIndex = highest;
            //bringToFront(this.lyr);
            break;
        }
		// args: which wipe, delay, wipeTime, what next
		this.lyr.wipe(this._in, this.lyr_num*10, this.intime);
}

wipeObj.prototype.wipeOut=function() {
	this.lyr.wipe(this._out, this.lyr_num*10, this.outtime);//wipe_out_dv);
}
// end of wipe-splash code
/////////////////////////////////////////////////////////////////////
// beginning of wipes.js proper
// constructor
function dynObj(obj) {
    this.id=obj;
	this.el = (ns4)? getLyrRef(obj,document): (ie4)? document.all[obj]: (ie5||ns5)? document.getElementById(obj): null;
	this.css = (ns4)? this.el: (ie4||ie5||ns5)? this.el.style: null;
	this.doc = (ns4)? this.el.document: this.el;
	this.x = (ns4)? this.css.left: parseInt(this.css.left);
	this.y = (ns4)? this.css.top: parseInt(this.css.top);
	this.width = (ns4)? this.el.clip.width: (this.css.width)? parseInt(this.css.width): this.el.offsetWidth;
	this.height = (ns4)? this.el.clip.height: (this.css.height)? parseInt(this.css.height): this.el.offsetHeight;
	this.obj = obj + "dynObj"; 	eval(this.obj + "=this");
}

// args: which wipe, delay, wipeTime, what next (fn)
dynObj.prototype.wipe=function(which,delay,wipeTime,fn) {
	this.wipeTime=wipeTime; this.fn=fn;
	switch (which) {
		// wipe into view by expanding to the right
		case "in right" :
			this.clipTo(0,0,this.height,0);
			this.show();
      setTimeout(this.obj+".wipe_in_rt()",delay);
  	break;
    
		// wipe into view by expanding to the left
		case "in left" :
			this.clipTo(0,this.width,this.height,this.width);
			this.show();
      setTimeout(this.obj+".wipe_in_left()",delay);
  	break;
    
		
		// wipe into view by expanding from the center out
		case "in center" :
			this.vCenter = Math.ceil(this.height/2);
			this.hCenter = Math.ceil(this.width/2);
			this.clipTo(this.vCenter, this.hCenter,this.vCenter,this.hCenter);
			this.show();
			setTimeout(this.obj+".wipe_in_center()",delay);
		break;

        //wipe into view by expanding to the right and left
		case "in middle" :
			this.hCenter = Math.ceil(this.width/2);
			this.clipTo(0, this.hCenter,this.height,this.hCenter);
			this.show();
			setTimeout(this.obj+".wipe_in_middle()",delay);
		break;

		// wipe into view from upper left corner to lower right
		case "in corner" :
			this.clipTo(0,0,0,0);
			this.show();
			setTimeout(this.obj+".wipe_in_corner()",delay);
		break;
		
		// wipe out of view by contracting to the center
		case "out center" :
			this.vCenter = Math.ceil(this.height/2);
			this.hCenter = Math.ceil(this.width/2);
			setTimeout(this.obj+".wipe_out_center()",delay);
		break;

		// wipe out of view by contracting to the center of the top
		case "out top center" :
			this.vCenter = 0;
			this.hCenter = Math.ceil(this.width/2);
			setTimeout(this.obj+".wipe_out_top_center()",delay);
		break;
        
		// wipe out of view by contracting to the center of the bottom
		case "out bottom center" :
			this.vCenter = this.height;
			this.hCenter = Math.ceil(this.width/2);
			setTimeout(this.obj+".wipe_out_bottom_center()",delay);
		break;
        

		// wipe out of view by contracting to the left
		case "out left" :
			setTimeout(this.obj+".wipe_out_left()",delay);
		break;
		
		// wipe out of view by contracting to the right
		case "out right" :
			setTimeout(this.obj+".wipe_out_right()",delay);
  	break;
		
		// wipe out of view by contracting from left and right
  	case "out middle" :
			this.dest=Math.ceil(this.width/2);
      setTimeout(this.obj+".wipe_out_mid()",delay);
		break;
		
		// wipe out of view from the upper left to lower right
		case "out corner" :
			setTimeout(this.obj+".wipe_out_corner()",delay);
		break;
		
  	default:
			alert("Oops! Check choices again.");
	}
	this.wipeStart = new Date().getTime()+delay;
	this.per = Math.PI/(2*this.wipeTime);
}

// wipe into view by expanding to the right
dynObj.prototype.wipe_in_rt=function() {
	var clipVal = this.getClipValues();
	var elapsed = (new Date().getTime())-this.wipeStart;
	if (elapsed<this.wipeTime) {
//	wipes could potentially be steady, accelerate, or decelerate
//	idea and math from Mike Foster at www.cross-browser.com
//	var inc = this.width*Math.sin(this.per*elapsed);
//	var inc = -this.width*Math.cos(this.per*elapsed)+this.width;
	var inc = this.width*((1/this.wipeTime)*elapsed);
	this.clipTo(0,inc,this.height,0);
	setTimeout(this.obj+".wipe_in_rt()",refresh_rate);
	} else {
		this.clipTo(0,this.width,this.height,0);
		if (this.fn) eval(this.fn);
	}
}

dynObj.prototype.wipe_in_left=function() {
	var clipVal = this.getClipValues();
	var elapsed = (new Date().getTime())-this.wipeStart;
	if (elapsed<this.wipeTime) {
//	wipes could potentially be steady, accelerate, or decelerate
//	idea and math from Mike Foster at www.cross-browser.com
//	var inc = this.width*Math.sin(this.per*elapsed);
//	var inc = -this.width*Math.cos(this.per*elapsed)+this.width;
	var inc = this.width*((1/this.wipeTime)*elapsed);
	this.clipTo(0,this.width,this.height,this.width-inc);
	setTimeout(this.obj+".wipe_in_left()",refresh_rate);
	} else {
		this.clipTo(0,this.width,this.height,0);
		if (this.fn) eval(this.fn);
	}
}

// wipe into view by expanding from the center out
dynObj.prototype.wipe_in_center=function() {
	var clipVal = this.getClipValues();
	var elapsed = (new Date().getTime())-this.wipeStart;
	if (elapsed<this.wipeTime) {
	var vinc = this.vCenter*((1/this.wipeTime)*elapsed);
	var hinc = this.hCenter*((1/this.wipeTime)*elapsed);
	this.clipTo(this.vCenter-vinc,this.hCenter+hinc,this.vCenter+vinc,this.hCenter-hinc);
	setTimeout(this.obj+".wipe_in_center()",refresh_rate);
	} else {
		this.clipTo(0,this.width,this.height,0);
		if (this.fn) eval(this.fn);
	}
}

dynObj.prototype.wipe_in_middle=function() {
	var clipVal = this.getClipValues();
	var elapsed = (new Date().getTime())-this.wipeStart;
	if (elapsed<this.wipeTime) {
	var hinc = this.hCenter*((1/this.wipeTime)*elapsed);
	this.clipTo(0,this.hCenter+hinc,this.height,this.hCenter-hinc);
	setTimeout(this.obj+".wipe_in_middle()",refresh_rate);
	} else {
		this.clipTo(0,this.width,this.height,0);
		if (this.fn) eval(this.fn);
	}
}

// wipe into view from upper left corner to lower right
dynObj.prototype.wipe_in_corner=function() {
	var clipVal = this.getClipValues();
	var elapsed = (new Date().getTime())-this.wipeStart;
	if (elapsed<this.wipeTime) {
	var vinc = this.height*((1/this.wipeTime)*elapsed);
	var hinc = this.width*((1/this.wipeTime)*elapsed);
	this.clipTo(0,hinc,vinc,0);
	setTimeout(this.obj+".wipe_in_corner()",refresh_rate);
	} else {
		this.clipTo(0,this.width,this.height,0);
		if (this.fn) eval(this.fn);
	}
}

// wipe out of view by contracting to the center
dynObj.prototype.wipe_out_center=function() {
	var clipVal = this.getClipValues();
	var elapsed = (new Date().getTime())-this.wipeStart;
	if (elapsed<this.wipeTime) {
	var vinc = this.vCenter*((1/this.wipeTime)*elapsed);
	var hinc = this.hCenter*((1/this.wipeTime)*elapsed);
	this.clipTo(vinc,this.width-hinc,this.height-vinc,hinc);
		setTimeout(this.obj+".wipe_out_center()",refresh_rate);
	} else {
		this.clipTo(this.vCenter, this.hCenter,this.vCenter,this.hCenter);
		if (this.fn) eval(this.fn);
	}
}

// wipe out of view by contracting to the center of the top
dynObj.prototype.wipe_out_top_center=function() {
	var clipVal = this.getClipValues();
	var elapsed = (new Date().getTime())-this.wipeStart;
	if (elapsed<this.wipeTime) {
	var vinc = this.height*((1/this.wipeTime)*elapsed);
	var hinc = this.hCenter*((1/this.wipeTime)*elapsed);
	this.clipTo(0,this.width-hinc,this.height-vinc,hinc);
		setTimeout(this.obj+".wipe_out_top_center()",refresh_rate);
	} else {
		this.clipTo(this.vCenter, this.hCenter,this.vCenter,this.hCenter);
		if (this.fn) eval(this.fn);
	}
}

// wipe out of view by contracting to the center of the bottom
dynObj.prototype.wipe_out_bottom_center=function() {
	var clipVal = this.getClipValues();
	var elapsed = (new Date().getTime())-this.wipeStart;
	if (elapsed<this.wipeTime) {
	var vinc = this.vCenter*((1/this.wipeTime)*elapsed);
	var hinc = this.hCenter*((1/this.wipeTime)*elapsed);
	this.clipTo(vinc,this.width-hinc,this.height,hinc);
		setTimeout(this.obj+".wipe_out_bottom_center()",refresh_rate);
	} else {
		this.clipTo(this.vCenter, this.hCenter,this.vCenter,this.hCenter);
		if (this.fn) eval(this.fn);
	}
}

// wipe out of view by contracting to the left
dynObj.prototype.wipe_out_left=function() {
	var clipVal = this.getClipValues();
	var elapsed = (new Date().getTime())-this.wipeStart;
	if (elapsed<this.wipeTime) {
		var inc = this.width*((1/this.wipeTime)*elapsed);
		this.clipTo(0,this.width-inc,this.height,0);
		setTimeout(this.obj+".wipe_out_left()",refresh_rate);
	} else {
		this.clipTo(0,0,this.height,0);
		if (this.fn) eval(this.fn);
	}
}

// wipe out of view by contracting to the right
dynObj.prototype.wipe_out_right=function() {
	var clipVal = this.getClipValues();
	var elapsed = (new Date().getTime())-this.wipeStart;
	if (elapsed<this.wipeTime) {
		var inc = this.width*((1/this.wipeTime)*elapsed);
		this.clipTo(0,this.width,this.height,inc);
		setTimeout(this.obj+".wipe_out_right()",refresh_rate);
	} else {
	this.clipTo(0,this.width,this.height,this.width);
		if (this.fn) eval(this.fn);
	}
}

// wipe out of view by contracting from left and right
dynObj.prototype.wipe_out_mid=function() {
	var clipVal = this.getClipValues();
	var elapsed = (new Date().getTime())-this.wipeStart;
	if (elapsed<this.wipeTime) {
//	var inc = this.dest*Math.sin(this.per*elapsed);
	var inc = -this.dest*Math.cos(this.per*elapsed)+this.dest;
//	var inc = this.dest*((1/this.wipeTime)*elapsed);
		this.clipTo(0,this.width-inc,this.height,inc);
		setTimeout(this.obj+".wipe_out_mid()",refresh_rate);
	} else {
		this.clipTo(0,this.dest,this.height,this.dest);
		if (this.fn) eval(this.fn);
	}
}

dynObj.prototype.wipe_out_corner=function () {
	var clipVal = this.getClipValues();
	var elapsed = (new Date().getTime())-this.wipeStart;
	if (elapsed<this.wipeTime) {
	var vinc = -this.height*Math.cos(this.per*elapsed)+this.height;
	var hinc = -this.width*Math.cos(this.per*elapsed)+this.width;
		this.clipTo(vinc,this.width,this.height,hinc);
		setTimeout(this.obj+".wipe_out_corner()",refresh_rate);
	} else {
		this.clipTo(this.height,this.width,this.height,this.width);
		if (this.fn) eval(this.fn);
	}
}

// end wipe methods

/////////////////////////////////////////////////////////////////////
// center in container (window or outer layer)
dynObj.prototype.centerIn = function(outer) {
	var outWd, outHt, inWd, inHt, x, y;
	if (eval(outer)==window) {
		outWd=(ie4||ie5)? document.body.clientWidth: window.innerWidth;
		outHt=(ie4||ie5)? document.body.clientHeight: window.innerHeight;
	} else {
		outWd=outer.width;
		outHt=outer.height;
	}
	inWd=this.width;
	inHt=this.height;
	x=Math.round((outWd-inWd)/2);
	y=Math.round((outHt-inHt)/2);
	this.shiftTo(x,y);
}

/////////////////////////////////////////////////////////////////////
// clip methods
// ideas from dynduo, brainjar and bratta
dynObj.prototype.getClipValues = function() {
	if (ns4) {
  	var clipVal = new Array();
		clipVal[0] = this.css.clip.top;
		clipVal[1] = this.css.clip.right;
		clipVal[2] = this.css.clip.bottom;
		clipVal[3] = this.css.clip.left;
  } else if (ie4||ie5||ns5) {
		var clipVal = this.css.clip.substring(5,this.css.clip.length-1).split(' ');
			for (var i=0; i<4; i++) {
				clipVal[i] = parseInt(clipVal[i]);
			}
  }
	return clipVal;
}

dynObj.prototype.clipBy = function(top,rt,btm,lft) {
	if (ns4) {
  	this.css.clip.top += top;
		this.css.clip.right += rt;
		this.css.clip.bottom += btm;
		this.css.clip.left += lft;
  } else if (ie4 || ie5 || ns5) {
		var clipVal = this.getClipValues();
  	this.css.clip = "rect(" + Number(clipVal[0]+top) + "px " + Number(clipVal[1]+rt)  + "px " + Number(clipVal[2]+btm) + "px " + Number(clipVal[3]+lft) + "px)"
  }
}

dynObj.prototype.clipTo = function(top,rt,btm,lft) {
	if (ns4) {
  	this.css.clip.top = top;
		this.css.clip.right = rt;
		this.css.clip.bottom = btm;
		this.css.clip.left = lft;
  } else if (ie4 || ie5 || ns5) {
  	this.css.clip = "rect("+top+"px "+rt+"px "+btm+"px "+lft+"px)";
  }
}
// end clip methods

dynObj.prototype.shiftTo = function (x,y) {
	// idea from dynduo.
	if (x!=null) this.x=x; if (y!=null) this.y=y;
	if (ns4) { this.css.moveTo(this.x,this.y); } 
	else { this.css.left=this.x+"px"; this.css.top=this.y+"px"; }
}

dynObj.prototype.shiftBy = function(x,y) {



	this.shiftTo(this.x+x,this.y+y);
}

dynObj.prototype.show = function() { this.css.visibility = "visible"; }
dynObj.prototype.hide = function() { this.css.visibility = "hidden"; }

dynObj.prototype.writeLyr=function(cntnt) {
	if (ns4) {
			this.doc.write(cntnt);
			this.doc.close();
  } else if (ie4||ie5||ns5) {
      this.doc.innerHTML = cntnt;
  }
}

// gets rendered height/width 
// for ns4, pass reference to layer. 
// for others, pass id of html element containing content
function getWidth(obj,id) {
	var wd =(ns4)? obj.document.width: (ie4)? document.all[id].offsetWidth: (ie5||ns5)? document.getElementById(id).offsetWidth: 0;
	return wd;
}

function getHeight(obj,id) {
	var ht =(ns4)? obj.document.height: (ie4)? document.all[id].offsetHeight: (ie5||ns5)? document.getElementById(id).offsetHeight: 0;
	return ht;
}

// get reference to nested layer for ns4
// from dhtmllib.js by Mike Hall of www.brainjar.com
function getLyrRef(lyr,doc) {
	if (ns4) {
		var theLyr;
		for (var i=0; i<doc.layers.length; i++) {
	  	theLyr = doc.layers[i];
			if (theLyr.name == lyr) return theLyr;
			else if (theLyr.document.layers.length > 0) 
	    	if ((theLyr = getLyrRef(lyr,theLyr.document)) != null)
					return theLyr;
	  }
		return null;
  }
}
