﻿// JScript File
 
var xmlDoc; //This variable will hold the data for xml
var currPageNo = 1; //Global var to hold current Page.
var PgSizeSet=10;   //Global var to hold Display record size with default 10 rec to display.
function PageIndexChanged(tableID, pageID)
{    
    currPageNo = pageID;    
    var allID = document.getElementsByTagName("table");
    var added = 0;
    for(x=0; x < allID.length;x++)
    {      
        var tblID = allID[x].id;
        var splTblId = tblID.split('_');
        var displayed = 0;
        if(splTblId[splTblId.length-1] == "tbl" + tableID + "data")
        {          
            var tableGrid = document.getElementById(allID[x].id);
            if(tableGrid)
            { 
                var pgSize = parseInt(document.getElementById("txtPageSize" + tableID).value);
                if(isNaN(pgSize) || pgSize <1)
                    pgSize = 10;                
                
                for(j=1;j<allID[x].rows.length-1;j++)
                {
                    if(document.getElementById('hiddenMode' + tableID).value == tableGrid.rows[j].getAttribute("mode"))                                   
                    {
                        added++;
                        if(added >= (((pageID-1)*pgSize)+1) && added<=(((pageID -1)*pgSize)+pgSize))
                        {
                            tableGrid.rows[j].style.display = "block";
                            
                            //Find whether checkbox exists for that row and whether it is checked
                            var trChkd = tableGrid.rows[j].getElementsByTagName('input');
                            
                            if(trChkd.length>0)//If checkbox exists
                            {
                                if(trChkd[0].type == "checkbox" && trChkd[0].checked==false)//if checkbox not checked
                                {
                                   if(added%2==0)
                                        tableGrid.rows[j].className = "RowStyleItem";
                                    else
                                        tableGrid.rows[j].className = "AlternatingItem";
                                }
                            }
                            else
                            {
                                if(added%2==0)
                                    tableGrid.rows[j].className = "RowStyleItem";
                                else
                                    tableGrid.rows[j].className = "AlternatingItem";
                            }
                            
                        }
                        else
                            tableGrid.rows[j].style.display = "none";
                    }
                    else
                            tableGrid.rows[j].style.display = "none"; 
                    
                }
                ResetPaging(tableID);
                return false;			
            }
            else
            {
                return false;
            }
            return false;
        }
	}
}

function getValuesFromXML(tableID,rowID)
{    
    if(xmlDoc == undefined)
        xmlDoc = document.all("XML_Root").XMLDocument;    
     
    xmlDoc.async="false";
    if (xmlDoc.readyState != 4)
    {
        return false;
    }
    var xmlObj=xmlDoc.documentElement;
    
    if (xmlDoc.parseError.errorCode != 0) {
    alert("errorCode: " + xmlDoc.parseError.errorCode + "\n" +
        "filepos: " + xmlDoc.parseError.filepos + "\n" +
        "line: " + xmlDoc.parseError.line + "\n" +
        "linepos: " + xmlDoc.parseError.linepos + "\n" +
        "reason: " + xmlDoc.parseError.reason + "\n" +
        "srcText: " + xmlDoc.parseError.srcText + "\n" +
        "url: " + xmlDoc.parseError.url);
    }
       
    if (xmlObj.childNodes.length > 0)
    {          
        for(i=0;i<xmlObj.childNodes.length;i++)
        {            
            if(xmlObj.childNodes[i].getAttribute("id") == "Table_" + tableID)
            {
                var msgobj = xmlObj.childNodes[i].selectSingleNode("TableData/TableRow[@tblRowID='" + rowID + "']");                  
                if(msgobj != undefined)
                {   
                    //setvalues(msgobj);
                    return msgobj;
                    break;
                }
            }
        }
    }
}


function EditXML(TableID, GridAction, rowID, AttributeName, EditedValue)
{   
    if(xmlDoc == undefined)
        xmlDoc = document.all("XML_Root").XMLDocument;    
     
    xmlDoc.async="false";
    if (xmlDoc.readyState != 4)
    {
        return false;
    }
    var xmlObj=xmlDoc.documentElement;
    
    if (xmlDoc.parseError.errorCode != 0) {
    alert("errorCode: " + xmlDoc.parseError.errorCode + "\n" +
        "filepos: " + xmlDoc.parseError.filepos + "\n" +
        "line: " + xmlDoc.parseError.line + "\n" +
        "linepos: " + xmlDoc.parseError.linepos + "\n" +
        "reason: " + xmlDoc.parseError.reason + "\n" +
        "srcText: " + xmlDoc.parseError.srcText + "\n" +
        "url: " + xmlDoc.parseError.url);
    }
        
    if (xmlObj.childNodes.length > 0)
    {          
        for(i=0;i<xmlObj.childNodes.length;i++)
        {            
            if(xmlObj.childNodes[i].getAttribute("id") == "Table_" + TableID)
            {        
                var msgobj = xmlObj.childNodes[i].selectSingleNode("TableData/TableRow[@tblRowID='" + rowID + "']");  
                
                if(msgobj != undefined)
                {
                    msgobj.setAttribute(AttributeName,EditedValue);
                    
                    var recstatus = msgobj.getAttribute("RecStatus");
                    if(recstatus==RECORD_ADD)
                        msgobj.setAttribute("RecStatus",RECORD_ADD);
                    else
                        msgobj.setAttribute("RecStatus",RECORD_EDIT);
                    
                    break;
                }
            }
        }
    }
}


function EditTable(tableID, rowID, ColID, EditedValue)
{
    var allID = document.getElementsByTagName("table");
   
    for(x=0; x < allID.length;x++)
    {        
        var tblID = allID[x].id;		                    
        var splitTblIDID = tblID.split("_"); 
         
        if (splitTblIDID[splitTblIDID.length - 1] == "tbl" + tableID + "data")
        {            
            if(allID[x]!=undefined)
            { 
                var trElements = allID[x].getElementsByTagName("tr"); 
                    
                for(j=0;j<trElements.length;j++)
	            { 			        
                    var trID = trElements[j].id;		                    
    		        var splitID = trID.split("_"); 
    		        
    		        if (!isNaN(splitID[splitID.length - 1]))
    		        {
    		            if (splitID[splitID.length - 1] == rowID)
    		            {
    		                allID[x].rows[j].cells[ColID-1].innerText = EditedValue;
    		                //ResetPaging(tableId,currentPage);
    		                ResetPaging(tableID);   		                    
                            return false;
    		            }   
    		        }        		        
        		 }            		
            }
	    }
	}
}
 

function AppendXML(TableID, GridAction, rowID, AttributeName, EditedValue)
{

    if(xmlDoc == undefined)
        xmlDoc = document.all("XML_Root").XMLDocument;    
     
    xmlDoc.async="false";
    if (xmlDoc.readyState != 4)
    {
        return false;
    }
    var xmlObj=xmlDoc.documentElement;
    
    if (xmlDoc.parseError.errorCode != 0) {
    alert("errorCode: " + xmlDoc.parseError.errorCode + "\n" +
        "filepos: " + xmlDoc.parseError.filepos + "\n" +
        "line: " + xmlDoc.parseError.line + "\n" +
        "linepos: " + xmlDoc.parseError.linepos + "\n" +
        "reason: " + xmlDoc.parseError.reason + "\n" +
        "srcText: " + xmlDoc.parseError.srcText + "\n" +
        "url: " + xmlDoc.parseError.url);
    }
        
    if (xmlObj.childNodes.length > 0)
    { 
        for(i=0;i<xmlObj.childNodes.length;i++)
        {            
            if(xmlObj.childNodes[i].getAttribute("id") == "Table_" + TableID)
            {
                var msgobj = xmlObj.childNodes[i].selectSingleNode("TableData/TableRow[@tblRowID='" + rowID + "']");  
                
                if(msgobj != undefined)
                {
                    msgobj.setAttribute(AttributeName,EditedValue);
                    msgobj.setAttribute("RecStatus",RECORD_ADD);
                    break;
                }
            }
        }
    }
}


