//***********************************************
// Title: fWindow - jQuery Plugin
// Author: Mark Appleby
// Current Version: 1.9
// Last Edited: Wed, Jan, 6, 2010
// Last Changes: added youtube video support
//
// All Right Reserved
// Please do not alter this plugin without the
// author's permission
//***********************************************

$.fn.fWindow = function(options){

    var defaults = { 
		fGallery: "div.fGallery",  
		fButtons: "div.fButton",  
		fWidth: 800,  
		fHeight: 600,
		fTop:"center",
		fTitles:false,
		fScroll:true,
		fPages:true,
		fShowVeil:false,
		fYoutubeWidth:425,
		fYoutubeHeight:344
    }; 

	if(options.fLinks==undefined){
		alert("Missing 'fLinks parameter'.  Please provide an array that holds link references to at least one of the supported file formats (jpg/jpeg/com/html/cfm/youtube).");	
	}	

	var options = $.extend(defaults, options);
		
	pages=options.fLinks.length-1;
	page=1;
	startSize=0;
	speed=500;
	var loaded=new Array();
	var linkTypes = new Array();
	var imfWidth=new Array();
	var imfHeight=new Array();
	var youTube = new Array();
	hideTitle=false;
	borderWidth=6;
	options.fWidth=options.fWidth-(borderWidth);
	options.fHeight=options.fHeight-(borderWidth);
	loaderPosX=(options.fWidth/2)-37;
	loaderPosY=(options.fHeight/2)-30;
	
	for(i=1; i<=pages; i++){
		if(options.fLinks[i].indexOf('youtube.com')!=-1){
			linkTypes[i]='iframe';
			youTube[i]=true;
		}
		else if(options.fLinks[i].indexOf('.jpg')!=-1  || options.fLinks[i].indexOf('.jpeg')!=-1){
			linkTypes[i]='img';
		}
		else if(options.fLinks[i].indexOf('.html')!=-1  || options.fLinks[i].indexOf('.com')!=-1 || options.fLinks[i].indexOf('.cfm')!=-1){
			linkTypes[i]='iframe';
		}
		else if(options.fLinks[i].indexOf('.swf')!=-1){
			linkTypes[i]='object';
		}
		else if(options.fLinks[i].indexOf('.mov')!=-1){
			linkTypes[i]='EMBED';
		}
	}	
	
	//$testVid = ('<EMBED class=testVid" src="images/testMovie.mov" autoplay="false" pluginspage="http://www.apple.com/quicktime/download/"></EMBED>');
	//$testVid = ('<object type="application/x-shockwave-flash" data="images/testFlash.swf" width="550" height="400"></object>');
	//$('body').append($testVid);	
	
	$gallery = ('<div class="mainWindow"></div>');
	$wrapper = ('<div class="wrapper"></div>');
	$darken = ('<div class="darken"></div>');
	$loadHolder = ('<div class="loadHolder"></div>');
	$pageLoad = ('<div class="pageLoad"><img id="loadImg" src="/js/lightGalleryIcons/loading.gif"/></div>');
	$loadVeil = ('<div class="loadVeil"></div>');
	$pageTitle = ('<div class="pageTitle"></div>');
	$clearCont = ('<div class="clearCont"></div>');
	$closeBtn = ('<div class="closeBtn"><img id="closeImg" src="/js/lightGalleryIcons/close.gif"/></div');
	$nextBtn = ('<div class="nextBtn"><img id="nextImg" src="/js/lightGalleryIcons/next.gif"/></div');
	$prevBtn = ('<div class="prevBtn"><img id="prevImg" src="/js/lightGalleryIcons/prev.gif"/></div');
	
	if(options.fTop==undefined || options.fTop=="center"){
		topPos="50%";
	}
	else{
		topPos=options.fTop*10;
	}
	centerX=((options.fWidth/2)*(-1))-borderWidth;
	wrapperWidth=options.fWidth*pages*2;
	btnHeight='45%';
	
	$('body')
	.css('height','100%')
	.css('padding','0px')
	.css('margin','0px')
	.css('border','0px');
	
	$(options.fButtons)
	.css("cursor","pointer");
	
	$('body').append($darken);
	$('div.darken')
	.css('background-color','black')
	.css('position','fixed')
	.css('left','0%')
	.css('top','0%')
	.css('margin','0px')
	.css('padding','0px')
	.css('border','0px')
	.css('width','100%')
	.css('height','100%')
	.css('overflow','hidden')
	.css('filter','alpha(opacity=60)')  
    .css('-moz-opacity','0.60')   		
    .css('-khtml-opacity','0.60')    	
    .css('opacity','0.60')
	.css('cursor','pointer')
	.css('z-index','100000');	
	
	$('div.darken').hide();	
	
	$('body').append($clearCont);
	$('div.clearCont')
	.css('position','fixed')
	.css('left','50%')
	.css('top',topPos)
	.css('margin-left',centerX)
	.css('margin-top','50%')
	.css('width',options.fWidth)
	.css('height',options.fHeight)
	.css('z-index','101000');
	$('div.clearCont').hide();
	
	$('body').append($gallery);
	$('div.mainWindow')
	.css('border-color','white')
	.css('border-width',borderWidth)
	.css('border-style','solid')
	.css('position','fixed')
	.css('left','50%')
	.css('top',topPos)
	.css('background-color','white')
	.css('width',startSize)
	.css('height',startSize)
	.css('color','black')
	.css('white-space','nowrap')
	.css('overflow','hidden')
	.css('z-index','102000');
	$('div.mainWindow').hide();

	if(options.fTop=="bottom"){
		$('div.clearCont').css('bottom','50px');
		$('div.mainWindow').css('bottom','50px');
	}

	$('div.clearCont').append($closeBtn);
	$('div.closeBtn')
	.css('position','absolute')
	.css('top','-32px')
	.css('right','11px')
	.css('cursor','pointer')
	.css('z-index','103000');
	
	nextBtnPos=((borderWidth*2)+33)*(-1);
	btnHeight='50%';
	
	$('div.clearCont').append($nextBtn);
	$('div.nextBtn')
	.css('position','absolute')
	.css('top',btnHeight)
	.css('right',nextBtnPos)
	.css('cursor','pointer')
	.css('z-index','110000');
	$('div.nextBtn').hide();

	$('div.clearCont').append($prevBtn);
	$('div.prevBtn')
	.css('position','absolute')
	.css('top',btnHeight)
	.css('left','-33px')
	.css('cursor','pointer')
	.css('z-index','110000');
	$('div.prevBtn').hide();
		
	$('div.clearCont').append($pageTitle);
	$('div.pageTitle')
	.css('position','absolute')
	.css('font-size','10pt')
	.css('font-family','arial')
	.css('text-align','center')
	.css('color','white')
	.css('width','100%')
	.css('bottom','-50px')
	.css('left','0px')
	.css('z-index','103000');	

	$('body').append($loadHolder);
	$('div.loadHolder')
	.css('position','absolute')
	.css('overflow','hidden')
	.css('margin-top','-1000%');

	$('div.mainWindow').append($wrapper);
	$('div.wrapper')
	.css('width',wrapperWidth)
	.css('position','absolute')
	.css('height','100%');
	
	$('body').append($pageLoad);
	$('div.pageLoad')
	.css('overflow-x','hidden')
	.css('position','fixed')
	.css('top','50%')
	.css('left','50%')
	.css('margin-top','-30px')
	.css('margin-left','-37px')
	.css('width','75px')
	.css('height','60px')
	.css('z-index','105000');
	$('div.pageLoad').hide();
	
	$('div.mainWindow').append($loadVeil);
	$('div.loadVeil')
	.css('position','absolute')
	.css('width','100%')
	.css('height','100%')
	.css('background-color','white')
	.css('filter','alpha(opacity=90)')  
    .css('-moz-opacity','0.90')   		
    .css('-khtml-opacity','0.90')    	
    .css('opacity','0.90')
	.css('z-index','104000');
	$('div.loadVeil').hide();

	if(options.fTitles==undefined || options.fTitles==false){
		hideTitle=true;
		$('div.pagePlace').css('bottom','-22px');
	}
	
	if($.browser.msie && $.browser.version=="6.0") {
		$('div.darken').css('position','absolute');
		$('div.mainWindow').css('position','absolute');
		$('div.clearCont').css('position','absolute');
		$('div.pageLoad').css('position','absolute');
	}	
	
	$('div.prevBtn').mouseover(function(){$('img#prevImg').attr('src',"/js/lightGalleryIcons/prevOver.gif");});
	$('div.prevBtn').mouseout(function(){$('img#prevImg').attr('src',"/js/lightGalleryIcons/prev.gif");});
	$('div.nextBtn').mouseover(function(){$('img#nextImg').attr('src',"/js/lightGalleryIcons/nextOver.gif");});
	$('div.nextBtn').mouseout(function(){$('img#nextImg').attr('src',"/js/lightGalleryIcons/next.gif");});
	$('div.closeBtn').mouseover(function(){$('img#closeImg').attr('src',"/js/lightGalleryIcons/closeOver.gif");});
	$('div.closeBtn').mouseout(function(){$('img#closeImg').attr('src',"/js/lightGalleryIcons/close.gif");});
		
	function addElement(pos,way){
		$("div.loadHolder").children().remove();
		if(way=='next' || way==undefined){
			if(linkTypes[pos]=='img'){
				$('div.wrapper').append('<img id="ad'+pos+'" src="'+options.fLinks[pos]+'"frameborder="0" overflow="hidden"></img>').css('top','0px');
				$('img#ad'+pos).css('vertical-align','top').css('float','left');
				$('div.loadHolder').append('<img id="add'+pos+'" src="'+options.fLinks[pos]+'"frameborder="0" overflow="hidden"></img>').css('top','0px');
			}
			else if(linkTypes[pos]=='iframe'){
				if(youTube[pos]==false || youTube[pos]==undefined){
					if(options.fScroll==false){
						$('div.wrapper').append('<iframe id="add'+pos+'" src="'+options.fLinks[pos]+'"frameborder="0" scrolling="no" width='+options.fWidth+' height="'+options.fHeight+'" overflow="hidden"></iframe>').css('top','0px');
					}
					else{
						$('div.wrapper').append('<iframe id="add'+pos+'" src="'+options.fLinks[pos]+'"frameborder="0" scrolling="auto" width='+options.fWidth+' height="'+options.fHeight+'"></iframe>').css('top','0px');	
					}
				}
				else{
					$('div.loadHolder').append('<iframe id="add'+pos+'" src="'+options.fLinks[pos]+'"frameborder="0" scrolling="auto" width='+options.fYoutubeWidth+' height="'+options.fYoutubeHeight+'"></iframe>').css('top','0px');
					$('div.wrapper').append('<iframe id="ad'+pos+'" src="'+options.fLinks[pos]+'"frameborder="0" scrolling="auto" width='+options.fYoutubeWidth+' height="'+options.fYoutubeHeight+'"></iframe>').css('top','0px');
				}
			}
		}
		else if(way=='prev'){
			if(linkTypes[pos]=='img'){
				$('div.loadHolder').append('<img id="add'+pos+'" src="'+options.fLinks[pos]+'"frameborder="0" overflow="hidden"></img>');
				$('img#add'+pos).load(function(){
					$('div.wrapper').prepend('<img id="add'+pos+'" src="'+options.fLinks[pos]+'"frameborder="0" overflow="hidden"></img>').css('top','0px').css('left',(this.width*-1));
					$('img#add'+pos).css('vertical-align','top').css('float','left');
				});
			}
			else if(linkTypes[pos]=='iframe'){
				if(youTube[pos]==false || youTube[pos]==undefined){
					if(options.fScroll==false){
						$('div.wrapper').prepend('<iframe id="add'+pos+'" src="'+options.fLinks[pos]+'"frameborder="0" scrolling="no" width='+options.fWidth+' height="'+options.fHeight+'" overflow="hidden"></iframe>').css('top','0px').css('left',options.fWidth*-1);
					}
					else{
						$('div.wrapper').prepend('<iframe id="add'+pos+'" src="'+options.fLinks[pos]+'"frameborder="0" scrolling="auto" width='+options.fWidth+' height="'+options.fHeight+'"></iframe>').css('top','0px').css('left',options.fWidth*-1);
					}
				}
				else{
					$('div.wrapper').prepend('<iframe id="add'+pos+'" src="'+options.fLinks[pos]+'"frameborder="0" scrolling="auto" width='+options.fYoutubeWidth+' height="'+options.fYoutubeHeight+'"></iframe>').css('top','0px').css('left',options.fYoutubeWidth*-1);
				}
				$('iframe#add'+pos).css('vertical-align','top');
			}
		}
		$(linkTypes[pos]+'#add'+pos).css('vertical-align','top');
	}
	
	$(options.fButtons).click(function(){	
		infoOpen=true;
		if(this.id==undefined || this.id=="" || this.id=="btn"){
			page=1;
		}
		else{
			page=this.id;
		}
		if(page!=1){
			$('div.prevBtn').fadeIn(speed);	
		}
		if(page!=pages){
			$('div.nextBtn').fadeIn(speed);	
		}
		preload(page);
		showCopy(page);
	});
	
	function showCopy(pos){
		if(options.fTitles!=undefined && options.fTitles!=false && options.fPages==true){
			//alert('both');
			$('div.pageTitle').html(options.fTitles[pos]);
			$('div.pageTitle').append("<br/>" + page + " of " + pages);
		}
		else if(options.fTitles!=undefined && options.fTitles!=false && options.fPages==false){
			//alert('title only');
			$('div.pageTitle').html(options.fTitles[pos]);
			$('div.pageTitle').css('bottom','-35px');
		}
		else if(options.fTitles==undefined || options.fTitles==false){
			if(options.fPages==undefined || options.fPages==false){
				//alert('none');
			}
			else{
				//alert('pages only');
				$('div.pageTitle').html(page + " of " + pages);
				$('div.pageTitle').css('bottom','-35px');
			}
		}
	}
	
	function preload(page){
		$('div.darken').fadeIn(speed);
		if(loaded[page]==undefined || loaded[page]==false){
			$('div.pageLoad').fadeIn(speed);
			addElement(page);
			$(linkTypes[page]+'#add'+page).load(function(){
				$('div.pageLoad').fadeOut(speed);
				loaded[page]=true;
				gotoWidth=this.width;
				gotoHeight=this.height;
				imfWidth[page]=gotoWidth;
				imfHeight[page]=gotoHeight;				
				gotoTop=(gotoHeight/2)*(-1);
				gotoLeft=(gotoWidth/2)*(-1);
				$('div.mainWindow').fadeIn(speed);
				$('div.mainWindow').css('margin-left',gotoLeft).css('margin-top',gotoTop);
				$('div.mainWindow').animate({width: gotoWidth, height: gotoHeight},speed,function(){
					$('div.clearCont').animate({width: gotoWidth, height: gotoHeight, marginLeft: gotoLeft, marginTop: gotoTop},speed);
					$('div.clearCont').fadeIn(speed);
				});
			});
		}
		else{
			addElement(page);
			gotoTop=(imfHeight[page]/2)*(-1);
			gotoLeft=(imfWidth[page]/2)*(-1);
			gotoWidth=imfWidth[page];
			gotoHeight=imfHeight[page];
			$('div.mainWindow').fadeIn(speed);
			$('div.mainWindow').css('margin-left',gotoLeft).css('margin-top',gotoTop);
			$('div.mainWindow').animate({width: gotoWidth, height: gotoHeight},speed,function(){
				$('div.clearCont').css('margin-left',gotoLeft).css('margin-top',gotoTop).css('width',gotoWidth).css('height',gotoHeight);
				$('div.clearCont').fadeIn(speed);
			});			
		}
	}
	
	function cyclePage(page,way){
		if(loaded[page]==undefined || loaded[page]==false){
			addElement(page,way);
			$('div.pageLoad').fadeIn(speed);
			if(options.fShowVeil==true){
				$('div.loadVeil').fadeIn(speed);
			}
			$('div.clearCont').fadeOut(speed);
			$(linkTypes[page]+'#add'+page).load(function(){										 
				loaded[page]=true;
				gotoWidth=this.width;
				gotoHeight=this.height;
				imfWidth[page]=gotoWidth;
				imfHeight[page]=gotoHeight;				
				gotoTop=(gotoHeight/2)*(-1);
				gotoLeft=(gotoWidth/2)*(-1);
				$('div.pageLoad').fadeOut(speed);
				$('div.loadVeil').fadeOut(speed,function(){			 
					$('div.mainWindow').animate({width: gotoWidth, height: gotoHeight, marginLeft: gotoLeft, marginTop: gotoTop},speed, function(){										  
						if(way=='next'){
							$('div.wrapper').animate({"left":"-="+imfWidth[page-1]+"px"},speed);
						}
						else{
							$('div.wrapper').animate({"left":"+="+imfWidth[page]+"px"},speed);
						}
						$('div.clearCont').animate({width: gotoWidth, height: gotoHeight, marginLeft: gotoLeft, marginTop: gotoTop},speed);
						$('div.clearCont').fadeIn(speed);
						buttonHandler();
						showCopy(page);
					});
				});
			});
		}
		else{
			gotoTop=(imfHeight[page]/2)*(-1);
			gotoLeft=(imfWidth[page]/2)*(-1);
			gotoWidth=imfWidth[page];
			gotoHeight=imfHeight[page];
			$('div.clearCont').fadeOut(speed/2.5,function(){
				$('div.mainWindow').animate({width: gotoWidth, height: gotoHeight, marginLeft: gotoLeft, marginTop: gotoTop},speed, function(){										  
					if(way=='next'){
						$('div.wrapper').animate({"left":"-="+imfWidth[page-1]+"px"},speed);
					}
					else{
						$('div.wrapper').animate({"left":"+="+imfWidth[page]+"px"},speed);
					}
					$('div.clearCont').animate({width: gotoWidth, height: gotoHeight, marginLeft: gotoLeft, marginTop: gotoTop},speed);
					$('div.clearCont').fadeIn(speed);
					buttonHandler();
					showCopy(page);
				});
			});
		}
	}
	
	function buttonHandler(){
		if(page!=1){
			$('div.prevBtn').fadeIn(speed);	
		}
		else{
			$('div.prevBtn').fadeOut(speed,function(){
				$('div.prevBtn').hide();
			});
		}
		if(page!=pages){
			$('div.nextBtn').fadeIn(speed);	
		}
		else{
			$('div.nextBtn').fadeOut(speed,function(){
				$('div.nextBtn').hide();										
			});
		}		
	}
	
	function closemainWindow(){
		$('div.clearCont').fadeOut(speed,function(){
			$('div.mainWindow').animate({width:'0px',height:'0px'},speed,function(){
					$('div.wrapper').css('left','0px');
					$(this).hide();
			});
			$('div.darken').fadeOut(speed);
		});
		page=1;
		infoOpen=false;
		for(i=1;i<=loaded.length-1;i++){
			loaded[i]=false;
		}
		$('div.nextBtn').fadeOut(speed);
		$('div.prevBtn').fadeOut(speed);
		$("div.wrapper").children().remove();
		$("div.loadHolder").children().remove();
	}
	
	$('div.closeBtn').click(function(){
		closemainWindow();							 
	});
	
	$('div.darken').click(function(){
		closemainWindow();
	});
	
	$('div.nextBtn').click(function(){
		page++;
		cyclePage(page,'next');
	});
	
	$('div.prevBtn').click(function(){
		page--;
		cyclePage(page,'prev');
	});

	$(document).keydown(function(e)
	{
		if(infoOpen==true){
			var code = (e.keyCode ? e.keyCode : e.which);
			if(code == 37 && page!=1) { //Left keycode
				page--;
				cyclePage(page,'prev');
			}
			else if(code == 39 && page!=pages) { //Right keycode
				page++;
				cyclePage(page,'next');
			}
			else if(code == 27) { //Esc keycode
				closemainWindow();							 
			}
		}
	});
};
