/*
 *   (o)||
 */

function LgiiResults(id, mapId) {
    this.inheritsFrom(new EsriControl(id, "Results", 0, 0, 0, 0));
    this.mapId = mapId;
    var self = this;
    //var div = document.createElement("div");
    //EsriUtils.hideElement(div);

    this.updateAsync = function(xml, eventSources) {
        var idTag = xml.getElementsByTagName("id").item(0);
        var id = idTag.firstChild.nodeValue;
        if (id == self.id) {
    
            self.mapId = xml.getElementsByTagName("map-id").item(0).firstChild.nodeValue;
            var changed = xml.getElementsByTagName("changed").item(0).firstChild.nodeValue;
            
            var contentTags = xml.getElementsByTagName("content");
            var content;
            if (EsriUtils.isIE) content = contentTags.item(0).firstChild.nodeValue;
            else {
                content = new XMLSerializer().serializeToString(contentTags.item(0));
                content = content.substring("<content><![CDATA[".length, content.indexOf("]]></content>"));
            }

            var div = document.getElementById(self.id+"_panel");
            div.innerHTML = content;
            
            
            if (changed == "true"){
                try{
                    jitkViewer_displayResults("reset");
                }catch(exception){}            
            }
            /*// TODO: fix that shit
            if (content.length != self.lastLength){
                self.lastLength = content.length;

            }*/
            
            
        }
    }
    
    this.sendRequest = function(extraParams){
        var map = EsriControls.maps[self.mapId];
        var formId = map.formId;
        var url = EsriUtils.getServerUrl(formId);
        var params = "agsAjax=agsAjax&formId=" + map.formId + "&" + self.id + "=" + self.id + "&"+extraParams +"&doPostBack=doPostBack&"  + EsriUtils.buildRequestParams(formId);
        EsriUtils.sendAjaxRequest(url, params, false, EsriControls.processPostBack);    
    }

    this.nodeOperation = function(type,key){
        self.sendRequest("resultsAction="+type+"&key=" + key);
    }
    
    this.contextMenuOperation = function(key, menuItemId){
        self.sendRequest("resultsAction=handleMenuItem&key=" + key + "&menuItemId="+menuItemId);
    }
    
    this.showContextMenu = function(e, tableData, key) {
        /*var contextMenuId = this.id+"_contextMenu_"+key;
        var contextMenu = document.getElementById(contextMenuId);*/
        //if (contextMenu){
        var contextMenuId = "ResultsContextMenu_"+self.id + "_"+key;
        if (document.getElementById(contextMenuId)) document.getElementById(contextMenuId).parentNode.removeChild(document.getElementById(contextMenuId));
        
        if (tableData){
            var table = document.createElement("table");
            table.id = contextMenuId;
            table.className = "lgiiContextMenu";
            var tb = document.createElement("tbody");
            table.appendChild(tb);
            var menuItemId;
            for (menuItemId in tableData){
                if(menuItemId!="inheritsFrom"){
                    var tr = document.createElement("tr");
                    var td = document.createElement("td");
                    td.id = menuItemId;
                    td.onclick = function(e) {
                        var index = EsriUtils.getEventSource(e).id;
                        self.contextMenuOperation(key, index);
                        return false;
                    }                    
                    td.appendChild(document.createTextNode(tableData[menuItemId]));
                    tr.appendChild(td);
                    tb.appendChild(tr);
                }
            }
            
            var pt = EsriUtils.getXY(e);
            EsriUtils.setElementStyle(table, "position:absolute; left:" + pt.x + "px; top:" + pt.y + "px; z-index:9999;");
            document.body.appendChild(table);
            document.onclick = document.oncontextmenu = function(e) {
                    table.parentNode.removeChild(table);
                    document.onclick = document.oncontextmenu = null;
            }
        } 
        //}
        
        
        
/*        var contextMenuId = "EsriContextMenu_" + self.toc.id;
        if (document.getElementById(contextMenuId)) document.getElementById(contextMenuId).parentNode.removeChild(document.getElementById(contextMenuId));

        var menuItems = tocContextMenuItems[key];
        if (menuItems.length == 0) return;

        var table = document.createElement("table");
        table.id = contextMenuId;
        table.className = "esriContextMenu";
        var tb = document.createElement("tbody");
        table.appendChild(tb);

        for (var i=0;i<menuItems.length;i++) {
            var tr = document.createElement("tr");
            var td = document.createElement("td");
            td.id = i;
            td.className = "esriContextMenuItem";
            var label = menuItems[i].label;

            if (label == "Transparency") {
                var initValue = (1 - menuItems[i].value.substring(menuItems[i].value.indexOf("|") + 1)) * 10;
                td.appendChild(document.createTextNode(menuItems[i].label));

                var slider = new EsriSlider("TocMenuSlider_" + self.toc.id + "_" + i, null, new SliderHandler(key, menuItems[i].value.substring(0, menuItems[i].value.indexOf("|"))).sliderTransparencyCallback);
                slider.numSegments = 10;
                slider.initValue = initValue;
                slider.roundValues = false;
                slider.showTicks = true;
                slider.callContinuously = false;
                slider.init(td);
            }
            else {
                var elem = handleLabel(label, key, true);
                if (elem) {
                td = elem;
                td.id = i;
                td.className = "esriContextMenuItem";
            }
            else {
                td.appendChild(document.createTextNode(menuItems[i].label));
                td.onclick = function(e) {
                    var index = EsriUtils.getEventSource(e).id;
                    self.toc.contextMenuOperation(tocContextMenuItems[key][index].value, key);
                    return false;
                }
            }
            td.onmouseover = function(e) { EsriUtils.getEventSource(e).className = "esriContextMenuItemActive"; }
            td.onmouseout = function(e) { EsriUtils.getEventSource(e).className = "esriContextMenuItem"; }
        }

        tr.appendChild(td);
        tb.appendChild(tr);
    }

        var pt = EsriUtils.getXY(e);
        EsriUtils.setElementStyle(table, "position:absolute; left:" + pt.x + "px; top:" + pt.y + "px; z-index:9999;");
            document.body.appendChild(table);
            document.onclick = document.oncontextmenu = function(e) {
            table.parentNode.removeChild(table);
            document.onclick = document.oncontextmenu = null;
        }*/
    }    
    
    EsriControls.tocIds.push(id);
    EsriControls.tocs[id] = this;
    EsriControls.addPostBackTagHandler("results", this.updateAsync);
}