function AddNewRow(TableID)
{
    
    if(xmlDoc == undefined)
        xmlDoc = document.all("XML_Root").XMLDocument;    
     
    xmlDoc.async="false";
    if (xmlDoc.readyState != 4)
    {
        return false;
    }
    var xmlObj=xmlDoc.documentElement;    
    
    if (xmlDoc.parseError.errorCode != 0) {
    alert("errorCode: " + xmlDoc.parseError.errorCode + "\n" +
        "filepos: " + xmlDoc.parseError.filepos + "\n" +
        "line: " + xmlDoc.parseError.line + "\n" +
        "linepos: " + xmlDoc.parseError.linepos + "\n" +
        "reason: " + xmlDoc.parseError.reason + "\n" +
        "srcText: " + xmlDoc.parseError.srcText + "\n" +
        "url: " + xmlDoc.parseError.url);
    }
        
    if (xmlObj.childNodes.length > 0)
    {          
        for(m=0;m<xmlObj.childNodes.length;m++)
        {            
            if(xmlObj.childNodes[m].getAttribute("id") == "Table_" + TableID)
            {                
                //var msgobj=xmlObj.getElementsByTagName("TableRow"); 
                var lastrowno = parseInt(xmlObj.childNodes[m].childNodes[1].childNodes.length);
                
                // Insert the root element node
                var element = xmlDoc.createElement("TableRow");
                element.setAttribute("tblRowID",lastrowno+1);
                
                
                //******************************************************
                //      Add new row to the table
                
                var allID = document.getElementsByTagName("table");
           
                for(x=0; x < allID.length;x++)
                {        
                    var tblID = allID[x].id;		                    
                    var splitTblIDID = tblID.split("_"); 
                     
                    if (splitTblIDID[splitTblIDID.length - 1] == "tbl" + TableID + "data")
                    {            
                        if(allID[x]!=undefined)
                        {                     
                            var tbl = allID[x];
                            var newrow=tbl.insertRow(1);
                            newrow.setAttribute("style","display:block");                    
                            newrow.setAttribute("id",parseInt(lastrowno+1));
                            newrow.setAttribute("mode",ROWMODE_NORMAL);
                            document.getElementById('hiddenTotalRows' + TableID).value = parseInt(document.getElementById('hiddenTotalRows' + TableID).value)+1;
                            if((lastrowno+1) % 2 == 0)
                                newrow.setAttribute("className","RowStyleItem");
                            else
                                newrow.setAttribute("className","AlternatingItem");                        
                            
                            break;
                        }                
                    }
                    if (splitTblIDID[splitTblIDID.length - 1] == "tbl" + TableID)
                    {               
                         allID[x].rows[0].style.display="block";
                         allID[x].rows[1].style.display="block";
                         allID[x].rows[2].style.display="none";                 
                    }
                 }
                
                //******************************************************
                
                
                var colid = 0;
                
                //Loop till each child element containing the Heading characteristics
                for(i=0;i<xmlObj.childNodes[m].childNodes[0].childNodes.length;i++)
                {
                    //If the column to be displayed is for data column
                    if(xmlObj.childNodes[m].childNodes[0].childNodes[i].getAttribute("ColType") == COLUMN_DATA)
                    {                         
                        element.setAttribute(xmlObj.childNodes[m].childNodes[0].childNodes[i].getAttribute("DataSrc"),"");                                          
                    }
                    
                    //************* part to generate the cell for HTML table
                    if(xmlObj.childNodes[m].childNodes[0].childNodes[i].getAttribute("Display") == SHOWCOLUMN)
                    {                
                        var y=newrow.insertCell(colid);
                        
                        //If it is an additonal column for linktype or linktypepassingparameters
                        if(xmlObj.childNodes[m].childNodes[0].childNodes[i].getAttribute("ColType") == COLUMN_LINKTYPE || xmlObj.childNodes[m].childNodes[0].childNodes[i].getAttribute("ColType") == COLUMN_LINKTYPE_PASSINGPARAMETERS)
                        {
                            if(xmlObj.childNodes[m].childNodes[0].childNodes[i].getAttribute("jsFunctionToCall") != "")
                            {
                                if(xmlObj.childNodes[m].childNodes[0].childNodes[i].getAttribute("ColType") == COLUMN_LINKTYPE)
                                    y.innerHTML = "<a href=\"#\" onClick=\"" + xmlObj.childNodes[m].childNodes[0].childNodes[i].getAttribute("jsFunctionToCall") + "\">" + xmlObj.childNodes[m].childNodes[0].childNodes[i].getAttribute("TextToDisplay") + "</a>";
                                    
                                else
                                    y.innerHTML = "<a href=\"#\" onClick=\"" + xmlObj.childNodes[m].childNodes[0].childNodes[i].getAttribute("jsFunctionToCall") + "('" + TableID + "','" + newrow.getAttribute("id") + "');" + "\" href=\"#\">" + xmlObj.childNodes[m].childNodes[0].childNodes[i].getAttribute("TextToDisplay") + "</a>";                                                    
                              
                            }
                        }
                        
                        //If it is an additonal column for checkboxtype or checkboxtypepassingparameters
                        else if(xmlObj.childNodes[m].childNodes[0].childNodes[i].getAttribute("ColType") == COLUMN_CHECKBOXTYPE || xmlObj.childNodes[m].childNodes[0].childNodes[i].getAttribute("ColType") == COLUMN_CHECKBOXTYPE_PASSINGPARAMETERS)
                        {
                            if(xmlObj.childNodes[m].childNodes[0].childNodes[i].getAttribute("jsFunctionToCall") != "")
                            {
                                if(xmlObj.childNodes[m].childNodes[0].childNodes[i].getAttribute("ColType") == COLUMN_CHECKBOXTYPE)
                                    y.innerHTML = "<input type=\"checkbox\" onclick=\"" + xmlObj.childNodes[m].childNodes[0].childNodes[i].getAttribute("jsFunctionToCall") + "\">";
                                    
                                else
                                    y.innerHTML = "<input type=\"checkbox\" onclick=\"" + xmlObj.childNodes[m].childNodes[0].childNodes[i].getAttribute("jsFunctionToCall") + "('" + TableID + "','" + newrow.getAttribute("id") + "');" + "\">";
                                    
                            }
                        }
                        y.setAttribute("align",xmlObj.childNodes[m].childNodes[0].childNodes[i].getAttribute("Alignment"));                
                        colid++;
                    }
                    //*******************************************************
                    
                }
                element.setAttribute("RecStatus",RECORD_ADD);
                xmlObj.childNodes[m].childNodes[1].appendChild(element);
                
                
                return lastrowno+1;
            }
        }
    }
}

