﻿// JScript File

//************************************************************
//set any dynamically loaded content to loading
RJCTK.Utils.SetLoading = function(el) {
    document.getElementById(el).innerHTML = "loading..."; //TODO: use some CSS class
};

//************************************************************
//default oncomplete handler for returned HTML
RJCTK.Utils.AHAHDone = function(req, onready) {

    if (req.readyState == 4) { // only if req is "loaded"
        if (req.status == 200) { // only if "OK"


            var Responselist = RJCTK.Utils.createElement("span");
            Responselist.innerHTML = req.responseText; //so we can have all the nice DOM navigation utilitites on the list
            var list = Responselist.firstChild;   //the UL element

            var ResponseHTML = list.firstChild;

            var CustomHTML = ResponseHTML.nextSibling;

            var JavaScriptCode = CustomHTML.nextSibling;


            //Step 1 update any HTML elements
            if (ResponseHTML.firstChild != null)
                RJCTK.Utils.ElementUpdate(ResponseHTML.firstChild);


            //Step 2 return custom data to the called
            if (onready != null)
                onready(CustomHTML.innerHTML);

            //Step 3 run new javascript code from the server
            if (JavaScriptCode.innerHTML != "")
                eval(JavaScriptCode.innerHTML);

        } else {
            onready("ahah error:\n" + req.statusTex);

        };
    };
};

//************************************************************
//default AHAH loader for dynamic content
RJCTK.Utils.ElementLoadAHAH = function(url, target, onready) {
    var req;
    //RJCTK.Utils.SetLoading(target);
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
    };
    if (req != undefined) {
        req.onreadystatechange = function() { RJCTK.Utils.AHAHDone(req, onready) };


        req.open("GET", url + "&time=" + new Date(), true);
        req.send("");
    };
};

//************************************************************
// Simple AHAH request that returns a simple answer from the server
RJCTK.Utils.SendAHAHClear = function() {
    if (document.getElementById('AHAH_loading_indicator').style.display = "none")
        document.getElementById('AHAH_loading_message').innerHTML = "&nbsp;";
};
RJCTK.Utils.SendAHAHProcessInfobox = function(response) {
    if (response.substring(0, 3) == "OK:") {
        RJCTK.Utils.ShowInfoBar('infobar_ok', response.substring(3), 3500);
        return;
    };
    if (response.substring(0, 4) == "ERR:") {
        RJCTK.Utils.ShowInfoBar('infobar_error', response.substring(4), 5500);
        return;
    };
};
RJCTK.Utils.SendAHAHDone = function(req, onready) {
    if (req.readyState == 4) { // only if req is "loaded"
        if (req.status == 200) { // only if "OK"
            document.getElementById('AHAH_loading_indicator').style.display = "none";
            document.getElementById('AHAH_loading_message').innerHTML = req.responseText;
            setTimeout("RJCTK.Utils.SendAHAHClear()", 2000);
            RJCTK.Utils.SendAHAHProcessInfobox(req.responseText);
            if (onready != null)
                onready(req.responseText);
        };
    };
};

RJCTK.Utils.SendAHAXDone = function(req, onready) {
    if (req.readyState == 4) { // only if req is "loaded"
        if (req.status == 200) { // only if "OK"
            document.getElementById('AHAH_loading_indicator').style.display = "none";
            //document.getElementById('AHAH_loading_message').innerHTML=req.responseText;
            setTimeout("RJCTK.Utils.SendAHAHClear()", 2000);
            RJCTK.Utils.SendAHAHProcessInfobox(req.responseText);
            if (onready != null)
                onready(req.responseText)

        };
    };
};

RJCTK.Utils.SendAHAH = function(url, onready) {
    var req;
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
    }
    else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
    };
    if (req != undefined) {
        req.onreadystatechange = function() { RJCTK.Utils.SendAHAHDone(req, onready) };
    };

    req.open("GET", url + "&time=" + new Date(), true);
    req.send("");
    if (document.getElementById('AHAH_loading_message') != null) {
        document.getElementById('AHAH_loading_indicator').style.display = "inline";
        document.getElementById('AHAH_loading_message').innerHTML = "Waiting for response...";
    };

};

