/*
The code in this file or document and its designs, methods, data, know-how and all other related elements are the property of LUXSON ltd © Copyright 2009-2010 and/or may contain code operated under third party licence(s); unauthorised use is therefore prohibited, including (without limitation) copying, editing, adapting, reverse engineering or any other similar or related action, in part or in full. Separate rights may also exist for LUXSON and/or client and/or third party content and/or services. For licensing information please contact LUXSON ltd.
*/

// This will stop image flickering in IE6 when elements with images are moved
try {
	document.execCommand("BackgroundImageCache", false, true);
} catch(e) {};

var luxBox = new LuxBox();

function LuxBox () {

	var scrollOff;
	var winSize;
	var imageSize;
	var docSize;
	var padding = 0;
	var pretextAreaH = 50;
	var textAreaH = 50;
	var curFade = 0;
	var intervalId;
	var showIntervalId;
	var fileType;
	var fileExt;
	var liteLoadImg = new Image();
	var liteImg = new Image();
	var hideObj = false;
	var buildStr = '';
	var blLoading = false;
	var overSize = false;
	
	var intTime = 40;
	var intNumber = 20;
	
	var prefix = "ls";
	var type = "luxBox";
	
	var url = "";
	
	var loadingImg = url+"images/loading.gif";
	
	var b = navigator.appName;
		
	var aDiv;
	
	var isIE6 = /msie|MSIE 6/.test(navigator.userAgent);
	
	this.liteW = function(s, e){
		
		aDiv = prefix+'_lite_content';
				
		if (buildStr.length == 0) {
			//buildElements();
			
			buildStr += '<div id="'+prefix+'_lite_media"></div>';
			buildStr += '<div id="'+prefix+'_lite_close"><a href="javascript:;" onclick="'+type+'.close_lite_window();"><img src="images/lb-close-red.jpg" width="15" height="16" /></a></div>';
			buildStr += '<div id="'+prefix+'_lite_text"></div>';
			
			var lo = document.createElement('div');
			lo.setAttribute('id', prefix+'_lite_overlay');
			
			var lc = document.createElement('div');
			lc.setAttribute('id', prefix+'_lite_content');
			
			document.body.appendChild(lo);
			document.body.appendChild(lc);
			
			document.getElementById(prefix+'_lite_content').innerHTML += buildStr;
			document.getElementById(prefix+'_lite_overlay').innerHTML += '<img src="images/luxbox.png" width="91" height="21" alt="LUXBox" id="'+prefix+'_lite_luxbox_img" />';
			
			if(isIE6) document.getElementById(prefix+'_lite_luxbox_img').style.visibility = 'hidden';
						
		}
				
		textAreaH = 0;
		
		document.getElementById(prefix+"_lite_text").style.height = '0px';
		
		if(e){
			if(e.title){
				document.getElementById(prefix+"_lite_text").innerHTML = e.title;
			}else{
				document.getElementById(prefix+"_lite_text").innerHTML = "";
			}
		}else{
			document.getElementById(prefix+"_lite_text").innerHTML = "";
		}
		
		if(b == "Microsoft Internet Explorer" || b == "Opera"){
			hideObj = true;
		}
		
		if(window.addEventListener){
			window.addEventListener("scroll", adjustForScroll, false);
			window.addEventListener("resize", adjustForResize, false);
		}else if(window.attachEvent){
			window.attachEvent("onscroll", adjustForScroll);
			window.attachEvent("onresize", adjustForResize);
		}else{
			alert("error: add/attach event");
		}
		
		var visWidth = 0, visHeight = 0;
		winSize = getWindowSize();
		scrollOff = getScrollOffset();
		docSize = getDocumentSize();
		
		document.getElementById(prefix+"_lite_overlay").style.display = "block";
		
		if(docSize.w < winSize.w){
			document.getElementById(prefix+"_lite_overlay").style.width = winSize.w+'px';
			document.getElementById(prefix+"_lite_luxbox_img").style.right = (-scrollOff.x)+'px';
			document.getElementById(prefix+"_lite_overlay").style.left = scrollOff.x+"px";
		}else{
			document.getElementById(prefix+"_lite_overlay").style.width = docSize.w+'px';
			document.getElementById(prefix+"_lite_luxbox_img").style.right = ((docSize.w-winSize.w)-scrollOff.x)+'px';
		}
		if(docSize.h < winSize.h){
			document.body.style.height = '100%';
			document.getElementById(prefix+"_lite_overlay").style.height = winSize.h+'px';
			document.getElementById(prefix+"_lite_overlay").style.top = scrollOff.y+"px";
			document.getElementById(prefix+"_lite_luxbox_img").style.bottom = (-scrollOff.y)+'px';
		}else{
			document.body.style.height = 'auto';
			docSize = getDocumentSize();
			document.getElementById(prefix+"_lite_overlay").style.height = docSize.h+'px';
			document.getElementById(prefix+"_lite_luxbox_img").style.bottom = ((docSize.h-winSize.h)-scrollOff.y)+'px';
		}
		
		//Check type of file i.e. jpg, gif, png, swf
		
		//fileExt = s.substr(s.lastIndexOf(".")+1);
		//fileExt = s.substr(-3);
		
		fileExt = s.substr(s.length-3,3);
		
		if(checkType(e)){
			fileType = e.type;
		}else{
			switch (fileExt) 
			{ 
				case "jpg" : 
				fileType = "image";
				break;
				case "gif" :
				fileType = "image";
				break;
				case "png" :
				fileType = "image";
				break;
				case "swf" :
				fileType = "flash";
				break;
				case "flv" :
				fileType = "video";
				break;
				case "mp4" :
				fileType = "video";
				break;
				case "f4v":
                fileType = "video";
                break;
                case "mov":
                fileType = "video";
                break;
                case "m4v":
                fileType = "video";
                break;
				case "mp3" :
				fileType = "audio";
				break;
				case "m4a":
                fileType = "audio";
                break;
				case "txt" :
				fileType = "text";
				break;
				case "youtube":
				fileType = "youtube";
				break;
				default : 
					if(s.indexOf("youtube") > -1 && s.indexOf("http://") > -1){
						fileType = "youtube";
					}else{
						fileType = "iframe";
					}
			}
		}
		
		var mWinW = winSize.w*.85;
		var mWinH = (winSize.h*.85)-textAreaH;
		var minSizeW = 180;
		var minSizeH = 180;
		
		if(fileType == "image")
		{
			liteImg.onload = function() {
				if(hideObj) hideElements();
				imageSize = {w : this.width, h : this.height};
				//document.getElementById("lite_media").appendChild(liteImg);
		
				var oImgW = imageSize.w;
				var oImgH = imageSize.h;
				
				if(imageSize.w > mWinW || imageSize.h > mWinH){
					
					if((imageSize.w/imageSize.h) > (mWinW/mWinH)){
						
						imageSize.w = mWinW;
						imageSize.h = imageSize.h*(imageSize.w/oImgW);
						
					}else{
						imageSize.h = mWinH;
						imageSize.w = imageSize.w*(imageSize.h/oImgH);
					}
					
					this.width = imageSize.w;
					this.height = imageSize.h;
				}
				
				if(imageSize.w < minSizeW || imageSize.h < minSizeH){
					
					if((imageSize.w/imageSize.h) > (minSizeW/minSizeH)){
						
						imageSize.w = minSizeW;
						imageSize.h = imageSize.h*(imageSize.w/oImgW);
						
					}else{
						
						imageSize.h = minSizeH;
						imageSize.w = imageSize.w*(imageSize.h/oImgH);
						
					}
					
					this.width = imageSize.w;
					this.height = imageSize.h;
					
				}
				
				blLoading = true;
				positionContent();
			}
			
			liteImg.onresize = function() {
				imageSize = {w : this.width, h : this.height};
				
				var oImgW = imageSize.w;
				var oImgH = imageSize.h;
				
				if(imageSize.w > mWinW || imageSize.h > mWinH){
					if((imageSize.w/imageSize.h) > (mWinW/mWinH)){
						imageSize.w = mWinW;
						imageSize.h = imageSize.h*(oImgW/imageSize.w);
						
					}else{
						imageSize.h = mWinH;
						imageSize.w = imageSize.w*(oImgH/imageSize.h);
					}
					
					this.width = imageSize.w;
					this.height = imageSize.h;
				}
				
				if(imageSize.w < minSizeW || imageSize.h < minSizeH){
					
					if((imageSize.w/imageSize.h) > (minSizeW/minSizeH)){
						
						imageSize.w = minSizeW;
						imageSize.h = imageSize.h*(imageSize.w/oImgW);
						
					}else{
						
						imageSize.h = minSizeH;
						imageSize.w = imageSize.w*(imageSize.h/oImgH);
						
					}
					
					this.width = imageSize.w;
					this.height = imageSize.h;
					
				}
				
				positionContent();
				
			}
			
			liteLoadImg.onload = function() {
				if(hideObj) hideElements();
				imageSize = {w : this.width, h : this.height};
				document.getElementById(prefix+"_lite_media").appendChild(liteLoadImg);
				intervalId = setInterval(function(){fadeLiteWindow(1)}, intTime);
				positionContent();
				liteImg.src = s;
			}
			
			liteLoadImg.onresize = function() {
				imageSize = {w : this.width, h : this.height};
				positionContent();
			}
			
			document.getElementById(prefix+'_lite_text').style.display = 'none';
			document.getElementById(prefix+'_lite_close').style.display = 'none';
			
			liteLoadImg.src = loadingImg;
			
		}
		
		var tw = 0;
		var th = 0;
		var tv = 0;
		
		if(fileType == "flash" || fileType == "video" || fileType == "audio" || fileType == "text" || fileType == "youtube"){
			
			document.getElementById(prefix+"_lite_media").innerHTML = '<div id="'+prefix+'_lite_flash"></div>';
			
			var lite_v = false;
			if(fileType == "audio" || fileType == "text" || fileType == "video"){
				lite_v = {fileURL: s};
			}else if(fileType == "youtube"){
				lite_v = {fileURL: escape(s)};
			}else if(e.vars){
				lite_v = e.vars;
			}
			var lite_p = {
				wmode: "transparent",
				scale: "noscale"
			};
			var lite_a = {
				id: prefix+"_lite_flash",
				name: prefix+"_lite_flash"
			};
			
			switch(fileType){
				case "video" :
					tw = 640;
					th = 390;
					tv = 9;
				break;
				case "youtube" :
					tw = 640;
					th = 390;
					tv = 7;
				break;
				case "audio" :
					tw = 640;
					th = 360;
					tv = 10;
				break;
				case "text" :
					tw = 560;
					th = 500;
					tv = 7;
				break;
				default :
					tw = 640;
					th = 480;
					tv = 8;
				break;
			}
			
			if(e.w){
				if(isNaN(e.w)){
					if(e.w.indexOf('%') > 0){
						var wp = Number(e.w.substr(0, e.w.length-1));
						tw = (winSize.w/100)*wp;
					}
				}else{
					tw = e.w;
				}
			}

			if(e.h){
				if(isNaN(e.h)){
					if(e.h.indexOf('%') > 0){
						var hp = Number(e.h.substr(0, e.h.length-1));
						th = (winSize.h/100)*hp;
					}
				}else{
					th = e.h;	
				}
			}
			
			if(e.v) tv = e.v;
			
			switch(fileType){
				case "video" :
					swfobject.embedSWF(url+"flash/LUXSON-Video-Player.swf", prefix+"_lite_flash", String(tw), String(th), String(tv)+".0.0", "", lite_v, lite_p, lite_a);
				break;
				case "youtube" :
					swfobject.embedSWF(url+"flash/LUXSON-Youtube-Player.swf", prefix+"_lite_flash", String(tw), String(th), String(tv)+".0.0", "", lite_v, lite_p, lite_a);
				break;
				case "audio" :
					swfobject.embedSWF(url+"flash/LUXSON-Audio-Player.swf", prefix+"_lite_flash", String(tw), String(th), String(tv)+".0.0", "", lite_v, lite_p, lite_a);
				break;
				case "text" :
					swfobject.embedSWF(url+"flash/LUXSON-Text-Player.swf", prefix+"_lite_flash", String(tw), String(th), String(tv)+".0.0", "", lite_v, lite_p, lite_a);
				break;
				default :
					swfobject.embedSWF(s, prefix+"_lite_flash", String(tw), String(th), String(tv)+".0.0", "", lite_v, lite_p, lite_a);
				break;
			}
						
			imageSize = {w : tw, h : th};
			
			positionContent();
			
			if(hideObj) hideElements();
			
			intervalId = setInterval(function(){fadeLiteWindow(1)}, intTime);
			
		}
		
		if(fileType == "iframe"){
			tw = 800;
			th = 600;
			
			if(e.w) tw = e.w;
			if(e.h) th = e.h;
			
			document.getElementById(prefix+"_lite_media").innerHTML = '<iframe src ="'+s+'" width="'+tw+'" height="'+th+'" frameborder=0><p>Your browser does not support iframes.</p></iframe>';
			
			imageSize = {w : tw, h : th};
			
			positionContent();
			
			if(hideObj) hideElements();
			intervalId = setInterval(function(){fadeLiteWindow(1)}, intTime);
		}
		
		if(fileType == "div"){
			aDiv = s;
			
			tw = 600;
			th = 450;
			
			if(e.w) tw = e.w;
			if(e.h) th = e.h;
						
			if(document.getElementById(s).style.width){
				tw = Number(document.getElementById(s).style.width.substr(0,document.getElementById(s).style.width.indexOf('px')));
			}
			
			if(document.getElementById(s).style.height){
				th = Number(document.getElementById(s).style.height.substr(0,document.getElementById(s).style.height.indexOf('px')));
			}
						
			imageSize = {w : tw, h : th};
			
			positionContent();
			
			if(hideObj) hideElements();
			intervalId = setInterval(function(){fadeLiteWindow(1)}, intTime);
		}
				
	}
	
	function checkType(e){
		if(e){
			if(e.type){
				return true;
			}else{
				return false;
			}
		}else{
			return false;	
		}
	}
	
	function addLiteImage(){
		clearInterval(showIntervalId);
		document.getElementById(prefix+"_lite_media").removeChild(liteLoadImg);
		liteLoadImg = new Image();
		document.getElementById(prefix+"_lite_media").appendChild(liteImg);	
		document.getElementById(prefix+"_lite_text").style.display = 'block';
		document.getElementById(prefix+"_lite_close").style.display = 'block';
	}
	
	function positionContent(){
		
		if(imageSize.w > winSize.w || imageSize.h > winSize.h) overSize = true;
		
		document.getElementById(aDiv).style.display = "block";
		document.getElementById(aDiv).style.width = (imageSize.w+(padding*2))+"px";
		
		if(aDiv == prefix+"_lite_content"){
			document.getElementById(prefix+"_lite_text").style.display = 'block';
			document.getElementById(prefix+"_lite_text").style.height = '0px';
			document.getElementById(prefix+"_lite_text").style.overflow = "hidden";
			
			if(document.getElementById(prefix+"_lite_text").scrollHeight > pretextAreaH){
				textAreaH = document.getElementById(prefix+"_lite_text").scrollHeight;
			}else{
				textAreaH = pretextAreaH;
			}
			document.getElementById(prefix+"_lite_text").style.height = textAreaH+'px';
			document.getElementById(prefix+"_lite_text").style.overflow = "visible";
			document.getElementById(prefix+"_lite_text").style.display = 'none';
		}
		document.getElementById(aDiv).style.height = (imageSize.h+(padding*2)+textAreaH)+"px";
		document.getElementById(aDiv).style.top = ((winSize.h-(padding*2)-textAreaH-imageSize.h)/2)+scrollOff.y+"px";
		document.getElementById(aDiv).style.left = ((winSize.w-(padding*2)-imageSize.w)/2)+scrollOff.x+"px";
		
		if(blLoading == true){
			blLoading = false;
			addLiteImage();
		}
	}
	
	function hideElements(){
		//Hide form elements
		
		var arrHolder = new Array();
			
		var arrSelect = document.getElementsByTagName("select");
		var arrObject = document.getElementsByTagName("object");
			
		arrHolder.push(arrSelect);
		arrHolder.push(arrObject);
			
		for (var i = 0; i < arrHolder.length; i++){
			for(var j = 0; j < arrHolder[i].length; j++){
				if(arrHolder[i][j].name != prefix+'_lite_flash') arrHolder[i][j].style.visibility = 'hidden';
			}
		}	
	}
	
	function getWindowSize(){
		
		var myWidth = 0, myHeight = 0;
		var results;
		
		if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
			//Non-IE
			myWidth = document.documentElement.clientWidth;
			myHeight = document.documentElement.clientHeight;
			//IE 6+ in 'standards compliant mode'
			myWidth = document.documentElement.clientWidth;
			myHeight = document.documentElement.clientHeight;
		} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
			//IE 4 compatible
			myWidth = document.body.clientWidth;
			myHeight = document.body.clientHeight;
		}
		
		results = {w : myWidth, h : myHeight}
		return results;
	}
	
	function getScrollOffset(){
		var x,y;
		var results;
		
		if (self.pageYOffset) // all except Explorer
		{
			x = self.pageXOffset;
			y = self.pageYOffset;
		}
		else if (document.documentElement && document.documentElement.scrollTop)
			// Explorer 6 Strict
		{
			x = document.documentElement.scrollLeft;
			y = document.documentElement.scrollTop;
		}
		else if (document.body) // all other Explorers
		{
			x = document.body.scrollLeft;
			y = document.body.scrollTop;
		}
		
		results = {x : x, y : y};
		return results;
	}
	
	function getDocumentSize(){
		var docWidth = 0, docHeight = 0;
		var results;
		
		docWidth = (document.width !== undefined) ? document.width : document.body.offsetWidth;
		docHeight = (document.height !== undefined) ? document.height : document.body.offsetHeight;
				
		results = {w : docWidth, h : docHeight};
		return results;
	}
	
	this.close_lite_window = function(){
	
		intervalId = setInterval(function (){fadeLiteWindow(-1)}, intTime);
		
		if(window.removeEventListener){
			window.removeEventListener("resize", adjustForResize);
			window.removeEventListener("scroll", adjustForScroll);
		}else if(window.detachEvent){
			window.detachEvent("onresize", adjustForResize);
			window.detachEvent("onscroll", adjustForScroll);
		}
	}
	
	function adjustPos(){
		//alert('test');
	}
	
	function adjustForScroll(){
		if(overSize == false){
			scrollOff = getScrollOffset();
			document.getElementById(aDiv).style.top = ((winSize.h-(padding*2)-textAreaH-imageSize.h)/2)+scrollOff.y+"px";
			document.getElementById(aDiv).style.left = ((winSize.w-(padding*2)-imageSize.w)/2)+scrollOff.x+"px";
			if(document.body.style.height != "100%"){
				document.getElementById(prefix+"_lite_luxbox_img").style.bottom = ((docSize.h-winSize.h)-scrollOff.y)+'px';
				document.getElementById(prefix+"_lite_luxbox_img").style.right = ((docSize.w-winSize.w)-scrollOff.x)+'px';
			}
		}
		if(document.body.style.height == "100%"){
			document.getElementById(prefix+"_lite_overlay").style.top = scrollOff.y+"px";
			document.getElementById(prefix+"_lite_overlay").style.left = scrollOff.x+"px";
		}
	};
	
	function adjustForResize(){
		if(imageSize){
			document.getElementById(prefix+"_lite_overlay").style.display = 'none';
			winSize = getWindowSize();
			scrollOff = getScrollOffset();
			docSize = getDocumentSize();
			if(document.body.style.height == "100%"){
				document.getElementById(prefix+"_lite_overlay").style.width = winSize.w+'px';
				document.getElementById(prefix+"_lite_overlay").style.height = winSize.h+'px';
			}else{
				document.getElementById(prefix+"_lite_overlay").style.width = docSize.w+'px';
				document.getElementById(prefix+"_lite_overlay").style.height = docSize.h+'px';
			}
			document.getElementById(aDiv).style.width = (imageSize.w+(padding*2))+"px";
			document.getElementById(aDiv).style.height = (imageSize.h+(padding*2)+textAreaH)+"px";
			document.getElementById(aDiv).style.top = ((winSize.h-(padding*2)-textAreaH-imageSize.h)/2)+scrollOff.y+"px";
			document.getElementById(aDiv).style.left = ((winSize.w-(padding*2)-imageSize.w)/2)+scrollOff.x+"px";
			
			if(document.body.style.height != "100%"){
				document.getElementById(prefix+"_lite_luxbox_img").style.bottom = ((docSize.h-winSize.h)-scrollOff.y)+'px';
				document.getElementById(prefix+"_lite_luxbox_img").style.right = ((docSize.w-winSize.w)-scrollOff.x)+'px';
			}
			
			document.getElementById(prefix+"_lite_overlay").style.display = 'block';
		}
	}
	
	function fadeLiteWindow(val){
		curFade += val;
		
		if(imageSize.w == 0 || imageSize.h == 0){
			imageSize = {w : document.getElementById(prefix+"_lite_image").width, h : document.getElementById(prefix+"_lite_image").height};
			adjustForResize();
		}
		var clearLoop = 0;
		
		if(curFade <= 0){
			curFade = 0;
			clearLoop = 1;
			document.getElementById(prefix+"_lite_overlay").style.display = "none";
			document.getElementById(aDiv).style.display = "none";
			
			liteImg = new Image();
			document.getElementById(prefix+"_lite_media").innerHTML = "";
			
			document.getElementById(prefix+"_lite_text").innerHTML = "";
			
			if(hideObj) showElements();
			
			document.body.style.height = 'auto';
			
		}else if(curFade >= intNumber){
			curFade = intNumber;
			clearLoop = 1;
		}
		
		document.getElementById(prefix+"_lite_overlay").style.opacity = ((curFade/intNumber)/10)*8;
		document.getElementById(prefix+"_lite_overlay").style.filter = 'alpha(opacity=' + ((((curFade/intNumber)*100)/10)*8) + ')';
		
		document.getElementById(aDiv).style.opacity = curFade/intNumber;
		document.getElementById(aDiv).style.filter = 'alpha(opacity=' + (curFade/intNumber)*100 + ')';
	
		if(clearLoop == 1){
			clearInterval(intervalId);
			clearLoop = 0;
		}
	
	}
	
	function showElements(){
		var arrHolder = new Array();
		
		var arrSelect = document.getElementsByTagName("select");
		var arrObject = document.getElementsByTagName("object");
		
		arrHolder.push(arrSelect);
		arrHolder.push(arrObject);
		
		for (var i = 0; i < arrHolder.length; i++){
			for(var j = 0; j < arrHolder[i].length; j++){
				if(arrHolder[i][j].name != prefix+'_lite_flash') arrHolder[i][j].style.visibility = 'visible';
			}
		}
	}
}