function changePageSize(tableId)
{
    var allID = document.getElementsByTagName("table");
   PgSizeSet = parseInt(document.getElementById("txtPageSize" + tableId).value);
    for(x=0; x < allID.length;x++)
    {        
        var tblID = allID[x].id;		                    
        var splitTblIDID = tblID.split("_"); 
         
        if (splitTblIDID[splitTblIDID.length - 1] == "tbl" + tableId + "data")
        { 
            var allInputElements = allID[x].rows[allID[x].rows.length-1].getElementsByTagName("input");
            
            for(i=0;i<allInputElements.length;i++)
            {
                if(allInputElements[i].type == "text")
                {
                    if(allInputElements[i].value == "" || isNaN(allInputElements[i].value))
                    {
                        alert('Invalid value');     
                        allInputElements[i].focus();
                    }
                    else if(parseInt(allInputElements[i].value) <= 0)
                    {
                        alert('Invalid value');     
                        allInputElements[i].focus();
                    }
                    else
                        PageIndexChanged(tableId, "1");
                        ResetPaging(tableId); 
                }   
                
                return true;                               
            }
        }
    }
}
//function ResetPaging(tableId,currentPage)
function ResetPaging(tableId)
{
    var paging = document.getElementById("tbl" + tableId + "DataPagingRowPageNoCell");
    if(paging!=undefined)  
    {       
        var pageNos = 1;
        var currentPage = currPageNo; //current page index is set here.
        pageNos = currentPage;//current page index is set to pageNos here.
        
        var pageMaxLen = 9; // To set max length of page index to be displayed (0..9 = 10 rec will be displayed.)
        document.getElementById("txtPageSize" + tableId).value = PgSizeSet;
        
        //To Set no. of Rec to be displayed in grid.
        var pgSize = parseInt(document.getElementById("txtPageSize" + tableId).value);
        
        if(isNaN(pgSize) || pgSize<1)
            pgSize = 10;   
        
        var pagingHTML = "";
        
        var tbl=document.getElementById("tbl" + tableId + "data");
        
        if(tbl!=undefined)
        {   
        var SetPrevIndex = parseInt(pageNos) - parseInt(pageMaxLen) - 1;//cal index, for previous index jump.
                //code for previous ....
                if(pageNos > 1)
                {
                    if(SetPrevIndex > 0 )
                    {
                        pagingHTML+="<a href=\"#\" onClick=\"return PageIndexChanged('" + tableId + "','" + SetPrevIndex + "');\">....</a>";
                        pagingHTML+="  ";
                    }
                    else
                    {
                        pagingHTML+="<a href=\"#\" onClick=\"return PageIndexChanged('" + tableId + "','1');\">....</a>";
                        pagingHTML+="  ";
                    }
                }
        
            //code for index to display
            pagingHTML +="<a href=\"#\" onClick=\"return PageIndexChanged('" + tableId + "','" + pageNos + "');\">" + pageNos + "</a>";
            var FlaotingIndexLen =parseInt(currentPage) + parseInt(pageMaxLen); //calculating floating index length.
            for (i=pgSize*currentPage;(i<(parseInt(document.getElementById("hiddenTotalRows" + tableId).value)))&&(pageNos < FlaotingIndexLen);i+=pgSize)
            {
                pageNos++;
                pagingHTML+="  ";
                pagingHTML+="<a href=\"#\" onClick=\"return PageIndexChanged('" + tableId + "','" + pageNos + "');\">" + pageNos + "</a>";
            }
            // code for next....
            if(!(pageNos < FlaotingIndexLen))
            {
                pageNos++;
                pagingHTML+="  ";
                pagingHTML+="<a href=\"#\" onClick=\"return PageIndexChanged('" + tableId + "','" + pageNos + "');\">....</a>";
            }
            paging.innerHTML = pagingHTML;
        }
    }
}

 

function searchGrid(tableId)
{
    //Check whether search value is entered
    var blnSearch;
    var strSearch = document.getElementById('txtSearch' + tableId).value;
    strSearch=strSearch.replace(/^\s*|\s*$/g,"");
    if(strSearch.length==0)
        blnSearch = false;
    else
        blnSearch = true;
        
    strSearch=strSearch.toLowerCase();
    
    var cellval;
    var columncount = parseInt(document.getElementById('searchFrom' + tableId).value) -1 ;
    var currentRec;
    var objtable = document.getElementById('tbl' + tableId + 'data');    
    var totRows = 0;
    if(objtable!=undefined)
    { 
        for(var rowcount = 1;rowcount < (objtable.rows.length-1);rowcount++)
        {
            if(blnSearch == true)
            {
                cellval=objtable.rows[rowcount].cells[columncount].innerText.toLowerCase();
                if(cellval.substring(0,strSearch.length)!=strSearch)
                { 
                    objtable.rows[rowcount].setAttribute("mode",ROWMODE_NORMAL);
                }
                else
                {  
                    objtable.rows[rowcount].setAttribute("mode",ROWMODE_SEARCH);
                    totRows++;
                }
            }
            else
            {
                objtable.rows[rowcount].setAttribute("mode",ROWMODE_NORMAL);
                totRows++;
            }
        }
        
        if(totRows > 0)
        {
            document.getElementById('tbl' + tableId).rows[1].style.display = "block";
            document.getElementById('tbl' + tableId).rows[2].style.display = "none";
                      
            document.getElementById('hiddenTotalRows' + tableId).value = totRows;
            
            if(blnSearch == true)     
                document.getElementById('hiddenMode' + tableId).value = ROWMODE_SEARCH;
            else
                document.getElementById('hiddenMode' + tableId).value = ROWMODE_NORMAL;
            
            displayErrorMessage(tableId,'Default');
            
            PageIndexChanged(tableId, "1");
            //ResetPaging(tableId,currentPage);
            ResetPaging(tableId);
        }
        else
        {            
            
            document.getElementById('tbl' + tableId).rows[1].style.display = "none";
            document.getElementById('tbl' + tableId).rows[2].style.display = "block";
            displayErrorMessage(tableId,'Search');
        }
//        displayRec(tableId, currentRec);
        return false;
    }
}

 function displayRec(tableId, currentRec)
    { 
    var objtable = document.getElementById('tbl' + tableId + 'data');    
    
    if(objtable!=undefined)
    {
          var noRecToDisplay = parseInt(document.getElementById("txtPageSize" + tableId).value);
            
        if(isNaN(noRecToDisplay) || noRecToDisplay<1)
            noRecToDisplay = 10;
          
          var page = "1";
          var arrCurrentRec;
          if(currentRec != null)
          {
            arrCurrentRec = currentRec.split(',');   }
             for(var i=(page-1)*noRecToDisplay; (i < ((page-1) * parseInt(noRecToDisplay) + parseInt(noRecToDisplay))) && (i < arrCurrentRec.length); i++)
              {
                objtable.rows[arrCurrentRec[i]].style.display="block";
               }
            
        return false;
    }
}



