/* 
	standardista-table-sorting.min.js
	===============================================================
	Commerce Commission
	Standardista table sorting functions
	
	Some alterations made to suit the design and to validate for minification
	
	Please make any changes to the uncompressed version: standardista-table-sorting.max.js	
	Then recompress at: http://www.refresh-sf.com/yui ('minify only')	
	
	Last Updated: See SVN		
  ===============================================================
*/

var standardistaTableSorting={that:false,isOdd:false,sortColumnIndex:-1,lastAssignedId:0,newRows:-1,lastSortedTable:-1,init:function(){if(!document.getElementsByTagName){return}this.that=this;this.run()},run:function(){var tables=document.getElementsByTagName("table");for(var i=0;i<tables.length;i++){var thisTable=tables[i];if(css.elementHasClass(thisTable,"sortable")){this.makeSortable(thisTable)}}},makeSortable:function(table){if(!table.id){table.id="sortableTable"+this.lastAssignedId++}table.className=(table.className+" vert-enhanced");if(!table.tHead||!table.tHead.rows||0===table.tHead.rows.length){return}var row=table.tHead.rows[table.tHead.rows.length-1];for(var i=0;i<row.cells.length;i++){var spanInner=row.cells[i].getElementsByTagName("span")[0].getElementsByTagName("span")[0];var linkEl;if(row.cells[i].className.match("sortable")){linkEl=createElement("button");linkEl.onclick=this.headingClicked;linkEl.setAttribute("columnId",i);linkEl.title=("Sort table by "+spanInner.innerHTML+". ")}else{linkEl=createElement("span");linkEl.className="button"}var innerEls=spanInner.childNodes;for(var j=0;j<innerEls.length;j++){linkEl.appendChild(innerEls[j])}spanInner.appendChild(linkEl);var button_width=linkEl.offsetWidth;var th_offset=5;var th_width=(row.cells[i].offsetWidth-th_offset);if(linkEl.tagName.toLowerCase()=="button"){if(th_width>button_width){linkEl.style.width="100%"}else{if(button_width>th_width){linkEl.style.width=(row.cells[i].offsetWidth+"px")}}}var spanEl=createElement("span");spanEl.className="tableSortArrow";spanEl.appendChild(document.createTextNode("\u00A0\u00A0"));row.cells[i].appendChild(spanEl)}matchButtonHeights(row);if(css.elementHasClass(table,"autostripe")){this.isOdd=false}},headingClicked:function(e){var that=standardistaTableSorting.that;var linkEl=getEventTarget(e);var th=linkEl.parentNode.parentNode.parentNode;var tr=th.parentNode;var thead=tr.parentNode;var table=thead.parentNode;if(!table.tBodies||table.tBodies[0].rows.length<=1){return false}var column=linkEl.getAttribute("columnId")||th.cellIndex;var row=table.tBodies[0].rows;var row_len=row.length;for(var r=0;r<row_len;r++){var col;col=row[r].getElementsByTagName("td");col_len=col.length;for(var c=0;c<col_len;c++){var colClassName=col[c].className;if(c!=th.cellIndex){col[c].className=colClassName.replace("sorted","")}if(c==th.cellIndex){if(colClassName.indexOf("first")!=-1){col[c].className=("first sorted")}else{if(colClassName.indexOf("last")!=-1){col[c].className=("last sorted")}else{col[c].className=("sorted")}}}}}var arrows=css.getElementsByClass(th,"tableSortArrow","span");var previousSortOrder="";if(arrows.length>0){previousSortOrder=arrows[0].getAttribute("sortOrder")}var itm="";var rowNum=0;while(""==itm&&rowNum<table.tBodies[0].rows.length){itm=that.getInnerText(table.tBodies[0].rows[rowNum].cells[column]);rowNum++}var sortfn=that.determineSortFunction(itm);if(table.id==that.lastSortedTable&&column==that.sortColumnIndex){newRows=that.newRows;newRows.reverse()}else{that.sortColumnIndex=column;var newRows=new Array();for(var j=0;j<table.tBodies[0].rows.length;j++){newRows[j]=table.tBodies[0].rows[j]}newRows.sort(sortfn)}that.moveRows(table,newRows);that.newRows=newRows;that.lastSortedTable=table.id;var arrows=css.getElementsByClass(tr,"tableSortArrow","span");for(var j=0;j<arrows.length;j++){var arrowParent=arrows[j].parentNode;arrowParent.removeChild(arrows[j]);arrowParent.className=arrowParent.className.replace(" sortasc","");arrowParent.className=arrowParent.className.replace(" sortdesc","");arrowParent.className=arrowParent.className.replace("sortasc","");arrowParent.className=arrowParent.className.replace("sortdesc","");arrowParent.className=arrowParent.className.replace(" first-asc","");arrowParent.className=arrowParent.className.replace("first-asc","");arrowParent.className=arrowParent.className.replace(" first-desc","");arrowParent.className=arrowParent.className.replace("first-desc","");arrowParent.className=arrowParent.className.replace(" last-asc","");arrowParent.className=arrowParent.className.replace("last-asc","");arrowParent.className=arrowParent.className.replace(" last-desc","");arrowParent.className=arrowParent.className.replace("last-desc","");arrowParent.className=arrowParent.className.replace(" asc","");arrowParent.className=arrowParent.className.replace("asc","");arrowParent.className=arrowParent.className.replace(" desc","");arrowParent.className=arrowParent.className.replace("desc","")}var spanEl=createElement("span");spanEl.className="tableSortArrow";if(null===previousSortOrder||""==previousSortOrder||"DESC"==previousSortOrder){sort_asc(th,spanEl)}else{sort_desc(th,spanEl)}th.appendChild(spanEl);return false},getInnerText:function(el){if("string"==typeof el||"undefined"==typeof el){return el}if(el.innerText){return el.innerText}var str=el.getAttribute("standardistaTableSortingInnerText");if(null!==str&&""!=str){return str}str="";var cs=el.childNodes;var l=cs.length;for(var i=0;i<l;i++){if(1==cs[i].nodeType){str+=this.getInnerText(cs[i]);break}else{if(3==cs[i].nodeType){str+=cs[i].nodeValue;break}}}el.setAttribute("standardistaTableSortingInnerText",str);return str},determineSortFunction:function(itm){var sortfn=this.sortCaseInsensitive;if(itm.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/)){sortfn=this.sortDate}if(itm.match(/^\d\d[\/-]\d\d[\/-]\d\d$/)){sortfn=this.sortDate}if(itm.match(/^[£$]/)){sortfn=this.sortCurrency}if(itm.match(/^\d?\.?\d+$/)){sortfn=this.sortNumeric}if(itm.match(/^[+-]?\d*\.?\d+([eE]-?\d+)?$/)){sortfn=this.sortNumeric}if(itm.match(/^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$/)){sortfn=this.sortIP}return sortfn},sortCaseInsensitive:function(a,b){var that=standardistaTableSorting.that;var aa=that.getInnerText(a.cells[that.sortColumnIndex]).toLowerCase();var bb=that.getInnerText(b.cells[that.sortColumnIndex]).toLowerCase();if(aa==bb){return 0}else{if(aa<bb){return -1}else{return 1}}},sortDate:function(a,b){var that=standardistaTableSorting.that;var aa=that.getInnerText(a.cells[that.sortColumnIndex]);var bb=that.getInnerText(b.cells[that.sortColumnIndex]);var dt1,dt2,yr=-1;if(aa.length==10){dt1=aa.substr(6,4)+aa.substr(3,2)+aa.substr(0,2)}else{yr=aa.substr(6,2);if(parseInt(yr,10)<50){yr="20"+yr}else{yr="19"+yr}dt1=yr+aa.substr(3,2)+aa.substr(0,2)}if(bb.length==10){dt2=bb.substr(6,4)+bb.substr(3,2)+bb.substr(0,2)}else{yr=bb.substr(6,2);if(parseInt(yr,10)<50){yr="20"+yr}else{yr="19"+yr}dt2=yr+bb.substr(3,2)+bb.substr(0,2)}if(dt1==dt2){return 0}else{if(dt1<dt2){return -1}}return 1},sortCurrency:function(a,b){var that=standardistaTableSorting.that;var aa=that.getInnerText(a.cells[that.sortColumnIndex]).replace(/[^0-9.]/g,"");var bb=that.getInnerText(b.cells[that.sortColumnIndex]).replace(/[^0-9.]/g,"");return parseFloat(aa)-parseFloat(bb)},sortNumeric:function(a,b){var that=standardistaTableSorting.that;var aa=parseFloat(that.getInnerText(a.cells[that.sortColumnIndex]));if(isNaN(aa)){aa=0}var bb=parseFloat(that.getInnerText(b.cells[that.sortColumnIndex]));if(isNaN(bb)){bb=0}return aa-bb},makeStandardIPAddress:function(val){var vals=val.split(".");for(x in vals){val=vals[x];while(3>val.length){val="0"+val}vals[x]=val}val=vals.join(".");return val},sortIP:function(a,b){var that=standardistaTableSorting.that;var aa=that.makeStandardIPAddress(that.getInnerText(a.cells[that.sortColumnIndex]).toLowerCase());var bb=that.makeStandardIPAddress(that.getInnerText(b.cells[that.sortColumnIndex]).toLowerCase());if(aa==bb){return 0}else{if(aa<bb){return -1}else{return 1}}},moveRows:function(table,newRows){this.isOdd=false;for(var i=0;i<newRows.length;i++){var rowItem=newRows[i];table.tBodies[0].appendChild(rowItem)}stripe_tables(table)},doStripe:function(rowItem){if(this.isOdd){css.addClassToElement(rowItem,"even")}else{css.removeClassFromElement(rowItem,"even")}this.isOdd=!this.isOdd}};function matchButtonHeights(row){var buttons=row.getElementsByTagName("button");var faux_buttons=row.getElementsByTagName("span");var button_max_height=0;var button_pad_bottom=7;var button_pad_bottom_new=0;var button_height=0;var faux_button_height;for(var b=0;b<buttons.length;b++){button_height=(buttons[b].offsetHeight+button_pad_bottom);if(button_height>button_max_height){button_max_height=button_height}}if(button_max_height>0){for(var c=0;c<buttons.length;c++){button_height=buttons[c].offsetHeight;if(button_height<button_max_height){button_pad_bottom_new=(button_max_height-button_height)}buttons[c].style.paddingBottom=(button_pad_bottom_new+"px")}for(var f=0;f<faux_buttons.length;f++){if(faux_buttons[f].className.match("button")){faux_button_height=faux_buttons[f].offsetHeight;if(faux_button_height<button_max_height){button_pad_bottom_new=(button_max_height-faux_button_height)}faux_buttons[f].setAttribute("style","padding-bottom:"+button_pad_bottom_new+"px")}}}}function standardistaTableSortingInit(){standardistaTableSorting.init();sort_initial()}function sort_initial(){var table=document.getElementsByTagName("table");for(var t=0;t<table.length;t++){if(table[t].className.match("sortable")){var th=table[t].getElementsByTagName("thead")[0].getElementsByTagName("th");for(var h=0;h<th.length;h++){if(th[h].className.match("sortasc")){util_fireEvent(th[h].getElementsByTagName("button")[0],"click")}else{if(th[h].className.match("sortdesc")){util_fireEvent(th[h].getElementsByTagName("button")[0],"click");util_fireEvent(th[h].getElementsByTagName("button")[0],"click")}}}}}}function sort_asc(th,spanEl){spanEl.setAttribute("sortOrder","ASC");var th_oldClass=th.className;switch(th_oldClass){case"first sortable first-desc":case"last sortable last-desc":case"sortable desc":th.className=th_oldClass.replace("desc","asc");break;case"first sortable":th.className=(th_oldClass+" first-asc");break;case"last sortable":th.className=(th_oldClass+" last-asc");break;case"sortable":th.className=(th_oldClass+" asc");break}}function sort_desc(th,spanEl){spanEl.setAttribute("sortOrder","DESC");var th_oldClass=th.className;switch(th_oldClass){case"first sortable first-asc":case"last sortable last-asc":case"sortable asc":th.className=th_oldClass.replace("asc","desc");break;case"first sortable":th.className=(th_oldClass+" first-desc");break;case"last sortable":th.className=(th_oldClass+" last-desc");break;case"sortable":th.className=(th_oldClass+" desc");break}};
