// --------------------------------------------------------------------------------
// sm_Application.js
// Travis Musika 2005-11-17
// Contains Javascript relevant to the SubscriptionManager.
// --------------------------------------------------------------------------------
///<reference path="~/ow_util.js"/>

//var tclsm_fieldPrefix = "tmpl_smApp_";
var tclsm_instances = [];

// cancel flag
var tclsm_cancelled = false;

function sm_curry(fn, scope) {
    var scope = scope || window;
    var args = [];
    for (var i = 2, len = arguments.length; i < len; ++i) {
        args.push(arguments[i]);
    };
    return function() {
        var newargs = [];
        if (arguments.length > 0) 
            for (var i = 0, len = arguments.length; i < len; ++i)
                newargs.push(arguments[i]);
        newargs = newargs.concat(args);
        fn.apply(scope, newargs);
    };
}

// --- Attach JS to document elements and execute simple statements. ---
OneWeb.Util.appendLoadEvent(
function() {
    // find all forms
    var forms = OneWeb.Util.getElementsByClassName("sm_formid", "span");
    if (forms != null && forms.length > 0) {
        for (var i = 0; i < forms.length; i++) {
            var fieldPrefix = forms[i].id.substr(0, forms[i].id.length - 2);
            var instance = {
                prefix: fieldPrefix,
                parent: forms[i].parentNode
            };
            tclsm_instances[i] = instance;

            if ($get(fieldPrefix + "sm_btnOK") != null) OneWeb.Util.addEvent($get(fieldPrefix + "sm_btnOK"), "click", sm_curry(sm_formSubmitClicked, $get(fieldPrefix + "sm_btnOK"), instance), false);
            if ($get(fieldPrefix + "sm_btnOKImage") != null) OneWeb.Util.addEvent($get(fieldPrefix + "sm_btnOKImage"), "click", sm_curry(sm_formSubmitClicked, $get(fieldPrefix + "sm_btnOKImage"), instance), false);

            if (instance.parent != null) {
                var inp = instance.parent.getElementsByTagName("input");
                for (var j = 0; j < inp.length; j++) {
                    if (inp[j].type == "text")
                        OneWeb.Util.addEvent(inp[j], "keypress", sm_curry(sm_formTextSubmit, inp[j], instance), false);
                }

                // add hidden input element for spambot-prevention after a short (500 ms) timeout
                var sm_chkNotSpam = $get(fieldPrefix + "sm_chkNotSpam");
                if (sm_chkNotSpam == null && document.createElement) {
                    var createSpamElement = sm_curry(function(inst) {
                        var sm_chkNotSpam = document.createElement("input");
                        if (sm_chkNotSpam) {
                            sm_chkNotSpam.setAttribute("type", "checkbox");
                            sm_chkNotSpam.setAttribute("id", inst.prefix + "sm_chkNotSpam");
                            sm_chkNotSpam.setAttribute("name", inst.prefix + "sm_chkNotSpam");
                            sm_chkNotSpam.setAttribute("value", "notspam");
                            sm_chkNotSpam.style.display = "none";
                            inst.parent.appendChild(sm_chkNotSpam);
                            sm_chkNotSpam.checked = true;
                        }
                    }, null, instance);
                    window.setTimeout(createSpamElement, 500);
                }
            }
        }
    }
}
);

// --------------------------------------------------------------------------------
// sm_formTextSubmit()
// Fires when a textfield had focus and ENTER was pressed.
// --------------------------------------------------------------------------------
// Arguments:
//	- none
// Returns:
//	- Nothing
// --------------------------------------------------------------------------------
function sm_formTextSubmit(e, instance) {
    var code;
        
    if (!e) var e = window.event;
    if (e.keyCode) code = e.keyCode;
    else if (e.which) code = e.which;

    if (code == 13) {
        var sm_btnOK = $get(instance.prefix + "sm_btnOK");
        if (sm_btnOK != null) sm_btnOK.click();
        if (e.preventDefault) e.preventDefault(); else e.returnValue = false;
    }
}

