﻿// ##############################################
// ----------------------------------------------
//        Ajax JavaScript for Webzone06
// ----------------------------------------------
// ##############################################


var ajaxCallIsActive = false;
var http;
var ajaxListeners = new Array(); //this is an array of methods to be called
var ARR_MSIE_XMLHTTP_VERS = ["MSXML2.XmlHttp.6.0", 
                         "MSXML2.XmlHttp.5.0", "MSXML2.XmlHttp.4.0", 
                         "MSXML2.XmlHttp.3.0", "MSXML2.XmlHttp",
                         "Microsoft.XmlHttp"];

function getHTTPObject() {
    var xmlhttp;
    if(window.XMLHttpRequest) 
    {
        xmlhttp = new XMLHttpRequest();
    }
    else if(window.ActiveXObject) 
    {
        for (var i=0; i < ARR_MSIE_XMLHTTP_VERS.length; i++) {
            try {
                xmlhttp = new ActiveXObject(ARR_MSIE_XMLHTTP_VERS[i]);
                break;
            } catch (e) {}
        }
    }
    else 
    {
        xmlhttp = null;
    }
    return xmlhttp;
}

if (!http) {
    http = getHTTPObject();
}


function handleHttpResponse() {
    var data = "";
    var state = http.readyState;
    
    switch (state) {
        case 4: 
            data = http.responseText;
            /*if (data.indexOf('invalid') == -1) {
             }*/
            ajaxCallIsActive = false;
            break;
    }
    
    //calling listeners
    for (var i = 0; i < ajaxListeners.length; i++) {
        if (ajaxListeners[i] != null) {
            ajaxListeners[i](state, data);
        }        
    }   
}

function addAjaxListener(listenerFunction) {
    //only add method once
    for(var i = 0; i < ajaxListeners.length; i++) {
        if (ajaxListeners[i] == listenerFunction) {
            return;
        }
    }
    ajaxListeners.push(listenerFunction);
}

function removeAjaxListener(listenerFunction) {
    for(var i = 0; i < ajaxListeners.length; i++) {
        if (ajaxListeners[i] == listenerFunction) {
            ajaxListeners[i] = null;
            break;
        }
    }
}

function sendHttpRequest(url, headers) {
    if (!ajaxCallIsActive) {
        ajaxCallIsActive = true; 
        
        http.open("GET", url, true);  
        if (headers != null) {
            for (var i = 0; i < headers.length; i++) {
                addHeader(http, headers[i][0], headers[i][1]);
            }
        }
        http.onreadystatechange = handleHttpResponse;
        http.send(null);
    }
}

function addHeader(request,name,value) {
	if(value.length > 0)
	{
		var textTrimmed = value.replace(/\n/g, '\\n');
		request.setRequestHeader("ajax-"+name, urlEncodeAjax(textTrimmed));
	}
		else
	{
		request.setRequestHeader("ajax-"+name, ' ');
	}	
}

function echo(value) {
  var url = "../Project/Utilities/_dev_echo.aspx?data=";
  sendHttpRequest(url + value);
}

function loadControl(controlUrl, headers) {
    var url = "../Project/Utilities/control_loader.aspx?control=";
    if (headers != undefined) {
        sendHttpRequest(url + controlUrl, headers);
    } else {
        sendHttpRequest(url + controlUrl);
    }    
}

function urlEncodeAjax(str) {
	var result = "";
	
	/*
	for (i = 0; i < str.length; i++) {
		if (str.charAt(i) == " ") result += "+";
		else result += str.charAt(i);
	}
		
	return escape(result);
	*/
	return encodeURIComponent(str);
}