var SKY_CURRENCY_QUOTE_TEXT = "Live mid-market rates as of ###timestamp### UTC.",
    skyForm;

function currencyInit() {
    $("input#currencySubmit").click(function() {
        handleSubmit();
    });

    formInit();
}


function formInit() {
    // TODO: something's not working in IE6+7
    // create an instance of the form class
    try {
        skyForm = new DraftfcbForm(document.forms["skyCurrency"]);
    } catch(e) { }

    // form-specific validation
    skyForm.Float = function(objElement) {
        return /^([0-9]+|[0-9]+\.[0-9]+|\.[0-9]+)$/.test(objElement.value);
    }

    // remove unnecessary events
    skyForm.FormHandle.onsubmit = function() { return false };

    // project-specific form properties
    skyForm.ErrorBox = $("p#currencyFormError");

    skyForm.Rules.push(
        { Field: "amount", Method: "Required",    ErrorId: "errorAmountReq" },
        { Field: "amount", Method: "Float",       ErrorId: "errorAmountFloat" },
        { Field: "from",   Method: "Required",    ErrorId: "errorFromReq" },
        { Field: "to",     Method: "Required",    ErrorId: "errorToReq" }
    );
}

function handleSubmit() {
    if (skyForm.Validate()) {
        processForm();
    } else {
        if ($("div#currencyResultErrors").css("display") == "block") {
            $("div#currencyResultErrors").hide("fast");
        }
        if ($("div#currencyFormErrors").css("display") == "none") {
            $("div#currencyFormErrors").show("fast");
        }
        showError();
    }
}

function processForm() {
    var objForm = skyForm.FormHandle;

    $.ajax({
        type: "GET",
        url: objForm.action,
        data: {
            amount: objForm.elements["amount"].value,
            from:   objForm.elements["from"][objForm.elements["from"].selectedIndex].value,
            to:     objForm.elements["to"][objForm.elements["to"].selectedIndex].value,
            appid:  objForm.elements["appid"].value
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            handleAjaxError(XMLHttpRequest, textStatus, errorThrown);
        },
        success: function(xml, textStatus) {
            parseResult(xml);
        }
    });
}

function parseResult(objXml) {
    var statusText = $(objXml).find("status").text();
    if (statusText == "0") {
        var quoteTime = $(objXml).find("rate-utc-timestamp").text();
        var fromAmount = $(objXml).find("from-amount").text();
        var fromSymbol = $(objXml).find("from-currency-symbol").text();
        var fromName = $(objXml).find("from-currency-name").text();
        var convertedAmount = $(objXml).find("converted-amount").text();
        var toSymbol = $(objXml).find("to-currency-symbol").text();
        var toName = $(objXml).find("to-currency-name").text();
        var conversionRate = $(objXml).find("conversion-rate").text();
        var conversionInverse = $(objXml).find("conversion-inverse").text();

        var quoteMessage = SKY_CURRENCY_QUOTE_TEXT.replace("###timestamp###", quoteTime);
        $("p#currencyQuoteTime").html(quoteMessage);
        $("th#currencyFromAmount").html(fromAmount + " " + fromSymbol);
        $("th#currencyToAmount").html(convertedAmount + " " + toSymbol);
        $("td#currencyFromName").html(fromName);
        $("td#currencyToName").html(toName);
        $("td#currencyRate").html(conversionRate);
        $("td#currencyInverse").html(conversionInverse);
        
        if ($("div#currencyError").css("display") == "block") {
            $("div#currencyError").hide("fast");
        }

        if ($("div#currencySuccess").css("display") == "none") {
            $("div#currencySuccess").show("fast");
        }

        if ($("div#currencyResult").css("display") == "none") {
            $("div#currencyResult").show("fast");
        }
    } else {
        handleStatusError(objXml);
    }
}

function handleAjaxError(XMLHttpRequest, textStatus, errorThrown) {
    $("div#currencyResultErrors").html("<p>status: " + textStatus + "<br/>error: " + errorThrown + "</p>");
    showError();
}

function handleStatusError(objXml) {
    var description = $(objXml).find("description").text();
    $("div#currencyResultErrors").html(description);

    showError();
}

function showError() {
    if ($("div#currencySuccess").css("display") == "block") {
        $("div#currencySuccess").hide("fast");
    }

    if ($("div#currencyError").css("display") == "none") {
        $("div#currencyError").show("fast");
    }

    if ($("div#currencyResult").css("display") == "none") {
        $("div#currencyResult").show("fast");
    }

}