// --------------------------------------------------------------------------------
// sm_formSubmitClicked()
// Fires when the submit button was clicked.
// --------------------------------------------------------------------------------
// Arguments:
//	- none
// Returns:
//	- Nothing
// --------------------------------------------------------------------------------
function sm_formSubmitClicked(e, instance) {

    if (!sm_checkRequestData(instance)) {
        if (!e) var e = window.event;
        if (e.preventDefault) e.preventDefault(); else e.returnValue = false;
    } else {
        return;
    }
}

// --------------------------------------------------------------------------------
// sm_checkRequestData()
// Validates the data entered on the order page.
// --------------------------------------------------------------------------------
// Arguments:
//	- none
// Returns:
//	- the results of the validation [boolean]
// --------------------------------------------------------------------------------
function sm_checkRequestData(instance) {
    // return if the cancel button is clicked
    if (tclsm_cancelled)
        return true;

    /*
    First and last names no longer required 
    var sm_txtFirstName = $get(tclsm_fieldPrefix + "sm_txtFirstName");
    if (sm_txtFirstName != null)
    if (sm_txtFirstName.value.length == 0) {
    alert($get(tclsm_fieldPrefix + "sm_rfvFirstName").value);
    sm_txtFirstName.focus();
    return false;
    }
		
	var sm_txtLastName = $get(tclsm_fieldPrefix + "sm_txtLastName");
    if (sm_txtLastName != null)
    if (sm_txtLastName.value.length == 0) {
    alert($get(tclsm_fieldPrefix + "sm_rfvLastName").value);
    sm_txtLastName.focus();
    return false;
    }
    */

    var em_re = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,6})+$/;
    var sm_txtEmail = $get(instance.prefix + "sm_txtEmail");
    if (sm_txtEmail != null) {
        if (sm_txtEmail.value.length == 0) {
            alert($get(instance.prefix + "sm_rfvEmail").value);
            sm_txtEmail.focus();
            return false;
        } else if (!sm_txtEmail.value.match(em_re)) {
        alert($get(instance.prefix + "sm_regvEmail").value);
            sm_txtEmail.focus();
            sm_txtEmail.select();
            return false;
        }
        var sm_txtConfirm = $get(instance.prefix + "sm_txtConfirm");
        if (sm_txtConfirm != null) {
            if (sm_txtConfirm.value.length == 0) {
                alert($get(instance.prefix + "sm_rfvConfirm").value);
                sm_txtConfirm.focus();
                return false;
            } else if (sm_txtConfirm.value != sm_txtEmail.value) {
            alert($get(instance.prefix + "sm_cvConfirm").value);
                sm_txtConfirm.focus();
                sm_txtConfirm.select();
                return false;
            }
        }
    }

    var chkId = 0;
    var sm_chkList = $get(instance.prefix + "rptSubscriptions_ctl" + (chkId < 10 ? "0" : "") + chkId + "_sm_chkList");
    if (sm_chkList != null) {
        var oneChecked = false;
        while (sm_chkList != null) {
            if (sm_chkList.checked == true)
                oneChecked = true;
            sm_chkList = $get(instance.prefix + "rptSubscriptions_ctl" + (chkId < 10 ? "0" : "") + (++chkId) + "_sm_chkList");
        }
        if (!oneChecked) {
            alert($get(instance.prefix + "sm_cvSubscriptions").value);
            sm_chkList = $get(instance.prefix + "rptSubscriptions_ctl00_sm_chkList");
            sm_chkList.focus();
            return false;
        }
    }
    var sm_radActionUnsubscribe = $get(instance.prefix + "sm_radActionunsubscribe");
    var sm_radActionModify = $get(instance.prefix + "sm_radActionModify");
    if (sm_radActionUnsubscribe != null && sm_radActionModify != null) {
        if (!sm_radActionUnsubscribe.checked && !sm_radActionModify.checked) {
            alert($get(instance.prefix + "sm_cvAction").value);
            sm_radActionUnsubscribe.focus();
            return false;
        }
    }

    return true;

}	