
//-------------------- mContentLoader.js
var net = new Object();

net.READY_STATE_UNINITIALIZED= 0;
net.READY_STATE_LOADING      = 1;
net.READY_STATE_LOADED       = 2;
net.READY_STATE_INTERACTIVE  = 3;
net.READY_STATE_COMPLETE     = 4;

net.ContentLoader = function( component, url, method, requestParams ) {
   this.component     = component;
   this.url           = url;
   this.requestParams = requestParams;
   this.method        = method;
}

net.ContentLoader.prototype = {

   getTransport: function() {
      var transport;
      if ( window.XMLHttpRequest )
         transport = new XMLHttpRequest();
      else if ( window.ActiveXObject ) {
         try {
            transport = new ActiveXObject('Msxml2.XMLHTTP');
         }
         catch(err) {
            transport = new ActiveXObject('Microsoft.XMLHTTP');
         }
      }
      return transport;
   },

   sendRequest: function() {

      //if ( window.netscape && window.netscape.security.PrivilegeManager.enablePrivilege)
      //   netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');

      var oThis = this;
      var request = this.getTransport();
      request.open( this.method, this.url, true );
      request.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded');     
      request.onreadystatechange = function() { oThis.handleAjaxResponse(request) };
      request.send( this.requestParams );
  },

  handleAjaxResponse: function(request) {
  
     if ( request.readyState == net.READY_STATE_COMPLETE ) {
        if ( this.isSuccess(request) )
        {
           this.component.ajaxUpdate(request);
        }
        else
        {
           this.component.handleError(request);
        }
     }
  },

  isSuccess: function(request) {
    return  request.status == 0 
        || (request.status >= 200 && request.status < 300);
  }

};

function defaultAjaxErrorHandler(request) {
   
      alert("error fetching data!"
      +"\n\nreadyState:"+request.readyState
      +"\nstatus: "+request.status
      +"\nheaders: "+request.getAllResponseHeaders());
   }



function getFormFields(form)
{
  var formParamArray = new Array();
 
  var formItemCount = 0;
 
  for (i=0; i<form.elements.length; i++)
  { 
    if (form.elements[i].name != "")
    {
      formParamArray[formItemCount] = form.elements[i];
      formItemCount++;
    }
  }
  
  
  var paramString = ""; 
  
//  var firstItem = true;
  
  for (i=0; i<formParamArray.length; i++)
  {

    if (formParamArray[i].options != null &&
        formParamArray[i].multiple)
    {
      for (j=0; j<formParamArray[i].options.length; j++)
      {
        paramString+="&";
        paramString+=formParamArray[i].name +"="+escape(formParamArray[i].options[j].value);
      }
    }
    else
    {
      paramString+="&";
      paramString+=formParamArray[i].name +"="+escape(formParamArray[i].value);
    }
  }
  return paramString;
}

/**
 *
 **/
function serializeXML(xmlDoc)
{
  var htmlString = "";

  if (window.ActiveXObject)
  {
    htmlString = xmlDoc.xml;
  }
  else if (window.XMLHttpRequest)
  {
    htmlString = new XMLSerializer().serializeToString(xmlDoc);
  } 
  
  return htmlString;
}


function setButtonsToWait(item)
{
  item.style.cursor='wait';

  buttonArray = item.getElementsByTagName("button");
  for (i=0; i<buttonArray.length; i++)
  {
    buttonArray[i].disabled='true';
    buttonArray[i].style.cursor='wait';
  }
}

function setButtonsToDefault(item)
{
  item.style.cursor='pointer';

  buttonArray = item.getElementsByTagName("button");
  for (i=0; i<buttonArray.length; i++)
  {
    buttonArray[i].disabled=null;
    buttonArray[i].style.cursor='pointer';
  }
}



