/***********************************************
 *                                             *
 *  Copyright © BW Systems 2008.               *
 *                                             *
 *  Az oldal fejlesztoi joga a BW Systems Bt   *
 *  tulajdona. A szoftver felhasznalasa csak   *
 *  a BW Systems Bt. irasos engedelye birto-   *
 *  kaban, vagy a BW Systems Bt-vel kotott     *
 *  szerzodes alapjan lehetseges.              *
 *                                             *
 *  A szoftver engedely nelkuli felhasznalasa, *
 *  masolasa, modositasa, terjesztese vagy at- *
 *  adasa polgari es buntetojogi kovetkezme-   *
 *  nyekkel jarhat!                            *
 *                                             *
 *  BW Systems Bt. 2011 Budakalasz,            *
 *  Vasut sor 42.                              *
 *                                             *
 *  Cg.13-06-050782                            *
 *                                             *
 ***********************************************/

function BWS_XMLRequest() {

    var xmlrequest = false;
    var processResponse = false;

    this.url = false;
    this.method = 'GET';
    this.queryString = '';
    this.contentType = 'text/plain; charset=utf-8';

    /* XMLHttpRequest peldany letrehozasa
     */

    try {
        /* Microsoft Internet Explorer-fele megoldas
         */
        xmlrequest = new ActiveXObject("Microsoft.XMLHTTP");
    } catch(err) {
        try {
            /* Mozilla/Netscape-fele megoldas
             */
            xmlrequest = new XMLHttpRequest();
        } catch(err) {
            try {
                /* Opera-fele megoldas
                 */
                xmlrequest = window.XMLHttpRequest;
            } catch(err) {
                /* Nincs megoldas
                 */
                xmlrequest = false;
            }
        }
    }

    if (!xmlrequest) {
        errorMessage('XMLHttpRequest objektum nem hozható létre.\n '
            + 'Lehetséges okok: elavult böngésző, letiltott JavaScript vagy ActiveX vezérlők.');
        return false;
    }

    this.getUrl = function() {
        return this.url;
    }

    this.setUrl = function(value) {
        this.url = value;
    }

    this.getMethod = function() {
        return this.method;
    }

    this.setMethod = function(value) {
        this.method = value;
    }

    this.getQueryString = function() {
        return this.queryString;
    }

    this.setQueryString = function(value) {
        this.queryString = value;
    }
    
    this.getProcessResponse = function() {
        return processResponse;
    }

    this.setProcessResponse = function(value) {
        processResponse = value;
    }
    
    this.getContentType = function() {
        return this.contentType;
    }

    this.setContentType = function(value) {
        this.contentType = value;
    }

    this.go = function() {
        if (xmlrequest) {
            /* Megvan az XMLHttpRequest objektum, eloszor a valasz
             * kezelojenek meghatarozasa kovetkezik
             */
            xmlrequest.onreadystatechange = function() {
                if (xmlrequest.readyState == 4) {
                    /* Csak akkor indul, ha a state 4, azaz az atvitel megtortent
                     */
                    if (xmlrequest.status == 200) {
                        /* Status rendben van, uzenet feldolgozasa
                         */
                        try {
                            if (xmlrequest.responseXML.documentElement.tagName == 'errorpage') {
                                /* Errorpage uzenet jott, ennek megfelelo hibauzenet kiiratasa
                                 */
                                errmsg = '';
                                errors = xmlrequest.responseXML.getElementsByTagName('errorstring');
                                for (var i=0; i < errors.length; i++) {
                                    errmsg = errmsg + errors[i].firstChild.nodeValue + '\n';
                                }
                                errorMessage(errmsg);
    
                            } else {
                                /* Rendes XML valasz jott, modul altal definialt XMLProcessResponse
                                 * fuggveny meghivasa
                                 */
                                try {
                                    processResponse(xmlrequest.responseXML);
                                } catch(err) {
                                    // errorMessage('A modul nem állította be a processResponse-t, vagy abban hiba van. Hibaüzenet: ' + err);
                                     return false;
                                }
                            }
                        } catch(err) {
                            /* Ures uzenet vagy nem jol formalt XML jott
                             */
                            errorMessage('Nem jött válasz vagy rosszul formázott XML jött: ' + err + '\n\nOutput: ' + xmlrequest.responseText);
                        }
                    } else {
                        /* Nem 200 volt a response status, hibauzenet kuldese
                         */
                        errorMessage('A szerver hibát jelzett. Hibakód: ' + xmlrequest.status);
                    }
                }
            }

            /* Tenyleges xmlrequest osszeallitasa es elkuldese
             */
            if ((this.url) && (this.method)) {
                if (this.method == 'GET') {
                    xmlrequest.open(this.method,this.url + '?' + this.queryString,true);
                    xmlrequest.send('');
                    return true;
                } else if (this.method == 'POST') {
                    xmlrequest.open(this.method,this.url,true);
                    xmlrequest.setRequestHeader('Content-Type',this.contentType);
                    xmlrequest.setRequestHeader('Content-Length',this.queryString.length);
                    xmlrequest.setRequestHeader('Connection','close');
                    xmlrequest.send(this.queryString);
                    return true;
                }
            }
        }
    }
}

