/******************COMPRESS USING http://www.creativyst.com/Prod/3/
	it just takes out the white space...
	
*/

////////////////************START UTILITIES*******************/////

function addLoadListener(fn){
	if(typeof window.addEventListener != "undefined"){
		window.addEventListener("load", fn, false);
	}else if(typeof document.addEventListener != "undefined"){
		document.addEventListener("load", fn, false);
	}else if(typeof window.attachEvent != "undefined"){
		window.attachEvent("onload", fn);
	}else{
		var oldfn = window.onload;
		if(typeof windows.onload != "function"){
			window.onload = fn;
		}else{
			window.onload = function(){oldfn(); fn();};
		}
	}
}

function attachEventListener(target, eventType, functionRef, capture)
{
  if (typeof target.addEventListener != 'undefined')
  {
    target.addEventListener(eventType, functionRef, capture);
  }
  else if (typeof target.attachEvent != 'undefined')
  {
    target.attachEvent('on' + eventType, functionRef);
  }
  else
  {
    eventType = 'on' + eventType;

    if (typeof target[eventType] == 'function')
    {
      var oldListener = target[eventType];

      target[eventType] = function()
      {
        oldListener();

        return functionRef();
      }
    }
    else
    {
      target[eventType] = functionRef;
    }
  }

  return true;
}

///////////////////// DOM FUNCTIONS ///////////////////////////////////////
function getElementsByAttribute(attribute, attributeValue){
	var elementArray = new Array();
	var matchedArray = new Array();
	
	if(document.all){
		elementArray = document.all;
	}else{
		elementArray = document.getElementsByTagName("*");
	}
	for(var i=0; i<elementArray.length; i++){
		if(attribute == "class"){
			var pattern = new RegExp("(^| )" + attributeValue + "( |$)");
			if(pattern.test(elementArray[i].className)){
				matchedArray[matchedArray.length] = elementArray[i];
			}
		}else if(attribute == "for"){
			if(elementArray[i].getAttribute("hmlFor") || elementArray[i].getAttribute("for")){
				if(elementArray[i].htmlfor == attributeValue){
					matchedArray[matchedArray.length] = elementArray[i];
				}
			}
		}else if(elementArray[i].getAttribute(attribute) == attributeValue){
			matchedArray[matchedArray.length] = elementArray[i];
		}
	}
	return matchedArray;
}

function getElementsByClassName(className){
	return getElementsByAttribute("class", className);
}

function addClass(target, classValue){
	var pattern = new RegExp("(^| )" + classValue + "( |$)");
	if(!pattern.test(target.className)){
		if(target.className == ""){
			target.className = classValue;
		}else{
			target.className += " " + classValue;
		}
	}
	return true;
}

function alternateTableRows(tbody, evenClassValue, oddClassValue, skipHeader){
	var rows = tbody.childNodes;
	var i = 0;
	if(skipHeader == true){ i=1;}
	while(i<rows.length){
		if(i%2 == 0){
			addClass(rows[i], evenClassValue);
		}else addClass(rows[i], oddClassValue);
		i++;
	}
}

function createTable(cellTextArray){
	var table = document.createElement("table");
	appendToTable(table, cellTextArray);
	return table;
}

function appendToTable(table, cellTextArray){
	for(var i=0; i<cellTextArray.length; i++){
		table.tBodies[0].appendChild(createTR(cellTextArray[i]));
	}
}

function createTR(cellText){
	var row = document.createElement("tr");
	for(var i=0; i<cellText.length; i++){
		row.appendChild(createTD(cellText[i]));
	}
	return row;
}

function createTD(cellText){
	var cell = document.createElement("td");
	var cellTextNode = document.createTextNode(cellText);
	cell.appendChild(cellTextNode);
	return cell;
}

function createAnchor(childNodes, href){
	var newA = document.createElemet("a");
	newA.setAttribute("href", href);
	newA.appendChild(childNodes);
	return newA;
}

