﻿// JScript File

/*
=====================================================================================================================
AJAX Handlers
=====================================================================================================================
*/
var ajaxRequest = false;
var bHasAJAXResponse = false;
var isIE = (navigator.appVersion.toLowerCase().indexOf('msie') > -1);
var xmlMasterDoc = null;
var sAjaxTimer = null;


// gets the correct object based on the browser
function liGetHttpRequestObject()
{
    var ajaxLoadReq = false;

    if(window.XMLHttpRequest) { ajaxLoadReq = new XMLHttpRequest(); }                                                              
                                                                                                  
    if(ajaxLoadReq && ajaxLoadReq.readyState < 4) { ajaxLoadReq.abort(); }
    if(!window.XMLHttpRequest && window.ActiveXObject) { ajaxLoadReq = new ActiveXObject('Microsoft.XMLHTTP'); } 
    
    return ajaxLoadReq;
}


/*
 This function loads an xml document, transforms it using the XSL file, then writes the resulting HTML to a span on the page
 sSpanId: [the id of the document element to insert result in
 sHandlerUrl: Url of the handler that generates the XML
 sXslUrl: Url of the XSL file
 */
function liLoadTransformedXml(sSpanId, sHandlerUrl, sXslUrl)
{
   // declare and initialize the Active X / XML HTTP Object
//   window.open(sHandlerUrl);
//   window.open(sXslUrl);
    var ajaxLoadReq = false;
    var xmlDoc = "";
    var sTaggedUrl = sHandlerUrl
    if (sTaggedUrl != null)
    {
        sTaggedUrl += "&rantag=" + Math.random();
   
        ajaxLoadReq = liGetHttpRequestObject();
      
        // define the function to use
        ajaxLoadReq.onreadystatechange = function() { 
            if (ajaxLoadReq.readyState == 4 && ajaxLoadReq.status == '200') 
            { 
                liTransformXml(sSpanId, ajaxLoadReq.responseText, sXslUrl);
                liLoadOrphanContent(); 
            }
        } ; // liTransformXml(sSpanId, xmlDoc, sXslUrl) } };
        
        ajaxLoadReq.open('GET', sTaggedUrl)
        ajaxLoadReq.send(null); 
    }   
}
/*
Combine functionality of a submit and regular load
*/
function liSubmitAndLoad(sSpanId, sHandlerURL, sXslUrl, sValidator)
{
        if (sValidator && sValidator != '')
        {
            var bVal = eval('((window.' + sValidator + ')?' + sValidator + ':true);');
            if (!bVal) { return false; }
        }

               
	    var sUrl = sHandlerURL + liGetFormData();
	    //document.write(sUrl);
       liLoadTransformedXml(sSpanId, sUrl, sXslUrl);
	                                       
}

function liTransformXml(sSpanId, sXml, sXslUrl)
{
    var xmlDoc = importXML(sXml);
    var xslDoc = null;
    //alert(xmlDoc)
    if (!isIE) 
    {
        var serializer = new XMLSerializer();
        document.getElementById(sSpanId).innerHTML = liEscapeFF(serializer.serializeToString(liDoTransform(xmlDoc, sXslUrl)));
    }
    else
    {
        document.getElementById(sSpanId).innerHTML = liDoTransform(xmlDoc, sXslUrl); //xmlDoc.transformNode(xslDoc);
        //alert(document.getElementById(sSpanId).innerHTML);
    }
    
}

/*
hack for FireFox stupid XSL parser routine
*/
function liEscapeFF(sVal)
{
    return sVal.replace(/&lt;/g,'<').replace(/&gt;/g,'>');
}

/*
this is the function used to submit a form through a client call
sQS: The base url of the submission handler (aspx, ashx, whatever)
sValidator: string name of a functionthat can be used for validation
*/
function liSubmitAjax(sQS,sValidator) 
{
        if (sValidator && sValidator != '')
        {
            var bVal = eval(sValidator);
            if (!bVal) { return false; }
   
        }
        
	    var sUrl = sQS + liGetFormData();
	    //window.open(sUrl);
	    //alert(sUrl);
	    bHasAJAXResponse = false;

        if(window.XMLHttpRequest) { ajaxRequest = new XMLHttpRequest(); }                                                              
                                                                                                          
        if(ajaxRequest && ajaxRequest.readyState < 4) { ajaxRequest.abort(); }
        if(!window.XMLHttpRequest && window.ActiveXObject) { ajaxRequest = new ActiveXObject('Microsoft.XMLHTTP'); }

        ajaxRequest.onreadystatechange = liProcessAjaxResponse; // This is the function below that responds to the ready event
        ajaxRequest.open('GET', sUrl)
        ajaxRequest.send(null);   
        
        sAjaxTimer = setInterval('liCheckAjaxResponse();',200);                                                
}

