/*
 function addRowsToTable(oTBody , sResponseData)
 function removeAllRows(tBody)
 function fillTable(sResponse)
 function sendPostRequest(strURL, isPostMethod,sSubmitData,resHandler,readXML,statusId) ---var sStatusId=null;var responseHandler=null;var readXML=null;
 function processRequest()
 function clearControls(docForm)
 function formData2QueryString(docForm)
*/
var sStatusId=null;
var responseHandler=null;
var handlerObject=null;
var readXML=null;
var formName="";
var xmlHttpReq = false;

/**
 * Adds rows to table if the input given contains rows separated by "|" and columns separated by ",".
  @param oTBody is the table or table body object to which data will be appended
  @param response data
 */
function addRowsToTable(oTBody, sResponseData)
{
    var frag = document.createDocumentFragment();
    var  trData;//, text;

        while(sResponseData.indexOf("|")!=-1)
        {
            var tr = document.createElement("tr");
            trData = sResponseData.substring(0,sResponseData.indexOf("|"));

                while(trData.indexOf(",")!=-1)
                {
                  var td;
                    td = document.createElement("td");
                    var text = document.createTextNode(trData.substring(0,trData.indexOf(",")));
                    td.appendChild(text);
                    tr.appendChild(td);
                    trData = trData.substring(trData.indexOf(",")+1);
                 }
                 // print last column
                  var td;
                    td = document.createElement("td");
                    var text = document.createTextNode(trData);
                    td.appendChild(text);
                    tr.appendChild(td);

            frag.appendChild(tr);
         //   alert("appended row");
            sResponseData = sResponseData.substring(sResponseData.indexOf("|")+1);
        }
        //print remaining last row
             var tr = document.createElement("tr");
                 trData = sResponseData;
                    while(trData.indexOf(",")!=-1)
                    {
                      var td;
                        td = document.createElement("td");
                        var text = document.createTextNode(trData.substring(0,trData.indexOf(",")));
                        td.appendChild(text);
                        tr.appendChild(td);
                        trData = trData.substring(trData.indexOf(",")+1);
                     }
                      var td;
                        td = document.createElement("td");
                        var text = document.createTextNode(trData.substring(trData.indexOf(",")+1));
                        td.appendChild(text);
                        tr.appendChild(td);

                frag.appendChild(tr);

    oTBody.appendChild(frag);
};

/**
 * Remove all the children of a given node or element.
 * Most useful for dynamic tables where you clearChildNodes() on the tbody
 * element.
 * @see http://www.getahead.ltd.uk/dwr/util-table.html
 * @param ele The id of the element or the HTML element itself
 */
function removeAllRows (objElement)
{
    if (objElement == null)
    {
        alert("removeAllRows() can't find an element with id: " + objElement + ".");
        return;
    }

    while (objElement.childNodes && objElement.childNodes.length > 0)
    {  //alert('removing...');
        objElement.removeChild(objElement.firstChild);
    }
}

/**
  It fills the table with response from the servlet. //response handler
  @param sResponse from servlet as a  col1-data,col2-data,col3-data|col1-data,col2-data,col3-data|col1-data,col2-data,col3-data col is separated by "," and row is separated by "|"
  @param sTagId table id
**/
function fillTable(sResponse,sTagId)
{
    var tBody = document.getElementById(sTagId);
    removeAllRows(tBody);
    addRowsToTable(tBody,sResponse);
}


/**
 * Submit content as GET request method
   @param strURL --- servlet URL.Ex: /servletName.do
   @param sSubmitData
   @param resHandler
   @param responseAsXML
   @param statusId
 */
/*function sendGetRequest(strURL,sSubmitData,resHandler,statusId)
{
    return sendRequest(strURL,false,sSubmitData,null,resHandler,false,statusId)
}
function sendGetRequest(strURL,sSubmitData,resHandler,statusId)
{
    return sendRequest(strURL,false,sSubmitData,null,resHandler,false,statusId)
}
*/

function sendGetRequest(strURL,sSubmitData,handlerObject,resHandler,responseAsXML,statusId)
{
    return sendRequest(strURL,false,sSubmitData,handlerObject,resHandler,responseAsXML,statusId)
}

/**
 * Submit the form content as post request method
 @param strURL
 @param sSubmitData
 @param resHandler
 @param responseAsXML
 @param statusId
 */
/*function sendPostRequest(strURL, sSubmitData,resHandler,responseAsXML,statusId)
{
    return sendRequest(strURL,true, sSubmitData,resHandler,responseAsXML,statusId)
}
function sendPostRequest(strURL,sSubmitData,resHandler,statusId)
{
    return sendRequest(strURL,true,sSubmitData,null,resHandler,false,statusId)
}
*/
function sendPostRequest(strURL, sSubmitData,handlerObject,resHandler,responseAsXML,statusId)
{
    return sendRequest(strURL,true, sSubmitData,handlerObject,resHandler,responseAsXML,statusId)
}


