/**
		sortowanie.js

		@author Łukasz Marcińczak <lmarcinczak@euroland.pl>
		@date	6.09.2007

	Skrypt sortujący wyniki tabeli. Dziala gdy komorki naglowka tabeli maja element "span" mowiacy
	o rodzaju sortowania [gora/dol]

 */

/**
		Dodatek

		@author Łukasz Marcińczak <lmarcinczak@euroland.pl>
		@date	07.11.2007

	Dodałem nowe kryterium rozpoznawania daty, tak by poznalo format DATE TIME w postaci
	'rrrr-mm-dd gg:mm:ss'

 */

var KOL_SORTOWANA;  // zmienna globalna z numerem sortowaniej tabeli

function przesortuj(elem,nr_kol){

	var span;
 
  
	for (var i=0;i<elem.childNodes.length;i++) {
		if (elem.childNodes[i].tagName && elem.childNodes[i].tagName.toLowerCase() == 'span') span = elem.childNodes[i];
	}
  
	var td = elem.parentNode;
	KOL_SORTOWANA = nr_kol || td.cellIndex;
  	var tabela = zwrocTabele(td);
  
  	if (tabela.rows.length <= 1) return;
    		
        var zawartosc = zwrocTekst(tabela.rows[1].cells[KOL_SORTOWANA]);
   
   //tutaj wybor funkcji sortowania
  	var funkcjaSort = sortTekst;
  	if (zawartosc.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/)) funkcjaSort = sortData;
       else if (zawartosc.match(/^\d\d\d\d[\/-]\d\d[\/-]\d\d$/)) {
			//alert ("hihi");
			funkcjaSort = sortData;
		}
	else if (zawartosc.match(/^[0-9]{4}-[0-1]{1}[0-9]{1}-[0-3]{1}[0-9]{1} [0-2]{1}[0-9]{1}:[0-5]{1}[0-9]{1}:[0-5]{1}[0-9]{1}/)) {
		funkcjaSort = sortData;
	}
        else if (zawartosc.match(/^\d[\/-]\d[\/-]\d\d\d\d$/)) funkcjaSort = sortData;
        else if (zawartosc.match(/^\d\d\d\d[\/-]\d[\/-]\d$/)) funkcjaSort = sortData;
        else if (zawartosc.match(/^\d\d[\/-]\d[\/-]\d\d\d\d$/)) funkcjaSort = sortData;
        else if (zawartosc.match(/^\d\d\d\d[\/-]\d[\/-]\d\d$/)) funkcjaSort = sortData;
        else if (zawartosc.match(/^\d[\/-]\d\d[\/-]\d\d\d\d$/)) funkcjaSort = sortData;
        else if (zawartosc.match(/^\d\d\d\d[\/-]\d\d[\/-]\d$/)) funkcjaSort = sortData;
        else if (zawartosc.match(/^\d*\d[\.\,.]*/)) {
			//alert ("haha");
			funkcjaSort = sortPieniadze;
		}
        //if (zawartosc.match(/^[\d\.]+$/)) funkcjaSort = sortLiczby;
  	

 
  	var noweWyniki = new Array();  // w tej zmiennej beda rzedy tabeli, potem zostana posortowane
  //wrzucanie rzedow tabeli do zmiennej
  	for (j=1;j<tabela.rows.length;j++) { 
    		noweWyniki[j-1] = tabela.rows[j]; 
  	}
  
  	noweWyniki.sort(funkcjaSort);
  
  //czyszczenie strzalek z naglowkow tabeli
  	var spany = tabela.getElementsByTagName('span');

  	for(i=0;i<spany.length;i++){
    		spany[i].innerHTML = '';
  	}
  	
  //wstawienie odpowiedniej strzalki oraz wartosci mowiacej o kierunku sortowania
  	if (span.getAttribute("sortdir") == 'wdol') {
    		span.innerHTML = '&nbsp;&uarr;';
    		noweWyniki.reverse();
   	 	span.setAttribute('sortdir','wgore');
  	} 
	else {
    		span.innerHTML = '&nbsp;&darr;';
    		span.setAttribute('sortdir','wdol');
  	}
  
      
  //wstawienie posortowanych wynikow w miejsca starych
  	for (i=0;i<noweWyniki.length;i++) {
    		tabela.tBodies[0].appendChild(noweWyniki[i]);
  	}
  
  
  
}//koniec przesortuj()

