﻿//---------------------------------------------------------
//|||||||||||||>Community AJAX Tookit<|||||||||||||||||||||
//---------------------------------------------------------
//This took kit is only to house ajax specifc operations
//and validation of content.
//---------------------------------------------------------
//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
//---------------------------------------------------------

//Configurables
//------------------------------
var controlHandler = '/Handlers/InvokeControl.ashx?';
var methodHandler = '/Handlers/InvokeMethod.ashx?';
var xmlHttpNullMsg = 'Your current browser does not support XMLHTTP. Please upgrade your browser to a later version.';
var loadingImg = '<div align=\"center\" class=\"loadingimage\"><img align=\"center\" src=\'/Images/loader.gif\' border=0 /></div>';
//var loadingImg = '<div align=\"center\" class=\"loadingimage\"><img align=\"center\" src=\'/Images/loader.gif\' border=0 /></div>';
var dialogResizeImg = '/images/resize.png';
var dialogCssClass = 'resize';

var capture = null; var focus = null; var d = document; var b = document.body;
var sr = '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)';

function compileScript(script) {
    if (window.execScript)
        window.execScript(script);
    else
        window.setTimeout(script, 0);
}

function checkScripts(response) {
    var matchAll = new RegExp(sr, 'img');
    var matchOne = new RegExp(sr, 'im');

    var results = response.match(matchAll);
    if (results == null) return;

    for (var i = 0; i < results.length; i++) {
        if (results[i].match(matchOne)[1] != "")
            compileScript(results[i].match(matchOne)[1]);
    }
}

function displayLoadingImage(e) {
    if (ge(e)) {
        ge(e).innerHTML = loadingImg;
    }
}

function ajax(method, el) {

    displayLoadingImage(el);

    var xmlhttp = null;

    if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
    }
    else if (window.ActiveXObject) {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    if (xmlhttp != null) {
        var data = method;
        //xmlhttp.open('post', controlHandler, false); // Specifying true as the last parameter in Open() sets the request to be async.
        xmlhttp.onreadystatechange = function() { InvokeControlCallBack(el, xmlhttp, false); };
        xmlhttp.open('post', controlHandler, true);
        xmlhttp.setRequestHeader('Content-type', 'text/xml');
        xmlhttp.setRequestHeader('Content-length', data.length);
        xmlhttp.setRequestHeader('Connection', 'close');
        xmlhttp.send(data);
    }
    else {
        alert(xmlHttpNullMsg);
    }
}

//Used to call a server side function with a variable collection.
function InvokeControl(method, el, keys, values, passedParams, isInvisible, isSynchronous) {
    
    //displayLoadingImage(el);
    var xmlhttp = null;
    var params = '';
    var query;

    if (keys != null && keys.length > 0) {
        params = null;
        params = buildAjaxCallArgs(keys, values);        
    }

    query = controlHandler + params;

    if (passedParams == null || passedParams == '') {
        //Do nothing if passParams is null
    }
    else {
        //alert('passed : ' + passedParams);
        query = controlHandler + passedParams;
    }

    //alert(query);

    if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
    }
    else if (window.ActiveXObject) {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    if (xmlhttp != null) {
        var data = method;
        if (!isSynchronous) {
            //Synchronous Request
            //alert('Sync');
            xmlhttp.open('post', query, false);
            xmlhttp.setRequestHeader('Content-type', 'text/xml');
            xmlhttp.setRequestHeader('Content-length', data.length);
            xmlhttp.setRequestHeader('Connection', 'close');
            xmlhttp.send(data);
            InvokeControlCallBack(el, xmlhttp, isInvisible);           
        }
        else {
            //Asynchronous Request
            //alert('Async');
            xmlhttp.onreadystatechange = function() { InvokeControlCallBack(el, xmlhttp, isInvisible); };
            xmlhttp.open('post', query, true);
            xmlhttp.setRequestHeader('Content-type', 'text/xml');
            xmlhttp.setRequestHeader('Content-length', data.length);
            xmlhttp.setRequestHeader('Connection', 'close');
            xmlhttp.send(data);
        }
    }
    else {
        alert(xmlHttpNullMsg);
    }
}