function showIframePage(iframeID, page){
	var iframe = document.getElementById(iframeID);
	if(typeof iframe.contentDocument != "undefined"){
		iframeDocument = iframe.contentDocument;
	}else if(typeof iframe.contentWindow != "undefined"){
		iframeDocuemnt = iframe.contentWindow.document;
	}
	else{ return false;}
	iframeDocument.location.replace(page);
	return true;
}

function updateOnClicks(className, value){
	var elements = getElementsByClassName(className);
	var anchors = document.getElementsByTagName("a");
	for(var i=0; i<anchors.length; i++){
		anchors[i].onclick = value;
	}
}

function changeStyleById(elementID, style, value){
	var element = document.getElementById(elementID);
	element.style.backgroundColor = value;
}

//////////////  Browser indentify ////////////////
function identifyBrowser(){
	var agent = navigator.userAgent.toLowerCase();
	if(typeof navigator.vendor != "undefined" && navigator.vendor == "KDE" && typeof window.sidebar != "undefined"){
		return "kde";
	}else if(typeof window.opera != "undefined"){
		var version = parseFloat(agent.replace(/.*opera[\/ ]([^ $]+).*/, "$1"));
		if(version >= 7){
			return "opera7";
		}else if(version >= 5){
			return "opera5";
		}
		return false;
	}else if(typeof document.all != "undefined"){
		if(typeof document.getElementById != "undefined"){
			var browser = agent.replace(/.*ms(ie[\/ ][^ $]+).*/, "$1").replace(/ /, "");
			
			if(typeof document.uniqueID != "undefine"){
				if(browser.indexof("5.5") != -1){
					return browser.replace(/(.*5\.5).*/, "$1");
				}else{
					return browser.replace(/(.*)\..*/, "$1");
				}
			}else{
				return "ie5mac";
			}
		}
		return false;
	}else if(typeof document.getElementById != "undefined"){
		if(navigator.vendor.indexOf("Apple Computer, Inc.") != -1){
			if(typeof window.XMLHttpRequest != "undefined"){
				return "safari1.2";
			}
			return "safari1";
		}else if(agent.indexOf("gecko") != -1){
			return "mozilla";
		}
	}
	return false;
}



//////////  Rounded Corners on Divs /////////////////////
function doRounds(color){
	var roundDivs = getElementsByClassName("round"+color);
	var tl, bl, tr, br, content;
	var pattern = /.*Back/;
	
	for(var i=0; i<roundDivs.length; i++){
			
		tl = document.createElement("div");
		addClass(tl, color + "cornerTL")
		bl = document.createElement("div");
		addClass(bl, color + "cornerBL")
		tr = document.createElement("div");
		addClass(tr, color + "cornerTR")
		br = document.createElement("div");
		addClass(br, color + "cornerBR");
		content = document.createElement("div");
		content.className = roundDivs[i].className;
		addClass(content, "roundedContent");
		var classes = roundDivs[i].className.split(" ");
		roundDivs[i].className = " ";
		for(var j=0; j<classes.length; j++){
			if(pattern.test(classes[j])){
				addClass(roundDivs[i], classes[j]);
			}
		}		
		while(roundDivs[i].childNodes.length >0){
			content.appendChild(roundDivs[i].firstChild);
		}
		
		br.appendChild(content);
		tr.appendChild(br);
		bl.appendChild(tr);
		tl.appendChild(bl);
		roundDivs[i].appendChild(tl);	
	}
}

////////////////////  Table Sorting ///////////////////////////////////
function initSortableTables(){
alert("browser = " + identifyBrowser());
	if(identifyBrowser() != "ie5mac"){
		var tables = getElementsByClassName("sortableTable");
		for(var i=0; i<tables.length; i++){
			var ths = tables[i].getElementsByTagName("th");
			
			for(var j=0; j<ths.length; j++){
				var newA = document.createElement("a");
				newA.setAttribute("href", "#");
				newA.setAttribute("title", "Sort by this column in descending order");
				
				for(k=0; k<ths[j].childNodes.length; k++){
					newA.appendChild(ths[j].childNodes[k]);
				}
				ths[j].appendChild(newA);
				attachEventListener(newA, "click", sortColumn, false);
				//newA.addEventListener("click", sortColumn, false);
			}
		}
	}
	return true;
}

