/* =========================================================================

NAME: page-sort.js

AUTHOR: Istvan Siposs , Y-Times Publications, LLC
DATE  : 4/13/2005

COMMENT: Advanced Yahoo! Store pagination and sorting.

============================================================================ */

// CONFIGURATION VARIABLES //

var SHOWALL = true; 		// set to False if VIEW ALL should not be displayed.
var SHOWSTATS = false;
var PAGENEXT = "<img src=/lib/gallerydirectart/rightarrow.gif border=0 align=absmiddle>";
var PAGEPREV = "<img src=/lib/gallerydirectart/leftarrow.gif border=0 align=absmiddle>";


function PageObject(sortfields,src)
{
    this.sortfields = sortfields;
    this.src = src;
}

if (queryString('page')=='false')
  CurrentPage = 1;
else
  CurrentPage = queryString('page') * 1;

function PageSortFunction(a,b)
{
    var sf = queryString('sf');
    if (sf =='false')
        return 0;

    var sd = queryString('sd');
    if (sd == 'false' || sd == '')
        sd = 'a';

	if (sd == 'a')
	{
		if (! isNaN(a.sortfields[sf]) && !isNaN(b.sortfields[sf]))
			return (a.sortfields[sf] - b.sortfields[sf]);
		else
		{
			if (a.sortfields[sf] > b.sortfields[sf])
				return 1;
			else if (a.sortfields[sf] < b.sortfields[sf])
				return -1;
			else
				return 0;
		}
	}
	else
	{
		if (! isNaN(a.sortfields[sf]) && !isNaN(b.sortfields[sf]))
			return (b.sortfields[sf] - a.sortfields[sf]);
		else
		{
			if (a.sortfields[sf] < b.sortfields[sf])
				return 1;
			else if (a.sortfields[sf] > b.sortfields[sf])
				return -1;
			else
				return 0;
		}
	}
}

function ShowPageControls()
{
	var numpages = Math.ceil(PageObjects.length / pagesize);

    var sf = queryString('sf');
    if (sf == 'false')
    	sf = '';
	var sd = queryString('sd');
	if (sd == 'false')
		sd = '';
	
	document.write("<div class=paginate>");
	
document.write("Click the page numbers or the arrows below<br>");

	// stats
	if (SHOWSTATS)
	{
		if (CurrentPage > 0)
		{
			var ItemsFrom = (CurrentPage - 1) * pagesize + 1;
			var ItemsTo = ItemsFrom + pagesize - 1;
			if (ItemsTo > PageObjects.length)
				ItemsTo = PageObjects.length;
			
			document.write ("Displaying <b>" + ItemsFrom + "</b> to <b>" + ItemsTo + "</b> (of <b>" + PageObjects.length + "</b> items)<br>");
		}
	}
	
	document.write("<b>Page:</b> ");
	
	if (CurrentPage > 1)
		document.write ("<a href=" + PageID + ".html?page=" + (CurrentPage - 1) + "&sf=" + sf + "&sd=" + sd + ">" + PAGEPREV + "</a> ");
		
	for (var i = 1; i <= numpages; i++)
	{
		if (CurrentPage != i)
			document.write("<a href=" + PageID + ".html?page=" + i + "&sf=" + sf + "&sd=" + sd + ">" + i + "</a> ");
		else
			document.write("<b>" + i + "</b> ");
	}
	if (CurrentPage < numpages && CurrentPage > 0)
		document.write ("<a href=" + PageID + ".html?page=" + (CurrentPage + 1) + "&sf=" + sf + "&sd=" + sd + ">" + PAGENEXT + "</a>");
	
	if (SHOWALL)
	{
		document.write(" | <a href=" + PageID + ".html?page=0&sf=" + sf + "&sd=" + sd + ">VIEW ALL</a> ");
	}
	if (SortFields.length > 0)
	{
		document.write ("<br>");
		document.write ("Sort by: ");
		document.write ("<select name=sf onchange=" + '"');
		document.write ("javascript:location.href='" + PageID + ".html?sf=' + this.options[this.selectedIndex].value");
		document.write ('">');
		document.write ("<option value=''></option>");
		for (var i = 0; i < SortFields.length; i++)
		{
			document.write ("<option value='" + i + "'");
			if (parseInt(sf) == i)
				document.write (" selected ");
			document.write (">" + SortFields[i] + "</option>");
		}
		document.write ("</select>");
	}
	
	document.write("</div><br>");
}

function ShowPage()
{
	var colcnt = 0;
	
	if (CurrentPage == 0)
	{
		var idx0 = 0;
		var idx1 = PageObjects.length - 1;
	}
	else
	{
		var idx0 = (CurrentPage - 1) * pagesize;
		var idx1 = idx0 + pagesize - 1;
		if (idx1 >= PageObjects.length)
			idx1 = PageObjects.length - 1;
	}

    var sf = queryString('sf');
	if (sf != 'false' && sf != '')
		PageObjects.sort(PageSortFunction);	
	var idx = idx0;
	ShowPageControls();
	document.write ("<table border=0 width=" + wid + " cellpaddign=0 cellspacing=0>");
	document.write ("<tr>");
	while (idx <= idx1)
	{
		if (colcnt == cols)
		{
			document.write ("</tr><tr>");
			colcnt = 0;
		}
		document.write("<td>" + PageObjects[idx].src.replace(/`/gi, "'") + "</td>");
		colcnt ++;
		idx ++;
	}
	document.write ("</tr></table>");
	ShowPageControls();
}


function PageQuery(q) {
if(q.length > 1) this.q = q.substring(1, q.length);
else this.q = null;
this.keyValuePairs = new Array();
if(q) {
for(var i=0; i < this.q.split("&").length; i++) {
this.keyValuePairs[i] = this.q.split("&")[i];
}
}
this.getKeyValuePairs = function() { return this.keyValuePairs; }
this.getValue = function(s) {
for(var j=0; j < this.keyValuePairs.length; j++) {
if(this.keyValuePairs[j].split("=")[0] == s)
return this.keyValuePairs[j].split("=")[1];
}
return false;
}
this.getParameters = function() {
var a = new Array(this.getLength());
for(var j=0; j < this.keyValuePairs.length; j++) {
a[j] = this.keyValuePairs[j].split("=")[0];
}
return a;
}
this.getLength = function() { return this.keyValuePairs.length; } 
}
function queryString(key){
var page = new PageQuery(window.location.search); 
return unescape(page.getValue(key)); 
}