function liProcessAjaxResponse() 
{
	if(ajaxRequest.readyState == 4) 
	{    
	    if (ajaxRequest.status == '200')
	    {               
	        //alert(ajaxRequest.responseText);
		    xmlMasterDoc = importXML(ajaxRequest.responseText);
		    bHasAJAXResponse = true;                                                                                		    
		}
		else
		{
		    alert('The resource required to process the current request could NOT be located at this time.');
		    clearInterval(sAjaxTimer);
		    liDisableControls(false);
		}
		ajaxRequest = false;
	}
}

function liCheckAjaxResponse()
{
    if (bHasAJAXResponse)
    {
        clearInterval(sAjaxTimer);
        if (xmlMasterDoc.getElementsByTagName('error').length > 0)
        {
            alert('ERROR:\n' + xmlMasterDoc.getElementsByTagName('error')[0].childNodes[0].nodeValue);
            //alert(xmlMasterDoc.xml);
        }
        else
        {
            if (xmlMasterDoc.getElementsByTagName('displayMessage')[0].childNodes[0].nodeValue == 'true')
            {
                alert(xmlMasterDoc.getElementsByTagName('messageText')[0].childNodes[0].nodeValue);
            }
            if (xmlMasterDoc.getElementsByTagName('clientFunction')[0].childNodes.length > 0 && xmlMasterDoc.getElementsByTagName('clientFunction')[0].childNodes[0].nodeValue != '')
            {
                var sCall = '';
                try
                {
                    sCall = xmlMasterDoc.getElementsByTagName('clientFunction')[0].childNodes[0].nodeValue + '(xmlMasterDoc);';
                    eval(sCall);
                }
                catch (e)
                {
                    alert('ERROR CALLING CLIENT FUNCTION ' + sCall + '\n' + e.message);
                }
            }            
        }
        liDisableControls(false);
    }
    
}


// this function loads XML / XSL from a string
function importXML(sXmlString)
{
    var xmlDoc = null;
	if (document.implementation && document.implementation.createDocument)
	{
		xmlDoc = document.implementation.createDocument("", "", null);
		var parser = new DOMParser();
		xmlDoc = parser.parseFromString(sXmlString,"text/xml"); 
	}
	else if (window.ActiveXObject)
	{	
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async = false;
		if (xmlDoc != null) { xmlDoc.loadXML(sXmlString); }	
 	}
	else
	{
		alert('Your browser does not support XML handling.');
		return;
	}
	
	
	//alert(xmlDoc.documentElement.nodeValue);
	return xmlDoc;
}


// This function loads xml / xsl from a URL
function loadXML(sXmlUrl)
{
    var xmlDoc = null;
	if (document.implementation && document.implementation.createDocument)
	{
		xmlDoc = document.implementation.createDocument("", "", null);
	}
	else if (window.ActiveXObject)
	{	
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async = false;
 	}
	else
	{
		alert('Your browser does not support XML handling.');
		return;
	}
	
	xmlDoc.validateOnParse = false;
	xmlDoc.load(sXmlUrl);

	return xmlDoc;
}

function liMozillaTransform(xslDoc, xmlDoc)
{
    var sRes = '';
    var xsltProcessor = new XSLTProcessor();
    xsltProcessor.importStylesheet(xslDoc);
    sRes = xsltProcessor.transformToFragment(xmlDoc, document); //xsltProcessor.transformToFragment(xmlDoc, document);

    return sRes;
}

// return a transformed string
function liDoTransform(xmlDoc, sXslUrl)
{
    var sRes = '';
    var xslStylesheet = '';
    
    if (document.implementation && document.implementation.createDocument)
    {
        var xsltProcessor = new XSLTProcessor();
        var myReq = liGetHttpRequestObject();
       
        myReq.open("GET", sXslUrl, false);
        myReq.send(null);
       
        
        if (myReq.readyState != 4) 
        { 
            myReq.onreadystatechange = function() { if (myReq.readyState == 4 && myReq.status == '200') { sRes = liMozillaTransform(myReq.responseXML,xmlDoc) } } ;
        }
        else
        {
            sRes = liMozillaTransform(myReq.responseXML,xmlDoc);
        }
    }
    else if(window.ActiveXObject)
    {
        xslStylesheet = loadXML(sXslUrl);
        sRes = xmlDoc.transformNode(xslStylesheet);
    }
    else
    {
        alert('Your browser does not support XML handling.');
    }
    return sRes;
}