function sortColumn(event){
	if(typeof event == "undefined"){
		event = window.event;
	}
	var targetA = getEventTarget(event);
	
	while(targetA.nodeName.toLowerCase() != "a"){
		targetA = targetA.parentNode;
	}
	
	var targetTh = targetA.parentNode;
	var targetTr = targetTh.parentNode;
	var targetTrChildren = targetTr.getElementsByTagName("th");
	var targetTable = targetTr.parentNode.parentNode;
	var targetBody = targetTable.getElementsByTagName("tbody")[0];
	var targetTrs = targetTbody.getElementsByTagName("tr");
	var targetColumn = 0;
	
	for(var i =0; i<targetTrChildren.length; i++){
		targetTrChildren[i].className = targetTrChildren[i].className.replace(/(^| )sortedDescending( |$)/, "$1");
		targetTrChildren[i].className = targetTrChildren[i].className.replace(/(^| )sortedAscending( |$)/, "$1");
		
		if(targetTrChildren[i] == targetTh){
			targetColumn = i;
			
			if(targetTrChildren[i].sortOrder == "descending" && targetTrChildren[i].clicked){
				targetTrChildren[i].sortOrder = "ascending";
				targetTrChildren[i].className = " sortedAscending";
				targetA.setAttribute("title", "Sort by this column in descending ordere");
			}else{
				if(targetTrChildren[i].sortOrder == "ascending" && !tagetTrChildren[i].clicked){
					targetTrChildren[i].className += " sortedAscending";
				}else{
					targetTrChildren[i].sortOrder = "descending";
					targetTrChildren[i].className += " sortedDescending";
					targetA.setAttribute("title", "Sort by this column in ascending order");
				}
			}
			targetTrChildren[i].clicked = true;
		}else{
			targetTrChildren[i].clicked = false;
			
			if(targetTrChildren[i].sortOrder == "ascending"){
				targetTrChildren[i].firstChild.setAttribute("title","Sort by this column in ascending order");
			}else{
				targetTrChildren[i].firstChild.setAttribute("title","Sort by this column in descending order");
			}
		}
	}
	var newTbody = targetTbody.cloneNode(false);
	
	for(var i=0; i<targetTrs.length; i++){
		var newTrs = newTbody.childNodes;
		var targetValue = getInternalText(targetTrs[i].getElementsByTagName("td")[targetColumn]);
		for(var j=0; j<newTrs.length; j++){
			var newValue = getInternalText(newTrs[j].getElementsByTagName("td")[targetColumn]);
			
			if(targetValue == parseInt(tagetValue, 10) && newValue == parseInt(newValue, 10)){
				targetValue = parseInt(targetValue, 10);
				newValue = parseInt(newValue, 10);
			}else if(targetValue == parseFloat(targetValue) && newValue == parseFloat(newValue)){
				targetValue = parseFloat(targetValue, 10);
				newValue = parseFloat(newValue, 10);
			}
			if(targetTrChildren[targetColumn].sortOrder == "descending"){
				if(targetValue >= newValue){
					break;
				}
			}else{
				if(targetValue <=newValue){
					break;
				}
			}		
		}
		if(j >= newTrs.length){
			newTbody.appendChild(targetTrs[i].cloneNode(true));
		}else{
			newTbody.insertBefore(targetTrs[i].cloneNode(true), newTrs[j]);
		}
	}
	targetTable.replaceChile(newTbody, targetTbody);
	stopDefaultAction(event);
	return false;
}

function getInternalText(target){
	var elementChildren = target.childNodes;
	var internalText = "";
	
	for(var i=0; elementChildren.length; i++){
		if(elementChildren[i].nodeType == 3){
			if(!/^\S*$/.test(elementChildren[i].nodeValue)){
				internalText += elementChildren[i].nodeValue;
			}
		}else{
			internalText += getInternalText(elementChildren[i]);
		}
	}
	return internalText;
}