/* ajax functions */
function dataManager(div_id) {
    var self = this;
    self.eReqCompleted = null;
    this.eReqCompleted = self.eReqCompleted;
    self.eReqFailed    = null;
    this.eReqFailed    = self.eReqFailed;

    this.dataHandler = function(req) {
        var dataHandler = function() {
            if (req.readyState == 4) {
                if (req.status == 200) {
                    self.eReqCompleted(req, div_id);
                }
                else {
                    self.eReqFailed(req, div_id);
                }
            }
        }
        dataHandler.req           = req;
        dataHandler.eReqCompleted = self.eReqCompleted;
        dataHandler.eReqFailed    = self.eReqFailed;
        return dataHandler;
    }

    this.InitiateXmlHttpRequest = function() {
        var req = null;
        try {
            req = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch(e) {
            try {
                req = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch(oc)   {
                req = null;
            }
        }
        if ( !req && typeof(XMLHttpRequest) != "undefined") {
            req = new XMLHttpRequest();
        }
        return req;
    }

    this.loadData = function(dataSource) {
        var req = this.InitiateXmlHttpRequest();
        if (req != null){
            try {
                req.onreadystatechange = this.dataHandler(req);
                req.open('GET', dataSource, true);
                req.send(null);
            }
            catch(oc)   {
                alert(oc);
            }
        }
    }
}

function failed(req, div_id) {
    document.getElementById(div_id).innerHTML = 'err';
}

function completed(req, div_id) {
    //document.getElementById(div_id).innerHTML = req.responseText;
    var data = req.responseText.split("||JavaScriptCode||");
    document.getElementById(div_id).innerHTML = data[0];
    eval(data[1]);
}

function ajax(URL, div_id, disable_loader) {
    // if you don't want the loader to appear set the 3rd parameter to any value
    if (disable_loader == null) {
        loading(div_id);
    }
    else if( disable_loader == 'clear' )
    {
        clear(div_id);
    }
    var dm = new dataManager(div_id);
    dm.eReqCompleted = completed;
    dm.eReqFailed = failed;
    dm.loadData(URL);
}

function clear(div_id) {
    // if you want to clear the div before loading ajax content set disable_loader parameter to 'clear'

    if (!document.getElementsByTagName) return false;
    if (!document.getElementById) return false;
    if (!document.getElementById(div_id)) return false;
    var div = document.getElementById(div_id);

    div.innerHTML = '';
}

/**
 * Provides loading image to given class ID
 *
 * @param div_id ID of the object
 */
function loading(div_id) {
    // replaces the data in the div with the loading sign

	// this time we're going nuclear - with jQUERY!
	var obj = null;

	if (div_id instanceof jQuery) {
		obj = div_id;
	} else {
		obj = $('#'+div_id);
	}

	if (obj === null) {
		return false;
	}

	var height = Math.max(obj.innerHeight(),16);
	obj.html($('<div></div>').height(height).addClass('loading'));

	return true;

//    // first lets make sure the browser understands the DOM methods we will be using
//    if (!document.getElementsByTagName) return false;
//    if (!document.getElementById) return false;
//
//    // make sure the div exists
//    if (!document.getElementById(div_id)) return false;
//    var div = document.getElementById(div_id);
//
//    var old_height = div.clientHeight;
//
//    // remove all child nodes
//    while (div.firstChild)
//    {
//        div.removeChild(div.firstChild);
//    }
//
//    // add the loading element
//    var loading = document.createElement("div");
//    loading.className = "loading";
//    if (old_height > 16) {
//        loading.style.height = old_height+"px";
//    }
//    div.appendChild(loading);

}