/**
 * Send request to servlet
    @param strURL
    @param isPostMethod
    @param sSubmitData
    @param resHandler
    @param responseAsXML
    @param statusId
**/
function sendRequest(strURL,isPostMethod, sSubmitData,handlerObj,resHandler,responseAsXML,statusId)
{
    // Mozilla/Safari\
    //window.screen.availWidth-150
    if(responseAsXML)
        readXML = true;

    sStatusId = statusId;

    responseHandler = resHandler;
    handlerObject=handlerObj;
   // alert('before sending...'+strURL+"\n"+isPostMethod+"\n"+sSubmitData+"\n"+responseHandler+"\n"+responseAsXML+"\n"+sStatusId);

 try
 {
         if (window.XMLHttpRequest)
        {
            xmlHttpReq = new XMLHttpRequest();

            if(xmlHttpReq.overrideMimeType)   // it suports other than in IE 7
                xmlHttpReq.overrideMimeType('text/plain');
        }
        else if (window.ActiveXObject)
        {
            xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
        }

  }catch(er)
     {
        alert(er.name+"= "+er.message +"Line="+er.location )
     }


    if(isPostMethod)
    {
       xmlHttpReq.open('POST', strURL, true);
       xmlHttpReq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
       xmlHttpReq.onreadystatechange = processRequest;
       xmlHttpReq.send(sSubmitData);
    }
    else
    {
       xmlHttpReq.open('GET', (strURL+'?'+sSubmitData), true);
       xmlHttpReq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
       xmlHttpReq.onreadystatechange = processRequest;
       xmlHttpReq.send(null);
    }

    //return xmlHttpReq;
}
/**
 * Process Request
 */
function processRequest()
{
    //alert('process req');
    var statusTag=null;
    if(sStatusId)
        statusTag=document.getElementById(sStatusId)
    if(!statusTag)// in case elemnt not found in the immediate document
         statusTag=window.parent.document.getElementById(sStatusId);
     

    if(xmlHttpReq.readyState == 0) // 0=unintialised
    {
        if(statusTag)
            statusTag.innerHTML="unintialised....";
    }
    else if(xmlHttpReq.readyState == 1) // 1=loading
    {
        if(statusTag)
            statusTag.innerHTML="loading....";
    }
    else if(xmlHttpReq.readyState == 2) // 2=loaded
    {
        if(statusTag)
            statusTag.innerHTML="loaded....";
    }
    else if(xmlHttpReq.readyState == 3) // 3=interactive
    {
        if(statusTag)
            statusTag.innerHTML="interactive....";
    }
    else if(xmlHttpReq.readyState == 4) // 4=complete
    {

        if(statusTag)
            statusTag.innerHTML="";

        var sResponse=null;

        if(readXML)
            sResponse=xmlHttpReq.responseXML;
        else
            sResponse=xmlHttpReq.responseText;

        if (xmlHttpReq.status == 200)// 200=request complete
        {
            sResponse=xmlHttpReq.responseText;
			//alert("handlerObject="+handlerObject)
            //alert("sResponse=  "+(eval("new Array('"+sResponse+"')")));
            //alert('handlerObject='+handlerObject);
            if(handlerObject)
            {
               //handlerObject.call(this,sResponse)
               handlerObject.apply(this,eval("new Array("+sResponse+");"))
            }
           else if(responseHandler)
              eval(responseHandler)(sResponse);

        }
        else ///404= file not found,403=forbidden,405=method not found
          {   if(handlerObject)
                handlerObject.apply(this,eval("new Array("+xmlHttpReq.statusText+");") )
                //handlerObject.eval(responseHandler)(xmlHttpReq.statusText);
             else
               eval(responseHandler)(xmlHttpReq.statusText);
          }


        sStatusId=null;
        responseHandler=null;
        readXML=null;
    }
}
/**
 * Clears form fields' data
   @param formname
 */
function clearControls(docForm)
{
    var formElem;
    var strLastElemName = '';
    for (var i = 0; i < docForm.elements.length; i++)
    {
        //alert('process'+i)
        formElem = docForm.elements[i];
        switch (formElem.type)
        {
            // Text fields, hidden form elements
            case 'text':
            case 'hidden':
            case 'password':
            case 'textarea':
            case 'select-one':
                    formElem.value='';
                  break;
            case 'radio':
                    formElem.checked=false;
                  break;
            case 'checkbox':
                    if (formElem.checked)
                    {
                        formElem.checked=false;
                    }
                   break;
        }
    }
}
/**
 * Forms URL parameters of form.
 * Returns string value of form fields data, elemname1=elemvalue1&elemname2=elemvalue2&.....
 */
function formData2QueryString(docForm)
{
    formName = docForm;
    var strSubmitContent = '';
    var formElem;
    var strLastElemName = '';

  for (var i = 0; i < docForm.elements.length; i++)
  {
    formElem = docForm.elements[i];
    switch (formElem.type)
    {
        case 'text':
        case 'hidden':
        case 'password':
        case 'textarea':
        case 'select-one':
            strSubmitContent += formElem.name + '=' + escape(formElem.value) + '&'
            break;

        // Radio buttons
        case 'radio':
            if (formElem.checked)
            {
                strSubmitContent += formElem.name + '=' + escape(formElem.value) + '&'
            }
            break;

        // Checkboxes
        case 'checkbox':
            if (formElem.checked)
            {
                // Continuing multiple, same-name checkboxes
                if (formElem.name == strLastElemName)
                {
                    // Strip of end ampersand if there is one
                    if (strSubmitContent.lastIndexOf('&') == strSubmitContent.length-1)
                    {
                        strSubmitContent = strSubmitContent.substr(0, strSubmitContent.length - 1);
                    }
                    //Append value as comma-delimited string
                    strSubmitContent += ',' +formElem.name+'='+ escape(formElem.value);
                }
                else
                {
                    strSubmitContent += formElem.name + '=' + escape(formElem.value);
                }
                strSubmitContent += '&';
                strLastElemName = formElem.name;
            }
            break;
    }
  }
    //Remove trailing separator
  strSubmitContent = strSubmitContent.substr(0, strSubmitContent.length - 1);
  return strSubmitContent;
}
