	/**
	 * Set the easeout function for jquery
	 */
	$.easing.easeInOutExpo= function (x, t, b, c, d) 
	{
		if (t==0) return b;
		if (t==d) return b+c;
		if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
		return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
	}
	
	$.queryParam = function(name)
	{
		var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
		if (!results) { return 0; }
		return results[1] || 0;
	}
	
	
	var menuToggleSpeed = 250;
	var selectedItem = null;
	
	
	
	
	

	
/**
		 * Returns an HTML IMG tag for the imageVO passed.
		 * @param {ImageVO} imageVO The GAS image Value object for the image
		 * @param {Boolean} If true, the thumbnail src is used. if false, the full src is used.
		 */
		function createImageTag(imageVO, isThumb, index)
		{
			//var img = document.createElement("img");
			
			var video;
			var overlay,overSpan;
			
			if (imageVO.isVideo())
			{
				var img = document.createElement("img");
				img.src = "assets/videoPlaceholder.jpg";
				
			}
			else
			{
				var img = imageVO.toHTMLElement();
				if (imageVO.other1 != "")
				{
					for( var i=0; i<GAS.data.images.length; i++ )
					{
						if (GAS.data.images[i].title == imageVO.other1)
						{
							img.videoVO = GAS.data.images[i];
							$(img).addClass("pointer");
							//var vidPreviewHolder = document.createElement("span");
							//var overlay = document.createElement("span");
							//$(overlay).addClass("videoPreveiw");
							
							//$(vidPreviewHolder).append(overlay);
							//$(vidPreviewHolder).append(img);
							
							
							break;
						}
					}
					
				}
			}
			
			img.alt = imageVO.caption;
			img.imageVO=imageVO;
			
			var attr = document.createAttribute("photogID");
			attr.nodeValue = imageVO.photographerID;
			img.setAttributeNode( attr );
			
		//	img.onload=setScrollerWidth;
			
			var pageX;
			var pageY;
			
			if (index!=null)
			{
				$(img).mousedown(function(event)
				{ 
					pageX=event.pageX;
					pageY=event.pageY;
				})
				
				$(img).mouseup(function(event) 
				{ 
					if (pageX==event.pageX && pageY==event.pageY)
					{
						if ( $(this).attr("videoVO") ) 
							popupVideo( $(this).attr("videoVO") );
						else
							scroll(index,true);
					}
				})
			} 
			
			if (!isThumb && !imageVO.isVideo() )
			{
				var ratio = $("#galleryPage").height() / imageVO.height;
				img.width = imageVO.width * ratio;
				
				setScrollerWidth();
				
				$(img).addClass("loading");
				
				
				$(img).load(
					function () {
						
						$(this).width("auto");
						$(this).removeClass('loading');
						
						setScrollerWidth();
						
					}).error(
						function()
						{ 
							$(this).hide();
							setScrollerWidth();
						} );
					
				//Load it			
				//img.src = imageVO.src;
					
				//return vidPreviewHolder || img;
				return img;
			}
			else if (!isThumb && imageVO.isVideo())
			{
				var div=document.createElement("div");
				div.appendChild(img);
				div.height = $("#galleryPage").height();
				
				setScrollerWidth();
			
				return div;
				
			}
			else
			{
				img.src = imageVO.thumb;
				
				return img;
			}
			
			
		}
		
	function createImageHomeTag(imageVO, isThumb, index)
		{
			var img = document.createElement("img");
			img.src = imageVO.src;
			img.alt = imageVO.caption;
			img.imageVO=imageVO;
			//var attr = document.createAttribute("photogID");
			//attr.nodeValue = imageVO.photographerID;
			//img.setAttributeNode( attr );
			return img;
		}
		
		
		function createPageDiv(pageVO,includeTitle)
		{
			var div = document.createElement("div");
			$(div).addClass("gasPageItem");
			
			var leftDiv = document.createElement("div");
			$(leftDiv).addClass("gasTextHolder");
			
			var text = document.createElement("div");
			$(text).addClass("gasText");
			
			//default to true, so use strict check
			if (includeTitle!==false)
			{
				var title = document.createElement("div");
				$(title).addClass("gasTitle");
				$(title).html( pageVO.title );
				leftDiv.appendChild( title );
			}
				 
			$( text ).html( parseCRLF(pageVO.body) );
			
			leftDiv.appendChild(text);
			
			div.appendChild( leftDiv );
			
			imgs = GAS.imageProxy.getImagesByPage( pageVO );
	
			if (imgs.length>0)
			{
				var img = document.createElement("img");
				$(  img ).addClass("gasImg");
				$( img ).attr("src",imgs[0].src);
				div.appendChild(img);
			}
				
			return div;		
		}
		
		function createPDFListDiv(photogVO)
		{
			var select_all_label="select all";
			var de_select_all_label="deselect all";
			var download_label="download pdf";
			
			var div = document.createElement("div");
			$(div).addClass("pdfList");
			
			var text = document.createElement("div");
			text.innerHTML = photogVO.fname +" "+ photogVO.lname;
			$(text).addClass("title");
			
			var ul = document.createElement("ul");
			ul.id = "pdfGrid_"+photogVO.id;
			$(ul).addClass("grid pdfGrid");
			
			var toggleAll = document.createElement("a");
			toggleAll.innerHTML = select_all_label;
			$(toggleAll).addClass("toggleAll");
			
			var downloadPDF = document.createElement("a");
			downloadPDF.innerHTML = download_label;
			$(downloadPDF).addClass("toggleAll");
			
			
			
			toggleAll.onclick=function()
			{ 
					var cbxs = $("#pdfGrid_"+photogVO.id+" div input:checkbox");
					cbxs.attr("checked", toggleAll.innerHTML==select_all_label);
					
					if (toggleAll.innerHTML==select_all_label)
						toggleAll.innerHTML=de_select_all_label;
					else
						toggleAll.innerHTML=select_all_label;
			}
			
			downloadPDF.onclick=function()
			{ 
				var imgs=new Array();
				var photogs=new Array();
				$("#pdfGrid_"+photogVO.id+" input:checkbox:checked").each(function()
				{
					imgs.push( this.imageVO.src );
					photogs.push( this.photogVO.fname+" "+this.photogVO.lname )
				});
				
				if(imgs.length==0)
			{
					alert("Please select some images first");
			}
				else
				{
					//location.href="resource/buildPdf.php?imgs="+imgs+"&photogs="+photogs;
					location.href="resource/buildPdf.php?imgs="+imgs+"&photogs="+photogs[0];
				}
			}
			
			
			var textdiv = document.createElement("div");
			$(textdiv).addClass("pdfTitleDiv");
			
			
			textdiv.appendChild(text);
			textdiv.appendChild(toggleAll);
			textdiv.appendChild(downloadPDF);
			
			div.appendChild(textdiv);
			div.appendChild(ul);
			
			var imgs = GAS.imageProxy.getImagesByPhotograpaher( photogVO );
				
			for (var i=0; i<imgs.length; i++) 
			{
				if ( !imgs[i].isVideo() )
				{
				var imgTag = createPDFThumbTag(imgs[i],photogVO);
				 ul.appendChild( createLITag(imgTag) );
				}
			}
			
			return div;
		
		}
		
		function createPDFThumbTag(imageVO,photogVO)
		{
			var border = document.createElement("div");
			border.id="border";
			var div = document.createElement("div");
			var img = createImageTag(imageVO, true);
			var cb = document.createElement("input");
			
			
			
			
			cb.type = "checkbox";
			cb.id = imageVO.id;
			cb.imageVO = imageVO;
			cb.photogVO = photogVO;
			cb.checked = false; // make it checked now and by default

			$(cb).addClass("pdfCheck");
			
			$(img).click(function(){ cb.checked = !cb.checked  });
			$(img).addClass("pointer");
			
			
			border.appendChild(img); 
			div.appendChild(border);
			div.appendChild(cb); 
			
			return div;
		}
		
		
		/**
		 * Returns an HTML A tag for the photographer passed.
		 * @param {ImageVO} photographerVO The GAS image Value object for the image
		 */
		function createPhotogTag(photographerVO)
		{
			var a = document.createElement("a");
			var attr = document.createAttribute("photogID");
			attr.nodeValue = photographerVO.id;
			
			a.setAttributeNode( attr );
			a.photographerVO=photographerVO;
			a.innerHTML=photographerVO.value;
			a.href=photographerVO.value; 
			$(a).addClass("nav toggle");
			$(a).click(function(){ $.address.value($(this).attr('href')); return false; } ) ; 
			return a;
		}
		
		
		/**
		 * Returns an HTML A tag for the pageVO passed.
		 * @param {ImageVO} photographerVO The GAS image Value object for the image
		 */
		function createPageTag(pageVO)
		{
			var a = document.createElement("a");
			var attr = document.createAttribute("pageID");
			attr.nodeValue = pageVO.id;
			
			a.setAttributeNode( attr );
			a.pageVO=pageVO;
			a.innerHTML=pageVO.title;
			a.href=pageVO.title;
			$(a).click(function(){ $.address.value($(this).attr('href')); return false; } ) ; 
			$(a).addClass("nav toggle");
			
			return a;
		}
		
		/**
		 * Returns an HTML A tag for the photographer passed.
		 * @param {ImageVO} photographerVO The GAS image Value object for the image
		 */
		function createTagsTag(tagVO)
		{
			var a = document.createElement("a");
			var attr = document.createAttribute("tagID");
			attr.nodeValue = tagVO.id;
			
			a.setAttributeNode( attr );
			a.tagVO=tagVO;
			a.innerHTML=tagVO.label;
			a.href="#"
			$(a).addClass("subNav");
			
			return a;
		}
		
		
		function createPhotogBio(photogVO)
		{
			var div = document.createElement("div");
			
			$(div).addClass("bio");
			$(div).html(parseCRLF(photogVO.description));
			
			return div;
		}
		
		/**
		 * Creates a LI item and inserts the child passed.
		 * @returns the new LI item with the child added
		 */
		function createLITag(child)
		{
			var li = document.createElement("li");
			li.appendChild(child);
			return li;
		}
		
		function parseCRLF(str)
		{
			if(str)
				return str.replace(/(\r\n|\r|\n)/g, "<br />");
			else
				return "";
		}
		
		var openWin, selectedVideoVO;
		function popupVideo(imageVO)
		{
			//console.log( imageVO.toHTMLString() );
			
			//
			
			selectedVideoVO = imageVO;
			
			if (openWin)
				openWin.close();
			
			openWin=window.open('video.html','Twenty Twenty Agency',
					  'width=700,height=550'
					   +',menubar=0'
					   +',toolbar=0'
					   +',status=0'
					   +',scrollbars=1'
					   +',resizable=1');
				
		}
		


