var PAGER={
  'listItemsPerPage':12,
  'gridColumns':4,
  'gridRowsPerPage':5,
  'sortOptions':[
    ['default', 'Default'],
    ['sku', 'SKU'],
    ['name', 'Name'],
    ['pricelow', 'Price low to high'],
    ['pricehigh', 'Price high to low']],
  'prepare':function() {
    var elt = document.getElementById('pagecontent');
    if (elt) {
      elt.style.display = 'none';
    }
  },
  'doPaging':function(products, new_imgtag) {
    var range=function(begin, end) {
      var r=[];
      for (var i=begin; i<end; ++i) { r.push(i); }
      return r;
    };
    var sortOrder = range(0, products.length);

    var currentPage = null;
    var currentSort = 'default';
    var currentViewMode = null;
    var itemsPerPage = null;
    var totalPages = null;
    var pageContElt = document.getElementById('pagecontent');
    var o = DOMhelp.createElement;

    var quickfn = function(fn, arg) {
      return function() {return fn(arg);};
    };
    var enable1 = function(onCond, onclick, txt) {
      return onCond ? o('a', {'href':'', 'onclick':onclick}, txt) : o('span.disable', txt);
    };
    var select1 = function(onCond, onclick, txt) {
      return onCond ? o('b', txt) : o('a', {'href':'', 'onclick':onclick}, txt);
    };
    var select2 = function(onCond, onclick, inner) {
      return onCond ? o('div.optsel', o('span.tab', inner)) : o('div.opt', o('a.tab', {'href':'', 'onclick':onclick}, inner));
    };
    var doOnePage = function(n) {
      return [select1(n==currentPage, quickfn(PAGER.showPage, n), (n+1)+''), ' | '];
    };
    var doOneSortOpt = function(s) {
      return select2(currentSort==s[0], quickfn(PAGER.setSortMode, s[0]), s[1]);
    };
    var doHeader1 = function(begin, end) {
      var caption='All items';
      var enable_prev=false;
      var enable_next=false;
      if (currentPage!='all') {
        caption = 'Items '+(begin+1)+' to '+end+' of '+products.length;
	enable_prev = currentPage>0;
	enable_next = currentPage<totalPages-1;
      }
      return o('div.paginghdr',
               o('div.pagingright', enable1(enable_prev, quickfn(PAGER.showPage, currentPage-1), '\u00ab Previous'),
                 ' | ', enable1(enable_next, quickfn(PAGER.showPage, currentPage+1), 'Next \u00bb')),
               o('div.pagingcenter',
	         o('b', 'Page: '),
	         DOMhelp.map(doOnePage, range(0, totalPages)),
		 select1(currentPage=='all', PAGER.showAll, 'Show All')),
               caption);
    };
    var doHeader2 = function() {
      return o('div.pagingopts',
	       o('div.optsright', o('div.optcat', o('span.tab', 'Sort:')),
                 DOMhelp.map(doOneSortOpt, PAGER.sortOptions)),
               o('div.optcat', o('span.tab', 'View:')),
               select2(currentViewMode=='grid', quickfn(PAGER.setViewMode, 'grid'),
		 [o('img.icon', {'src':'http://lib.store.yahoo.net/lib/teeda-online/grid.png'}), ' Grid']),
               select2(currentViewMode=='list', quickfn(PAGER.setViewMode, 'list'),
		 [o('img.icon', {'src':'http://lib.store.yahoo.net/lib/teeda-online/list.png'}), ' List']));
    };

    var doListProduct = function(n, count) {
      var prod = products[sortOrder[n]];
      var optionstring='';
      var i, selectEltName, optionpieces;
      qoh.rowmap[prod.sku.toUpperCase()]=count;
      var skuinfo = null;
      if (qoh.skuinfo) {
        skuinfo = qoh.skuinfo[prod.sku.toUpperCase()];
      }
      var opt;
      if (prod.options.length) {
        selectEltName = 'vwattr'+count+'_'+prod.options[0];

	optionpieces = [DOMhelp.fmt('<select name="%t" id="itemoptions%t">', [selectEltName, count])];
	for (i=0; i<prod.options.length; ++i) {
	  opt=prod.options[i];
	  if (!skuinfo || !skuinfo.rmopts[opt]) {
	    optionpieces.push(DOMhelp.fmt('<option value="%t">%t</option>', [opt, opt]));
	  }
	}
	optionpieces.push('</select><br><img src="http://us.st1.yimg.com/store1.yimg.com/Img/trans_1x1.gif" height=6 width=1 border=0 alt="pad"><br>');
	optionstring = optionpieces.join('');
      }
      var newimg='';
      if (prod.show_new=='T' && new_imgtag) {
        newimg = new_imgtag;
      }
      var qty;
      if (prod.show_order!='T' || (skuinfo && skuinfo.removed)) {
        qty = DOMhelp.fmt('<input name="vwquantity%t" type="hidden" value="0" /><font face=verdana size=1 color=#336699>Currently<br>Sold Out</font>', [count]);
      } else {
      	qty = DOMhelp.fmt('<input name="vwquantity%t" type="text" style="text-align: Right" value=0 size=3>', [count]);
      }
      return DOMhelp.fmt('<tr><td align=center valign=middle rowspan=2><a href="%t">%h</a></td><td valign=top colspan=6><table border=0 align=center cellspacing=0 cellpadding=0 width="100%%"><tr><td><a href="%t"><FONT color=#44698f face=Arial size=2><b>%t</B></FONT></a>%h</td></tr></table></td></tr><tr><td valign=top width="15%%"><FONT color=#44698f face=Arial size=1>%t</font></td><td valign=top width="35%%">%h</td><td align=center valign=top width=65><FONT color=#44698f face=Arial size=2>%t</font></td><td align=center valign=top width=65><FONT color=#44698f face=Arial size=2><B>%t</B></font></td><td align=center valign=top width=75><span id="qtybox%t">%h</span><input name="vwitem%t" type=hidden value="%t"></td></tr>',
        [prod.href, prod.imglink, prod.href, prod.title, newimg, prod.sku,
	 optionstring, prod.retailprice, prod.wholesaleprice, count, qty, count, prod.id]);
    };

    var colWidth = (100/PAGER.gridColumns).toString().substring(0,4)+"%";
    var doGridProduct = function(n) {
      var prod = products[sortOrder[n]];
      var newimg='';
      if (prod.show_new=='T' && new_imgtag) {
        newimg = new_imgtag;
      }
      return [DOMhelp.fmt('<td align=center valign=bottom width="%t" style="padding: 12px 4px 0 4px;"><a href="%t">%h</a></td>', [colWidth, prod.href, prod.imglink]),
              DOMhelp.fmt('<td align=center valign=top width="%t" style="color: #44698f; font-size: 11px; font-family: Arial,sans-serif; padding: 0 4px 12px 4px;"><a href="%t"><b style="color: #44698f;">%t</b></a>%h<br />%t<br />%t</td>', [colWidth, prod.href, prod.title, newimg, prod.sku, prod.wholesaleprice])];
    };

    var doContent = function(begin, end) {
      if (end>products.length) {
        end=products.length;
      }
      var pageHdrElt = document.getElementById('pagehdr');
      if (pageHdrElt) {
        DOMhelp.replaceContent(pageHdrElt, [doHeader1(begin, end), doHeader2()]);
      }
      var pageFtrElt = document.getElementById('pageftr');
      if (pageFtrElt) {
        DOMhelp.replaceContent(pageFtrElt, doHeader1(begin, end));
      }
      var parts;
      var row2, gridparts;
      var i, curcol=0;
      var emptycell;
      qoh.rowmap={};
      if (currentViewMode=='list') {
	parts = ['<table border=0 align=center cellspacing=0 cellpadding=3 width="100%"><tr><td colspan=3>&nbsp;</td><td align=center valign=bottom><FONT color=#214263 face=Arial size=2>Retail<br>Value</FONT></td><td align=center valign=bottom><FONT color=#214263 face=Arial size=2>Wholesale</FONT></td><td align=right valign=bottom><input type=image src=http://lib.store.yahoo.net/lib/teeda-online/ordermulti.gif border=0 align=top></td></tr><tr><td valign=top colspan=6><table border=0 align=center cellspacing=0 cellpadding=0 width="100%"><tr><td bgcolor="#336699"><img src="http://us.st1.yimg.com/store1.yimg.com/Img/trans_1x1.gif" height=1 width=1 border=0 alt="pad"></td></tr></table></td></tr>'];
	for (i=begin; i<end; ++i) {
          parts.push(doListProduct(i, i-begin));
	}
	parts.push(['<tr><td valign=top colspan=6><table border=0 align=center cellspacing=0 cellpadding=0 width="100%"><tr><td bgcolor="#336699"><img src="http://us.st1.yimg.com/store1.yimg.com/Img/trans_1x1.gif" height=1 width=1 border=0 alt="pad"></td></tr></table></td></tr><tr><td align=right valign="middle" height="30" colspan=6><input type=image src=http://lib.store.yahoo.net/lib/teeda-online/ordermulti.gif border=0 align=top></td></tr></table>']);
      } else {
	parts = ['<br /><table border=0 align=center cellspacing=0 cellpadding=3 width="100%">'];
	for (i=begin; i<end; ++i) {
	  if (curcol===0) {
	    parts.push('<tr>');
	    row2 = ['<tr>'];
	  }
	  gridparts=doGridProduct(i);
	  parts.push(gridparts[0]);
	  row2.push(gridparts[1]);
	  ++curcol;
	  if (curcol==PAGER.gridColumns) {
	    parts.push('</tr>');
	    row2.push('</tr>');
	    parts.push(row2.join(''));
	    curcol=0;
	  }
	}
	if (curcol>0) {
	  emptycell = DOMhelp.fmt('<td width="%t">&nbsp;</td>', [colWidth]);
	  while (curcol<PAGER.gridColumns) {
	    parts.push(emptycell);
	    row2.push(emptycell);
	    ++curcol;
	  }
	  parts.push('</tr>');
	  row2.push('</tr>');
	  parts.push(row2.join(''));
	}
	parts.push('</table>');
      }
      pageContElt.innerHTML = parts.join('');
      pageContElt.style.display = 'block';
    };
    var setCookie=function(namevalue) {
      var date = new Date();
      date.setTime(date.getTime()+(30*24*60*60*1000));
      document.cookie = namevalue+"; expires="+date.toGMTString()+"; path=/";
    };
    var delCookie=function(name) {
      var date = new Date(0);
      document.cookie = name+"=; expires="+date.toGMTString()+"; path=/";
    };

    PAGER.showAll = function() {
      if (!pageContElt) {
      	pageContElt = document.getElementById('pagecontent');
	if (!pageContElt) {
	  setTimeout(PAGER.showAll, 200);
	  return;
	}
      }
      setCookie('page=all');
      currentPage='all';
      doContent(0, products.length);
      return false;
    };

    PAGER.showPage = function(n) {
      if (!pageContElt) {
      	pageContElt = document.getElementById('pagecontent');
	if (!pageContElt) {
	  setTimeout(quickfn(PAGER.showPage, n), 200);
	  return;
	}
      }
      delCookie('page');
      if (n<0) {
        n=0;
      }
      if (n>=totalPages) {
        n=totalPages-1;
      }
      currentPage=n;
      doContent(n*itemsPerPage, (n+1)*itemsPerPage);
      return false;
    };

    PAGER.setViewMode = function(viewMode, dontRefresh) {
      currentViewMode = viewMode;
      if (currentViewMode=='grid') {
        itemsPerPage = PAGER.gridColumns * PAGER.gridRowsPerPage;
        setCookie('view=grid');
      } else {
        itemsPerPage = PAGER.listItemsPerPage;
	delCookie('view');
      }
      totalPages = Math.ceil(products.length/itemsPerPage);
      if (!dontRefresh) {
        if (currentPage=='all') {
	  PAGER.showAll();
	} else {
          PAGER.showPage(0);
	}
      }
      return false;
    };

    var alphasort=function(a,b) {
      a=a.toUpperCase();
      b=b.toUpperCase();
      return (a<b) ? -1 : ((a>b) ? 1 : 0);
    };
    var getws=function(i) {
      return products[i].wholesaleprice.substring(1);
    };
    var sortfns={
      'sku':function(i1, i2) {
        return alphasort(products[i1].sku, products[i2].sku);
      },
      'name':function(i1, i2) {
        return alphasort(products[i1].title, products[i2].title);
      },
      'pricelow':function(i1, i2) {
        return getws(i1)-getws(i2);
      },
      'pricehigh':function(i1, i2) {
        return getws(i2)-getws(i1);
      }
    };
    PAGER.setSortMode = function(sortMode, dontRefresh) {
      currentSort = sortMode;
      if (sortfns[sortMode]) {
        sortOrder.sort(sortfns[sortMode]);
      } else {
        sortOrder = range(0, products.length);
      }
      setCookie('sort='+sortMode);
      if (!dontRefresh) {
        if (currentPage=='all') {
	  PAGER.showAll();
	} else {
          PAGER.showPage(0);
	}
      }
      return false;
    };

    var url = '&'+window.location.search.substring(1)+'&';
    var cookie = ';'+document.cookie+';';
    var mode;
    if (url.search(/&sort=([^&]*)&/)!=-1 || cookie.search(/; *sort=([^;]*);/)!=-1) {
      mode=RegExp.$1;
      if (PAGER.sortOptions[mode]!=='') {
        PAGER.setSortMode(mode, true);
      }
    }
    if (url.indexOf('&view=grid&')!=-1) {
      PAGER.setViewMode('grid', true);
    } else if (url.indexOf('&view=list&')==-1 && cookie.search(/; *view=grid;/)!=-1) {
      PAGER.setViewMode('grid', true);
    } else {
      PAGER.setViewMode('list', true);
    }
    if (url.indexOf('&page=all&')!=-1) {
      PAGER.showAll();
    } else if (url.search(/&page=(\d*)&/)!=-1) {
      PAGER.showPage(RegExp.$1-1);
    } else if (cookie.search(/; *page=all;/)!=-1) {
      PAGER.showAll();
    } else {
      PAGER.showPage(0);
    }
  }
};
PAGER.prepare();