RJCTK.Utils.SendAHAX = function(url, onready) {
    var req;
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
    }
    else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
    };
    if (req != undefined) {
        req.onreadystatechange = function() { RJCTK.Utils.SendAHAXDone(req, onready) };
    };

    req.open("GET", url + "&time=" + new Date(), true);
    req.send("");
    if (document.getElementById('AHAH_loading_message') != null) {
        document.getElementById('AHAH_loading_indicator').style.display = "inline";
        document.getElementById('AHAH_loading_message').innerHTML = "Waiting for response...";
    };

};

RJCTK.Utils.SendPollAHAH = function(url, onready) {
    var req;
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
    }
    else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
    };
    if (req != undefined) {
        req.onreadystatechange = function() { RJCTK.Utils.SendPollAHAHDone(req, onready) };
    };

    req.open("GET", url + "?time=" + new Date(), true);
    req.send("");
    document.getElementById('AHAH_loading_indicator').style.display = "inline";
    document.getElementById('AHAH_loading_message').innerHTML = "";
};

RJCTK.Utils.SendPollAHAHDone = function(req, onready) {
    if (req.readyState == 4) { // only if req is "loaded"
        if (req.status == 200) { // only if "OK"
            document.getElementById('AHAH_loading_indicator').style.display = "none";
            if (onready != null)
                onready(req.responseText);
        };
    };
};
//************************************************************ 
//default AHAH HTML-element replacer. searches for elements by id and plugs in new innerHTML content
//      UL
//       LI- elementNAME
//       LI- elementHTML
//      UL
//       LI- elementNAME
//       LI- elementHTML
//      etc..        
RJCTK.Utils.ElementUpdate = function(element) {
    var divelement = document.getElementById(element.firstChild.innerHTML);
    if (divelement) {
        divelement.innerHTML = "";
        divelement.innerHTML = element.firstChild.nextSibling.innerHTML;
    };

    //some controls output Javascripts when rendered. Make sure this is interpreted
    var ReturnedScripts = divelement.getElementsByTagName("SCRIPT");
    for (var i = 0; i < ReturnedScripts.length; i++)
        eval(ReturnedScripts[i].innerHTML);

    if (element.nextSibling != null)
        RJCTK.Utils.ElementUpdate(element.nextSibling);
};

/// define the TelephonePoll namespace
RJCTK.TelephonePoll = {};

RJCTK.TelephonePoll.PollPath = "";

RJCTK.TelephonePoll.AutoPoll = function() {
    RJCTK.Utils.SendPollAHAH(RJCTK.TelephonePoll.PollPath, RJCTK.TelephonePoll.AutoPollDone);
};

RJCTK.TelephonePoll.AutoPollDone = function(response) {

    if ((response == null) || (response == "") || (response.length = 0)) {
        setTimeout("RJCTK.TelephonePoll.AutoPoll()", 5000);

        return;
    };

    var ResponseArray = response.split(",");

    RJCTK.PopUp._P = new RJCTK.PopUp();
    RJCTK.PopUp._P._create(document.body, ResponseArray[0], ResponseArray[1], ResponseArray[2], RJCTK.TelephonePoll.AutoPollResume);

};

RJCTK.TelephonePoll.AutoPollResume = function() {
    setTimeout("RJCTK.TelephonePoll.AutoPoll()", 5000);
};


//Send Help queries ****************************************************************************8
RJCTK.Help = {};

RJCTK.Help.GetText = function(path) {
    RJCTK.Utils.SendAHAX(path, RJCTK.Help.GetTextDone);
};

RJCTK.Help.GetTextDone = function(response) {
    RJCTK.Utils.BuildHelpWindow(response);
};