// funkcja zwracajaca tekst zawarty miedzy znacznikami podanego elementu

function zwrocTekst(element) {

	if (typeof element == "string") return element;
	if (typeof element == "undefined") { return element };
	if (element.innerText) return element.innerText;	
	var str = "";
	
	var cs = element.childNodes;

	for (var i = 0; i < cs.length; i++) {
		switch (cs[i].nodeType) {
			case 1: //ELEMENT_NODE
				str += zwrocTekst(cs[i]);
				break;
			case 3:	//TEXT_NODE
				str += cs[i].nodeValue;
				break;
		}
	}
	return str;
}

//funkcja zwracajaca obiekt tabeli rodzica elementu podawanego w argumencie

function zwrocTabele(element){
  	if (element == null) return null;
	else if (element.nodeType == 1 && element.tagName.toLowerCase() == 'table')	
		return element;
	else
		return zwrocTabele(element.parentNode);
}


//funkcja do sortowania tekstu
function sortTekst(a,b){
  	var aa = zwrocTekst(a.cells[KOL_SORTOWANA]).toLowerCase();
  	var bb = zwrocTekst(b.cells[KOL_SORTOWANA]).toLowerCase();
  	aa = aa.replace(/[x,(,),\",\',+,*]/gi,'');
  	bb = bb.replace(/[x,(,),\",\',+,*]/gi,'');	
  	if (aa==bb) return 0;
  	if (aa<bb) return -1;
  	return 1;
}

//funkcja do sortowania liczb i pieniedzy (fraza PLN gubi sie po parseFloat)
function sortLiczby(a,b){
	var aa = parseFloat(zwrocTekst(a.cells[KOL_SORTOWANA]).replace(/\,/,'\.'));
	var bb = parseFloat(zwrocTekst(b.cells[KOL_SORTOWANA]).replace(/\,/,'\.')); 
	if ((aa-bb)==0) return 0;
	if ((aa-bb)>0) return 1;
	return -1;
}

function sortPieniadze(a,b){
  	var aa = parseFloat(zwrocTekst(a.cells[KOL_SORTOWANA]).replace(/\,/,'\.'));
        if (isNaN(aa)) aa = 0; 
        var bb = parseFloat(zwrocTekst(b.cells[KOL_SORTOWANA]).replace(/\,/,'\.')); 
        if (isNaN(bb)) bb = 0;
	if ((aa-bb)==0) return 0;
	if ((aa-bb)>0) return 1;
	return -1;
}

// funkcja do sortowania daty - najpoprawniej dziala z data w formacie rrrr-mm-dd
function sortData(a,b){
        
        var aa = zwrocTekst(a.cells[KOL_SORTOWANA]);
        var bb = zwrocTekst(b.cells[KOL_SORTOWANA]);
        aa = aa.split("-");
	var dat1='';
	for(var i=0; i<aa.length;i++){
                if(aa[0].length==4){
                        dat1=dat1+aa[i];
                }else{
                        dat1=dat1+aa[(aa.length-1)-i];
                }
        }
        
        bb = bb.split("-");
	var dat2='';
	for(var i=0; i<bb.length;i++){
                if(bb[0].length==4){
                        dat2=dat2+bb[i];
                }else{
                        dat2=dat2+bb[(bb.length-1)-i];
                }
        }
       
        
        if (dat1==dat2) return 0;
        if (dat1<dat2) return -1;
        return 1;
}