function liCreateNewElement(sTagName, sId)
{
    var oDiv = null;
    if (!document.getElementById(sId))
    {
        var oBody = ((document.body)?document.body:document.documentElement);
        oDiv = document.createElement(sTagName);
            
        if (document.body)
        {
            oDiv.id = sId;
        }
        if (document.documentElement)
        {
            var attID =  document.createAttribute("id");
            attID.value=sId;
            oDiv.setAttributeNode(attID);        
        }

        oBody.appendChild(oDiv);
    }
    oDiv = document.getElementById(sId);
    
    return oDiv;
}

function liDisableControls(bVal)
{   
    var oEl = document.getElementsByTagName('INPUT');
    var i = 0;
    
    // inputs
    for (i=0; i<oEl.length; i++)
    {
        oEl[i].disabled = bVal;
    }
    
    // selects 
    oEl = document.getElementsByTagName('SELECT');   
    for (i=0; i<oEl.length; i++)
    {
        oEl[i].disabled = bVal;
    }
    
    // textareas
    oEl = document.getElementsByTagName('TEXTAREA');   
    for (i=0; i<oEl.length; i++)
    {
        oEl[i].disabled = bVal;
    }    
    
    // buttons
    oEl = document.getElementsByTagName('BUTTON');   
    for (i=0; i<oEl.length; i++)
    {
        oEl[i].disabled = bVal;
    }        
}

function liGetFormData()
{
    //alert(document.documentElement.clientHeight);
    liDisableControls(true);
    
    var sRet = '';
    var sUsed = '';
    
    var oEl = document.getElementsByTagName('INPUT');
    var i = 0;
    var x = 0;
    
    // get all the 'INPUT' Types first
    for (i=0; i<oEl.length; i++)
    {                
        switch (oEl[i].type.toLowerCase())
        {
            case 'text':
                sRet += ((sRet == '')?'':'&') + oEl[i].id + '=' + oEl[i].value;
                break;
            case 'password':
                sRet += ((sRet == '')?'':'&') + oEl[i].id + '=' + oEl[i].value;
                break;                
            case 'hidden':
                if (oEl[i].id.indexOf('_') != 0)
                {
                    sRet += ((sRet == '')?'':'&') + oEl[i].id + '=' + oEl[i].value;
                }
                break;                
            case 'radio':
                if (sUsed.indexOf('|'+oEl[i].name+'|') == -1)
                {
                    sUsed += '|' + oEl[i].name + '|';
                    var sRad = document.getElementsByName(oEl[i].name);
                    var sTmp = '';
                    for (x=0; x<sRad.length; x++)
                    {
                        if (sRad[x].checked)
                        {
                            sTmp += ((sTmp != '')?',':'') + sRad[x].value;
                        }
                    }  
                    sRet += ((sRet == '')?'':'&') + oEl[i].name + '=' + sTmp;
                }
                break;
            case 'checkbox':
                if (sUsed.indexOf('|'+oEl[i].name+'|') == -1)
                {
                    sUsed += '|' + oEl[i].name + '|';
                    var sRad = document.getElementsByName(oEl[i].name);
                    var sTmp = '';
                    for (x=0; x<sRad.length; x++)
                    {
                        if (sRad[x].checked)
                        {
                            sTmp += ((sTmp != '')?',':'') + sRad[x].value;
                        }
                    }  
                    sRet += ((sRet == '')?'':'&') + oEl[i].name + '=' + sTmp;
                }
                break;             
        }
               
    }
    
    oEl = document.getElementsByTagName('SELECT');
    // get all the 'SELECT' Types
    for (i=0; i<oEl.length; i++)
    {
        var sTmp = '';
        for (x=0; x<oEl[i].options.length; x++)
        {
            if (oEl[i].options[x].selected)
            {
                sTmp += ((sTmp != '')?',':'') + oEl[i].options[x].value;
            }
        }
        sRet += ((sRet == '')?'':'&') + oEl[i].id + '=' + sTmp; //oEl[i].value;
    }
    oEl = document.getElementsByTagName('TEXTAREA');
    // get all the 'TEXTAREA' Types
    for (i=0; i<oEl.length; i++)
    {
        sRet += ((sRet == '')?'':'&') + oEl[i].id + '=' + oEl[i].value;
    }  
    
    return sRet;
}

