/**
 * jQuery floatbox plugin
 * @name jquery-floatbox-1.0.js
 * @author Stavros Papadopoulos - http://assetsp.gr
 * @version 1.0
 * @date June 10, 2009
 * @category jQuery plugin
 * @copyright (c) 2009 Stavros Papadopoulos (assetsp.gr)
 * @license CC Attribution-No Derivative Works 3.0 Greece - http://creativecommons.org/licenses/by-nd/3.0/gr/deed.en_GB
 */


(function($) {
	$.fn.floatbox = function(settings) {
		settings = jQuery.extend({
			id:				'flasho',
			classname:		'flasho',
			type:			'div',
			data:			'',
			width:			'500px',
			refresh:		10,
			fps:			4,
			hideelements:	false,
			showoverlay:	true,
			zIndex:			35400,
			cancelfunc: 	floatboxcancel
		},settings);
		settings.floatboxID="#"+settings.id;
		settings.type="<"+settings.type+">";
		var jQueryMatchedObj = this;
		var current_x = 0;
		var current_y = 0;
		function _initialize(container) {
			if ( _start(container,jQueryMatchedObj)){
				return jQueryMatchedObj;
			}else{
				return false;
			}
		}
		
		function _start(objcontainer,jQueryMatchedObj) {
			if ( jQueryMatchedObj.length == 1 ) {
				floatboxcancel();
				if (settings.hideelements)$('embed, object, select').css({ 'visibility' : 'hidden' });
				$(settings.type).attr( "id", settings.id).addClass(settings.classname).html(settings.data).appendTo(objcontainer);
				if ($.browser.msie){
					$(settings.floatboxID).after('<div class="ie-shadow"></div>');
					$(".ie-shadow").css({display:'none'});
				}
				$(settings.floatboxID).css({width:settings.width});
				//$(".ie-shadow").css({width:settings.width}).show();
				var arrPageSizes = ___getPageSize();
				var arrPageScroll = ___getPageScroll();
				var xxtop=0;
				var xtop= parseInt(arrPageScroll[1]+((arrPageSizes[3]-$(settings.floatboxID).height())/2));
				var xleft= parseInt(arrPageScroll[0]+((arrPageSizes[2]-$(settings.floatboxID).width())/2));
				
				$(settings.floatboxID).css({
							top:xxtop+"px",
							left:xleft+"px",
							'z-index':settings.zIndex
						});
				current_x =xxtop;
				current_y =xleft;
				/*$(settings.floatboxID).animate({ 
				        top: xtop+"px",opacity:1
				      }, 1000 );*/
//				$(window).resize(floatboxresize);
//				$(window).scroll(floatboxresize);
				objcontainer.cancelfunc=settings.cancelfunc;
				if (settings.showoverlay==true){
					$('body').append('<div class="fl-overlay"></div>');	
					// Get page sizes
					// Style overlay and show it
					$('.fl-overlay').css({
						position:			'fixed',
						display:			'block',
						top:			'0',
						left:			'0',
						zIndex:			'35000',
						width:			'100%',
						height:			'100%',
						opacity:			0.8//,
//						width:				arrPageSizes [0],
//						height:				arrPageSizes [1]
					});
					//$(window).resize(floatboxresize2);
					$('.fl-overlay').click(settings.cancelfunc);


				}

				$(window).everyTime(settings.refresh, 'floatbox_'+settings.id,function() {
				 	floatboxresize();				
				  });










				return true;
			}else{
				return false;
			}
		}
		
		function floatboxchange(x,y){
			$(settings.floatboxID).css({ 
			        top: x+"px",
			        left:y+"px",
			        opacity:1	       
			      });
if ($.browser.msie){			      
var pos = $(settings.floatboxID).position();
$('.ie-shadow').css({
								width:($(settings.floatboxID).outerWidth()+10)+"px",
								height:($(settings.floatboxID).outerHeight()+10)+"px",
								top:(pos.top -15) + "px",left:(pos.left -15) + "px",
								display:"block"
							});
				


			      
}  
		}
/*		function floatboxresize2(){
			var arrPageSizes = ___getPageSize();
			$('.fl-overlay').css({
								width:				arrPageSizes[0],
								height:				arrPageSizes[1]
							});
				
		}*/
		function floatboxresize(){
			//$(settings.floatboxID).stop();
			var arrPageSizes = ___getPageSize();
			var arrPageScroll = ___getPageScroll();


			var xtop= parseInt(arrPageScroll[1]+((arrPageSizes[3]-$(settings.floatboxID).height())/2));
			var xleft= parseInt(arrPageScroll[0]+((arrPageSizes[2]-$(settings.floatboxID).width())/2));
			xtop=parseInt((xtop-current_x)/settings.fps);
			xleft=parseInt((xleft-current_y)/settings.fps);
			current_x +=xtop;
			current_y +=xleft;
			//var speed1=Math.abs(parseInt($(settings.floatboxID).css("top"))-xtop);
			//var speed2=Math.abs(parseInt($(settings.floatboxID).css("left"))-xleft);
			//var speed=(speed1>speed2)?speed1:speed2;
			floatboxchange(current_x ,current_y );


			/*$(settings.floatboxID).animate({ 
			        top: xtop+"px",
			        left:xleft+"px"	       
			      }, speed);*/
		}
		
		function floatboxcancel(){
//			$(window).unbind('resize', floatboxresize);
//			$(window).unbind('scroll', floatboxresize);
			$(window).stopTime('floatbox_'+settings.id);
			if ($.browser.msie)$(".ie-shadow").remove();
			$(settings.floatboxID).remove();
			if (settings.hideelements)$('embed, object, select').css({ 'visibility' : 'visible' });
			if (settings.showoverlay==true){
				//$(window).unbind('resize', floatboxresize2);
				$('.fl-overlay').unbind();
				$('.fl-overlay').remove();//$('.fl-overlay').fadeOut(function() { $('.fl-overlay').remove(); });
			}

		}
		return _initialize(this);
	};
})(jQuery);

		function ___getPageSize() {
			var xScroll, yScroll;
			if (window.innerHeight && window.scrollMaxY) {
				xScroll = window.innerWidth + window.scrollMaxX;
				yScroll = window.innerHeight + window.scrollMaxY;
			} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
				xScroll = document.body.scrollWidth;
				yScroll = document.body.scrollHeight;
			} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
				xScroll = document.body.offsetWidth;
				yScroll = document.body.offsetHeight;
			}
			var windowWidth, windowHeight;
			if (self.innerHeight) {	// all except Explorer
				if(document.documentElement.clientWidth){
					windowWidth = document.documentElement.clientWidth; 
				} else {
					windowWidth = self.innerWidth;
				}
				windowHeight = self.innerHeight;
			} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
				windowWidth = document.documentElement.clientWidth;
				windowHeight = document.documentElement.clientHeight;
			} else if (document.body) { // other Explorers
				windowWidth = document.body.clientWidth;
				windowHeight = document.body.clientHeight;
			}	
			// for small pages with total height less then height of the viewport
			if(yScroll < windowHeight){
				pageHeight = windowHeight;
			} else { 
				pageHeight = yScroll;
			}
			// for small pages with total width less then width of the viewport
			if(xScroll < windowWidth){	
//				pageWidth = xScroll;		
				pageWidth = windowWidth;;
			} else {
//				pageWidth = windowWidth;
				pageWidth = xScroll;		
			}
			arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight,xScroll,yScroll );
			return arrayPageSize;
		};
				
		function ___getPageScroll() {
			var xScroll, yScroll;
			if (self.pageYOffset) {
				yScroll = self.pageYOffset;
				xScroll = self.pageXOffset;
			} else if (document.documentElement && document.documentElement.scrollTop) {	 // Explorer 6 Strict
				yScroll = document.documentElement.scrollTop;
				xScroll = document.documentElement.scrollLeft;
			} else if (document.body) {// all other Explorers
				yScroll = document.body.scrollTop;
				xScroll = document.body.scrollLeft;	
			}
			arrayPageScroll = new Array(xScroll,yScroll);
			return arrayPageScroll;
		};
