	/**
	 * 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");
			img.src = isThumb==true ? imageVO.thumb : imageVO.src;
			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)
						scroll(index,true);
				})
			}
			
			return img;
		}
		
		
		function createPageDiv(pageVO,includeTitle)
		{
			var div = document.createElement("div");
			$(div).addClass("gasPageItem");
			
			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 );
				div.appendChild( title );
			}
				
			$( text ).html( parseCRLF(pageVO.body) );
			
			div.appendChild(text);
			
			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).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;
			}
			
			
			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 in imgs) 
			{
				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)
		{
			//document.write(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="#"
			$(a).addClass("nav toggle");
			
			return a;
		}
		function createPDF(photographerVO)
		{
			var a = document.createElement("a");
			var attr = document.createAttribute("onclick");
			attr.nodeValue = "loadPage('pdf')"
		
			a.setAttributeNode( attr );
			var attr2 = document.createAttribute("photogID");
			attr2.nodeValue = "1";
			a.setAttributeNode( attr2 );
			
			a.photographerVO=photographerVO;
			a.innerHTML="create pdf";
			a.href="#"
			$(a).addClass("nav toggle");
			
			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="#"
			$(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 createLITag2(child)
		{
			var li = document.createElement("li");
			$(li).addClass("fadeInOut");
			li.appendChild(child);
			return li;
		}
		
		function parseCRLF(str)
		{
			if(str)
				return str.replace(/(\r\n|\r|\n)/g, "<br />");
			else
				return "";
		}
		
		
		
		