/*
========================================================================================================
Custom Form Validator
========================================================================================================
*/
function li_ValCustomForm() 
{
    var bRetVal = true;
    var sMsg = '';
    var i = 0;
    var nChkCnt = 0;
    var sUsed = '';
    
    // do all the inputs firt
    var oInp = document.getElementsByTagName('INPUT');
    
    for (i=0; i<oInp.length; i++)
    {
        if (oInp[i].cfReq && oInp[i].cfReq=='true')
        {
            if ((oInp[i].type.toLowerCase() == 'radio' || oInp[i].type.toLowerCase() == 'checkbox') && sUsed.indexOf('|'+oInp[i].id+'|') < 0)
            {
                var sID = oInp[i].id;
                sUsed += '|' + sID + '|';
                nChkCnt = 0;
                var oChk = document.getElementsByName(sID);
                var x = 0;
                for (x=0; x<oChk.length; x++)
                {
                    if (oChk[x].checked) { nChkCnt++ }
                }
                
                if (nChkCnt == 0) { bRetVal = false; sMsg+= oInp[i].cfLabel + ' is required.\n'; }
            }
            else if (oInp[i].type=='text')
            {
                if (oInp[i].value == '') { bRetVal = false; sMsg+= oInp[i].cfLabel + ' is required.\n'; }
            }
        }
    }
        
    // select
    oInp = document.getElementsByTagName('SELECT');
    for (i=0; i<oInp.length; i++)
    {
        if (oInp[i].cfReq && oInp[i].cfReq=='true')
        {    
            if (oInp[i].options[oInp[i].selectedIndex].value == '')
            {
                bRetVal = false;
                sMsg+= oInp[i].cfLabel + ' is required.\n';
            }   
        }
    } 
    
    // textarea
    oInp = document.getElementsByTagName('TEXTAREA');
    for (i=0; i<oInp.length; i++)
    {
        if (oInp[i].cfReq && oInp[i].cfReq=='true')
        {   
            if (oInp[i].value == '') { bRetVal = false; sMsg+= oInp[i].cfLabel + ' is required.\n'; }        
        }
    }
               
    if (!bRetVal) { alert(sMsg); } 
    //alert(bRetVal);
    return bRetVal; 
} 

function li_SubmitCustomForm(sVia, sTo, sRoot, sFormId)
{
    //alert('I It');
    var sHref = document.location.href;
    var sProt = sHref.substring(0,sHref.indexOf(':')+3);
    var sHost = sHref.replace(sProt,'').substring(0,sHref.replace(sProt,'').indexOf('/'));
    //alert(sProt + ' -- ' + sHost);
    //alert(sFormId);
    
    if (li_ValCustomForm())
    {
        switch (sVia)
        {
            case 'email':
                var sUrl = sProt + sHost + sRoot+'Pages/CustomFormHandler.ashx?mode=process&to='+sTo+'&tgtId=' + sFormId + '&';
                liSubmitAjax(sUrl);
                break;
            case 'database':
                var sUrl = sProt + sHost + sRoot+'Pages/CustomFormHandler.ashx?mode=processdb&to='+sTo+'&tgtId=' + sFormId + '&';
                //alert(sUrl);
                liSubmitAjax(sUrl);
                break;
            default:
                liSubmitAjax(sTo+((sTo.indexOf('?') > -1)?'&':'?'));
                break;
        }        
    }
}


function liLoadOrphanContent()
{
    var oSpan = document.getElementsByTagName('span');
    var i = 0;
    // iterate look for the special att, call liLoadTransformedXml();
    for (i=0; i<oSpan.length; i++)
    {
    
        if (oSpan[i].getAttribute('id')=='refreshRequired')
        {
           window.location.href=window.location.href;
        }
        if (oSpan[i].getAttribute('loaded') && oSpan[i].getAttribute('loaded')=='false')
        {
            // call the func
            oSpan[i].setAttribute('loaded','true')
            liLoadTransformedXml(oSpan[i].getAttribute('id'), oSpan[i].getAttribute('handler'), oSpan[i].getAttribute('xsl'));//sXslUrl)
        
         }
    }
    
}

function clickOnEnter(e,button){
    var key=e.keyCode || e.which;
    if (key==13){
        button.click();
    }
}