function InvokeControlCallBack(el, xmlhttp, isInvisible) {

    if (ge(el)) {

        //We need to check to see if the request finished loading and
        //returned a readystate of code 4 which means completed.

        if (xmlhttp.readyState == 4) {

            if (ge(el).parentNode.id == 'colLeft' || ge(el).parentNode.parentNode.id == 'colLeft' || ge(el).parentNode.parentNode.parentNode.id == 'colLeft') {
                ge(el).innerHTML = xmlhttp.responseText;
            }
            else {

                if (window.XMLHttpRequest) {
                    ge(el).innerHTML = (xmlhttp.responseText != null && xmlhttp != '' ? xmlhttp.responseText : 'Module failed to render.');
                    //ge(el).scrollIntoView(true);

                } else {
                    var textInfo = xmlhttp.responseText;
                    ge(el).innerHTML = '<h1>It looks like you are using Internet Explorer 5 or 6. This site has been built to comply with Internet Explorer 7.0 or greater. <a href="http://www.microsoft.com/windows/internet-explorer/default.aspx">Please click here to download a newer version.</a></h1>';
                }
            }

            if (isInvisible)
                ge(el).style.display = 'none';

            checkScripts((xmlhttp.responseText != null && xmlhttp != '' ? xmlhttp.responseText : ''));
        }
    }
}

function CloseActiveModule(moduleID) {

    if (!document.getElementById(moduleID) && document.getElementById(moduleID).parentNode.id == 'colLeft') {
        
    }
    else if (!document.getElementById(moduleID) && document.getElementById(document.getElementById(moduleID).parentNode).id == 'colLeft') {

    }

}

function InvokeMethod(method, el, keys, values, transmissionType) {
    //displayLoadingImage(el);

    var xmlhttp = null;
    var params;
    var query;

    if (keys.length > 0) {
        params = buildAjaxCallArgs(keys, values);
        query = methodHandler + params;
    }

    if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
    }
    else if (window.ActiveXObject) {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    if (transmissionType == "post") {
        query = methodHandler;
    }
    else {
        query = methodHandler + params;
    }

    //alert(query);
    //alert(params);
    //alert(params.length);

    if (xmlhttp != null) {
        var data = method;
        xmlhttp.open('post', query, false);
        //xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
        xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
        xmlhttp.setRequestHeader('Content-length', data.length);
        xmlhttp.setRequestHeader('Connection', 'close');

        //Switch to post data. This is to facilitate unicode culture charsets that cause problems with querystrings.
        if (transmissionType == "post") {
            //alert(data);
            xmlhttp.send(params + '&method=' + data);
        }
        else {
            xmlhttp.send(data);
        }        

        //MT: For some reason the contact control fails here just before it compiles scripts.
        checkScripts(xmlhttp.responseText);

        /*if(ge(el))
        {
        ge(el).innerHTML=xmlhttp.responseText;  
        }   */

        return xmlhttp.responseText;

    }
    else {
        alert(xmlHttpNullMsg);
    }
}


function ajaxParamVoid(method, keys, values) {
    var xmlhttp = null;
    var params;

    if (keys.length > 0) {
        params = buildAjaxCallArgs(keys, values);
        target = target + params;
    }

    if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
    }
    else if (window.ActiveXObject) {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    if (xmlhttp != null) {
        var data = method; xmlhttp.open('post', controlHandler, false);
        xmlhttp.setRequestHeader('Content-type', 'text/xml');
        xmlhttp.setRequestHeader('Content-length', data.length);
        xmlhttp.setRequestHeader('Connection', 'close');
        xmlhttp.send(data);

    }
    else {
        alert(xmlHttpNullMsg);
    }
}


function buildAjaxCallArgs(keys, values) {
    var output = '';

    for (var i = 0; i < keys.length; i++) {
        output = output + keys[i] + '=' + values[i] + '&';
    }

    return output;
}