function LgiiGPAsyncTaskResultsTimer(id, mapId,pingSeconds) {
    this.id = id;
//  this.tocId = tocId;
//  var toc = EsriControls.tocs[tocId];
    var formId = EsriControls.maps[mapId].formId;
    var timer = null;
    var ping = (pingSeconds) ? pingSeconds : 5;
    var self = this;

    this.tagHandler = function(xml, eventSources) {
        var idTag = xml.getElementsByTagName("id").item(0);
        var id = idTag.firstChild.nodeValue;
        if (id == self.id) {
            /*    var tocId = xml.getElementsByTagName("toc-id").item(0).firstChild.nodeValue;
                if (self.tocId == tocId) {*/
            var resultTags = xml.getElementsByTagName("result");
            var jobsCompleted = true;
            for (var i=0;i<resultTags.length;i++) {
                var resultTag = resultTags.item(i);
                if (resultTag.getAttribute("complete") == "false") jobsCompleted = false;
            }

            if (jobsCompleted) stopTimer();
            else if (! jobsCompleted && timer == null) startTimer();
        }
    }

    function sendGpAsyncRequest() {
        var url = EsriUtils.getServerUrl(formId);
        var params = "lgiiGpAsyncTaskResults=lgiiGpAsyncTaskResults&status=status&formId=" + formId + "&controlId=" + self.id + "&" + EsriUtils.buildRequestParams(formId);
        EsriUtils.sendAjaxRequest(url, params, false, EsriControls.processPostBack);
    }

    function startTimer() {
        setTimeout(function() { sendGpAsyncRequest() }, 0);
        timer = setTimeout(function() { startTimer() }, ping * 1000);
    }

    function stopTimer() {
        clearTimeout(timer);
        timer = null;
    }

    EsriControls.addPostBackTagHandler("lgii-gp-task-results-async", this.tagHandler);
    setTimeout(function() { sendGpAsyncRequest() }, ping * 1000);
}