/* CODE TO FINALLY UPDATE THE DB DATA */
function removenodes()
{
    if(xmlDoc == undefined)
        xmlDoc = document.all("XML_Root").XMLDocument;    
     
    xmlDoc.async="false";
    if (xmlDoc.readyState != 4)
    {
        return false;
    }
    
    var xmlObj=xmlDoc.documentElement;
    if (xmlDoc.parseError.errorCode != 0) {
    alert("errorCode: " + xmlDoc.parseError.errorCode + "\n" +
        "filepos: " + xmlDoc.parseError.filepos + "\n" +
        "line: " + xmlDoc.parseError.line + "\n" +
        "linepos: " + xmlDoc.parseError.linepos + "\n" +
        "reason: " + xmlDoc.parseError.reason + "\n" +
        "srcText: " + xmlDoc.parseError.srcText + "\n" +
        "url: " + xmlDoc.parseError.url);
    }
    
    //call the function to update the delete status in xml
    // commented for testing new delete function.
    //updateDeleteStatus();
        
    for (ctrTable=0;ctrTable <xmlObj.childNodes.length ;ctrTable++)
    {
//            var hasColumn1;
//            hasColumn1 = xmlObj.childNodes[ctrTable].childNodes[0].selectSingleNode("ColumnDetails[@ColType ='" + COLUMN_CHECKBOXTYPE_PASSINGPARAMETERS + "']");
//            if(hasColumn1 != undefined || hasColumn1 != null)
//            {
//                var nodeid = xmlObj.childNodes[ctrTable].getAttribute("id");
//                nodeid = nodeid.replace("Table_","");
//                
//                //If the table has records
//                if(xmlObj.childNodes[ctrTable].childNodes[1].childNodes.length > 0)
//                {
//                    var tbl = document.getElementById("tbl" + nodeid + "data");
//                    if(tbl!=undefined && tbl!=null)
//                    {
//                        for(i=1;i<tbl.rows.length-1;i++)
//                        {
//                            var allCheckBox = tbl.rows[i].getElementsByTagName("input");
//                            if(allCheckBox!=undefined && allCheckBox!=null)
//                            {                               
//                                //if(allCheckBox[0].type == "checkbox" && allCheckBox[0].checked==true)
//                                //{                                
//                                    var tblrow = xmlObj.childNodes[ctrTable].childNodes[1].selectSingleNode("TableRow[@tblRowID='" + i + "']");
//                                    
//                                    if(tblrow!=undefined && tblrow!=null)
//                                    {
//                                        var recstatus = tblrow.getAttribute("RecStatus");
//                                        if(recstatus==RECORD_ADD)
//                                            tblrow.setAttribute("RecStatus",RECORD_NOACTION);
//                                        else
//                                            tblrow.setAttribute("RecStatus",RECORD_DELETE);
//                                    }
//                                //}
//                            }                                
//                        }
//                    }
//                }
//            }
            
            //Remove the nodes that have been altered
            while(xmlObj.childNodes[ctrTable].childNodes[1].selectSingleNode("TableRow[@RecStatus='" + RECORD_NOACTION + "']"))
            {  
                 xmlObj.childNodes[ctrTable].childNodes[1].removeChild(xmlObj.childNodes[ctrTable].childNodes[1].selectSingleNode("TableRow[@RecStatus='0']")); 
            }
     }
  return true;
 }

function returnXML(hidXML)
{
    removenodes();
    hidXML.value = xmlDoc.xml;
    return true;
}

function DelFromXML(TableID, rowID)
{   
    if(xmlDoc == undefined)
        xmlDoc = document.all("XML_Root").XMLDocument;    
     
    xmlDoc.async="false";
    if (xmlDoc.readyState != 4)
    {
        return false;
    }
    var xmlObj=xmlDoc.documentElement;
    
    if (xmlDoc.parseError.errorCode != 0) {
    alert("errorCode: " + xmlDoc.parseError.errorCode + "\n" +
        "filepos: " + xmlDoc.parseError.filepos + "\n" +
        "line: " + xmlDoc.parseError.line + "\n" +
        "linepos: " + xmlDoc.parseError.linepos + "\n" +
        "reason: " + xmlDoc.parseError.reason + "\n" +
        "srcText: " + xmlDoc.parseError.srcText + "\n" +
        "url: " + xmlDoc.parseError.url);
    }
        
    if (xmlObj.childNodes.length > 0)
    {          
        for(i=0;i<xmlObj.childNodes.length;i++)
        {            
            if(xmlObj.childNodes[i].getAttribute("id") == "Table_" + TableID)
            {        
                var msgobj = xmlObj.childNodes[i].selectSingleNode("TableData/TableRow[@tblRowID='" + rowID + "']");  
                
                if(msgobj != undefined)
                {
                    //msgobj.setAttribute(AttributeName,EditedValue);
                    
                    var recstatus = msgobj.getAttribute("RecStatus");
                    if(recstatus == 1)
                    {
                        msgobj.setAttribute("RecStatus",RECORD_NOACTION);
                    }
                    else if(recstatus == 2)
                            {
                                  msgobj.setAttribute("RecStatus",RECORD_DELETE);
                            }
                            else if(recstatus == 0)
                            {
                                msgobj.setAttribute("RecStatus",RECORD_DELETE);
                            }
                            
                    
//                   switch(recstatus)
//                    {
//                        case RECORD_ADD :
//                                msgobj.setAttribute("RecStatus",RECORD_NOACTION);
//                                alert('RECORD_NOACTION');
//                                break;
//                        case RECORD_EDIT :
//                                msgobj.setAttribute("RecStatus",RECORD_DELETE);
//                                alert('RECORD_DELETE');
//                                break;
//                        case 0 :
//                                msgobj.setAttribute("RecStatus",RECORD_DELETE);
//                                alert('RECORD_DELETE');
//                                break;
//                        case RECORD_DELETE :
//                                msgobj.setAttribute("RecStatus",RECORD_EDIT);
//                                alert('RECORD_EDIT');
//                                break;
//                    }
                    
//                    if(recstatus==RECORD_ADD)
//                        msgobj.setAttribute("RecStatus",RECORD_NOACTION);
//                    else
//                        msgobj.setAttribute("RecStatus",RECORD_DELETE);
                        
//                        
//                        
//                        if(recstatus==RECORD_ADD)
//                                        tblrow.setAttribute("RecStatus",RECORD_NOACTION);
//                                    else
//                                        tblrow.setAttribute("RecStatus",RECORD_DELETE);
                    
                    break;
                }
            }
        }
    }
}