function SubmitFormComponent(parentDivId, form) 
{
  this.parentDivId = parentDivId;
  this.form = form;
}
SubmitFormComponent.prototype = {

   ajaxUpdate:  function(request) 
   {
//   alert(serializeXML(request.responseXML)); 
      if (request.responseXML.getElementsByTagName("errorMessage")[0])
      {
        setButtonsToDefault(this.form);
        this.form.style.cursor='default';
        alert(request.responseXML.getElementsByTagName("errorMessage")[0].firstChild.nodeValue);
      }
      else
      {     
        var containerDiv = document.getElementById(this.parentDivId);
        var spanNode = request.responseXML.getElementsByTagName("span")[0];
        var returnXMLString = formatXMLResponse(spanNode);         
 // alert(returnXMLString);
        containerDiv.innerHTML = returnXMLString;
        
        var scriptArray = request.responseXML.getElementsByTagName("script");
        for (i=0; i<scriptArray.length; i++)
        {
          eval(scriptArray[i].firstChild.nodeValue);
        }
     }
   },

   handleError: function(request) 
   {
      defaultAjaxErrorHandler(request);
   }
};


function submitForm(form, url, parentDivId)
{
  setButtonsToWait(form);

  var paramString = getFormFields(form);
  var userHelperComponent = new SubmitFormComponent(parentDivId, form);

  var ajaxHelper = new net.ContentLoader( userHelperComponent, url, 'POST', paramString );
  form.style.cursor='wait';
  ajaxHelper.sendRequest();  
}

function submitForm_updateFCK(form, url, parentDivId)
{
  updateFCK();
  submitForm(form, url, parentDivId);
}


function updateFCK()
{
  for ( i = 0; i < this.frames.length; ++i )
  {
    if ( this.frames[i].FCK )
    {
      this.frames[i].FCK.UpdateLinkedField();
    }
  }

}

function openFileUploadWindow(phpFile, formId, fieldName, maxDimension)
{
  window.open(phpFile+"?formId="+formId+"&fieldName="+fieldName+"&maxDimension="+maxDimension,"fileUploadWindow","location=no,menubar=no,titlebar=no,width=450,height=100,resizable=no,scrollbars=no");
}

function setFileField(formId, fieldName, fileName, filePath)
{
  var form = document.getElementById(formId);
  var inputFields = form.getElementsByTagName("input");

  for (i=0; i<inputFields.length; i++)
  {
    if(inputFields[i].name == fieldName)
    {
      inputFields[i].value = fileName;
    }
  }
  
  var imgFields = form.getElementsByTagName("img");
   
  for (i=0; i<imgFields.length; i++)
  {
    if(imgFields[i].name == fieldName)
    {  
      imgFields[i].src = filePath+"/"+fileName;
    }
  }
}

function viewItem_updateFCK(url, disableCursorDiv, presentationDiv)
{
  updateFCK();
  viewItem(url, disableCursorDiv, presentationDiv);
}

function viewItem(url, disableCursorDiv, presentationDiv)
{
  setButtonsToWait(document.getElementById(disableCursorDiv));

  var userHelperComponent = new viewItemComponent(disableCursorDiv, presentationDiv);

  var ajaxHelper = new net.ContentLoader( userHelperComponent, url, 'POST', '' );
 // form.style.cursor='wait';
  ajaxHelper.sendRequest();  
}


function viewItemComponent(disableCursorDiv, presentationDiv) 
{
  this.disableCursorDiv = disableCursorDiv;
  this.presentationDiv = presentationDiv;
}
viewItemComponent.prototype = {

   ajaxUpdate:  function(request) 
   {  
     setButtonsToDefault(document.getElementById(this.disableCursorDiv));
//   alert(serializeXML(request.responseXML)); 
      if (request.responseXML.getElementsByTagName("errorMessage")[0])
      {
//        setButtonsToDefault(this.form);
//        this.form.style.cursor='default';
        alert(request.responseXML.getElementsByTagName("errorMessage")[0].firstChild.nodeValue);
      }
      else
      {
        var containerDiv = document.getElementById(this.presentationDiv);
        var spanNode = request.responseXML.getElementsByTagName("span")[0];
        var returnXMLString = formatXMLResponse(spanNode);   
// alert(returnXMLString);
        containerDiv.innerHTML = returnXMLString;

        var scriptArray = request.responseXML.getElementsByTagName("script");
        for (i=0; i<scriptArray.length; i++)
        {
          eval(escapeXML(scriptArray[i].firstChild.nodeValue));
        }

//containerDiv.innerHTML = serializeXML(newForm);
     }
   },

   handleError: function(request) 
   {
      defaultAjaxErrorHandler(request);
   }
};

