
var dom = (document.getElementsByTagName) ? true : false;
var ie5 = (document.getElementsByTagName && document.all) ? true : false;
var arrowUp, arrowDown;

var oldIndex='';
var oldColor='';

if (ie5 || dom)
	initSortTable();

function initSortTable() {
	arrowUp = document.createElement("SPAN");
	var upArrowImg = document.createElement("IMG");
	upArrowImg.src='/gfx/ima.gif';
	upArrowImg.height=1;
	upArrowImg.width=1;
	arrowUp.appendChild(upArrowImg);
	arrowUp.className = "arrow";

	arrowDown = document.createElement("SPAN");
	var downArrowImg = document.createElement("IMG");
	downArrowImg.src='/gfx/malo.gif';
	downArrowImg.height=1;
	downArrowImg.width=1;
	arrowDown.appendChild(downArrowImg);
	arrowDown.className = "arrow";
}

function sortTable(tableNode, nCol, bDesc, sType) {
	var tBody = tableNode.tBodies[0];
	var trs = tBody.rows;
	var trl= trs.length;
	var a = new Array();
	
	for (var i = 0; i < trl; i++) {
		a[i] = trs[i];
	}
	
	var start = new Date;
	//window.status = "Sorting data...";
	a.sort(compareByColumn(nCol,bDesc,sType));
	//window.status = "Sorting data done";
	
	for (var i = 0; i < trl; i++) {
          if ((i%2)==0) {
            a[i].bgColor='#F2F6E7';
          } else {
            a[i].bgColor='#E6EDF3';
          }
          
		tBody.appendChild(a[i]);
		//window.status = "Updating row " + (i + 1) + " of " + trl +
						//" (Time spent: " + (new Date - start) + "ms)";
	}
	
	// check for onsort
	if (typeof tableNode.onsort == "string")
		tableNode.onsort = new Function("", tableNode.onsort);
	if (typeof tableNode.onsort == "function")
		tableNode.onsort();
}

function CaseInsensitiveString(s) {
	return String(s).toUpperCase();
}

function parseDate(s) {
	return Date.parse(s.replace(/\-/g, '/'));
}

/* alternative to number function
 * This one is slower but can handle non numerical characters in
 * the string allow strings like the follow (as well as a lot more)
 * to be used:
 *    "1,000,000"
 *    "1 000 000"
 *    "100cm"
 */

function toNumber(s) {
    return Number(s.replace(/[^0-9\.]/g, ""));
}

function compareByColumn(nCol, bDescending, sType) {
	var c = nCol;
	var d = bDescending;
	
	var fTypeCast = String;
	
	if (sType == "Number")
		fTypeCast = Number;
	else if (sType == "Date")
		fTypeCast = parseDate;
	else if (sType == "CaseInsensitiveString")
		fTypeCast = CaseInsensitiveString;

	return function (n1, n2) {
		if (fTypeCast(getInnerText(n1.cells[c])) < fTypeCast(getInnerText(n2.cells[c])))
			return d ? -1 : +1;
		if (fTypeCast(getInnerText(n1.cells[c])) > fTypeCast(getInnerText(n2.cells[c])))
			return d ? +1 : -1;
		return 0;
	};
}

function sortColumn(searchfield) {
	// changed 19052005
	//var el = window.frames['productsIFrame'].document.getElementById(searchfield);
	var elh = document.getElementById('h'+searchfield);
        var tHeadParent = document.getElementById('mainHead');
	
	if (tHeadParent == null) {
		return;
        }
        		
	if (elh != null) {
		var p = elh.parentNode;
		var i;

		// typecast to Boolean
		elh._descending = !Boolean(elh._descending);

		if (tHeadParent.arrow != null) {
			if (tHeadParent.arrow.parentNode != elh) {
				tHeadParent.arrow.parentNode._descending = null;	//reset sort order		
			}
			tHeadParent.arrow.parentNode.removeChild(tHeadParent.arrow);
		}

		if (elh._descending)
			tHeadParent.arrow = arrowUp.cloneNode(true);
		else
			tHeadParent.arrow = arrowDown.cloneNode(true);

                elh.appendChild(tHeadParent.arrow);

		// get the index of the td
		var cells = p.cells;
		var l = cells.length;
		for (i = 0; i < l; i++) {
			if (cells[i] == elh) break;
		}

		// changed 19052005
		//var table = window.frames['productsIFrame'].document.getElementById('innerTable');
		prodFrame = document.getElementById('productsIFrame').contentWindow;
		if(prodFrame){
			prodFrame = document.getElementById('productsIFrame');
			prodDoc = (prodFrame.contentWindow || prodFrame.contentDocument);
			if(prodDoc.document){
				prodDoc = prodDoc.document;
			}
			var table = prodDoc.getElementById('innerTable');
		}else{
			var table = window.frames['productsIFrame'].document.getElementById('innerTable');
		}
		// end changed
		var fieldType='';
		if (searchfield=='price') {
		  fieldType='Number';
		}
		
		sortTable(table,i,elh._descending,fieldType);
	}
}


function getInnerText(el) {
	if (ie5) return el.innerText;	//Not needed but it is faster
	
	var str = "";
	
	var cs = el.childNodes;
	var l = cs.length;
	for (var i = 0; i < l; i++) {
		switch (cs[i].nodeType) {
			case 1: //ELEMENT_NODE
				str += getInnerText(cs[i]);
				break;
			case 3:	//TEXT_NODE
				str += cs[i].nodeValue;
				break;
		}
		
	}
	
	return str;
}

function changeColor(index) {
  if ((oldIndex!=null)&&(oldIndex!='')) {
    document.getElementById('prod'+oldIndex).bgColor=oldColor;
  }
  oldColor=document.getElementById('prod'+index).bgColor;
  document.getElementById('prod'+index).bgColor='#ffffff';
  oldIndex=index;
}

function resetColor(index) {
  if ((oldIndex!=null)&&(oldIndex!='')&&(oldIndex==index)) {
    document.getElementById('prod'+oldIndex).bgColor=oldColor;
    oldColor='';
    oldIndex='';
  }  
}