function UnDoDelFromXML(TableID, rowID)
{   

    if(xmlDoc == undefined)
        xmlDoc = document.all("XML_Root").XMLDocument;    
     
    xmlDoc.async="false";
    if (xmlDoc.readyState != 4)
    {
        return false;
    }
    
    var xmlObj=xmlDoc.documentElement;
    
    if (xmlDoc.parseError.errorCode != 0) {
    alert("errorCode: " + xmlDoc.parseError.errorCode + "\n" +
        "filepos: " + xmlDoc.parseError.filepos + "\n" +
        "line: " + xmlDoc.parseError.line + "\n" +
        "linepos: " + xmlDoc.parseError.linepos + "\n" +
        "reason: " + xmlDoc.parseError.reason + "\n" +
        "srcText: " + xmlDoc.parseError.srcText + "\n" +
        "url: " + xmlDoc.parseError.url);
    }
   
    if (xmlObj.childNodes.length > 0)
    {          
        for(i=0;i<xmlObj.childNodes.length;i++)
        {            
            if(xmlObj.childNodes[i].getAttribute("id") == "Table_" + TableID)
            {   
                
                var msgobj = xmlObj.childNodes[i].selectSingleNode("TableData/TableRow[@tblRowID='" + rowID + "']");  
                
                if(msgobj != undefined)
                {
                    //msgobj.setAttribute(AttributeName,EditedValue);
                    
                    var recstatus = msgobj.getAttribute("RecStatus");
                    if(recstatus == 0)
                    {
                        msgobj.setAttribute("RecStatus",RECORD_ADD);
                    }
                    else if(recstatus == 3)
                            {
                                msgobj.setAttribute("RecStatus",RECORD_EDIT);
                            }
                    
                    
                    
//                   switch(recstatus)
//                    {
//                        case RECORD_ADD :
//                                msgobj.setAttribute("RecStatus",RECORD_NOACTION);
//                                alert('RECORD_NOACTION');
//                                break;
//                        case RECORD_EDIT :
//                                msgobj.setAttribute("RecStatus",RECORD_DELETE);
//                                alert('RECORD_DELETE');
//                                break;
//                        case 0 :
//                                msgobj.setAttribute("RecStatus",RECORD_DELETE);
//                                alert('RECORD_DELETE');
//                                break;
//                        case RECORD_DELETE :
//                                msgobj.setAttribute("RecStatus",RECORD_EDIT);
//                                alert('RECORD_EDIT');
//                                break;
//                    }
                    
//                    if(recstatus==RECORD_ADD)
//                        msgobj.setAttribute("RecStatus",RECORD_NOACTION);
//                    else
//                        msgobj.setAttribute("RecStatus",RECORD_DELETE);
                        
//                        
//                        
//                        if(recstatus==RECORD_ADD)
//                                        tblrow.setAttribute("RecStatus",RECORD_NOACTION);
//                                    else
//                                        tblrow.setAttribute("RecStatus",RECORD_DELETE);
                    
                    break;
                }
            }
        }
    }
}


//function to be executed when the user checks/unchecks the checkbox of a table
function removeRecord(tableID, rowID)
{
    var tables = document.getElementsByTagName("table");
    
    for(x=0;x<tables.length;x++)
    { 	
        tblID = tables[x].id;
        if(tblID != "")
        {
            var splitTblID = tblID.split("_");
            
            if (splitTblID[splitTblID.length - 1] == "tbl" + tableID + "data")
            {                 
                var trs = tables[x].getElementsByTagName("tr");
    	        
                for(j=0; j< trs.length;j++)
                {
                    trID =trs[j].id;
                    var splitID = trID.split("_");
                    
                    if (!isNaN(splitID[splitID.length - 1]))
                    {                        
                        if(splitID[splitID.length - 1] == rowID)
                        {      
                            var chkBox = trs[j].getElementsByTagName("input");  
                            if(chkBox[0].checked == true)
                            {                                
                                trs[j].attributes["class"].value = "CheckBoxClicked"; 
                                                        
                                // new function to delete records.
                                DelFromXML(tableID, rowID);
                                
//                                var hlnk = trs[j].getElementsByTagName("a");
//                                for (m=0; m< hlnk.length;m++)
//                                {                                    
//                                    hlnk[m].removeAttribute("href");
//                                    hlnk[m].attributes("onclick").value = "return false;" + hlnk[m].attributes("onclick").value;                                                                        
//                                }
                            }
                            else
                            {
                             // new function to delete records.
                                UnDoDelFromXML(tableID, rowID);
                                
                                
//                                var hlnk = trs[j].getElementsByTagName("a");
//                                for (m=0; m< hlnk.length;m++)
//                                {                    
//                                    var value1 = hlnk[m].attributes("onclick").value.replace('return false;','')                                    
//                                    hlnk[m].attributes("onclick").value = value1;
//                                    hlnk[m].attributes("href").value = "#";                                    
//                                }
                                
                                if(rowID % 2 == 0)
                                    trs[j].attributes["class"].value = "RowStyleItem";
                                else
                                    trs[j].attributes["class"].value = "AlternatingItem";                                    
                                    
                            }
                            return true;
                        }
                    }
                }
	        }
	    }
	 }	    
}



function isNumeric(valu)
{
    //trim the string
    valu=Trim(valu);
    
    if(isNaN(valu))
        return false;
    else
        return true;
}

function isCharacter(valu)
{
    //trim the string
    valu=Trim(valu);
    
    if(isNaN(valu))
        return true;
    else
        return false;
}

function isEmpty(valu)
{     
    if(Trim(valu)=="")
        return true;
    else
        return false;
}

//------------------------------------------------------------------------------
//Date input format dd-mmm-yy. Returns true or false.
//------------------------------------------------------------------------------
function isDate(valu)
{
	regexpDt = /^\d*\d-\d\d-\d\d\d\d$/

	if (regexpDt.test(valu) == false)
	{
		return false;
	}
	else
	{
		if (fnValidateDate(valu) == false)
		{
			return false;
		}
	}
	return true;
}

//------------------------------------------------------------------------------
//Called from fnCheckDate
//------------------------------------------------------------------------------
function fnValidateDate(objDateField)
{
	arr_ddmmmyy = objDateField.split("-", 3)
	DD = arr_ddmmmyy[0];
	MM = arr_ddmmmyy[1];
	YY = arr_ddmmmyy[2];

	//Convert mmm to mm
	//MM = fnConvertMMMtoMM(MMM);
	if (isNaN(MM) || isNaN(DD) || isNaN(YY))
	{
		return false;
	}
	//Month Validation
	if (MM < 1 || MM > 12)
	{
		return false;
	}
	//Day Validation
	BadDay = 0;
	if (DD < 1)
	{
		BadDay ++;
	}
	else
	{
		if ((MM == 1 || MM == 3 || MM == 5 || MM == 7 || MM == 8 || MM == 10 || MM == 12) && (DD > 31))
		{
			BadDay ++;
		}
		else if ((MM == 4 || MM == 6 || MM == 9 || MM == 11) && (DD > 30))
		{
			BadDay ++;
		}
		else if (MM == 2)
		{
			if ((LeapYear(YY) == true) && (DD > 29))
			{
				BadDay ++;
			}
			else if ((LeapYear(YY) == false) && (DD > 28))
			{
				BadDay ++;
			}
		}
	}
	if (BadDay > 0)
	{
		return false;
	}
	return true; //Success
}

//------------------------------------------------------------------------------
//Called from fnValidateDate
//------------------------------------------------------------------------------
function LeapYear(intYear)
{
	
	if (intYear % 100 == 0)
	{
		if (intYear % 400 == 0)
		{
			return true;
		}
	}
	else
	{
		if ((intYear % 4) == 0)
		{
			return true;
		}
	}
	return false;
}

//------------------------------------------------------------------------------
//Called from fnValidateDate
//------------------------------------------------------------------------------
function fnConvertMMMtoMM(MMM)
{
	var MM = "XX";
	MMMUpper = MMM.toUpperCase();
	switch (MMMUpper)
	{
		case "JAN":
			MM = "01";
			break;
		case "FEB":
			MM = "02";
			break;
		case "MAR":
			MM = "03";
			break;
		case "APR":
			MM = "04";
			break;
		case "MAY":
			MM = "05";
			break;
		case "JUN":
			MM = "06";
			break;
		case "JUL":
			MM = "07";
			break;
		case "AUG":
			MM = "08";
			break;
		case "SEP":
			MM = "09";
			break;
		case "OCT":
			MM = "10";
			break;
		case "NOV":
			MM = "11";
			break;
		case "DEC":
			MM = "12";
			break;
	}
	return MM;
}

//------------------------------------------------------------------------------

