var xmlhttp;

function CallBackObject() {
    this.XmlHttp = this.GetHttpObject();
}

CallBackObject.prototype.GetHttpObject = function() {
    if (!xmlhttp) {
        /*@cc_on
        @if (@_jscript_version >= 5)
        try {
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (E) {
                xmlhttp = false;
            }
        }
        @else
  xmlhttp = false;
  @end
        @*/
        if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
            try {
                xmlhttp = new XMLHttpRequest();
            } catch (e) {
                xmlhttp = false;
            }
        } 
    }
    return xmlhttp;
}

CallBackObject.prototype.DoCallBack = function(eventTarget, eventArgument) {
    AddLoadingDiv();
    var theData = '';
    var theform = document.forms[0];
    var thePage = window.location.pathname + window.location.search;
    var eName = '';
    theData = '__EVENTTARGET=' + escape(eventTarget.split("$").join(":")) + '&';
    theData += '__EVENTARGUMENT=' + eventArgument + '&';
    theData += '__VIEWSTATE=' + escape(theform.__VIEWSTATE.value).replace(new RegExp('\\+', 'g'), '\%2b') + '&';
    theData += 'IsCallBack=true&';
    for (var i = 0; i < theform.elements.length; i++) {
        eName = theform.elements[i].name;
        if (eName && eName != '') {
            if (eName == '__EVENTTARGET' || eName == '__EVENTARGUMENT' || eName == '__VIEWSTATE') {
                // Do Nothing
            }
            else {
                theData = theData + escape(eName.split("$").join(":")) + '=' + theform.elements[i].value;
                if (i != theform.elements.length - 1)
                    theData = theData + '&';
            }
        }
    }

    if (this.XmlHttp) {
        if (this.XmlHttp.readyState == 4 || this.XmlHttp.readyState == 0) {
            var oThis = this;
            this.XmlHttp.open('POST', thePage, true);
            this.XmlHttp.onreadystatechange = function() { oThis.ReadyStateChange(); };
            this.XmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
            this.XmlHttp.send(theData);
        }
    }
}

CallBackObject.prototype.AbortCallBack = function() {
    if (this.XmlHttp)
        this.XmlHttp.abort();
}

CallBackObject.prototype.OnLoading = function() {
    // Loading
}

CallBackObject.prototype.OnLoaded = function() {
    // Loaded
}

CallBackObject.prototype.OnInteractive = function() {
    // Interactive
}

CallBackObject.prototype.OnComplete = function(responseText, responseXml) {
    // Complete
}

CallBackObject.prototype.OnAbort = function() {
    // Abort
}

CallBackObject.prototype.OnError = function(status, statusText) {
    // Error
}

CallBackObject.prototype.ReadyStateChange = function() {
    if (this.XmlHttp.readyState == 1) {
        this.OnLoading();
    }
    else if (this.XmlHttp.readyState == 2) {
        this.OnLoaded();
    }
    else if (this.XmlHttp.readyState == 3) {
        this.OnInteractive();
    }
    else if (this.XmlHttp.readyState == 4) {
        if (this.XmlHttp.status == 0) {
            RemoveLoadingDiv();
            this.OnAbort();
        } else if (this.XmlHttp.status == 200 && this.XmlHttp.statusText == "OK") {
            //the new method to kill the response is still displaying the rest 
            //of the html this section stops it from getting passed to the complete method		
            var strResponse = this.XmlHttp.responseText;
            //alert(strResponse);
            if (strResponse != "") {
                if (strResponse.indexOf("<html") != -1) {
                    strResponse = strResponse.substring(0, strResponse.indexOf("<html"));
                }
            }
            if (strResponse != "") {
                if (strResponse.indexOf("<HTML") != -1) {
                    strResponse = strResponse.substring(0, strResponse.indexOf("<HTML"));
                }
            }
            if (strResponse != "") {
                if (strResponse.indexOf("<!D") != -1) {
                    strResponse = strResponse.substring(0, strResponse.indexOf("<!"));
                }
            }
            strResponse = vipsTools.trim(strResponse);
            //alert(strResponse);
            RemoveLoadingDiv();
            this.OnComplete(strResponse, this.XmlHttp.responseXML);
        }
        else {
            RemoveLoadingDiv();
            this.OnError(this.XmlHttp.status, this.XmlHttp.statusText, this.XmlHttp.responseText);
        }
    }
}

function GetCoords(obj /*:object*/) {
    var newObj = new Object();
    newObj.x = obj.offsetLeft;
    newObj.y = obj.offsetTop;
    theParent = obj.offsetParent; //document.getElementById('alphaSearch');
    var Recording = document.getElementById("RecordCon");
    if (Recording == null) {
        while ((theParent != null) && (theParent.style.position != 'absolute')) {
            newObj.y += theParent.offsetTop;
            newObj.x += theParent.offsetLeft;
            theParent = theParent.offsetParent;
        }
    } else {
        newObj.x = 30;
        newObj.y = 30;
    }
    return newObj;
}

function AddLoadingDiv() {
    // Simple follow the mouse script

    var Ajaxdiv = new Element('div',
        { 'id': 'ajaxdiv',
            'class':'ajaxdiv',
            'html': '<img src="images/ajax-loader.gif" />Loading...',
            'styles':
                { 'position': 'absolute',
                    'left': '50%',
                    'top': '50%',
                    'background-color': 'white',
                    'z-index': '99'
                }
        });
        Ajaxdiv.inject($('footer')); // just to add it in, the div will float on top of everything
        
}
function RemoveLoadingDiv() {
    var Ajaxdiv = $('footer').getElements('.ajaxdiv]');
    if (Ajaxdiv) {
        Ajaxdiv.dispose();
    }
    document.onmousemove = null;

}

