// ajax.js
// Ajax-related functions

// Gets the browser specific XmlHttpRequest Object
function getXmlHttpRequestObject() {
    if (window.XMLHttpRequest) {
        return new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        return new ActiveXObject("Microsoft.XMLHTTP");
    } else {
        alert("Please update your browser.");
    }
}

// variable for the XmlHttpRequest object
var service = getXmlHttpRequestObject();
//var service2 = getXmlHttpRequestObject();
// other variables
var tN1 = "currency";
var tN2 = "cname";
var tN3 = "csymbol";
var eleID1 = "c1";
var eleID2 = "c2";

var tN4 = "header";
var eleID4 = "ud";
var tN5 = "hname";
var tN6 = "hvalue";

var curC1 = "usd";
var curC2 = "usd";

// starts the AJAX request
function getSI() {
    if (service.readyState == 4 || service.readyState == 0) {
        try {
            service.open("Get", "/si/", true);
            service.onreadystatechange = handleSI;
            service.send(null);
        } catch (exception) {
            alert("An exception occurred.");
            // return to default state perhaps
        }
    }
}

// gets the xml response
function handleSI() {
    if (service.readyState == 4) {
        var respTxt = service.responseText;
        printSI(respTxt);
    }
}

// get and print the share information data
function printSI(txt) {
    var eleObj1;
    start = 0, end = 0;
    for (i = 0; i < 11; i++) {
        strEle = "si" + i.toString();
        if (i == 0)
            eleObj1 = document.getElementById("updateInfo");
        else
            eleObj1 = document.getElementById(strEle);
        end = txt.indexOf(";");
        eleObj1.innerHTML = txt.substring(start, end);
        txt = txt.substring(end+1, txt.length);
    }
}

// set the initial values
function setValues(strC1, strC2) {
    if (strC1 == "")
        strC1 = "usd";
    document.forms[0].c1.value=strC1;
    document.forms[0].c2.value=strC2;
    getResponse('/cc/?c1=' + strC1 + '&c2=' + strC2 + '&amt=' + document.forms['ccForm'].amt.value);
}

// starts the AJAX request
function getData(strSvc, strC1) {
    if (service.readyState == 4 || service.readyState == 0) {
        try {
            curC1 = strC1;
            service.open("Get", strSvc + ".xml", true);
            service.onreadystatechange = handle_XML;
            service.send(null);
        } catch (exception) {
            alert("An exception occurred.");
            // return to default state perhaps
        }
    }
}

// gets the xml response
function handle_XML() {
    if (service.readyState == 4) {
        var xmldoc = service.responseXML;
        var xml_nodes = xmldoc.getElementsByTagName(tN1);
        var num_nodes = xml_nodes.length;
        
        // time and date at which data was obtained
        var xml_nodes2 = xmldoc.getElementsByTagName(tN4);
        var num_nodes2 = xml_nodes2.length;
        
        cc_date(xml_nodes2, num_nodes2);
        cc_populate(xml_nodes, num_nodes);
        // set initial values
        document.forms[0].c1.value=curC1;
        document.forms[0].c2.value=curC2;
    }
}

function getResponse(strSvc) {
    if (service.readyState == 4 || service.readyState == 0) {
        try {
            service.open("Get", strSvc, true);
            service.onreadystatechange = handleResponse;
            service.send(null);
        } catch (exception) {
            alert("An exception occurred.");
            // return to default state perhaps
        }
    }
}

function handleResponse() {
    if (service.readyState == 4) {
        var respTxt = service.responseText;

        cc_amount(parseFloat(respTxt));
    }
}

// display the converted amount
function cc_amount(fltAmount) {
    var eleObj1 = document.getElementById("txtAmt");
    value = Math.round(fltAmount*100)/100;
    eleObj1.innerHTML = value + " " + document.forms['ccForm'].c2[document.forms['ccForm'].c2.selectedIndex].innerHTML;
}

// print out date and time of currency converter data acquisition
function cc_date(xml_nodes, num_nodes) {
    var eleObj1 = document.getElementById(eleID4);
    for (i = 0; i < num_nodes; i++) {
        val1 = xml_nodes[i].getElementsByTagName(tN5)[0].firstChild.nodeValue;
        if (val1 == "Current UTC Time") {
            val2 = xml_nodes[i].getElementsByTagName(tN6)[0].firstChild.nodeValue; // YYYY.MM.DD HH:MM:SS
            yyyy = val2.substring(0, val2.indexOf("."));
            mm = val2.substring(val2.indexOf(".")+1, val2.lastIndexOf("."));
            dd = val2.substring(val2.lastIndexOf(".")+1, val2.indexOf(" "));
            gmtTime = val2.substring(val2.indexOf(" ")+1, val2.length);
            var d = new Date(Date.parse(mm + "/" + dd + "/" + yyyy));
            eleObj1.innerHTML = d.toDateString() + " (" + gmtTime + " GMT)";
            return;
        }
    }
}

// populate currency converter select boxes
function cc_populate(xml_nodes, num_nodes) {
    var eleObj1 = document.getElementById(eleID1);
    var eleObj2 = document.getElementById(eleID2);
    var option1, option2;
    var text1, text2;
    for (i = 0; i < num_nodes; i++) {
        val1 = xml_nodes[i].getElementsByTagName(tN2)[0].firstChild.nodeValue;
        val2 = xml_nodes[i].getElementsByTagName(tN3)[0].firstChild.nodeValue;
        
        option1 = document.createElement("option");
        option1.value = val2.toLowerCase();
        text1 = document.createTextNode(val1 + " - " + val2);
        option1.appendChild(text1);
        eleObj1.appendChild(option1);
        
        option2 = document.createElement("option");
        option2.value = val2.toLowerCase();
        text2 = document.createTextNode(val1 + " - " + val2);
        option2.appendChild(text2);
        eleObj2.appendChild(option2);
    }
}
