/**************************************

	HK510 JS Motion Engine		v 2.0
	ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ

	Site: 	HK510.com/MotionEngine/
	
	Developped by HK510
	Easing Equations by Robert Penner

	-------------------------------------------

	Tested and working on:	

	Pc:
		Internet Explorer 4, 6
		Netscape 4.7, 4.8, 6.2, 7.1
		Firefox 0.9.1

	Mac:
		Internet Explorer 5
		Netscape 4.76 , 6, 7.1
		Safari 1.2
	____________________________________

**************************************/

if(xKGB==null || xKGB==undefined){var xKGB = new Array();}
if(xCIA==null || xCIA==undefined){var xCIA = new Array();}
function xHKME(xR1,xR2,xR3,xR4,xR5,xR6 ,xR7,xR8,xR9,xR10,xR11, xR12,xR13){
	self['xMo'+xR1] = new Object();
	for(i=0;i<=10;i++){self['xMo'+xR1]['xIq'+i] = xHKME.arguments[i];}
	self['xMo'+xR1].xInfl = 'xMo'+xR1+'.methl()';
	self['xMo'+xR1].xInft = 'xMo'+xR1+'.metht()';
	self['xMo'+xR1].xCntl=0;
	self['xMo'+xR1].xCntt=0;
	self['xMo'+xR1].xCIl=xR12;
	self['xMo'+xR1].xCIt=xR13;
	self['xMo'+xR1].methl = function(){with(this){if(xCntl>=xIq4){xDOj(xIq0,xIq1);xDEKV(xIq0,xIq1,Math.ceil(xIq2+xIq3));}else{xDEKV(xIq0,xIq1,eval("xCal"+xIq5)(xCntl,xIq2,xIq3,xIq4,null,null));xCntl++;}}};
	self['xMo'+xR1].metht = function(){with(this){if(xCntt>=xIq9){xDOj(xIq0,xIq6);xDEKV(xIq0,xIq6,Math.ceil(xIq7+xIq8));}else{xDEKV(xIq0,xIq6,eval("xCal"+xIq10)(xCntt,xIq7,xIq8,xIq9,null,null));xCntt++;}}};
	if(self['xMo'+xR1].xCIl=='true'){self['xMo'+xR1].xIntl = setInterval(eval('xMo'+xR1)['xInfl'],10);}
	if(self['xMo'+xR1].xCIt == 'true'){self['xMo'+xR1].xIntt = setInterval(eval('xMo'+xR1)['xInft'],10);}
}
function xDOj(xOn,xPr){
	if(xPr =='left'){clearInterval(eval('xMo'+xOn+'.xIntl'));}
	if(xPr =='top'){clearInterval(eval('xMo'+xOn+'.xIntt'));}
	if(xPr =='dlt'){clearInterval(eval('xMo'+xOn+'.xIntl'));clearInterval(eval('xMo'+xOn+'.xIntt'));}
}
function xPushIArr(xArr,xIs){xArr[xArr.length] = xIs;}
function xSetInitialValues(){
	var xS1 = xSetInitialValues.arguments;
	for(d=0;d <= xS1.length-1; d++){xCIA[d] = new Array(xS1[d],xKio('left',xS1[d]),xKio('top',xS1[d]));}
}
function xGetInitialValues(xP,xDID){
	var xNts;
	for (var s in xCIA){if(xDID == xCIA[s][0]){(xP=='left')?xNts=xCIA[s][1] : xNts=xCIA[s][2];}}
	return xNts;
}
function xKio(xP,xDID){
	var xO;var xW;
	if (document.all && document.getElementById){xO = document.all[xDID].style[xP];}
	if (document.layers){xO = document.layers[xDID][xP];} 
	if (document.addEventListener) {xO = document.getElementById(xDID).style[xP];} 
	(!(document.layers)) ? xW = xO.substr(0,xO.indexOf("px")) : xW = xO;
	return Math.ceil(xW);
	
}
function xDEKV(xL,xM,xN){
	if( isNaN(xN)){xN = xKio(xM,xL);}
	if (document.all && document.getElementById){document.all[xL].style[xM] = xN;}
	if (document.layers){document.layers[xL][xM] = xN;} 
	
	if (document.addEventListener) {document.getElementById(xL).style[xM] = xN+"px";} 
}
function xWL (xNTS,xArr,xBo){
	var xAI = false;
	for (var s in xArr){if(xNTS == xArr[s]){if(xBo==true){xArr.splice(s,1);}xAI = true;}}
	return xAI;
}
function xHKM(xG1,xG2,xG3){
	var xIo2 = new Array();
	var xIo3 = new Array();
	for(i = 2; i <= 3;i++){
		var xStJ = eval('xG'+i);var xU1 = xStJ.indexOf('[');var xU2 = xStJ.indexOf(']');var xdes = xStJ.substring(xU1+1,xU2).split(",");
		eval('xIo'+i)[0] = xStJ.substring(0,xU1);eval('xIo'+i)[1]=xdes[0];eval('xIo'+i)[2]=xdes[1];eval('xIo'+i)[3]=xdes[2];eval('xIo'+i)[4]=xdes[3];
	}
	(xWL(xG1,xKGB,false)==true)? xDOj(xG1,'dlt') : xPushIArr(xKGB,xG1);
	xHKME(xG1,xIo2[0],Math.ceil(xKio(xIo2[0],xG1)),xIo2[1]-Math.ceil(xKio(xIo2[0],xG1)),xIo2[2],xIo2[3],xIo3[0],Math.ceil(xKio(xIo3[0],xG1)),xIo3[1]-Math.ceil(xKio(xIo3[0],xG1)),xIo3[2],xIo3[3],xIo2[4],xIo3[4]);

}
function xCal0(t, b, c, d, a, p){
	return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
}
function xCal1(t, b, c, d, a, p){
	return c*(t/=d)*t*t*t*t + b;
}
function xCal2(t, b, c, d, a, p){
	return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
}
function xCal3(t, b, c, d, a, p){
	if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
	if (a < Math.abs(c)) { a=c; var s=p/4; }
	else var s = p/(2*Math.PI) * Math.asin (c/a);
	return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(0.7*Math.PI)/p ) + c + b;
}
function xCal4(t, b, c, d, a, p){
	if ((t/=d) < (1/2.75)) {
		return c*(7.5625*t*t) + b;
	} else if (t < (2/2.75)) {
		return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
	} else if (t < (2.5/2.75)) {
		return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
	} else {
		return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
	}
}