function Trim(valu)
{
    return valu.replace(/^\s*|\s*$/g,"");
}
// To Alter color for instructions.
function ApplyCss(tableID, ColID)
{
    var allID = document.getElementsByTagName("table");
   
    for(x=0; x < allID.length;x++)
    {        
        var tblID = allID[x].id;		                    
        var splitTblIDID = tblID.split("_"); 
         
        if (splitTblIDID[splitTblIDID.length - 1] == "tbl" + tableID + "data")
        {            
            if(allID[x]!=undefined)
            { 
                var trElements = allID[x].getElementsByTagName("tr"); 
                var pagingRowPad = 1;    
                for(j=0;j<trElements.length - parseInt(pagingRowPad);j++)
	            { 			        
                    var trID = trElements[j].id;		                    
    		        var splitID = trID.split("_"); 
    		        
    		        if (!isNaN(splitID[splitID.length - 1]))
    		        {
    		        ///if(rowID % 2 == 0)
                                //  trElements[j].attributes("class").value = "RowStyleItem";
//                                else
//                                    trElements[j].attributes("class").value = "AlternatingItem";
//                                    
////////////////    		            if (splitID[splitID.length - 1] == rowID)
////////////////    		            {
//                                alert(allID[x].rows[j].cells[ColID-1].innerText);
//                                alert(ColID-1);
    		                if(allID[x].rows[j].cells[ColID-1].innerText == "Mandatory")
    		                {
    		                    trElements[j].attributes("class").value = "AlternatingItemMan";
    		                }
    		                else
    		                {
    		                    trElements[j].attributes("class").value = "AlternatingItemAdv";
    		                }
////////////////    		                //ResetPaging(tableId,currentPage);
////////////////    		                ResetPaging(tableID);   		                    
////////////////                            return false;
////////////////    		            }   
    		        }        		        
        		 }            		
            }
	    }
	}
}

function updateDeleteStatus()
{
    if(xmlDoc == undefined)
        xmlDoc = document.all("XML_Root").XMLDocument;    
     
    xmlDoc.async="false";
    if (xmlDoc.readyState != 4)
    {
        return false;
    }
    
    var xmlObj=xmlDoc.documentElement;
    if (xmlDoc.parseError.errorCode != 0) {
    alert("errorCode: " + xmlDoc.parseError.errorCode + "\n" +
        "filepos: " + xmlDoc.parseError.filepos + "\n" +
        "line: " + xmlDoc.parseError.line + "\n" +
        "linepos: " + xmlDoc.parseError.linepos + "\n" +
        "reason: " + xmlDoc.parseError.reason + "\n" +
        "srcText: " + xmlDoc.parseError.srcText + "\n" +
        "url: " + xmlDoc.parseError.url);
    }
        
    for (ctrTable=0;ctrTable <xmlObj.childNodes.length ;ctrTable++)
    {
        var hasColumn1;
        hasColumn1 = xmlObj.childNodes[ctrTable].childNodes[0].selectSingleNode("ColumnDetails[@ColType ='" + COLUMN_CHECKBOXTYPE_PASSINGPARAMETERS + "']");
        if(hasColumn1 != undefined || hasColumn1 != null)
        {
            var nodeid = xmlObj.childNodes[ctrTable].getAttribute("id");
            nodeid = nodeid.replace("Table_","");
            
            //If the table has records
            if(xmlObj.childNodes[ctrTable].childNodes[1].childNodes.length > 0)
            {
                var tbl = document.getElementById("tbl" + nodeid + "data");
                if(tbl!=undefined && tbl!=null)
                {
                    for(i=1;i<tbl.rows.length-1;i++)
                    {
                        var allCheckBox = tbl.rows[i].getElementsByTagName("input");
                        if(allCheckBox!=undefined && allCheckBox!=null)
                        {                               
                            if(allCheckBox[0].type == "checkbox" && allCheckBox[0].checked==true)
                            {                                
                            //problem with this , table row id cannot be mapped with xml position id as when new row is added it is appended at top of table and where as it is appended at last in xml thus gives an error.
                                var tblrow = xmlObj.childNodes[ctrTable].childNodes[1].selectSingleNode("TableRow[@tblRowID='" + i + "']");
                                
                                if(tblrow!=undefined && tblrow!=null)
                                {
                                    var recstatus = tblrow.getAttribute("RecStatus");
                                    if(recstatus==RECORD_ADD)
                                        tblrow.setAttribute("RecStatus",RECORD_NOACTION);
                                    else
                                        tblrow.setAttribute("RecStatus",RECORD_DELETE);
                                }
                            }
                        }                                
                    }
                }
            }
        }
    }
}


//===========================Date=====================================
/*===================================================================
 Author: Matt Kruse
 
 View documentation, examples, and source code at:
     http://www.JavascriptToolbox.com/

 NOTICE: You may use this code for any purpose, commercial or
 private, without any further permission from the author. You may
 remove this notice from your final code if you wish, however it is
 appreciated by the author if at least the web site address is kept.

 This code may NOT be distributed for download from script sites, 
 open source CDs or sites, or any other distribution method. If you
 wish you share this code with others, please direct them to the 
 web site above.
 
 Pleae do not link directly to the .js files on the server above. Copy
 the files to your own server for use with your site or webapp.
 ===================================================================*/
/*
Date functions

These functions are used to parse, format, and manipulate Date objects.
See documentation and examples at http://www.JavascriptToolbox.com/lib/date/

*/
Date.$VERSION = 1.01;

// Utility function to append a 0 to single-digit numbers
Date.LZ = function(x) {return(x<0||x>9?"":"0")+x};
// Full month names. Change this for local month names
Date.monthNames = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
// Month abbreviations. Change this for local month names
Date.monthAbbreviations = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
// Full day names. Change this for local month names
Date.dayNames = new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
// Day abbreviations. Change this for local month names
Date.dayAbbreviations = new Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
// Used for parsing ambiguous dates like 1/2/2000 - default to preferring 'American' format meaning Jan 2.
// Set to false to prefer 'European' format meaning Feb 1
Date.preferAmericanFormat = true;

// If the getFullYear() method is not defined, create it
if (!Date.prototype.getFullYear) { 
  Date.prototype.getFullYear = function() { var yy=this.getYear(); return (yy<1900?yy+1900:yy); } 
} 

