function foreach(array,func){
	for (var i= 0; i< array.length;i++){func(array[i],i);}
}

function getTagsByClass(className,tagName){
    var dateSpans=new Array(0);
    foreach(document.getElementsByTagName(tagName),function(e){
         if(e.className.match(className)){dateSpans.push(e);};
    });
    return dateSpans
}
function setOnClickF(checked_color,default_color){
  var test="";
  var testcount=0
  function getColor(isChecked){
    if (isChecked){return checked_color;}
    else {return default_color;}
  }
  function eachbox(e){
    test+=e;
    testcount++;
    e.onclick=function(){
      this.parentNode.style.backgroundColor=getColor(this.checked);
    }
    e.onclick();
  }
  foreach(getTagsByClass("checkarea","input"),eachbox)
}
function meetingSearchF(){
  var checked_color="#FFFF88";
  var default_color="transparent";
  setOnClickF(checked_color,default_color);
}

registerPloneFunction(meetingSearchF) 
function compareYear(a,b)
{
//alert(""+a["num"]+" "+ b["num"]);
    if (a["num"] > b["num"])
        {return 1;}
    else
        {return -1;}
}
//              <input type="text" class="num" name="date" tal:attributes="value python:result.yearLineNum "/>
//              <input type="text" class="year" name="year" tal:attributes="value python:result.year "/>
//              <input type="text" class="type" name="type" tal:attributes="value string:yearline "/>


//              <input type="text" class="num" name="date" tal:attributes="value python:result.datenum "/>
//              <input type="text" class="year" name="year" tal:attributes="value python:result.year "/>
//              <input type="text" class="type" name="type" tal:attributes="value string:item "/>
var flags=["normal"];
function sortByDateTime(e) {
    var el = window.event ? window.event.srcElement : e.currentTarget;
    sortMethod(el);
}
function sortMethod(el) {

    // a pretty ugly sort function, but it works nonetheless
    var a = new Array();
    // check if the image or the th is clicked. Proceed to parent id it is the image
    // NOTE THAT nodeName IS UPPERCASE
    if (el.nodeName == 'IMG') el = el.parentNode;
    //var name = el.firstChild.nodeValue;
    // This is not very robust, it assumes there is an image as first node then text
    var name = el.childNodes.item(1).nodeValue;
    var dad = el.parentNode;
    var node;
    
    // kill all arrows
    for (var im = 0; (node = dad.getElementsByTagName("th").item(im)); im++) {
        // NOTE THAT nodeName IS IN UPPERCASE
        if (node.lastChild.nodeName == 'IMG')
        {
            lastindex = node.getElementsByTagName('img').length - 1;
            node.getElementsByTagName('img').item(lastindex).setAttribute('src',portal_url + '/arrowBlank.gif');
        }
    }
    
    for (var i = 0; (node = dad.getElementsByTagName("th").item(i)); i++) {
        var xre = new RegExp(/\bnosort\b/);
        // Make sure we are not messing with nosortable columns, then check second node.
        if (!xre.exec(node.className) && node.childNodes.item(1).nodeValue == name) 
        {
            //window.alert(node.childNodes.item(1).nodeValue;
            lastindex = node.getElementsByTagName('img').length -1;
            node.getElementsByTagName('img').item(lastindex).setAttribute('src',portal_url + '/arrowDown.gif');//arrowDown
            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;
        datas=node.getElementsByTagName("input");
        for (var k=0;(inputnode = node.getElementsByTagName("input").item(k)); k++){
            if (inputnode.className=="num"){
                a[j]["num"] = inputnode.value;
            }
            if (inputnode.className=="year"){
                a[j]["year"] = inputnode.value;
            }
            if (inputnode.className=="type"){
                a[j]["type"] = inputnode.value;
            }//yearLine
            if (inputnode.className=="numlast"){
                a[j]["numlast"] = inputnode.value;
            }//yearLine
        }
            if(a[j]["type"].match("yearLine") ){
             if(!flags[0].match("reverse")){
             a[j]["num"]= a[j]["numlast"];
}
            }
//                a[j]["isNormal"] = flags[0]!="reverse";
        
    }

    if (a.length > 1) {
	
        a.sort(compareYear);
        //flags[0]="normal";
        // 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))) {}
	    if(flags[0]=="reverse"){
            flags[0]="normal";
	    }
	    else
        {
            a.reverse();
            flags[0]="reverse";
            lastindex = el.getElementsByTagName('img').length - 1;
            el.getElementsByTagName('img').item(lastindex).setAttribute('src', portal_url + '/arrowUp.gif');
        }

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

function initalizeMeetingListSort(e) {
    var tbls = getTagsByClass('mschedule','table');//mschedule
    for (var t = 0; t < tbls.length; t++)
        {
        // elements of class="listing" can be sorted
        var re = new RegExp(/\blisting\b/)
        // elements of class="nosort" should not be sorted
        var xre = new RegExp(/\bnosort\b/)
        //if (re.exec(tbls[t].className) && !xre.exec(tbls[t].className))
        if (true)
        {
            try {
                var tablename = tbls[t].getAttribute('id');
                var thead = document.getElementById(tablename).getElementsByTagName("thead").item(0);
                var node;
                // set up blank spaceholder gifs
                blankarrow = document.createElement('img');
                blankarrow.setAttribute('src', portal_url + '/arrowBlank.gif');
                blankarrow.setAttribute('height',6);
                blankarrow.setAttribute('width',9);
                // the first sortable column should get an arrow initially.
                initialsort = false;
                for (var i = 0; (node = thead.getElementsByTagName("th").item(i)); i++) {
                    // check that the columns does not have class="nosort"
                    if (!xre.exec(node.className)) {
                        node.insertBefore(blankarrow.cloneNode(1), node.firstChild);
                        if (!initialsort) {
                            initialsort = true;
                            uparrow = document.createElement('img');
                            uparrow.setAttribute('src', portal_url + '/arrowUp.gif');
                            uparrow.setAttribute('height',6);
                            uparrow.setAttribute('width',9);
                            node.appendChild(uparrow);
                        } else {
                            node.appendChild(blankarrow.cloneNode(1));
                        }
    
                        if (node.addEventListener) node.addEventListener("click",sortByDateTime,false);
                        else if (node.attachEvent) node.attachEvent("onclick",sortByDateTime);
                        if(getTagsByClass("sortorder","input")[0].value=="reverse"){sortMethod(node);
                        }
                    }
                }
            } catch(er) {}
        }
    }
}   
// **** End table sort script ***
registerPloneFunction(initalizeMeetingListSort)   

