EasyCookie=(function(){var EPOCH='Thu, 01-Jan-1970 00:00:01 GMT',RATIO=1000*60*60*24,KEYS=['expires','path','domain'],esc=escape,un=unescape,doc=document,me;var get_now=function(){var r=new Date();r.setTime(r.getTime());return r;};var cookify=function(c_key,c_val){var i,key,val,r=[],opt=(arguments.length>2)?arguments[2]:{};r.push(esc(c_key)+'='+esc(c_val));for(i=0;i<KEYS.length;i++){key=KEYS[i];if(val=opt[key])r.push(key+'='+val);}if(opt.secure)r.push('secure');return r.join('; ');};var alive=function(){var k='__EC_TEST__',v=new Date();v=v.toGMTString();this.set(k,v);this.enabled=(this.remove(k)==v);return this.enabled;};me={set:function(key,val){var opt=(arguments.length>2)?arguments[2]:{},now=get_now(),expire_at,cfg={};if(opt.expires){opt.expires*=RATIO;cfg.expires=new Date(now.getTime()+opt.expires);cfg.expires=cfg.expires.toGMTString();}var keys=['path','domain','secure'];for(i=0;i<keys.length;i++)if(opt[keys[i]])cfg[keys[i]]=opt[keys[i]];var r=cookify(key,val,cfg);doc.cookie=r;return val;},has:function(key){key=esc(key);var c=doc.cookie,ofs=c.indexOf(key+'='),len=ofs+key.length+1,sub=c.substring(0,key.length);return((!ofs&&key!=sub)||ofs<0)?false:true;},get:function(key){key=esc(key);var c=doc.cookie,ofs=c.indexOf(key+'='),len=ofs+key.length+1,sub=c.substring(0,key.length),end;if((!ofs&&key!=sub)||ofs<0)return null;end=c.indexOf(';',len);if(end<0)end=c.length;return un(c.substring(len,end));},remove:function(k){var r=me.get(k),opt={expires:EPOCH};doc.cookie=cookify(k,'',opt);return r;},keys:function(){var c=doc.cookie,ps=c.split('; '),i,p,r=[];for(i=0;i<ps.length;i++){p=ps[i].split('=');r.push(un(p[0]));}return r;},all:function(){var c=doc.cookie,ps=c.split('; '),i,p,r=[];for(i=0;i<ps.length;i++){p=ps[i].split('=');r.push([un(p[0]),un(p[1])]);}return r;},version:'0.2.1',enabled:false};me.enabled=alive.call(me);return me;}());Persist=(function(){var VERSION='0.1.0',P,B,esc,init,empty,ec=EasyCookie;empty=function(){};esc=function(str){return'PS'+str.replace(/_/g,'__').replace(/ /g,'_s');};C={search_order:['localstorage','whatwg_db','globalstorage','ie','cookie'],name_re:/^[a-z][a-z0-9_ -]+$/i,methods:['init','get','set','remove','load','save'],sql:{version:'1',create:"CREATE TABLE IF NOT EXISTS persist_data (k TEXT UNIQUE NOT NULL PRIMARY KEY, v TEXT NOT NULL)",get:"SELECT v FROM persist_data WHERE k = ?",set:"INSERT INTO persist_data(k, v) VALUES (?, ?)",remove:"DELETE FROM persist_data WHERE k = ?"}};B={gears:{size:-1,test:function(){return(window.google&&window.google.gears)?true:false;},methods:{transaction:function(fn){var db=this.db;db.execute('BEGIN').close();fn.call(this,db);db.execute('COMMIT').close();},init:function(){var db;db=this.db=google.gears.factory.create('beta.database');db.open(esc(this.name));db.execute(C.sql.create).close();},get:function(key,fn,scope){var r,sql=C.sql.get;if(!fn)return;this.transaction(function(t){r=t.execute(sql,[key]);if(r.isValidRow())fn.call(scope||this,true,r.field(0));else fn.call(scope||this,false,null);r.close();});},set:function(key,val,fn,scope){var rm_sql=C.sql.remove,sql=C.sql.set,r;this.transaction(function(t){t.execute(rm_sql,[key]).close();t.execute(sql,[key,val]).close();if(fn)fn.call(scope||this,true,val);});},remove:function(key,fn,scope){var get_sql=C.sql.get;sql=C.sql.remove,r,val;this.transaction(function(t){if(fn){r=t.execute(get_sql,[key]);if(r.isValidRow()){val=r.field(0);t.execute(sql,[key]).close();fn.call(scope||this,true,val);}else{fn.call(scope||this,false,null);}r.close();}else{t.execute(sql,[key]).close();}});}}},whatwg_db:{size:200*1024,test:function(){var name='PersistJS Test',desc='Persistent database test.';if(!window.openDatabase)return false;if(!window.openDatabase(name,C.sql.version,desc,B.whatwg_db.size))return false;return true;},methods:{transaction:function(fn){if(!this.db_created){var sql=C.sql.create;this.db.transaction(function(t){t.executeSql(sql,[],function(){this.db_created=true;});},empty);}this.db.transaction(fn);},init:function(){var desc,size;desc=this.o.about||"Persistent storage for "+this.name;size=this.o.size||B.whatwg_db.size;this.db=openDatabase(this.name,C.sql.version,desc,size);},get:function(key,fn,scope){var sql=C.sql.get;if(!fn)return;scope=scope||this;this.transaction(function(t){t.executeSql(sql,[key],function(t,r){if(r.rows.length>0)fn.call(scope,true,r.rows.item(0)['v']);else fn.call(scope,false,null);});});},set:function(key,val,fn,scope){var rm_sql=C.sql.remove,sql=C.sql.set;this.transaction(function(t){t.executeSql(rm_sql,[key],function(){t.executeSql(sql,[key,val],function(t,r){if(fn)fn.call(scope||this,true,val);});});});return val;},remove:function(key,fn,scope){var get_sql=C.sql.get;sql=C.sql.remove;this.transaction(function(t){if(fn){t.executeSql(get_sql,[key],function(t,r){if(r.rows.length>0){var val=r.rows.item(0)['v'];t.executeSql(sql,[key],function(t,r){fn.call(scope||this,true,val);});}else{fn.call(scope||this,false,null);}});}else{t.executeSql(sql,[key]);}});}}},globalstorage:{size:5*1024*1024,test:function(){return window.globalStorage?true:false;},methods:{key:function(key){return esc(this.name)+esc(key);},init:function(){this.store=globalStorage[this.o.domain];},get:function(key,fn,scope){key=this.key(key);if(fn)fn.call(scope||this,true,this.store.getItem(key));},set:function(key,val,fn,scope){key=this.key(key);this.store.setItem(key,val);if(fn)fn.call(scope||this,true,val);},remove:function(key,fn,scope){var val;key=this.key(key);val=this.store[key];this.store.removeItem(key);if(fn)fn.call(scope||this,(val!==null),val);}}},localstorage:{size:-1,test:function(){return window.localStorage?true:false;},methods:{key:function(key){return esc(this.name)+esc(key);},init:function(){this.store=localStorage;},get:function(key,fn,scope){key=this.key(key);if(fn)fn.call(scope||this,true,this.store.getItem(key));},set:function(key,val,fn,scope){key=this.key(key);this.store.setItem(key,val);if(fn)fn.call(scope||this,true,val);},remove:function(key,fn,scope){var val;key=this.key(key);val=this.getItem(key);this.store.removeItem(key);if(fn)fn.call(scope||this,(val!==null),val);}}},ie:{prefix:'_persist_data-',size:64*1024,test:function(){return window.ActiveXObject?true:false;},make_userdata:function(id){var el=document.createElement('div');el.id=id;el.style.display='none';el.addBehavior('#default#userData');document.body.appendChild(el);return el;},methods:{init:function(){var id=B.ie.prefix+esc(this.name);this.el=B.ie.make_userdata(id);if(this.o.defer)this.load();},get:function(key,fn,scope){var val;key=esc(key);if(!this.o.defer)this.load();val=this.el.getAttribute(key);if(fn)fn.call(scope||this,val?true:false,val);},set:function(key,val,fn,scope){key=esc(key);this.el.setAttribute(key,val);if(!this.o.defer)this.save();if(fn)fn.call(scope||this,true,val);},load:function(){this.el.load(esc(this.name));},save:function(){this.el.save(esc(this.name));}}},cookie:{delim:':',size:4000,test:function(){return P.Cookie.enabled?true:false;},methods:{key:function(key){return this.name+B.cookie.delim+key;},get:function(key,fn,scope){key=this.key(key);val=ec.get(key);if(fn)fn.call(scope||this,val!=null,val);},set:function(key,val,fn,scope){key=this.key(key);ec.set(key,val,this.o);if(fn)fn.call(scope||this,true,val);},remove:function(key,val,fn,scope){var val;key=this.key(key);val=ec.remove(key);if(fn)fn.call(scope||this,val!=null,val);}}}};var init=function(){var i,l,b,key,fns=C.methods,keys=C.search_order;for(i=0,l=fns.length;i<l;i++)P.Store.prototype[fns[i]]=empty;P.type=null;P.size=-1;for(i=0,l=keys.length;!P.type&&i<l;i++){b=B[keys[i]];if(b.test()){P.type=keys[i];P.size=b.size;for(key in b.methods)P.Store.prototype[key]=b.methods[key];}}P._init=true;};P={VERSION:VERSION,type:null,size:0,add:function(o){B[o.id]=o;C.search_order=[o.id].concat(C.search_order);init();},remove:function(id){var ofs=C.search_order.indexOf(id);if(ofs<0)return;C.search_order.splice(ofs,1);delete B[id];init();},Cookie:ec,Store:function(name,o){if(!C.name_re.exec(name))throw new Error("Invalid name");if(!P.type)throw new Error("No suitable storage found");o=o||{};this.name=name;o.domain=o.domain||location.hostname||'localhost.localdomain';this.o=o;o.expires=o.expires||365*2;o.path=o.path||'/';this.init();}};init();return P;})();if(!this.JSON){JSON=function(){function f(n){return n<10?'0'+n:n;}Date.prototype.toJSON=function(key){return this.getUTCFullYear()+'-'+f(this.getUTCMonth()+1)+'-'+f(this.getUTCDate())+'T'+f(this.getUTCHours())+':'+f(this.getUTCMinutes())+':'+f(this.getUTCSeconds())+'Z';};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf();};var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapeable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},rep;function quote(string){escapeable.lastIndex=0;return escapeable.test(string)?'"'+string.replace(escapeable,function(a){var c=meta[a];if(typeof c==='string'){return c;}return'\\u'+('0000'+(+(a.charCodeAt(0))).toString(16)).slice(-4);})+'"':'"'+string+'"';}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==='object'&&typeof value.toJSON==='function'){value=value.toJSON(key);}if(typeof rep==='function'){value=rep.call(holder,key,value);}switch(typeof value){case'string':return quote(value);case'number':return isFinite(value)?String(value):'null';case'boolean':case'null':return String(value);case'object':if(!value){return'null';}gap+=indent;partial=[];if(typeof value.length==='number'&&!(value.propertyIsEnumerable('length'))){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||'null';}v=partial.length===0?'[]':gap?'[\n'+gap+partial.join(',\n'+gap)+'\n'+mind+']':'['+partial.join(',')+']';gap=mind;return v;}if(rep&&typeof rep==='object'){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==='string'){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}else{for(k in value){if(Object.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}v=partial.length===0?'{}':gap?'{\n'+gap+partial.join(',\n'+gap)+'\n'+mind+'}':'{'+partial.join(',')+'}';gap=mind;return v;}}return{stringify:function(value,replacer,space){var i;gap='';indent='';if(typeof space==='number'){for(i=0;i<space;i+=1){indent+=' ';}}else if(typeof space==='string'){indent=space;}rep=replacer;if(replacer&&typeof replacer!=='function'&&(typeof replacer!=='object'||typeof replacer.length!=='number')){throw new Error('JSON.stringify');}return str('',{'':value});},parse:function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==='object'){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v;}else{delete value[k];}}}}return reviver.call(holder,key,value);}cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return'\\u'+('0000'+(+(a.charCodeAt(0))).toString(16)).slice(-4);});}if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){j=eval('('+text+')');return typeof reviver==='function'?walk({'':j},''):j;}throw new SyntaxError('JSON.parse');}};}();}var addListener=(function(){if(window.addEventListener){return function(el,type,fn){el.addEventListener(type,fn,false);};}else if(window.attachEvent){return function(el,type,fn){var f=function(){fn.call(el,window.event);};el.attachEvent("on"+type,f);};}else{return function(el,type,fn){el["on"+type]=fn;};}})();function getTarget(e){var targ=e.target||e.srcElement;if(targ&&(targ.nodeType==3||targ.nodeType==4)){targ=targ.parentNode;}return targ?targ:null;}function findParentByTagName(startNode,tagName,debug){var node=startNode;tagName=tagName&&tagName.toLowerCase?tagName.toLowerCase():null;if(node){while(node.tagName&&node.tagName.toLowerCase()!==tagName&&node.parentNode){node=node.parentNode;}}try{return(node.tagName&&node.tagName.toLowerCase()===tagName)?node:false;}catch(err){return false;}}var scLog,debugMode=false;function createScLog(){var logFunction=debugMode?function(a){alert(a);}:function(){};scLog={log:window.console&&console.log?function(a){console.log(a);}:logFunction,dir:window.console&&console.dir?function(a){console.dir(a);}:logFunction,info:window.console&&console.info?function(a){console.info(a);}:logFunction,warn:window.console&&console.warn?function(a){console.warn(a);}:logFunction};};if(!window.console)addListener(window,'load',createScLog);createScLog();if(!Array.prototype.indexOf){Array.prototype.indexOf=function(elt){var len=this.length;var from=Number(arguments[1])||0;from=(from<0)?Math.ceil(from):Math.floor(from);if(from<0)from+=len;for(;from<len;from++){if(from in this&&this[from]===elt)return from;}return-1;};}function addClass(el,classname){var re=new RegExp('( ?\\b'+classname+'\\b|$)');el.className=el.className?el.className.replace(re,' '+classname):classname;return el;}function removeClass(el,classname){var re=new RegExp(' ?\\b'+classname+'\\b','');el.className=el.className.replace(re,'');return el;}function getElementsByClassName(options){var options=options.className?options:{className:options};var startNode=options.startNode||document;var els=startNode.getElementsByTagName(options.tagName||'*');options.className=typeof options.className==='string'?options.className:options.className.join('(\\s|$)|(\\s|^)');var re=new RegExp('(\\s|^)('+options.className+')(\\s|$)');if(options.onlyFindFirst===true){for(var i=0,j=els.length;i<j;i++)if(re.test(els[i].className))return els[i];return false;}else{var found=[];for(var i=0,j=els.length;i<j;i++)if(re.test(els[i].className))found.push(els[i]);return found;}}function mergeObjects(a,b){if(!a)return b;for(i in b)a[i]=(typeof b[i]==='object'&&!b[i].nodeType)?mergeObjects(a[i],b[i]):b[i];return a;}function scContentsTable(table){this.table=typeof table==='string'?document.getElementById(table):table;if(this.table&&this.table.tagName&&this.table.tagName.toLowerCase()==='table'){this.loadContentsInfo();}else{scLog.warn('Table not found');}}scContentsTable.prototype.loadContentsInfo=function(){function findPrice(text){var prices=text.match(/(\d*\D*)?\$([\d\.,]*\d)/g);if(prices.length===1){return parseFloat(prices[0].match(/\$([\d\.,]*\d)/)[1].replace(/,/,''));}else{for(var i=0,price;price=prices[i];i++){var matches=price.match(/((\d*)\D*)?\$([\d\.,]*\d)/);prices[i]=[parseInt(matches[1])||1,parseFloat(matches[3].replace(/,/,''))];}return prices.sort(function(a,b){return a[0]<b[0]?-1:1;});}return false;}var contentsTable=this.table,contentsInfo={};this.defaultSort=[];var outsideLinks={},outsideLinkTest=new RegExp(window.location.href.match(/(.*\/)[^\/]*/));var images=[],imageRows=getElementsByClassName({startNode:contentsTable,tagName:'tr',className:'image'});if(imageRows.length===0)scLog.info('No image table rows found');for(var i=0,row;row=imageRows[i];i++){var cells=[];for(var j=0,cell;cell=row.childNodes[j];j++)if(cell.nodeType===1&&cell.tagName.toLowerCase()==='td')cells.push(cell);for(var j=0,cell;cell=cells[j];j++){var imgs=cell.getElementsByTagName('img');if(imgs.length>0)images.push(imgs[0]);}}if(images.length===0)scLog.warn('No images found');for(var i=0,image;image=images[i];i++){var link=findParentByTagName(image,'a');var href=link?link.getAttribute('href'):false;var id=href?href.match(/([a-z0-9\-]*)\.htm/):false;id=(id&&id.length===2)?id[1]:false;var info={href:href,elements:{image:image,imageCell:findParentByTagName(image,'td')}};if(id&&!outsideLinkTest.test(href)){contentsInfo[id]=mergeObjects(contentsInfo[id],info);}else{outsideLinks[href]=mergeObjects(outsideLinks[href],info);}}var names=getElementsByClassName({startNode:contentsTable,className:'name'});if(names.length===0)scLog.warn("No elements with class 'name' found");for(var i=0,name;name=names[i];i++){var cell=findParentByTagName(name,'td');if(cell){var link=name.getElementsByTagName('a');var href=link.length>0?link[0].getAttribute('href'):false;var id=href?href.match(/([a-z0-9\-]*)\.htm/):false;id=(id&&id.length===2)?id[1]:false;var isOutsideLink=outsideLinkTest.test(href);if(id||isOutsideLink){function find(className){return getElementsByClassName({startNode:cell,className:className,onlyFindFirst:true});}var elements={name:find('name'),price:find(['price','price-bold']),salePrice:find(['sale-price','sale-price-bold'])},text={};for(j in elements)if(elements[j])text[j]=elements[j].innerText||elements[j].textContent;if(text.price){text.price=findPrice(text.price);if(typeof text.price==='object')text.price=(text.quantityPrice=text.price)[0][1];}if(text.salePrice){text.salePrice=findPrice(text.salePrice);if(typeof text.salePrice==='object')text.salePrice=(text.quantityPrice=text.salePrice)[0][1];}if(isOutsideLink){outsideLinks[id]=mergeObjects(outsideLinks[id],mergeObjects({href:href,elements:elements},text));this.defaultSort.push(href);}else{contentsInfo[id]=mergeObjects(contentsInfo[id],mergeObjects({href:href,elements:elements},text));this.defaultSort.push(id);}}}}for(i in outsideLinks){var prefix='outsideLink',suffix=0;while(contentsInfo[prefix+suffix])suffix++;contentsInfo[prefix+suffix]=outsideLinks[i];this.defaultSort[this.defaultSort.indexOf(i)]=prefix+suffix;}this.items=contentsInfo;};function scDynamicTable(id,numberToShow,controlsClass,showDefaultSort){scLog.log('Loading contents table from ID: '+id);var contents=new scContentsTable(id);if(!contents.table){scLog.warn('Unable to load contents table');return null;}this.container=document.getElementById('dynamicTable');this.contentsTable=contents;this.defaultSort=contents.defaultSort;this.items=contents.items;this.table=contents.table;this.controlsClass=controlsClass||'controls';this.sortedItems=[];this.controlsJumpToTable=true;this.sorts=[{name:"Default Sort",sortFunction:null},{name:"Price",sortFunction:function(a,b){var c=a.salePrice||a.price||0;d=b.salePrice||b.price||0;return c===d?0:c<d?-1:1;}},{name:"Name",sortFunction:function(a,b){var clean=/[^\w\d]/,c=a.name.replace(clean,''),d=b.name.replace(clean,'');return c===d?0:c<d?-1:1;}}];this.redraw=function(redrawMethod){for(var i=0,j=this.redrawFunctions.length;i<j;i++)this.redrawFunctions[i].call(this,redrawMethod);};this.arrangeTableCells=function(){var storedElements=[];for(var i=0,item;item=this.sortedItems[i];i++){var imageCellTemp=[],infoCellTemp=[],imageCell=item.elements.imageCell,infoCell=findParentByTagName(item.elements.name,'td');if(imageCell)while(imageCell.firstChild)imageCellTemp.push(imageCell.removeChild(imageCell.firstChild));while(infoCell.firstChild)infoCellTemp.push(infoCell.removeChild(infoCell.firstChild));storedElements.push({imageCell:imageCellTemp,infoCell:infoCellTemp});}for(var i=0,stored;stored=storedElements[i];i++){var elements=stored.imageCell;if(this.targetImageCells[i])for(var j=0,element;element=elements[j];j++)this.targetImageCells[i].appendChild(element);this.sortedItems[i].elements.imageCell=this.targetImageCells[i];elements=stored.infoCell;for(var j=0,element;element=elements[j];j++)this.targetInfoCells[i].appendChild(element);}};this.populateSortedItems=function(){this.sortedItems=[];for(var i=0,id;id=this.defaultSort[i];i++)this.sortedItems.push(this.items[id]);for(var i=0,sort;sort=this.sorts[i];i++)if(sort.name===this.currentSortMethod&&sort.sortFunction!==null)this.sortedItems.sort(sort.sortFunction);if(!this.currentSortForward)this.sortedItems.reverse();};this.sortHandler=function(e){var obj=getTarget(e),sortMethod=obj.getAttribute('sortMethod'),dynamicTable=this.dynamicTable;dynamicTable.currentSortForward=(dynamicTable.currentSortMethod===sortMethod)?!dynamicTable.currentSortForward:true;dynamicTable.currentSortMethod=sortMethod;dynamicTable.redraw('sort');};this.createControl=function(options){var link=document.createElement('a');link.href='';if(this.controlsJumpToTable){if(this.container.scrollIntoView)link.onclick=function(){this.dynamicTable.container.scrollIntoView();return false;};else link.href='#dynamicTable';}else{link.onclick=function(){return false;};}link.dynamicTable=this;if(options.text)link.appendChild(document.createTextNode(options.text));if(options.className)link.className=options.className;if(options.attributes)for(var i in options.attributes)link.setAttribute(i,options.attributes[i]);if(options.click)addListener(link,'click',options.click);return link;};this.empty=function(el){while(el.firstChild)el.removeChild(el.firstChild);};this.drawSortControls=function(){var sortControls=getElementsByClassName('sortControls'),li;for(var i=0,control;control=sortControls[i];i++){var separator=getElementsByClassName({startNode:control,className:'separator',onlyFindFirst:true});if(separator)control.removeChild(separator);this.empty(control);for(var j=0,len=this.sorts.length,sort;sort=this.sorts[j];j++){var classes=['sortLink'];if(sort.name===this.currentSortMethod){classes.push('chosen');classes.push(dynamicTable.currentSortForward?'ascending':'descending');}if(j===0)classes.push('first');else if(j===len)classes.push('last');var a=this.createControl({className:classes.join(' '),text:sort.name,attributes:{'sortMethod':sort.name},click:this.sortHandler});control.appendChild(a);if(separator&&j<len-1)control.appendChild(separator.cloneNode(true));}}};this.storeViewingOptions=function(){var page={},temp={};for(var i=0,info;info=this.viewInformation[i];i++)temp[info]=this[info];page[SC.getPageId()]=temp;mergeObjects(this.viewingOptions,page);this.persist.set(this.container.id,JSON.stringify(this.viewingOptions));};this.loadViewingOptions=function(){scLog.log('Attempting to load options from database...');this.persist.get(this.container.id,function(ok,val){function reset(dt){dt.viewingOptions={};dt.persist.set(dt.container.id,'{}');}if(ok){try{this.viewingOptions=eval('('+val+')')||{};var page=this.viewingOptions[SC.getPageId()];if(page){scLog.log('Page view information from database: '+JSON.stringify(page));mergeObjects(this,page);this.redraw('viewOptions');}}catch(e){scLog.warn('Database information corrupted... resetting database\n'+e.message);reset(this);}}else{scLog.warn('Unable to load data from database... creating empty database');reset(this);}},this);};this.init=function(){this.currentSortMethod=this.sorts[0].name;this.currentSortForward=true;scLog.log('Filling initial sort');this.populateSortedItems();scLog.log('Storing current positions of image and info cells');this.imageCells=[];this.infoCells=[];for(var i=0,item,id;(id=this.defaultSort[i])&&(item=this.items[id]);i++){var imageCell=item.elements.imageCell,infoCell=findParentByTagName(item.elements.name,'td',true);if(imageCell){this.imageCells.push(imageCell);imageCell.setAttribute('pageId',id);}this.infoCells.push(infoCell);infoCell.setAttribute('pageId',id);}this.targetImageCells=this.imageCells;this.targetInfoCells=this.infoCells;scLog.log('Drawing sort controls');this.drawSortControls();this.redrawFunctions=[this.populateSortedItems,this.drawSortControls,this.arrangeTableCells];for(var i=0,controls=getElementsByClassName({className:this.controlsClass,startNode:this.container}),control;control=controls[i];i++){addListener(control,'mousedown',SC.killDefault);addListener(control,'selectstart',SC.killDefault);}addClass(this.container,'dynamicTableStarted');this.viewInformation=['currentSortMethod','currentSortForward'];if(window.scDynamicTables)window.scDynamicTables.push(this);else window.scDynamicTables=[this];window.scDynamicTableBeforeUnload=function(){for(var i=0,dt;dt=scDynamicTables[i];i++)try{if(dt.persist)dt.storeViewingOptions();}catch(e){scLog.warn('Error storing to Persist storage');}};window.scDynamicTableAfterLoad=function(){for(var i=0,dt;dt=scDynamicTables[i];i++){try{if(!dt.persist)dt.persist=new Persist.Store(dt.container.id);dt.loadViewingOptions();}catch(e){scLog.warn('Error creating the Persist storage: '+e.message);}}};if(!/MSIE/.test(navigator.userAgent)){try{this.persist=new Persist.Store(this.container.id);this.loadViewingOptions();}catch(e){scLog.warn('Error creating the Persist storage: '+e.message);}scLog.log('Viewing options loaded before page load');}else{addListener(window,'load',window.scDynamicTableAfterLoad);}addListener(window,'beforeunload',window.scDynamicTableBeforeUnload);};}scDynamicTable.prototype.startPaging=function(numberOfRows){this.pagingRows=numberOfRows||2;if(typeof this.isViewAll==='undefined')this.isViewAll=false;this.rowContainsData=function(tr){var tds=tr.getElementsByTagName('td');for(var i=0,td;td=tds[i];i++){for(var j=1,dataCells;dataCells=arguments[j];j++)for(var k=0,cell;cell=dataCells[k];k++)if(td===cell)return true;}return false;};this.drawPageControls=function(){var pageControls=getElementsByClassName('pageOf');for(var i=0,control;control=pageControls[i];i++){var hidden=getElementsByClassName({startNode:control,className:'hidden',onlyFindFirst:true});if(this.isViewAll||this.pageNumberMax===1){if(!hidden){hidden=document.createElement('span');hidden.style.display='none';hidden.className='hidden';while(control.firstChild)hidden.appendChild(control.firstChild);control.appendChild(hidden);control.appendChild(document.createTextNode(' Viewing all '));}}else{if(hidden){hidden=control.removeChild(hidden);this.empty(control);while(hidden.firstChild)control.appendChild(hidden.firstChild);}var current=getElementsByClassName({startNode:control,className:'currentPageNumber',onlyFindFirst:true}),last=getElementsByClassName({startNode:control,className:'lastPageNumber',onlyFindFirst:true});if(current&&last){this.empty(current);current.appendChild(document.createTextNode(this.pageNumber));this.empty(last);last.appendChild(document.createTextNode(this.pageNumberMax));}else{this.empty(control);var span=document.createElement('span');span.className='currentPageNumber';span.appendChild(document.createTextNode(this.pageNumber));control.appendChild(span);control.appendChild(document.createTextNode(' of '));span=document.createElement('span');span.className='lastPageNumber';span.appendChild(document.createTextNode(this.pageNumberMax));control.appendChild(span);}}}var previousLinks=getElementsByClassName('previousPage');for(var i=0,link;link=previousLinks[i];i++){if(this.pageNumberMax===1||this.isViewAll)addClass(link,'hidden');else removeClass(link,'hidden');if(this.pageNumber===1)addClass(link,'disabled');else removeClass(link,'disabled');}var nextLinks=getElementsByClassName('nextPage');for(var i=0,link;link=nextLinks[i];i++){if(this.pageNumberMax===1||this.isViewAll)addClass(link,'hidden');else removeClass(link,'hidden');if(this.pageNumber===this.pageNumberMax)addClass(link,'disabled');else removeClass(link,'disabled');}var pageNumbers=getElementsByClassName('pageNumbers'),pageNumberClick=function(e){var obj=getTarget(e),dt=null;if(obj&&(dt=obj.dynamicTable))dt.switchPage(obj.getAttribute('pageNumber'));},viewAllClick=function(e){var obj=getTarget(e),dt=null;if(obj&&(dt=obj.dynamicTable))dt.viewAll();};for(var i=0,control;control=pageNumbers[i];i++){var separator=getElementsByClassName({startNode:control,className:'separator',onlyFindFirst:true});if(separator)control.removeChild(separator);this.empty(control);for(var j=0,k=this.pageNumberMax;j<k;j++){var link=this.createControl({text:j+1,attributes:{'pageNumber':j+1},className:(this.pageNumber===j+1)?'chosen':'',click:pageNumberClick});control.appendChild(link);if(separator&&k>1)control.appendChild(separator.cloneNode(true));}var viewAllLink=this.createControl({text:'View All',className:this.isViewAll?'chosen':'',click:viewAllClick});control.appendChild(viewAllLink);}var pagesCells=getElementsByClassName({startNode:this.container,className:'pagesCell'});for(var i=0,cell;cell=pagesCells[i];i++){if(this.pageNumberMax===1)addClass(cell,'disabled');else removeClass(cell,'disabled');}var rangeControls=getElementsByClassName('range'),itemsPerPage=Math.ceil(this.sortedItems.length/this.pageNumberMax),range=this.isViewAll?'1 - '+this.sortedItems.length:this.pageNumber!==this.pageNumberMax?((itemsPerPage*(this.pageNumber-1))+1)+' - '+(itemsPerPage*this.pageNumber):((itemsPerPage*(this.pageNumberMax-1))+1)+' - '+this.sortedItems.length;for(var i=0,control;control=rangeControls[i];i++){this.empty(control);control.appendChild(document.createTextNode(range));}var numberOfItemsControls=getElementsByClassName('numberOfItems');for(var i=0,control;control=numberOfItemsControls[i];i++){this.empty(control);control.appendChild(document.createTextNode(this.sortedItems.length));}};this.pagingRedraw=function(calledBy){if(calledBy!=='viewOptions')this.pageNumber=0;this.switchPage();};this.switchPage=function(pageNum){if(arguments.length>0)this.isViewAll=false;var tempPageNum=Math.max((typeof pageNum!=='undefined'?pageNum:this.pageNumber)-1,0),pageNum=typeof tempPageNum==='string'?parseInt(tempPageNum):tempPageNum,rows=this.contentsTable.table.tBodies[0].rows,dataRowNumber=0,numberOfRowsPerItem=(this.imageCells.length>0?2:1),startRow=(this.pagingRows*pageNum)*numberOfRowsPerItem,endRow=(this.pagingRows*(pageNum+1))*numberOfRowsPerItem;for(var i=0,row;row=rows[i];i++){var isImageRow=this.rowContainsData(row,this.imageCells),isInfoRow=this.rowContainsData(row,this.infoCells);if(!this.isViewAll){row.style.display=(dataRowNumber>=startRow&&dataRowNumber<endRow)?'':'none';if(isInfoRow){if(dataRowNumber+1>=endRow)addClass(row,'lastPagingRow');else removeClass(row,'lastPagingRow');}if(!isImageRow&&!isInfoRow&&dataRowNumber===startRow)row.style.display='none';}if(isImageRow||isInfoRow)dataRowNumber++;}this.pageNumber=this.isViewAll?0:pageNum+1;this.pageNumberMax=Math.ceil((dataRowNumber/ numberOfRowsPerItem) /this.pagingRows);this.drawPageControls();};this.previousPage=function(e){var tgt=e?getTarget(e):false,dt=tgt?tgt.dynamicTable:this;if(dt&&!dt.isViewAll&&dt.pageNumber>1)dt.switchPage(dt.pageNumber-1);};this.nextPage=function(e){var tgt=e?getTarget(e):false,dt=tgt?tgt.dynamicTable:this;if(dt&&!dt.isViewAll&&dt.pageNumber<dt.pageNumberMax)dt.switchPage(dt.pageNumber+1);};this.resetRows=function(){var rows=this.contentsTable.table.tBodies[0].rows;for(var i=0,row;row=rows[i];i++){removeClass(row,'lastPagingRow');row.style.display='';}};this.viewAll=function(){this.resetRows();this.isViewAll=true;this.pageNumber=0;this.drawPageControls();};var previousLinks=getElementsByClassName('previousPage'),nextLinks=getElementsByClassName('nextPage'),previousAndNextLinks=previousLinks.concat(nextLinks),previousTest=/\bpreviousPage\b/;for(var i=0,link;link=previousAndNextLinks[i];i++){var isPrevious=previousTest.test(link.className);if(isPrevious)addClass(link,'disabled');var a=this.createControl({className:link.className,click:isPrevious?this.previousPage:this.nextPage});while(link.firstChild)a.appendChild(link.firstChild);link.parentNode.replaceChild(a,link);}var imageRowHeight=0,infoRowHeight=0;for(var rows=this.contentsTable.table.tBodies[0].rows,i=0,row;row=rows[i];i++){if(this.rowContainsData(row,this.imageCells)){imageRowHeight=Math.max(imageRowHeight,row.offsetHeight);}else if(this.rowContainsData(row,this.infoCells)){infoRowHeight=Math.max(infoRowHeight,row.offsetHeight);}}for(var rows=this.contentsTable.table.tBodies[0].rows,i=0,row;row=rows[i];i++){if(this.rowContainsData(row,this.imageCells)){for(var j=0,cells=row.getElementsByTagName('td'),cell;cell=cells[j];j++){cell.style.height=imageRowHeight+'px';if(document.all){cell.style.height=(imageRowHeight-(cell.offsetHeight-imageRowHeight))+'px';}}}else if(this.rowContainsData(row,this.infoCells)){for(var j=0,cells=row.getElementsByTagName('td'),cell;cell=cells[j];j++){cell.style.height=infoRowHeight+'px';if(document.all)cell.style.height=(infoRowHeight-(cell.offsetHeight-infoRowHeight))+'px';}}}this.redrawFunctions.push(this.pagingRedraw);this.viewInformation=this.viewInformation.concat(['isViewAll','pageNumber']);this.pagingStarted=true;addClass(this.container,'pagingStarted');if(typeof this.pageNumber==='undefined')this.pageNumber=0;if(this.isViewAll)this.switchPage();else this.switchPage(this.pageNumber);};scDynamicTable.prototype.endPaging=function(){for(var pageNumbers=getElementsByClassName(['pageNumbers','previousPage','nextPage']),i=0,el;el=pageNumbers[i];i++)el.style.visibility='hidden';this.viewAll();this.viewAll=null;this.resetRows=null;this.pagingStarted=false;this.pagingRows=null;this.pageNumber=null;this.pageNumberMax=null;this.rowContainsData=null;this.drawPageControls=null;this.switchPage=null;this.previousPage=null;this.nextPage=null;var isViewAllIndex=this.viewInformation.indexOf('isViewAll'),pageNumberIndex=this.viewInformation.indexOf('pageNumber');this.viewInformation=this.viewInformation.slice(isViewAllIndex,isViewAllIndex+1);this.viewInformation=this.viewInformation.slice(pageNumberIndex,pageNumberIndex+1);};