// Parse a string and convert it to a Date object.
// If no format is passed, try a list of common formats.
// If string cannot be parsed, return null.
// Avoids regular expressions to be more portable.
Date.parseString = function(val, format) {
  // If no format is specified, try a few common formats
  if (typeof(format)=="undefined" || format==null || format=="") {
    var generalFormats=new Array('y-M-d','MMM d, y','MMM d,y','y-MMM-d','d-MMM-y','MMM d','MMM-d','d-MMM');
    var monthFirst=new Array('M/d/y','M-d-y','M.d.y','M/d','M-d');
    var dateFirst =new Array('d/M/y','d-M-y','d.M.y','d/M','d-M');
    var checkList=new Array(generalFormats,Date.preferAmericanFormat?monthFirst:dateFirst,Date.preferAmericanFormat?dateFirst:monthFirst);
    for (var i=0; i<checkList.length; i++) {
      var l=checkList[i];
      for (var j=0; j<l.length; j++) {
        var d=Date.parseString(val,l[j]);
        if (d!=null) { 
          return d; 
        }
      }
    }
    return null;
  }

  this.isInteger = function(val) {
    for (var i=0; i < val.length; i++) {
      if ("1234567890".indexOf(val.charAt(i))==-1) { 
        return false; 
      }
    }
    return true;
  };
  this.getInt = function(str,i,minlength,maxlength) {
    for (var x=maxlength; x>=minlength; x--) {
      var token=str.substring(i,i+x);
      if (token.length < minlength) { 
        return null; 
      }
      if (this.isInteger(token)) { 
        return token; 
      }
    }
  return null;
  };
  val=val+"";
  format=format+"";
  var i_val=0;
  var i_format=0;
  var c="";
  var token="";
  var token2="";
  var x,y;
  var year=new Date().getFullYear();
  var month=1;
  var date=1;
  var hh=0;
  var mm=0;
  var ss=0;
  var ampm="";
  while (i_format < format.length) {
    // Get next token from format string
    c=format.charAt(i_format);
    token="";
    while ((format.charAt(i_format)==c) && (i_format < format.length)) {
      token += format.charAt(i_format++);
    }
    // Extract contents of value based on format token
    if (token=="yyyy" || token=="yy" || token=="y") {
      if (token=="yyyy") { 
        x=4;y=4; 
      }
      if (token=="yy") { 
        x=2;y=2; 
      }
      if (token=="y") { 
        x=2;y=4; 
      }
      year=this.getInt(val,i_val,x,y);
      if (year==null) { 
        return null; 
      }
      i_val += year.length;
      if (year.length==2) {
        if (year > 70) { 
          year=1900+(year-0); 
        }
        else { 
          year=2000+(year-0); 
        }
      }
    }
    else if (token=="MMM" || token=="NNN"){
      month=0;
      var names = (token=="MMM"?(Date.monthNames.concat(Date.monthAbbreviations)):Date.monthAbbreviations);
      for (var i=0; i<names.length; i++) {
        var month_name=names[i];
        if (val.substring(i_val,i_val+month_name.length).toLowerCase()==month_name.toLowerCase()) {
          month=(i%12)+1;
          i_val += month_name.length;
          break;
        }
      }
      if ((month < 1)||(month>12)){
        return null;
      }
    }
    else if (token=="EE"||token=="E"){
      var names = (token=="EE"?Date.dayNames:Date.dayAbbreviations);
      for (var i=0; i<names.length; i++) {
        var day_name=names[i];
        if (val.substring(i_val,i_val+day_name.length).toLowerCase()==day_name.toLowerCase()) {
          i_val += day_name.length;
          break;
        }
      }
    }
    else if (token=="MM"||token=="M") {
      month=this.getInt(val,i_val,token.length,2);
      if(month==null||(month<1)||(month>12)){
        return null;
      }
      i_val+=month.length;
    }
    else if (token=="dd"||token=="d") {
      date=this.getInt(val,i_val,token.length,2);
      if(date==null||(date<1)||(date>31)){
        return null;
      }
      i_val+=date.length;
    }
    else if (token=="hh"||token=="h") {
      hh=this.getInt(val,i_val,token.length,2);
      if(hh==null||(hh<1)||(hh>12)){
        return null;
      }
      i_val+=hh.length;
    }
    else if (token=="HH"||token=="H") {
      hh=this.getInt(val,i_val,token.length,2);
      if(hh==null||(hh<0)||(hh>23)){
        return null;
      }
      i_val+=hh.length;
    }
    else if (token=="KK"||token=="K") {
      hh=this.getInt(val,i_val,token.length,2);
      if(hh==null||(hh<0)||(hh>11)){
        return null;
      }
      i_val+=hh.length;
      hh++;
    }
    else if (token=="kk"||token=="k") {
      hh=this.getInt(val,i_val,token.length,2);
      if(hh==null||(hh<1)||(hh>24)){
        return null;
      }
      i_val+=hh.length;
      hh--;
    }
    else if (token=="mm"||token=="m") {
      mm=this.getInt(val,i_val,token.length,2);
      if(mm==null||(mm<0)||(mm>59)){
        return null;
      }
      i_val+=mm.length;
    }
    else if (token=="ss"||token=="s") {
      ss=this.getInt(val,i_val,token.length,2);
      if(ss==null||(ss<0)||(ss>59)){
        return null;
      }
      i_val+=ss.length;
    }
    else if (token=="a") {
      if (val.substring(i_val,i_val+2).toLowerCase()=="am") {
        ampm="AM";
      }
      else if (val.substring(i_val,i_val+2).toLowerCase()=="pm") {
        ampm="PM";
      }
      else {
        return null;
      }
      i_val+=2;
    }
    else {
      if (val.substring(i_val,i_val+token.length)!=token) {
        return null;
      }
      else {
        i_val+=token.length;
      }
    }
  }
  // If there are any trailing characters left in the value, it doesn't match
  if (i_val != val.length) { 
    return null; 
  }
  // Is date valid for month?
  if (month==2) {
    // Check for leap year
    if ( ( (year%4==0)&&(year%100 != 0) ) || (year%400==0) ) { // leap year
      if (date > 29){ 
        return null; 
      }
    }
    else { 
      if (date > 28) { 
        return null; 
      } 
    }
  }
  if ((month==4)||(month==6)||(month==9)||(month==11)) {
    if (date > 30) { 
      return null; 
    }
  }
  // Correct hours value
  if (hh<12 && ampm=="PM") {
    hh=hh-0+12; 
  }
  else if (hh>11 && ampm=="AM") { 
    hh-=12; 
  }
  return new Date(year,month-1,date,hh,mm,ss);
}

// Check if a date string is valid
Date.isValid = function(val,format) {
  return (Date.parseString(val,format) != null);
}

// Check if a date object is before another date object
Date.prototype.isBefore = function(date2) {
  if (date2==null) { 
    return false; 
  }
//  var d1 = new Date(this.getTime()).clearTime();
//  var d2 = new Date(date2.getTime()).clearTime();
//  return (d1.getTime()<d2.getTime());
  
  return (this.getTime()<date2.getTime());
}

// Check if a date object is after another date object
Date.prototype.isAfter = function(date2) {
  if (date2==null) { 
    return false; 
  }
  return (this.getTime()>date2.getTime());
}

// Check if two date objects have equal dates and times
Date.prototype.equals = function(date2) {
  if (date2==null) { 
    return false; 
  }
  return (this.getTime()==date2.getTime());
}

// Check if two date objects have equal dates, disregarding times
Date.prototype.equalsIgnoreTime = function(date2) {
  if (date2==null) { 
    return false; 
  }
  var d1 = new Date(this.getTime()).clearTime();
  var d2 = new Date(date2.getTime()).clearTime();
  d2.getTime()
  return (d1.getTime()==d2.getTime());
}

