// JavaScript Document

// inicializace RequestWrapper
function RequestWrapper(counter, requestId, serviceUrl, isFirst) {
    this.id = 'RequestWrapper_' + counter; //id objektu
    this.requestPreff = ""; // "request="
    this.featureId = 'layer' + counter;
    this.requestId = requestId;    //vlastni ID requestu
    this.serviceUrl = serviceUrl;    // service URL
    this.refreshInterval = 1000*60*5; // for example 60 second
    this.last_check_start = 0;    //posledni cas startu
    this.check_timeout = 1000*60; // for example 30 second timeout
    this.checking = false;        //
    this.isFirst = isFirst || false;
    window[this.id] = this;       //window[RequestWrapper_21331231233] = this
    //other initialization ...
    this.ajax();
}

//fce refreshe
RequestWrapper.prototype.check = function() {
    //setTimeout s prednastavenym casem pro refresh, nastartuje cyklus refreshe
    //alert("zacinam setTimeout " + this.id);
    window.setTimeout('window["' + this.id + '"]._check()',this.refreshInterval);   
}

RequestWrapper.prototype._check = function() {
    var now = new Date().getTime();
         
    if (!this.checking || this.last_check_start+this.check_timeout < now) {
        this.checking = true;
        this.last_check_start = now;
        this.ajax();
    }
    this.check();
}

RequestWrapper.prototype._check_again = function() {
    this.ajax();
}


RequestWrapper.prototype.on_update = function(responseXml) {
    parseResponse(responseXml, this);
}
/**
 * RequestWrapper_httpRequest
 */
function RequestWrapper_newHttpRequest() {
    var httpRequest;
    if (window.XMLHttpRequest) {
        httpRequest = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        try {
            httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (error1) {
            try {
                httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (error2) {
                alert("httpRequest wasn't created");
            }
        }
    }
    return httpRequest;
}

RequestWrapper.prototype.ajax = function() {
    var httpRequest = RequestWrapper_newHttpRequest();
    httpRequest.overrideMimeType = 'text/xml';
    httpRequest.__wrapper_object = this;
    httpRequest.onreadystatechange = function () {
        RequestWrapper_processRequest(httpRequest);
    }
    var url = this.serviceUrl + this.requestPreff + this.requestId + "&date=" + new Date().toUTCString().replace(/[ ,:-]+/g, "_");
    httpRequest.open("GET", url);
    httpRequest.send(null);
}

function RequestWrapper_processRequest(httpRequest) {
    if (httpRequest.readyState == 4) {
        if (httpRequest.status == 200) {
            if (debugOn) alert(httpRequest.responseText);
            httpRequest.__wrapper_object.on_update(httpRequest.responseXML);
        } else {
            if (debugOn) alert("Chyba při načítání stránky " + httpRequest.status +" : "+ httpRequest.statusText);
        }
    }       
}

/**
 * invokeInitializationRequest - ask server for settings
 */
function invokeInitializationRequest(serviceUrl) {
    var httpRequest = RequestWrapper_newHttpRequest();
    httpRequest.overrideMimeType = 'text/xml';
    httpRequest.onreadystatechange = function () {
        invokeInitializationRequest_processRequest(httpRequest);
    }
    var url = serviceUrl;
    httpRequest.open("GET", url);
    httpRequest.send(null);
}

/**
 * invokeInitializationRequest_processRequest
 */
function invokeInitializationRequest_processRequest(httpRequest) {
    if (httpRequest.readyState == 4) {
        if (httpRequest.status == 200) {
            if (debugOn) alert(httpRequest.responseText);
            try {
                initVariables(httpRequest.responseXML && httpRequest.responseXML.documentElement ? httpRequest.responseXML.documentElement : null);
                parseLocation();
            } catch (exception) {
                window.alert('Chyba při inicializaci: ' + exception);
            }
            //parseResponse(httpRequest.responseXML, httpRequest.__wrapper_object.on_update(httpRequest.responseXML));
        } else {
            if (debugOn) alert("Chyba při načítání stránky " + httpRequest.status +" : "+ httpRequest.statusText);
        }
    }
}
