﻿
req = null;
function AjaxRequest() {
    // global flag
    this.isIE = false;

    // global request and XML document objects
    this.RequestObject = null;

    var Asynchron = true;
    this.finished = false;

    // init the Object
    function AjaxRequest_init() {

        // branch for native XMLHttpRequest object
        if (window.XMLHttpRequest) {
            this.RequestObject = new XMLHttpRequest();
        // branch for IE/Windows ActiveX version
        } else if (window.ActiveXObject) {
          this.isIE = true;
          this.RequestObject = new ActiveXObject("Microsoft.XMLHTTP");
        }

        return this.RequestObject;
    }

    function SetHandler(){
        if (this.isIE){
             this.RequestObject.onreadystatechange = DefaultProcessReqHandlerIE;
        } else {
            this.RequestObject.onreadystatechange = DefaultProcessReqHandler;
        }
    }

    function DefaultProcessReqHandler() {
        DefaultProcessReqChange(RequestObject);
    }
    function DefaultProcessReqHandlerIE() {
        DefaultProcessReqChange(RequestObject);
    }

    function DefaultProcessReqChange(req) {
        
        if (req.readyState == 4) {
            // only if "OK"
            if (req.status == 200) {
                me.finished = true;
                
                //alert(me.Handler);
                if (me.Handler!=null) me.Handler(me);

                /*wnd = window.open("", "debug");
                wnd.document.write(req.responseText);
                wnd.document.close();*/


                
            } else {
                alert("There was a problem retrieving the XML data:\n" + req.statusText);
            }
        }
    }

    me = this;
    var Handler = null;
    this.RequestObject = AjaxRequest_init();


    //Post Data to the URL
    function PostData(url, parameters) {
        if (this.RequestObject) {
            SetHandler();
            this.finished = false;
            this.RequestObject.open('POST', url, Asynchron);
            this.RequestObject.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
            this.RequestObject.send(parameters);
        }
    }
    this.PostData = PostData;

    // Bild a Parameter set for the specified Form
    function GetFormData(formid){
        form = document.getElementById(formid);
        str = "";
        for (i=0; i<form.elements.length; i++) {
            name ="&"
            name+=form.elements[i].name;
            name+="=";

            if (form.elements[i].type=="checkbox") {
                if (form.elements[i].checked) str+=name+encodeURI(form.elements[i].value);
            } else if (form.elements[i].type=="radio") {
                if (form.elements[i].checked) str+=name+encodeURI(form.elements[i].value);
            } else {
                str+=name+encodeURI(form.elements[i].value);
            }
        }

        return str;
    }
    this.GetFormParameters = GetFormData;

    //Post the Data of a Form to the URL
    function PostForm(url, formid) {
        PostData(url, GetFormData(formid));
    }
    this.PostForm = PostForm;

    //Load remote Data
    function Load(url) {
        Load(url, null);
    }
    function Load(url, parameters) {
        if (this.RequestObject) {
        //alert(url);
            SetHandler();
            this.finished = false;
            this.RequestObject.open('GET', url, Asynchron);
            this.RequestObject.send(parameters);
        }
    }
    this.Load = Load;

    // true if all Operations did finish, and a Result is available
    function IsFinished(){
        return this.finished;
    }
    this.IsFinished = IsFinished;

    // when a operation was finished, this contains the Responded Text
    function GetResponseText(){
        return this.RequestObject.responseText;
    }
    this.ResponseText = GetResponseText;

    // when a operation was finished, this contains the Responded XML
    function GetResponseXML(){
        return this.RequestObject.responseXML;
    }
    this.ResponseXML = GetResponseXML;

    var Tag = null;
}