// Format a date into a string using a given format string
Date.prototype.format = function(format) {
  format=format+"";
  var result="";
  var i_format=0;
  var c="";
  var token="";
  var y=this.getYear()+"";
  var M=this.getMonth()+1;
  var d=this.getDate();
  var E=this.getDay();
  var H=this.getHours();
  var m=this.getMinutes();
  var s=this.getSeconds();
  var yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k;
  // Convert real date parts into formatted versions
  var value=new Object();
  if (y.length < 4) {
    y=""+(+y+1900);
  }
  value["y"]=""+y;
  value["yyyy"]=y;
  value["yy"]=y.substring(2,4);
  value["M"]=M;
  value["MM"]=Date.LZ(M);
  value["MMM"]=Date.monthNames[M-1];
  value["NNN"]=Date.monthAbbreviations[M-1];
  value["d"]=d;
  value["dd"]=Date.LZ(d);
  value["E"]=Date.dayAbbreviations[E];
  value["EE"]=Date.dayNames[E];
  value["H"]=H;
  value["HH"]=Date.LZ(H);
  if (H==0){
    value["h"]=12;
  }
  else if (H>12){
    value["h"]=H-12;
  }
  else {
    value["h"]=H;
  }
  value["hh"]=Date.LZ(value["h"]);
  value["K"]=value["h"]-1;
  value["k"]=value["H"]+1;
  value["KK"]=Date.LZ(value["K"]);
  value["kk"]=Date.LZ(value["k"]);
  if (H > 11) { 
    value["a"]="PM"; 
  }
  else { 
    value["a"]="AM"; 
  }
  value["m"]=m;
  value["mm"]=Date.LZ(m);
  value["s"]=s;
  value["ss"]=Date.LZ(s);
  while (i_format < format.length) {
    c=format.charAt(i_format);
    token="";
    while ((format.charAt(i_format)==c) && (i_format < format.length)) {
      token += format.charAt(i_format++);
    }
    if (value[token] != null) { 
      result=result + value[token]; 
    }
    else { 
      result=result + token; 
    }
  }
  return result;
}

// Get the full name of the day for a date
Date.prototype.getDayName = function() { 
  return Date.dayNames[this.getDay()];
}

// Get the abbreviation of the day for a date
Date.prototype.getDayAbbreviation = function() { 
  return Date.dayAbbreviations[this.getDay()];
}

// Get the full name of the month for a date
Date.prototype.getMonthName = function() {
  return Date.monthNames[this.getMonth()];
}

// Get the abbreviation of the month for a date
Date.prototype.getMonthAbbreviation = function() { 
  return Date.monthAbbreviations[this.getMonth()];
}

// Clear all time information in a date object
Date.prototype.clearTime = function() {
  this.setHours(0); 
  this.setMinutes(0);
  this.setSeconds(0); 
  this.setMilliseconds(0);
  return this;
}

// Add an amount of time to a date. Negative numbers can be passed to subtract time.
Date.prototype.add = function(interval, number) {
  if (typeof(interval)=="undefined" || interval==null || typeof(number)=="undefined" || number==null) { 
    return this; 
  }
  number = +number;
  if (interval=='y') { // year
    this.setFullYear(this.getFullYear()+number);
  }
  else if (interval=='M') { // Month
    this.setMonth(this.getMonth()+number);
  }
  else if (interval=='d') { // Day
    this.setDate(this.getDate()+number);
  }
  else if (interval=='w') { // Weekday
    var step = (number>0)?1:-1;
    while (number!=0) {
      this.add('d',step);
      while(this.getDay()==0 || this.getDay()==6) { 
        this.add('d',step);
      }
      number -= step;
    }
  }
  else if (interval=='h') { // Hour
    this.setHours(this.getHours() + number);
  }
  else if (interval=='m') { // Minute
    this.setMinutes(this.getMinutes() + number);
  }
  else if (interval=='s') { // Second
    this.setSeconds(this.getSeconds() + number);
  }
  return this;
}
//===========================Date=====================================
//to limit input char in textarea.
function ChangeLen(ctrl,msg,maxlen)
{
    var calldesc = ctrl.value;
    if( maxlen == undefined ) 
    {
        maxlen = 256;
    }    
    if( calldesc.length > maxlen - 1)
    {
        if (!e) var e = window.event;	        
        if( e.keyCode == 8 || e.keyCode == 9 || e.keyCode == 16 || e.keyCode == 17 || e.keyCode == 18 ||
            e.keyCode == 27 || e.keyCode == 33 || e.keyCode == 34 || e.keyCode == 35 || e.keyCode == 36 || 
            e.keyCode == 37 || e.keyCode == 38 || e.keyCode == 39 || e.keyCode == 40 || e.keyCode == 144 ) 
        {          
          e.returnValue = true;
        }  
        else
        {
            alert(msg);
            e.returnValue = false;   
        }       
    }
} 

//===========================Date=====================================
//to limit input char in textarea.
function ChangeLenCheck(ctrl,maxlen)
{
    var calldesc = ctrl.value;
    if( maxlen == undefined ) 
    {
        maxlen = 256;
    }    
    if( calldesc.length > maxlen - 1)
    {
        if (!e) var e = window.event;	        
        if( e.keyCode == 8 || e.keyCode == 9 || e.keyCode == 16 || e.keyCode == 17 || e.keyCode == 18 ||
            e.keyCode == 27 || e.keyCode == 33 || e.keyCode == 34 || e.keyCode == 35 || e.keyCode == 36 || 
            e.keyCode == 37 || e.keyCode == 38 || e.keyCode == 39 || e.keyCode == 40 || e.keyCode == 144 ) 
        {          
            e.returnValue = true;
        }  
        else
        {            
            e.returnValue = false;   
        }       
    }
} 


function displayErrorMessage(TableID, Action)
{
    if(xmlDoc == undefined)
        xmlDoc = document.all("XML_Root").XMLDocument;    
     
    xmlDoc.async="false";
    if (xmlDoc.readyState != 4)
    {
        return false;
    }
    
    var xmlObj=xmlDoc.documentElement;
    
    if (xmlDoc.parseError.errorCode != 0) {
    alert("errorCode: " + xmlDoc.parseError.errorCode + "\n" +
        "filepos: " + xmlDoc.parseError.filepos + "\n" +
        "line: " + xmlDoc.parseError.line + "\n" +
        "linepos: " + xmlDoc.parseError.linepos + "\n" +
        "reason: " + xmlDoc.parseError.reason + "\n" +
        "srcText: " + xmlDoc.parseError.srcText + "\n" +
        "url: " + xmlDoc.parseError.url);
    }
   
    if (xmlObj.childNodes.length > 0)
    {          
        for(i=0;i<xmlObj.childNodes.length;i++)
        {            
            if(xmlObj.childNodes[i].getAttribute("id") == "Table_" + TableID)
            {          
                if(Action=="Search")      
                    document.getElementById("spn" + TableID + "GridMessage").innerText = xmlObj.childNodes[i].childNodes[2].childNodes[0].getAttribute("Message_SearchNotFound");
                else
                    document.getElementById("spn" + TableID + "GridMessage").innerText = xmlObj.childNodes[i].childNodes[2].childNodes[0].getAttribute("Message_NoDataInDB");
                    
                return true;
            }
        }
    }   
}

//This function is used to impose a maxlength property to any textarea..
function imposeMaxLength(Object, MaxLen)
{
  return (Object.value.length <= MaxLen-1);
}

function CompareDate(strDate1,strDate2)
{   
    var date1Array = strDate1.split('/');
   	var date1 = new Date(date1Array[2], date1Array[1]-1, date1Array[0]);
		
	var date2Array = strDate2.split('/');
   	var date2 = new Date(date2Array[2], date2Array[1]-1, date2Array[0]);
		
   	var difference = date1 - date2;
   	if( difference == 0 )
   	{
   	   return true;
   	}
   	if (difference > 0)
   	{   			
   	    return false;
   	}
    else
   	{   		
   	    return true;
   	}
}