var Gallery = {
	Items : [],
	sKey : '',
	CurrentPageIndex : 1,
	PageSize : 4,
	PageSizeMin : 4,
	PageCount : 1,
	RangePad : 9,
	ItemsPerRow : 5,
	PageControl : '',
	GridControl : '',
	Type : '',
	OnItemOver : function (nItem)
	{
		document.getElementById('itemImage'+nItem).className = 'galleryItemImageOn';
		document.getElementById('itemLabel'+nItem).className = 'galleryItemLabelOn';
	},
	OnItemOut : function (nItem)
	{
		document.getElementById('itemImage'+nItem).className = 'galleryItemImageOff';
		document.getElementById('itemLabel'+nItem).className = 'galleryItemLabelOff';
	},
	GetPageItems : function (nPage)
	{
		var sReturn = '';
		var bDoDoll = false;
		var sCurrentBreak = '';
		var sOpenRow = '<div class="galleryRow">';
		var sClose = '</div>';
		var sOpenItem = '<div class="galleryItem">';
		var nCount = 0;
		var nTotalRows = 0;
		var nCurrentRow = 0;
		var nRowItems = 0;
			for(var i = 0; i < this.Items.length; i++)
			{
				switch (this.sKey)
				{
					case 'edition': 
						sSortValue = this.Items[i].editionSort;
						break;
					case 'series': 
						sSortValue = this.Items[i].seriesSort;
						break;
					case 'year': 
						sSortValue = this.Items[i].yearName;
						break;
					default: 
						switch (this.sKey)
						{
						/*
							case 'year': 
								sSortValue = this.Items[i].yearSort;
								break;
						*/
							case 'sku': 
								sSortValue = this.Items[i].skuSort;
								break;
							case 'name': 
								sSortValue = this.Items[i].nameSort;
								break;
						}
						if (sSortValue != '0')
						{	
							sSortValue = '0';
							if (nCount % this.ItemsPerRow == 0)
							{
								nTotalRows++;
							}
							nCount++;
						}
						break;
				}
				if (sSortValue != '0')
				{
					if (sSortValue != sCurrentBreak || nRowItems % this.ItemsPerRow == 0)
					{
						if (sSortValue != sCurrentBreak)
						{
							sCurrentBreak = sSortValue;
						}
						nRowItems = 0;
						nTotalRows++;
					}
					nRowItems++;
				}
			}
			var nFirstItem = ((nPage*this.PageSize)-this.PageSize);
			var nLastItem = nFirstItem + this.PageSize - 1;
			if (nLastItem >= nTotalRows) nLastItem = nTotalRows;
			
			if (this.Items.length>0)
			{
				nCount = 0;
				nCurrentRow = 0;
				nRowItems = 0;
				sCurrentBreak = '';
				for(var i=0; i<this.Items.length; i++)
				{
					bDoDoll = false;
					switch (this.sKey)
					{
						case 'edition': 
							sSortValue = this.Items[i].editionSort;
							sSortTitle = '<img src="/images/showcase/modern/tags-editions-small-'+this.Items[i].editionName.toLowerCase()+'.gif" />';
							break;
						case 'series': 
							sSortValue = this.Items[i].seriesSort;
							sSortTitle = this.Items[i].seriesName;
							break;
						
						case 'year': 
							sSortValue = this.Items[i].yearName;
							sSortTitle = this.Items[i].yearName;
							break;
						
						//case 'sku': 
							//sSortValue = this.Items[i].skuSort;
							//sSortTitle = this.Items[i].skuName;
							//break;
						default: 
							switch (this.sKey)
							{
								/*
								case 'year': 
									sSortValue = this.Items[i].yearSort;
									break;
								*/
								case 'sku': 
									sSortValue = this.Items[i].skuSort;
									break;
								case 'name': 
									sSortValue = this.Items[i].nameSort;
									break;
							}
							if (sSortValue != '0')
							{	
								sSortValue = '0';
								sSortTitle = '';
								if (nCount % this.ItemsPerRow == 0)
								{
									if (nCurrentRow > nFirstItem && nCurrentRow <= nLastItem) sReturn += sClose;
									if (nCurrentRow >= nFirstItem && nCurrentRow <= nLastItem) sReturn += sOpenRow;
									nCurrentRow++;
								}
								if (nCurrentRow-1 >= nFirstItem && nCurrentRow-1 <= nLastItem) sReturn += this.DoRowItem(i);
								nCount++;
							}
							break;
				
					}
					if (sSortValue != '0')
					{	
						if (sSortValue != sCurrentBreak || nRowItems % this.ItemsPerRow == 0)
						{
							if (nCurrentRow > nFirstItem && nCurrentRow <= nLastItem) sReturn += sClose;
							if (nCurrentRow == nFirstItem) sReturn += this.DoSortBreak(sSortTitle);
							if (sSortValue != sCurrentBreak)
							{
								sCurrentBreak = sSortValue;
								if (nCurrentRow > nFirstItem && nCurrentRow <= nLastItem)
								{
									sReturn += this.DoSortBreak(sSortTitle);
								}
							}
							if (nCurrentRow >= nFirstItem && nCurrentRow <= nLastItem) sReturn += sOpenRow;
							nRowItems = 0;
							nCurrentRow++;
						}
						if (nCurrentRow-1 >= nFirstItem && nCurrentRow-1 <= nLastItem) sReturn += this.DoRowItem(i);
						nRowItems++;
					}
					else
					{
							sSortValue = '0';
							sSortTitle = '';
					}
				}
			}
		if (sReturn == '')
		{
			sReturn += sOpenRow + '<div class="gallerySortTitle">Sorry, no items were found.</div>';
		}
		sReturn += sClose;
		return sReturn;
	},
	DoRowItem : function (i)
	{
		return '<div class="galleryItem"><a href="javascript:void(0);" onmouseover="Gallery.OnItemOver(\''+this.Items[i].id+'\')" onmouseout="Gallery.OnItemOut(\''+this.Items[i].id+'\')" onclick="javascript:Gallery.OpenProduct(\''+this.Items[i].id+'\');return false;"><div id="itemImage'+this.Items[i].id+'" class="galleryItemImageOff"><img src="/images/showcase/products/'+this.Items[i].sku+'_9993_thumbnail.jpg" align="center"/></div><div id="itemLabel'+this.Items[i].id+'" class="galleryItemLabelOff">'+this.Items[i].name+'</div></a></div>';
	},
	DoSortBreak : function (sTitle)
	{
		return '<div class="galleryRow"><div class="gallerySortTitle">' + sTitle + '</div></div><div class="galleryRow">';
	},
	GetPageNav : function (nPage)
	{
		var sReturn = '';
		var nRowItems = 0;
		var nTotalItems = 0;
		var sCurrentBreak = '';
		var nTotalRows = 0;
		var nCount = 0;
		for(var i = 0; i < this.Items.length; i++)
		{
			switch (this.sKey)
			{
				case 'edition': 
					sSortValue = this.Items[i].editionSort;
					break;
				case 'series': 
					sSortValue = this.Items[i].seriesSort;
					break;
				
				case 'year': 
					sSortValue = this.Items[i].yearName;
					break;
				
				//case 'sku': 
					//sSortValue = this.Items[i].skuSort;
					//break;
				default: 
					switch (this.sKey)
					{
						/*
						case 'year': 
							sSortValue = this.Items[i].yearSort;
							break;
						*/
						case 'sku': 
							sSortValue = this.Items[i].skuSort;
							break;
						case 'name': 
							sSortValue = this.Items[i].nameSort;
							break;
					}
					if (sSortValue != '0')
					{	
						sSortValue = '0';
						if (nTotalItems % this.ItemsPerRow == 0)
						{
							nTotalRows++;
						}
						nCount++;
						nTotalItems++;
					}
					break;
			}
			if (sSortValue != '0')
			{
				if (sSortValue != sCurrentBreak || nRowItems % this.ItemsPerRow == 0)
				{
					if (sSortValue != sCurrentBreak)
					{
						sCurrentBreak = sSortValue;
					}
					nRowItems = 0;
					nTotalRows++;
				}
				nTotalItems++;
				nRowItems++;
			}
		}
		this.PageCount = Math.ceil(nTotalRows / this.PageSize);
		this.CurrentPageIndex = Math.min(Math.max(nPage, 1), this.PageCount);
		var nBracketRight = Math.min(this.CurrentPageIndex + this.RangePad, this.PageCount);
		var nBracketLeft = Math.max(this.CurrentPageIndex - this.RangePad - 1, 1);
		if (this.PageCount>1) 
		{
				sReturn += (this.CurrentPageIndex == 1) ? '<' : '<a href=\"javascript:Gallery.WritePage('+(this.CurrentPageIndex-1)+')\"><</a>';
				sReturn += '&nbsp;';
				if (nBracketLeft > 1) sReturn += '<a href=\"javascript:Gallery.WritePage(1)\">1</a>&nbsp;...&nbsp;';
				for (var i = nBracketLeft; i <= nBracketRight; i++) 
				{
					sReturn += (i == this.CurrentPageIndex) ? '<b>'+i+'</b>' : '<a href=\"javascript:Gallery.WritePage('+i+')\">'+i+'</a>';
					sReturn += ' ';
				}
				if (nBracketRight < this.PageCount) sReturn += '...&nbsp;<a href=\"javascript:Gallery.WritePage('+this.PageCount+')\">' + this.PageCount + '</a>&nbsp;';
				//sReturn += '&nbsp;';
				sReturn += (this.CurrentPageIndex == this.PageCount) ? '>' : '<a href=\"javascript:Gallery.WritePage('+(this.CurrentPageIndex+1)+')\">></a>';
		}
		if (this.PageSizeMin < nTotalRows) {
			sReturn += (this.PageSize < nTotalRows) ? '&nbsp;&nbsp;<a href=\"javascript:Gallery.PageSize='+nTotalRows+';Gallery.WritePage(1)\">View All</a>' : '<a href=\"javascript:Gallery.PageSize='+this.PageSizeMin+';Gallery.WritePage(1)\">View Pages</a>';
		}	
		return sReturn;
	},
	WritePage : function (nPage)
	{
		var sNavInnerHtml = this.GetPageNav(nPage);
		document.getElementById(this.PageControl).innerHTML = sNavInnerHtml;
		document.getElementById(this.PageControl+'2').innerHTML = sNavInnerHtml;
		document.getElementById(this.GridControl).innerHTML = this.GetPageItems(nPage);
	},
	SortByName : function (a, b)
	{
		var x = a.nameSort.toLowerCase();
		var y = b.nameSort.toLowerCase();
		return ((x < y) ? -1 : ((x > y) ? 1 : 0));
	},
	SortByEdition : function (a, b)
	{
		var x = parseFloat(a.editionSort);
		var y = parseFloat(b.editionSort);
		return ((x < y) ? -1 : ((x > y) ? 1 : 0));
	},
	SortBySeries : function (a, b)
	{
		var x = a.seriesSort.toLowerCase();
		var y = b.seriesSort.toLowerCase();
		return ((x < y) ? -1 : ((x > y) ? 1 : 0));
	},
	SortByYear : function (a, b)
	{
		var x = parseInt(a.yearSort);
		var y = parseInt(b.yearSort);
		return ((x > y) ? -1 : ((x < y) ? 1 : 0));
	},
	SortBySku : function (a, b)
	{
		var x = a.skuSort;
		var y = b.skuSort;
		return ((x > y) ? -1 : ((x < y) ? 1 : 0));
	},
	SortBy : function (sValue)
	{
		switch (sValue)
		{
			case 'name': 
				this.sKey = 'name';
				var aSortSet = function(a, b) {
					var nReturn = Gallery.SortByName(a, b);
					if (nReturn == 0) {
						nReturn = Gallery.SortByYear(a, b);
						if (nReturn == 0) {
							nReturn = Gallery.SortBySku(a, b);
						}
					}
					return nReturn;
				};
				this.Items.sort(aSortSet);
				break;
			case 'edition': 
				this.sKey = 'edition';
				var aSortSet = function(a, b) {
					var nReturn = Gallery.SortByEdition(a, b);
					if (nReturn == 0) {
						nReturn = Gallery.SortByName(a, b);
						if (nReturn == 0) {
							nReturn = Gallery.SortByYear(a, b);
							if (nReturn == 0) {
								nReturn = Gallery.SortBySku(a, b);
							}
						}
					}
					return nReturn;
				};
				this.Items.sort(aSortSet);
				break;
			case 'series': 
				this.sKey = 'series';
				var aSortSet = function(a, b) {
					var nReturn = Gallery.SortBySeries(a, b);
					if (nReturn == 0) {
						nReturn = Gallery.SortByName(a, b);
						if (nReturn == 0) {
							nReturn = Gallery.SortByYear(a, b);
							if (nReturn == 0) {
								nReturn = Gallery.SortBySku(a, b);
							}
						}
					}
					return nReturn;
				};
				this.Items.sort(aSortSet);
				break;
			case 'year': 
				this.sKey = 'year';
				var aSortSet = function(a, b) {
					var nReturn = Gallery.SortByYear(a, b);
					if (nReturn == 0) {
						nReturn = Gallery.SortByName(a, b);
						if (nReturn == 0) {
							nReturn = Gallery.SortBySku(a, b);
						}
					}
					return nReturn;
				};
				this.Items.sort(aSortSet);
				break;
			case 'sku': 
				this.sKey = 'sku';
				this.Items.sort(this.SortBySku);
				break;
		}
		var oOptions = document.getElementById('gallerySort');
		for (var i=0; i<oOptions.options.length; i++)
		{
			if (oOptions.options[i].value == this.sKey) 
			{
				oOptions.selectedIndex = i;
				break;
			}
		}
		this.WritePage(1);
	},
	OpenProduct : function (sId, s)
	{
		location.href='product.aspx?id='+sId+'&t='+sType+'&t2='+sNavCatId+'&x='+sCatId+'&y='+sNavId+'&sort='+this.sKey;
	}
}