function formatXMLResponse(spanNode)
{
  var returnXMLString = unescape(serializeXML(spanNode));
  
  return escapeXML(returnXMLString);
}

function escapeXML(xmlString)
{
  xmlString = xmlString.replace(/<!\[CDATA\[/gi, "");
  xmlString = xmlString.replace(/\]\]>/gi, "");
  xmlString = xmlString.replace(/&#38;/gi, "&");
  xmlString = xmlString.replace(/&amp;/gi, '&');
  xmlString = xmlString.replace(/&quot;/gi, '"');

  return xmlString;
}

function escapeParameters(parameterString)
{
  parameterString = parameterString.replace(/&/gi, "&amp;");
  return parameterString;
}


var selectedCellIndex;
// Dynamically sorts the detailed table based on the selected column
function sortColumn(column, tableID)
{
  var currDetailTable = document.getElementById(tableID);

  tableRows = currDetailTable.getElementsByTagName("tr");

  if (tableRows.length == 0)
  {
    return;
  }

  firstRowColumns = tableRows[0].getElementsByTagName("th");
  
  for ( i=0; i < firstRowColumns.length; ++i )
  {
    if (firstRowColumns[i] == column)
    {
      selectedCellIndex = i;
    }
  }

  var numOfRows = tableRows.length;

  // Only get rows that are not header rows
  var rows = Array();
  for ( i=0; i < numOfRows; ++i )
  {
    if (tableRows[i].getElementsByTagName("th").length == 0)
    {
      rows[rows.length] = tableRows[i];
    }
  }

  // determine the sort direction
  if (!column.sortdir)
  {
    column.sortdir= "asc";
  }
  else if (column.sortdir == "asc")
  {
    column.sortdir = "desc";
  }
  else
  {
    column.sortdir = "asc";
  }

  // determine which sort to use
  if (column.sortdir == "asc")
  {
    rows.sort(detailArrayStringAsc);
  }
  else
  {
    rows.sort(detailArrayStringDesc);
  }

/*
  if (column.datatype == "textString")
  {
    if (column.sortdir == "asc")
      rows.sort(detailArrayStringAsc);
    else
      rows.sort(detailArrayStringDesc);
  }
  else
  {
    if (column.sortdir == "asc")
      rows.sort(detailArrayNumberAsc);
    else
      rows.sort(detailArrayNumberDesc);
  }
*/

  // update the detail table with the sorted rows
  for (i=0; i < rows.length; i++ )
  {
    var thisRow = currDetailTable.tBodies[0].appendChild(rows[i]);
  }

  // display the newly sorted table
 // document.getElementById("treeDetails").innerHTML = currDetailTable.outerHTML;

}


// Dynamic sort function - Sort string in ascending order 
function detailArrayStringAsc(rowA, rowB)
{
  rowAColumns = rowA.getElementsByTagName("td");
  var rowASortCol = rowAColumns[selectedCellIndex];

  rowBColumns = rowB.getElementsByTagName("td");
  var rowBSortCol = rowBColumns[selectedCellIndex];
 
  if (rowASortCol.getElementsByTagName("a").length > 0)
  {
    rowASortCol = rowASortCol.getElementsByTagName("a")[0];
  }
  if (rowBSortCol.getElementsByTagName("a").length > 0)
  {
    rowBSortCol = rowBSortCol.getElementsByTagName("a")[0];
  }

  rowASortColValue = '';
  if (rowASortCol.firstChild)
  {
    rowASortColValue = rowASortCol.firstChild.nodeValue;
  }
  
  rowBSortColValue = '';
  if (rowBSortCol.firstChild)
  {
    rowBSortColValue = rowBSortCol.firstChild.nodeValue;
  }
  
  if (rowASortColValue > rowBSortColValue)
    return 1;
  else if (rowASortColValue < rowBSortColValue)
    return -1;
  else
    return 0;
}

// Dynamic sort function - Sort string in decending order 
function detailArrayStringDesc(rowA, rowB)
{
  rowAColumns = rowA.getElementsByTagName("td");
  var rowASortCol = rowAColumns[selectedCellIndex];

  rowBColumns = rowB.getElementsByTagName("td");
  var rowBSortCol = rowBColumns[selectedCellIndex];

  if (rowASortCol.getElementsByTagName("a").length > 0)
  {
    rowASortCol = rowASortCol.getElementsByTagName("a")[0];
  }
  if (rowBSortCol.getElementsByTagName("a").length > 0)
  {
    rowBSortCol = rowBSortCol.getElementsByTagName("a")[0];
  }

  rowASortColValue = '';
  if (rowASortCol.firstChild)
  {
    rowASortColValue = rowASortCol.firstChild.nodeValue;
  }
  
  rowBSortColValue = '';
  if (rowBSortCol.firstChild)
  {
    rowBSortColValue = rowBSortCol.firstChild.nodeValue;
  }

  if (rowASortColValue < rowBSortColValue)
    return 1;
  else if (rowASortColValue > rowBSortColValue)
    return -1;
  else
    return 0;
}



/*
function CreateNewCmFormComponent(parentDivId, form, redirectUrl) 
{
  this.parentDivId = parentDivId;
  this.form = form;
  this.redirectUrl = redirectUrl;
}
CreateNewCmFormComponent.prototype = {

   ajaxUpdate:  function(request) 
   {
  // alert(serializeXML(request.responseXML)); 
      if (request.responseXML.getElementsByTagName("errorMessage")[0])
      {
        setButtonsToDefault(this.form);
        this.form.style.cursor='default';
        alert(request.responseXML.getElementsByTagName("errorMessage")[0].firstChild.nodeValue);
      }
      else
      {
        //alert(request.responseXML.getElementsByTagName("successMessage")[0].firstChild.nodeValue);        
       
        var containerDiv = document.getElementById(this.parentDivId);
        var newForm = request.responseXML.getElementsByTagName("form")[0];
        var newId = request.responseXML.getElementsByTagName("objectId")[0];
        var newIdValue = newId.firstChild.nodeValue
       // alert(newIdValue);
        window.location= this.redirectUrl+newIdValue;
        
        //containerDiv.innerHTML = unescape(serializeXML(newForm));
     }
    
   },

   handleError: function(request) 
   {
      defaultAjaxErrorHandler(request);
   }

};


function createNewCmForm(form, url, parentDivId, redirectUrl)
{
  setButtonsToWait(form);

  var paramString = getFormFields(form);
  var userHelperComponent = new CreateNewCmFormComponent(parentDivId, form, redirectUrl);

  var ajaxHelper = new net.ContentLoader( userHelperComponent, url, 'POST', paramString );
  form.style.cursor='wait';
  ajaxHelper.sendRequest();  
}

function CmBuildFormComponent(parentDivId) 
{
  this.parentDivId = parentDivId;
}
CmBuildFormComponent.prototype = {

   ajaxUpdate:  function(request) 
   {
   //alert(serializeXML(request.responseXML)); 
      var containerDiv = document.getElementById(this.parentDivId);
      var newForm = request.responseXML.getElementsByTagName("form")[0];
      containerDiv.innerHTML = unescape(serializeXML(newForm));  
      
      var scripts = request.responseXML.getElementsByTagName("script");
      for (i=0; i<scripts.length; i++)
      {
        var javaScriptString = scripts[i].firstChild.nodeValue;
        eval(javaScriptString);
      }
      
   },

   handleError: function(request) 
   {
      defaultAjaxErrorHandler(request);
   }

};


function buildCmForm(form, url, parentDivId)
{
  setButtonsToWait(form);

  var paramString = getFormFields(form);
  var userHelperComponent = new CmBuildFormComponent(parentDivId);

  var ajaxHelper = new net.ContentLoader( userHelperComponent, url, 'POST', paramString );
  form.style.cursor='wait';
  ajaxHelper.sendRequest();  
}




function CmSubmitChildFormComponent(parentDivId, form) 
{
  this.parentDivId = parentDivId;
  this.form = form;
}
CmSubmitChildFormComponent.prototype = {

   ajaxUpdate:  function(request) 
   {
 //  alert(serializeXML(request.responseXML)); 
      if (request.responseXML.getElementsByTagName("errorMessage")[0])
      {
        setButtonsToDefault(this.form);
        this.form.style.cursor='default';
        alert(request.responseXML.getElementsByTagName("errorMessage")[0].firstChild.nodeValue);
      }
      else
      {
        //alert(request.responseXML.getElementsByTagName("successMessage")[0].firstChild.nodeValue);        
        var containerDiv = document.getElementById(this.parentDivId);
        var messageContainerDiv = request.responseXML.getElementsByTagName("div")[0];

        containerDiv.innerHTML = unescape(serializeXML(messageContainerDiv));
     }
   },

   handleError: function(request) 
   {
      defaultAjaxErrorHandler(request);
   }

};


function submitCmChildForm(form, url, parentDivId)
{
  setButtonsToWait(form);

  var paramString = getFormFields(form);
  var userHelperComponent = new CmSubmitChildFormComponent(parentDivId, form);

  var ajaxHelper = new net.ContentLoader( userHelperComponent, url, 'POST', paramString );
  form.style.cursor='wait';
  ajaxHelper.sendRequest();  
}

function buildCmChildForm(url, parentDivId)
{ 
  var userHelperComponent = new CmBuildFormComponent(parentDivId);
  var ajaxHelper = new net.ContentLoader( userHelperComponent, url, 'POST', "" );
  ajaxHelper.sendRequest();  
}


// Generic 
function GenericComponent(parentDivId) 
{
  this.parentDivId = parentDivId;
}
GenericComponent.prototype = {

   ajaxUpdate:  function(request) 
   {
     var someString = serializeXML(request.responseXML);
//alert(someString);
     someString=someString.replace(/&amp;/g,"&");
     someString=someString.replace(/&lt;/g,"<");
     someString=someString.replace(/&gt;/g,">");

//alert(someString.replace(/&amp;/g,"&"));
     //alert(request.responseXML.getElementsByTagName("successMessage")[0].firstChild.nodeValue);        
     var containerDiv = document.getElementById(this.parentDivId);
     var messageContainerDiv = request.responseXML.getElementsByTagName("response")[0];

//     containerDiv.innerHTML = unescape(serializeXML(messageContainerDiv));
     containerDiv.innerHTML = unescape(someString.replace(/&amp;/g,"&"));
     containerDiv.style.cursor='default';
     
     var scripts = request.responseXML.getElementsByTagName("script");
     for (i=0; i<scripts.length; i++)
     {
       var javaScriptString = scripts[i].firstChild.nodeValue;
       eval(javaScriptString);
     }
   },

   handleError: function(request) 
   {
 
      defaultAjaxErrorHandler(request);
   }

};

function genericAjaxSubmit(url, parentDivId, paramString)
{ 
  var userHelperComponent = new GenericComponent(parentDivId);  
  var ajaxHelper = new net.ContentLoader( userHelperComponent, url, 'GET', paramString );
  ajaxHelper.sendRequest();
}
*/

