/**
*	@auth Logan Cai
*	@email cailongqun#yahoo.com.cn  (replace # with @)
*	@ this plugin is based on the nice javascript provided by http://www.jtricks.com/javascript/navigation/floating.html
*   @version 1.0
*	
*/
function getLeft() {

 var viewPortWidth;
 var viewPortHeight;

 // the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight
 if (typeof window.innerWidth != 'undefined') {
   viewPortWidth = window.innerWidth,
   viewPortHeight = window.innerHeight
 }

// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)
 else if (typeof document.documentElement != 'undefined'
 && typeof document.documentElement.clientWidth !=
 'undefined' && document.documentElement.clientWidth != 0) {
    viewPortWidth = document.documentElement.clientWidth,
    viewPortHeight = document.documentElement.clientHeight
 }

 // older versions of IE
 else {
   viewPortWidth = document.getElementsByTagName('body')[0].clientWidth,
   viewPortHeight = document.getElementsByTagName('body')[0].clientHeight
 }
 
 emptyspace = (viewPortWidth - 962) / 2;
 fromleft = emptyspace + 771;
 
 return fromleft;
}


function floatingBox(box, options, index)
{
    this.targetX = -250;
    this.targetY =  10;
    this.interval = 5;
    this.menu = box;
    this.index = index;
    this.options = options;
    this.hasInner = typeof(window.innerWidth) == 'number';
    this.hasElement =  document.documentElement
        && document.documentElement.clientWidth;    
	this.move = function ()
	{//move function start
		/* Inserted by Sam 
		Checks for pixels scrolled from top and then sets the scrolling behaviour accordingly.
		This code is specifically for this template only because of the pixels from left calculation
		*/
		topheight = (document.documentElement && document.documentElement.scrollTop) ?
  document.documentElement.scrollTop : document.body.scrollTop;
		
		pixelsfromleft = getLeft();
		
		if (topheight > 421) {
			jQuery(this.menu).css('position', 'absolute');
			jQuery(this.menu).css('left', pixelsfromleft + 'px').css('top', this.nextY + 'px'); /* Replace pixelsfromleft with this.nextX to slide at the bottom right of the page */
			jQuery('#rightdownloadZ').css('margin-top', (183 - 25) + 'px');
		}
		else {
			jQuery(this.menu).css('position', 'relative');
			jQuery(this.menu).css('left', '0');
			jQuery(this.menu).css('top', '0');
			jQuery('#rightdownloadZ').css('margin-top', '-25px');
		}
		/* End of insertion */

	};  
	this.computeShifts = function ()
	{
	    var de = document.documentElement;	
	    this.shiftX =
	        this.hasInner
	        ? pageXOffset
	        : this.hasElement
	          ? de.scrollLeft
	          : document.body.scrollLeft;
	    if (this.targetX < 0)
	    {
	        if (this.hasElement && this.hasInner)
	        {
	            // Handle Opera 8 problems
	            this.shiftX +=
	                de.clientWidth > window.innerWidth
	                ? window.innerWidth
	                : de.clientWidth
	        }
	        else
	        {
	            this.shiftX +=
	                this.hasElement
	                ? de.clientWidth
	                : this.hasInner
	                  ? window.innerWidth
	                  : document.body.clientWidth;
	        }
	    }
	
	    this.shiftY = 
	        this.hasInner
	        ? pageYOffset
	        : this.hasElement
	          ? de.scrollTop
	          : document.body.scrollTop;
	    if (this.targetY < 0)
	    {
	        if (this.hasElement && this.hasInner)
	        {
	            // Handle Opera 8 problems
	            this.shiftY +=
	                de.clientHeight > window.innerHeight
	                ? window.innerHeight
	                : de.clientHeight
	        }
	        else
	        {
	            this.shiftY +=
	                this.hasElement
	                ? document.documentElement.clientHeight
	                : this.hasInner
	                  ? window.innerHeight
	                  : document.body.clientHeight;
	        }
	    }
	};
	this.doFloat = function()
	{
	    var stepX, stepY;
	
	    this.computeShifts();
	
	    stepX = (this.shiftX + 
	        this.targetX - this.nextX) * .07;
	    if (Math.abs(stepX) < .5)
	    {
	        stepX = this.shiftX +
	            this.targetX - this.nextX;
	    }
	
	    stepY = (this.shiftY + 
	        this.targetY - this.nextY) * .07;
	    if (Math.abs(stepY) < .5)
	    {
	        stepY = this.shiftY + 
	            this.targetY - this.nextY;
	    }
	
	    if (Math.abs(stepX) > 0 ||
	        Math.abs(stepY) > 0)
	    {
	        this.nextX += stepX;
	        this.nextY += stepY;
	        this.move();
	    }
		
	    setTimeout('funcFloating[' + this.index + '].func()', this.interval);
	};	
	this.initSecondary = function()
	{
	    this.computeShifts();
	    this.nextX = this.shiftX +
	        this.targetX;
	    this.nextY = this.shiftY +
	        this.targetY;
	    this.move();
	};	
	this.position = function(targetX, targetY)
	{
		if(typeof(targetX) == 'number')
		{
			this.targetX = targetX;
		}else if(typeof(targetX) == 'string')
		{
			switch(targetX)
			{
				case 'left':
					this.targetX = 5;
					break;
				case 'right':
					this.targetX = -((jQuery(this.menu).outerWidth()) + 5);
					break;									
			}
			
		}	
		if(typeof(targetY) == 'number')
		{
			this.targetY = targetY;
		}else if(typeof(targetY) == 'string')
		{
			switch(targetY)
			{
				case 'top':
					this.targetY= 5;
					break;
				case 'bottom':

					this.targetY = -((jQuery(this.menu).outerHeight() + 5));
					
					break;								
			}
			
		}				
		
	};
	this.init = function()
	{
		
		jQuery(this.menu).css('position', 'absolute');
		if(typeof(this.options)  == 'object')
		{
			for(var i in this.options)
			{
				switch(i)
				{
					
					case 'targetX':
					case 'targetY':
						if(typeof(this.options[i]) == 'number')
						{
							this[i] = this.options[i];
						}else if(typeof(this.options[i]) == 'string')
						{
							switch(this.options[i])
							{
								case 'top':
									this.targetY= 5;
									break;
								case 'bottom':
									this.targetY = -((jQuery(this.menu).outerHeight() + 5));									
									break;
								case 'left':
									this.targetX = 5;
									break;
								case 'right':
									this.targetX = -((jQuery(this.menu).outerWidth()) + 5);
									break;									
							}
							
						}
						break;	
					default:
						this[i] = this.options[i];				
				}
			}
		}		

	    this.initSecondary();
	    this.doFloat();
	}
		      
};

// Some browsers init scrollbars only after
// full document load.
var funcFloating = {};
jQuery.fn.floating = function(options)
{
	return jQuery(this).each(
	
		function(i)
		{		
			var nextIndex = 0;
			for(var index in funcFloating)
			{
				nextIndex = parseInt(index);
			}	
			funcFloating[nextIndex + 1] = {};	
			funcFloating[nextIndex + 1].box = this;	
			funcFloating[nextIndex + 1].obj = new floatingBox(this, options, (nextIndex + 1));
			funcFloating[nextIndex + 1].func = function(){ funcFloating[nextIndex + 1].obj.doFloat(); };
			if (document.layers)
			{
				funcFloating[nextIndex + 1].obj.init();
			}else
			{
				
				funcFloating[nextIndex + 1].obj.init();
				funcFloating[nextIndex + 1].obj.initSecondary();
			}
			
		}
	);
};
jQuery.fn.floatingPosition = function(targetX, targetY)
{
	return jQuery(this).each(
	
		function(i)
		{	
			for(var j in funcFloating)
			{
				if(funcFloating[j].box == this)
				{
					funcFloating[j].obj.position(targetX, targetY);
				}
			}
			
		}
	);	
};
