/*
 * Kordaci TablePlus
 *
 * Copyright (c) 2009 Mehmet KORDACI, <metkor@gmail.com>, http://www.mehmetkordaci.com  
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-2.0.php) licenses.
 * 
 * 
 *
 * $Version: 1.11, 2009.07.10
 */
 
 
 /*
 * Kordaci TablePlus
 *
 * Copyright (c) 2009 Mehmet KORDACI, <metkor@gmail.com>, http://www.mehmetkordaci.com  
 * MIT (http://www.opensource.org/licenses/mit-license.php)
 * GPL (http://www.opensource.org/licenses/gpl-2.0.php) lisanslarÄ± altÄ±ndadÄ±r.
 * 
 * 
 *
 * $Version: 1.11, 10.07.2009
 */
addEvent(window, "load", table_init);


var sortOrder="-1";
var sortImg;
var ascImg;
var descImg;
var enablePaging;         //   parameter
var pagingRecordCount;    //   parameter
var enableTheme;          //   parameter
var themeNo;              //   parameter
var textAlign;            //   parameter  
var minColumnWidth;       //   parameter   
var themeIdPart;          
var table_init_params = {};



function table_init() {

    if (!document.getElementsByTagName) return;
    alltables = document.getElementsByTagName("table");
    for (t_index=0;t_index<alltables.length;t_index++) {
        currentTbl = alltables[t_index];
        

        if (currentTbl.className=="tblkordaci") {
            
            setup(currentTbl);
        }
    }
    
}
function getImgPath(tbl,type){  
var path;
if(tbl.rows[0].currentStyle)   // for ie
{ 
path=tbl.rows[0].currentStyle.backgroundImage; 
}
else if(window.getComputedStyle)  // for firefox and chrome
{
path = window.getComputedStyle(tbl.rows[0], null).backgroundImage; 
}
 
var file=path.substring(path.lastIndexOf("/")+1,path.length);
path=path.replace(file,type+".gif"); 
path=path.replace("url(\"",""); 
path=path.replace("url(","");
path=path.replace("url('","");
path=path.replace(/\\/g,"");  
path=path.replace(/'/g,"");    
return path;
}
function setup(tbl) {
    setup_params();  

      if(enableTheme)
   {
     changeTheme(tbl,themeNo);
   } 

    sortImg=getImgPath(tbl,"sort");
    ascImg=getImgPath(tbl,"asc");
    descImg=getImgPath(tbl,"desc"); 
     
    if(enableTheme)
    {
      themeIdPart="_thm"+themeNo;
      
    }
    if(pagingRecordCount>tbl.rows.length)
    {
     pagingRecordCount=tbl.rows.length;
    }         
    if (tbl.rows && tbl.rows.length > 0) {
        if (tbl.tHead && tbl.tHead.rows.length > 0) {
            var headerRow = tbl.tHead.rows[tbl.tHead.rows.length-1];
        } else {
            var headerRow = tbl.rows[0];
        }
          
    }
    if (!headerRow) return;
    
    for (var i=0;i<headerRow.cells.length;i++) {
    
        var cell = headerRow.cells[i];
        cell.style.minWidth = minColumnWidth;
        var txt = getCellText(cell);
            if (cell.className != "nosorting" || cell.className=="") { 
                cell.innerHTML = "<span class='columnheader"+themeIdPart+"'><a href='#' style='color:white;' class='columnheader"+themeIdPart+"' onclick='sortTable(this,"+i+");return false;'><span>"+txt+"</span><img class='sortImg' id='sortImg"+i+"' src='"+sortImg+"'></img></a></span>";
            }        
           
    }
    
   if(enablePaging)
   {
    var toTheLastRow=tbl.rows.length-1;
   }
   else
   {
    var toTheLastRow=tbl.rows.length-1; 
   }
    for (var i=1;i<=toTheLastRow;i++) {
       for (var j=0;j<tbl.rows[i].cells.length;j++) {
        
          tbl.rows[i].cells[j].align=textAlign; 
        }    
           
    }
    
    
   if(enablePaging)
   {
        
        var recordCount= tbl.rows.length-1;
        var pageCount= (recordCount/pagingRecordCount)+1;
        var lastRow = tbl.rows.length;
        var iteration = lastRow;
        var row = tbl.insertRow(lastRow);
        var cell = row.insertCell(0);
                
        var pageNums="";
        var countpg;
        var lastPage; 
        pageNums="<span class='pagingLink"+themeIdPart+"'><a href='#' onclick='displayTablePart(this,1);return false;'><span style='padding-right:5px;'>"+"<<"+"</span></a></span>"; 
        
        for ( countpg=1;countpg<=Math.ceil((tbl.rows.length-2)/pagingRecordCount);countpg++) {
         pageNums+="<span class='pagingLink"+themeIdPart+"'><a href='#' onclick='displayTablePart(this,"+countpg+");return false;'><span style='padding-left:1px;padding-right:1px;'>"+countpg+"</span></a></span>";
         
        }   
        lastPage=countpg-1;
       pageNums+="<span class='pagingLink"+themeIdPart+"'><a href='#' onclick='displayTablePart(this,"+lastPage+");return false;'><span style='padding-left:5px;'>"+">>"+"</span></a></span>"; 
        cell.innerHTML=pageNums;
        cell.colSpan=tbl.rows[0].cells.length;
        cell.align="center";            
             
          for (var t = 1; t < tbl.rows.length-1; t++)
          {
          tbl.rows[t].style.display="none";
          }
          for (var t = 1; t <= pagingRecordCount ; t++)
          {
          tbl.rows[t].style.display="";
          }
   }
   for (var t = 1; t < tbl.rows.length; t++)
   {
       for (var s = 0; s < tbl.rows[t].cells.length; s++)
       {
       tbl.rows[t].cells[s].style.paddingLeft="2px";
       tbl.rows[t].cells[s].style.paddingRight="2px";
       }
   }


   
    
   

}  
function setup_params(){
    enablePaging= true;     
    pagingRecordCount= 5;  
    enableTheme=true;       
    themeNo=1;             
    textAlign="left";
    minColumnWidth="100px"; 
                 
    if(table_init_params.enablePaging!="undefined" || table_init_params.enablePaging)
    {
        enablePaging=table_init_params.enablePaging;
    }
    if(table_init_params.pagingRecordCount)
    {
        pagingRecordCount=table_init_params.pagingRecordCount;
    }
    if(table_init_params.enableTheme!="undefined" || table_init_params.enableTheme)
    {
        enableTheme=table_init_params.enableTheme;
    }
    if(table_init_params.themeNo)
    {
        themeNo=table_init_params.themeNo;
    }
    if(table_init_params.textAlign!="undefined" || table_init_params.textAlign)
    {
        textAlign=table_init_params.textAlign;
    }
    if(table_init_params.minColumnWidth)
    {
        minColumnWidth=table_init_params.minColumnWidth;
    }    

}         
function changeTheme(child,themeNo)
{
    tbl=getParent(child,'TABLE');
    if(themeNo==1)
    {
        tbl.className="table_thm1";
        tbl.border="1px";
        tbl.style.borderColor="#1A2037";
        tbl.rows[0].className="header_thm1";
        tbl.cellPadding="0";
        tbl.cellSpacing="0"; 
        
    }
    
    setRowColors(child,themeNo);
}
function setRowColors(child,themeNo)
{
    tbl=getParent(child,'TABLE');
    var toTheLastRow=tbl.rows.length;
    if(enablePaging)
    {
    var toTheLastRow=tbl.rows.length-1;
    }
    for (var t = 1; t < toTheLastRow; t++)
    {
        if(t%2==1)
        {
            tbl.rows[t].style.backgroundColor="#CEDDCA"; 
                  
        }
        else if(t%2==0)
        {
           tbl.rows[t].style.backgroundColor="#FFFFFF";
        }

    }
}
function sortTable(child,columnindex) {
  
   tbl=getParent(child,'TABLE');
   var allImages=tbl.getElementsByTagName('img');
       for (var i=0;i<allImages.length;i++) {
        allImages[i].src=sortImg;

    }
   var sortType=findColumnType(tbl,columnindex);
    var startindex=1;  //Because first row is header
   var rows = tbl.getElementsByTagName('tr');
   var imgObj=child.childNodes[1]; 
   var j=0;  
   var toLoop=rows.length-1;
   if(enablePaging)
   {
    toLoop=rows.length-2;
   }
   else
   {
   toLoop=rows.length-1;
   }
   if(sortOrder=="-1" || sortOrder=="2") 
   {  


       for (var t = toLoop; t >= 0; t--)
      {
           
           for (var i = startindex; i < toLoop; i++) {
                      
                            j=i+1;
                            if(sortType=="string")
                            {
                                var firstText= rows[i].cells[columnindex].innerHTML;
                                var secondText= rows[j].cells[columnindex].innerHTML;
                                
                                if(clearText(firstText)>clearText(secondText))
                                { 
                                  
                                    swapNodes(rows[i],rows[j]);
                                }                            
                            } 
                            else if(sortType=="numeric")
                            {
                                if(parseFloat(rows[i].cells[columnindex].innerHTML)>parseFloat(rows[j].cells[columnindex].innerHTML))
                                {     
                                    swapNodes(rows[i],rows[j]);
                                }                            
                            }

               }
      }

      sortOrder=1;

      imgObj.src=descImg;
   }
   else if(sortOrder=="1") 
   {  

       for (t = toLoop; t >= 0; t--)
      {
     
           for (var i = startindex; i < toLoop; i++) {

                            j=i+1; 
                            if(sortType=="string")
                            {
                                var firstText= rows[i].cells[columnindex].innerHTML;
                                var secondText= rows[j].cells[columnindex].innerHTML; 
                                if(clearText(firstText)<clearText(secondText))
                                {     
                                    swapNodes(rows[i],rows[j]);
                                }                            
                            } 
                            else if(sortType=="numeric")
                            {
                                if(parseFloat(rows[i].cells[columnindex].innerHTML)<parseFloat(rows[j].cells[columnindex].innerHTML))
                                {     
                                    swapNodes(rows[i],rows[j]);
                                }                            
                            }

               }
      }
      sortOrder=2;
      imgObj.src=ascImg;
   }  
   underlineHeader(tbl,columnindex);
   if(enablePaging)
   {
   displayTablePart(tbl,1);
   }
  
  setRowColors(child,themeNo);
}
function clearText(clearStr)
{

    clearStr=clearStr.replace("ş","sz");
    clearStr=clearStr.replace("Ş","Sz");
    clearStr=clearStr.replace("ç","cz");
    clearStr=clearStr.replace("Ç","Cz");
    clearStr=clearStr.replace("ö","oz");
    clearStr=clearStr.replace("Ö","Oz");
    clearStr=clearStr.replace("ğ","gz");
    clearStr=clearStr.replace("Ğ","Gz");
    clearStr=clearStr.replace("ı","hz");
    clearStr=clearStr.replace("İ","Iz");
    clearStr=clearStr.replace("ü","uz");
    clearStr=clearStr.replace("Ü","Uz");
    return clearStr;
}
function findColumnType(tbl,columnindex) {
    var text;
    if(enablePaging)
   {
    var toLoop=tbl.rows.length-1;
   }
   else
   {
   var toLoop=tbl.rows.length;
   }
    for (var i=0; i<toLoop; i++) {
      text = getCellText(tbl.rows[i].cells[columnindex]);
      text=lrtrim(text);
    if (text.substr(0,4) == "<!--" || text.length == 0) {
            itm = "";
    }
      if (text != '') {
        if (text.match(/^-?[\d,.]+$/)) {
          return "numeric";
        }


      }
    }
    return "string";
}
function underlineHeader(child,columnindex) {
    
    tbl=getParent(child,'TABLE'); 
    
    
    for (var t = 0; t < tbl.rows[0].cells.length; t++)
    {
           tbl.rows[0].cells[t].childNodes[0].childNodes[0].style.textDecoration="none"; 
    }
    tbl.rows[0].cells[columnindex].childNodes[0].childNodes[0].style.textDecoration="underline";
}
function underlinePaging(child,pageNo) {
   
    tbl=getParent(child,'TABLE'); 
    var recordCount= tbl.rows.length-1;
    var pageCount= (recordCount/pagingRecordCount)+1;
    
    for (var countpg=0;countpg<pageCount;countpg++) {
     tbl.rows[tbl.rows.length-1].cells[0].childNodes[countpg].childNodes[0].childNodes[0].style.textDecoration="none"; 
        }
     
     tbl.rows[tbl.rows.length-1].cells[0].childNodes[pageNo].childNodes[0].childNodes[0].style.textDecoration="underline";
   
}
function displayTablePart(child,pageNo) {
              
   tbl=getParent(child,'TABLE');
    for (var t = 1; t < tbl.rows.length-1; t++)
      {
      tbl.rows[t].style.display="none";
      }
      for (var t = 1+((pageNo-1)*pagingRecordCount); t <= pageNo*pagingRecordCount ; t++)
      {
        tbl.rows[t].style.display="";
      } 
      
    underlinePaging(tbl,pageNo);
    setRowColors(child,themeNo);
}

function getCellText(cell) { 
return cell.innerHTML;  
}
function getParent(child, parent) {
    if (child == null) {
        return null;
    } else if (child.nodeType == 1 && child.tagName.toLowerCase() == parent.toLowerCase()) {
        return child;
    } else {
        return getParent(child.parentNode, parent);
    }
}    

function lrtrim(stringToTrim) {
    return stringToTrim.replace(/^\s+/,"").replace(/\s+$/,"");
}

// by Mattias Sundberg
// http://sundberg.it/2006/05/12/swapnode_in_firefox
function swapNodes(item1,item2) { 
var itemtmp = item1.cloneNode(1);
var parent = item1.parentNode;
item2 = parent.replaceChild(itemtmp,item2);
parent.replaceChild(item2,item1);
parent.replaceChild(item1,itemtmp);
itemtmp = null;
}


// addEvent and removeEvent
// cross-browser event handling for IE5+,    NS6 and Mozilla
// By Scott Andrew
// http://www.scottandrew.com/weblog/articles/cbs-events
function addEvent(obj, evType, fn, useCapture){
  if (obj.addEventListener){
    obj.addEventListener(evType, fn, useCapture);
    return true;
  } else if (obj.attachEvent){
    var r = obj.attachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Handler could not be attached");
  }
}
function removeEvent(obj, evType, fn, useCapture){
  if (obj.removeEventListener){
    obj.removeEventListener(evType, fn, useCapture);
    return true;
  } else if (obj.detachEvent){
    var r = obj.detachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Handler could not be removed");
  }
}