﻿/// <summary>
/// Move hidden .NET for fields to the submitting for so postbacks work.
/// </summary>
/// <param name="e">The event object. (Must have the form that is submitt as e.target)</param>
function _addEventFields(e) {
    //Only move fields on post submits since gets with this crap in the url looks stupid.
    if (e.target.method == 'post') {
        var eventFields = ["__EVENTTARGET", "__EVENTARGUMENT", "__VIEWSTATE", "__EVENTVALIDATION", "__LASTFOCUS"];
        for (var i = 0; i < eventFields.length; i++) {
            var eventFieldObject = $get(eventFields[i]);
            if (eventFieldObject != null)
                e.target.appendChild(eventFieldObject);
        }
    }
}

/// <summary>
/// Add the onsubmit handler for forms and replace the
/// __doPostBack function to allow for not having a main form.
/// </summary>
theForm = document.createElement("form");
var forms = document.getElementsByTagName("form");
for (var i = 0; i < forms.length; i++) {
    $addHandler(forms[i], 'submit', _addEventFields)
    for (var j = 0; j < forms[i].elements.length; j++)
        theForm.elements[theForm.elements.length] = forms[i].elements[j];
}

__doPostBack = function(eventTarget, eventArgument) {
    // Do a regex replace to find get the appropriate ID (.net puts $ for _).
    //  Then find parent forms.
var frm = $($get(eventTarget.replace(/\$/g, "_"))).parents("form");

    //frm = $($get(eventTarget.replace(/\$/g, "_"))).parents("form");
    // If it has a parent form, set the event targets and arguments and submit.
    if (frm != null && frm.length > 0) {
        $get("__EVENTTARGET").value = eventTarget;
        $get("__EVENTARGUMENT").value = eventArgument;
        _addEventFields({ target: frm[0] });
        frm[0].submit();
    }
}
