// Table sorter script, thanks to Geir Bækholt for this.
// DOM table sorter originally made by Paul Sowden 


var tablename = 'sortable'
        
function compare(a,b)
{
    au = new String(a);
    bu = new String(b);

    if (au.charAt(4) != '-' && au.charAt(7) != '-')
    {
    var an = parseFloat(au)
    var bn = parseFloat(bu)
    }
    if (isNaN(an) || isNaN(bn))
        {as = au.toLowerCase()
         bs = bu.toLowerCase()
        if (as > bs)
            {return 1;}
        else
            {return -1;}
        }
    else {
    return an - bn;
    }
}



function getConcatenedTextContent(node) {
	var _result = "";
	if (node == null) {
		return _result;
	}
	var childrens = node.childNodes;
	var i = 0;
	while (i < childrens.length) {
		var child = childrens.item(i);
		switch (child.nodeType) {
			case 1: // ELEMENT_NODE
			case 5: // ENTITY_REFERENCE_NODE
				_result += getConcatenedTextContent(child);
				break;
			case 3: // TEXT_NODE
			case 2: // ATTRIBUTE_NODE
			case 4: // CDATA_SECTION_NODE
				_result += child.nodeValue;
				break;
			case 6: // ENTITY_NODE
			case 7: // PROCESSING_INSTRUCTION_NODE
			case 8: // COMMENT_NODE
			case 9: // DOCUMENT_NODE
			case 10: // DOCUMENT_TYPE_NODE
			case 11: // DOCUMENT_FRAGMENT_NODE
			case 12: // NOTATION_NODE
			    // skip
			    break;
		}
		i ++;
	}
	return _result;
}



function sort(e) {
	var el = window.event ? window.event.srcElement : e.currentTarget;

	// a pretty ugly sort function, but it works nonetheless
	var a = new Array();
	//var name = el.firstChild.nodeValue || el.parentNode.firstChild.nodeValue;
    // check if the image or the th is clicked. Proceed to parent id it is the image
    if (el.nodeName == 'IMG') el = el.parentNode;
    var name = el.firstChild.nodeValue;
	var dad = el.parentNode;
	var node;
    
    // kill all arrows
    for (var im = 0; (node = dad.getElementsByTagName("th").item(im)); im++) {
		if (node.lastChild.nodeName == 'IMG')
        {
        var arrow = node.lastChild
        node.removeChild(arrow)
        }
	}
    
	for (var i = 0; (node = dad.getElementsByTagName("th").item(i)); i++) {
		if (node.firstChild.nodeValue == name){
        newarrow = document.createElement('IMG');
        newarrow.setAttribute('src','arrowUp.gif');
        node.appendChild(newarrow);
        break}
	}

	var tbody = dad.parentNode.parentNode.getElementsByTagName("tbody").item(0);
	for (var j = 0; (node = tbody.getElementsByTagName("tr").item(j)); j++) {

		// crude way to sort by surname and name after first choice
		a[j] = new Array();
		a[j][0] = getConcatenedTextContent(node.getElementsByTagName("td").item(i));
		a[j][1] = getConcatenedTextContent(node.getElementsByTagName("td").item(1));
        a[j][2] = getConcatenedTextContent(node.getElementsByTagName("td").item(0));		
		a[j][3] = node;
	}

	if (a.length > 1) {
	
    	a.sort(compare);

    	// not a perfect way to check, but hell, it suits me fine
    	if (a[0][0] == getConcatenedTextContent(tbody.getElementsByTagName("tr").item(0).getElementsByTagName("td").item(i))
	    	&& a[1][0] == getConcatenedTextContent(tbody.getElementsByTagName("tr").item(1).getElementsByTagName("td").item(i))) 
                {a.reverse();
                el.getElementsByTagName('img').item(0).setAttribute('src','arrowDown.gif');
                }

    }
	
	for (var j = 0; j < a.length; j++) {
		tbody.appendChild(a[j][3]);
	}
}

function init(e) {
    if (document.getElementById(tablename))
        {
	    var thead = document.getElementById(tablename).getElementsByTagName("thead").item(0);
	    var node;
	    for (var i = 0; (node = thead.getElementsByTagName("th").item(i)); i++) {
		    if (node.addEventListener) node.addEventListener("click",sort,false);
		    else if (node.attachEvent) node.attachEvent("onclick",sort);
	    }
    }
    
 }

// initialize the sorter functions 
// add stuff to secure it from broken DOM-implanetations or missing objects.
   
    
    	
        //	p.appendChild(document.createTextNode("Change sorting by clicking on each individual heading."));
	    // document.getElementById(tablename).parentNode.insertBefore(p,document.getElementById(tablename));
        

        if (window.addEventListener) window.addEventListener("load",init,false);
        else if (window.attachEvent) window.attachEvent("onload",init);

       
