﻿/// <reference name="MicrosoftAjax.js"/>

Type.registerNamespace('MvcAjax');

MvcAjax.MvcHelpers = function MvcAjax_MvcHelpers() {};



MvcAjax.MvcHelpers.invokeGet = function MvcAjax_MvcHelpers$_invokeGet(url, succeededCallback, failedCallback) {
    //alert("call");
    MvcAjax.MvcHelpers.invokeAction(url, "GET", null, succeededCallback, failedCallback);
};


MvcAjax.MvcHelpers.invokePost = function MvcAjax_MvcHelpers$_invokeGet(url, form, succeededCallback, failedCallback)
{
    MvcAjax.MvcHelpers.invokeAction(url, "POST", form, succeededCallback, failedCallback);
};


MvcAjax.MvcHelpers.invokeAction = function MvcAjax_MvcHelpers$_invokeAction(url, httpVerb, form, succeededCallback, failedCallback, timeout) {
    // Set defaults
    timeout = timeout || 0;
    
    // Create request object
    var request = new Sys.Net.WebRequest();

    // Serialize form fields
    if (form) {
        //var body = MvcAjax.MvcHelpers.serialize(params);

        var body = Sys.Mvc.MvcHelpers._serializeForm(form);
        request.set_body(body);
    }
    
    request.set_url(url);
    request.set_httpVerb(httpVerb);
    request.set_timeout(timeout);
    //alert("response ");
    var callbacks = { succeededCallback: succeededCallback, failedCallback: failedCallback };
    var del = Function.createCallback(MvcAjax.MvcHelpers.invokeActionResult, callbacks);
    request.add_completed(del);
    request.invoke();
    //alert("request url: " + url + " form " + " succeededCallback " + succeededCallback + " failedCallback " + failedCallback);
};


MvcAjax.MvcHelpers.invokeActionResult = function MvcAjax_MvcHelpers$_invokeActionResult(executor, eventArgs, callbacks) {

if (executor.get_responseAvailable()) {

    if (callbacks.succeededCallback) {
            //alert("result " + callbacks.succeededCallback);
            //alert("response " + eval("(" + executor.get_responseData() + ")"));
            callbacks.succeededCallback(eval("(" + executor.get_responseData() + ")"));
        }
    }
    else {
        if (callbacks.failedCallback)
            callbacks.failedCallback();
    }
};

MvcAjax.MvcHelpers.formatErrors = function MvcAjax_MvcHelpers$_formatErrors(modelState) {
    var errorIndex;
    var errors;
    //alert("state " + modelState);
    var sb = new Sys.StringBuilder();
    for (var prop in modelState) {
        errors = modelState[prop].Errors;

        for (errorIndex = 0; errorIndex < errors.length; errorIndex++) {
            sb.appendLine(" - " + errors[errorIndex].ErrorMessage);
        }
    }
    return sb.toString();
};


MvcAjax.MvcHelpers.clearForm = function MvcAjax_MvcHelpers$_clearForm(form)
{
    var element;
    var elements = form.elements;
    for (var i = 0; i < elements.length; i++)
    {
        element = elements[i];
        var tagName = element.tagName.toUpperCase();
        if (tagName === 'INPUT')
        {
            var type = element.type;
            if ((type === 'text') || (type === 'password') || (type === 'hidden') || (((type === 'checkbox') || (type === 'radio')) && element.checked))
            {
                element.value = "";
            }
        }
        else if (tagName === 'TEXTAREA')
        {
            element.value = "";
        }
    }
}



function getContent(url, callback) {
    var request = new Sys.Net.WebRequest();
    request.set_url(url);
    request.set_httpVerb("GET");
    var del = Function.createCallback(getContentResults, callback);
    request.add_completed(del);
    request.invoke();
}

function getContentResults(executor, eventArgs, callback) {
    if (executor.get_responseAvailable()) {
        callback(eval("(" + executor.get_responseData() + ")"));
    }
    else {
        if (executor.get_timedOut())
            alert("Timed Out");
        else if (executor.get_aborted())
            alert("Aborted");
    }
}  