//*****************************************************************************
// Do not remove this notice.
//
// Copyright 2001 by Mike Hall.
// See http://www.brainjar.com for terms of use.
//*****************************************************************************

// Determine browser and version.

function Browser() {
  var ua, s, i;
  this.isIE    = false;this.isNS    = false;this.version = null;

  ua = navigator.userAgent;
  s = "MSIE";
  if ((i = ua.indexOf(s)) >= 0) {this.isIE = true;this.version = parseFloat(ua.substr(i + s.length));return;}
  s = "Netscape6/";
  if ((i = ua.indexOf(s)) >= 0) {this.isNS = true;this.version = parseFloat(ua.substr(i + s.length)); return;}
  s = "Gecko"; if ((i = ua.indexOf(s)) >= 0) {this.isNS = true;this.version = 6.1;return;}
}

var browser = new Browser();

// Global object to hold drag information.

var dragObj = new Object();
dragObj.zIndex = 0;

function xDrag(event, id, c1,c2,c3,c4) {

  var el;
  var x, y;
  dragObj.constraint = new Array();
  dragObj.constraint[0] = valConstraint(c1);
  dragObj.constraint[1] = valConstraint(c2);
  dragObj.constraint[2] = valConstraint(c3);
  dragObj.constraint[3] = valConstraint(c4);
  
  // If an element id was given, find it. Otherwise use the element being
  // clicked on.

  if (id)
    dragObj.elNode = document.getElementById(id);
  else {
    if (browser.isIE)
      dragObj.elNode = window.event.srcElement;
    if (browser.isNS)
      dragObj.elNode = event.target;

    // If this is a text node, use its parent element.

    if (dragObj.elNode.nodeType == 3)
      dragObj.elNode = dragObj.elNode.parentNode;
  }

  // Get cursor position with respect to the page.

  if (browser.isIE) {
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  }
  if (browser.isNS) {
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;
  }
  

  // Save starting positions of cursor and element.

  dragObj.cursorStartX = x;
  dragObj.cursorStartY = y;
  dragObj.elStartLeft  = parseInt(dragObj.elNode.style.left, 10);
  dragObj.elStartTop   = parseInt(dragObj.elNode.style.top,  10);

  if (isNaN(dragObj.elStartLeft)) dragObj.elStartLeft = 0;
  if (isNaN(dragObj.elStartTop))  dragObj.elStartTop  = 0;

  // Update element's z-index.

  dragObj.elNode.style.zIndex = ++dragObj.zIndex;

  // Capture mousemove and mouseup events on the page.

  if (browser.isIE) {
    document.attachEvent("onmousemove", dragGo);
    document.attachEvent("onmouseup",   dragStop);
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  if (browser.isNS) {
    document.addEventListener("mousemove", dragGo,   true);
    document.addEventListener("mouseup",   dragStop, true);
    event.preventDefault();
  }
}

function dragGo(event) {

  var x, y;

  // Get cursor position with respect to the page.

  if (browser.isIE) {
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  }
  if (browser.isNS) {
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;
  }

  // Move drag element by the same amount the cursor has moved.

  var _x = dragObj.elStartLeft + x - dragObj.cursorStartX;
  var _y = dragObj.elStartTop  + y - dragObj.cursorStartY;
  
  var c1=dragObj.constraint[0];
  var c2=dragObj.constraint[1];
  var c3=dragObj.constraint[2];
  var c4=dragObj.constraint[3];
  if (c1>-1 && y < c1) _y = c1;
  if (c2>-1 && x > c2) _x = c2;
  if (c3>-1 && y > c3) _y = c2;
  if (c4>-1 && x < c4) _x = c4;
  
  dragObj.elNode.style.top = _y+"px";
  dragObj.elNode.style.left = _x+"px";
  

  if (browser.isIE) {
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  if (browser.isNS) event.preventDefault();
}

function dragStop(event) {

  // Stop capturing mousemove and mouseup events.

  if (browser.isIE) {
    document.detachEvent("onmousemove", dragGo);
    document.detachEvent("onmouseup",   dragStop);
  }
  if (browser.isNS) {
    document.removeEventListener("mousemove", dragGo,   true);
    document.removeEventListener("mouseup",   dragStop, true);
  }
}

function valConstraint(xC) {
	if (typeof(xC) == "number") return xC;
	else return -1;
}