﻿
function cbLoadDocNoAsync(docName)
{
    return  $.ajax({
        url: docName,
        async: false
        }).responseXML;
}
 
function RemoteXSLT(xmlData, xslPath)
{
    var xsl = cbLoadDocNoAsync("styles/" + xslPath);
    return cbXSLTransform(xmlData, xsl);
}

/*************HELP Text related functions************/
//Extract help text from HelpText.xml, based on the reference number in the span. This way, help text can be reused in multiple places
function GetHelpText()
{
    $.get("HelpText.xml", function(data){
        ProcessHelpText(data);
    });
}
        
function ProcessHelpText(data)
{
    //replace titles of all span elements that have the toolTip class
    $('span.toolTip').each(function(){
        var refSearch = "Tip[Ref='" + this.title + "']";
        var text = $(data).find(refSearch).attr("Text");
        if( text != null)
        {
            this.title = text;
        }
    });
    //Make helptext show on hover
    InitTooltip();
}
/*************END HELP Text related functions************/

function cbXSLTransform(xmlDoc, xslDoc)
{
    if(window.ActiveXObject)
    {
        return xmlDoc.transformNode(xslDoc);
    }
    else
    {
        var processor = new XSLTProcessor();
        processor.importStylesheet(xslDoc);            
        
        var newDocument = processor.transformToDocument(xmlDoc);
        return (new XMLSerializer()).serializeToString(newDocument);
    }
}

function AJAXTransform(params)
{
    SetAJAXStatus(params.targetElement);
    
    var ServicePath = "services/";
    if( params.timeout == null)
        params.timeout = 60000; //default timeout
        
    if( params.replace == null)
        params.replace = false; //append content by default        
        
    if( params.animate == null)
        params.animate = true; //append content by default
    
    $.ajax({
        url: ServicePath + params.url,
        success: function(data, textStatus){ 
                        if( params.xslPath != null )
                            ProcessResponse(data, textStatus, params.xslPath, params.targetElement, params.replace, params.animate);
                        if (params.success != null) params.success(data); },
        error: function (XMLHttpRequest, textStatus, errorThrown){ Failure(XMLHttpRequest, textStatus, errorThrown, params.targetElement); },
        timeout: params.timeout
        });
}

function ProcessResponse(data, textStatus, xslPath, targetElement, replace, animate)
{
    try
    {
        var i;
        for(i=0; i<xslPath.length; i++)
        {
            var resultHTML = RemoteXSLT(data, xslPath[i])
            ClearOverlay(targetElement[i]);
            
            //hiding effects
            if(animate==true)
                targetElement[i].hide();
            
            if(replace ==true)
                targetElement[i].html( resultHTML );
            else
                targetElement[i].append( resultHTML );

            if(animate==true)
                targetElement[i].slideDown(300);
            //retrieve help text after every AJAX load
            //GetHelpText();
        }
    }
    catch( err)
    {
        //TODO: remove for deployment
        alert( "script error: " + err.message);
    }
}

function SetAJAXStatus( element )
{
    if (element != null)
    {
        $(element).each( function(i){
            SetOverlay("", this);
            });
    }
}

function ClearOverlay(element)
{
    if( element != null )
    {
        element.unblock();
    }
}

function SetOverlay( message, element )
{
    if( element != null )
    {
        if( message == "")
            element.block("<div class='AJAXStatus'><img src='images/ajax-loader.gif'><div>" + message + "</div></div>");
        else
            element.block("<div class='AJAXStatus'><div>" + message + "</div></div>");
    }
}

function Failure(request, textStatus, errorThrown, element)
{
   if (element != null)
    {
       $(element).each( function(i){
        SetOverlay("Server Error.", this);
        });
    }
}

function GetResponseString(xml)
{
    var strElement = jQuery(xml).find("string");   
    if( strElement != null )
        return strElement.text();
    else
        return "";
}

/* Not using anymore. Native function, does not use any libraries
function cbLoadDocNoAsyncOld(docName)
{
    var doc;
    if (window.ActiveXObject)
    {
          doc =new ActiveXObject("Microsoft.XMLDOM");
          doc.async="false";
          doc.load(docName);
    }
    // code for Mozilla, Firefox, Opera, etc.
    else if (document.implementation && document.implementation.createDocument)
    {
      doc=document.implementation.createDocument("","",null);
      doc.async = false;
      doc.load(docName);
    }
    else
    {
      alert('Your browser is not supported. Please use IE or Firefox');
    }
    return doc;
}
*/

/*
    //using Scriptaculous
    function RetrieveSchools(sortCol)
    {
        SetStatus("loading...");
        var url = '../services/School.asmx/ListOfSchools?sortby=' + sortCol;
        var newRequest = new Ajax.Request(url, {method: 'GET',onSuccess: function(transport){ ProcessResponse(transport);}, 
                                                              onFailure: function(transport){ Failure(transport);},
                                                              onException: function(transport, error){ Exception(transport, error);}
                                                });
    }
*/