if (typeof ms == "undefined") var ms = {};
if (typeof console == "undefined") {
    var console = {};
    console.log = function() { }
}
ms.events = {}
ms.events.classPrefix = "optionContainerDiv ";

ms.events.eventcb_changed = function(cb, tg) {
    console.log(cb, ms.events.classPrefix, tg, $(tg));
    var controls = $(tg).select("." + ms.events.classPrefix);
    for (var j = 0; j < controls.length; j++) {
        controls[j].style.display = cb.checked ? '' : 'none';
    }
    ms.events.submitForm();
}
ms.events.showMask = function() {
    var mask = $('mask');
    mask.style.display = '';
    var spinner = $('spinner');
    spinner.style.display = '';
}
ms.events.hideMask = function() {
    var mask = $('mask');
    mask.style.display = 'none';
    var spinner = $('spinner');
    spinner.style.display = 'none';
}
ms.events.submitForm = function(sender) {
    var forms = $$('div.pnlForm');
    var vals = ms.events.getFormValues(forms[0]);
    ms.events.showMask();

    console.log(sender);
    var res = new Ajax.Request(window.location.href.replace("#", ""),
    {
        method: 'post',
        parameters: 'a=runform&q=' + vals.toJSON() + (sender ? "&c=" + sender.id : ""),
        asynchronous: true,
        onSuccess: function(req, h) {
            try {
                var responseVals = eval('(' + req.responseText + ')');
                console.log(responseVals);
                ms.events.setFormValues(forms[0], responseVals.controls);
                ms.events.setReasons(responseVals.reasons, 'div.divReasons', 'messages');

                var divErrors = ms.events.setReasons(responseVals.errors, 'div.divErrors', 'errors', 'Errors');

                var showErrors = responseVals.errors.length>0 && (responseVals.showErrors || responseVals.requestedAddToCart);
                if (!divErrors) divErrors = $$('div.divErrors')[0];
                divErrors.style.border = showErrors ? '1px solid red' : 'none';
                divErrors.style.display = showErrors ? '' : 'none';
                $('spnErrorAlert').style.display = showErrors ? '' : 'none';
                $$('span.litPrice')[0].innerHTML = responseVals.price;
                if (responseVals.redirect) {
                    window.location = responseVals.redirect;
                }

            } catch (ex) { console.log(ex) };
            ms.events.hideMask();
        },
        onFailure: function(req, h) {
            var divErrors = ms.events.setReasons(['Sorry, there was a server error.'], 'div.divErrors', 'errors', 'Errors');
            ms.events.hideMask();
        }
    });
}
ms.events.getFormValues = function(form) {
    var ctnr = $(form);
    var inpsAll = ctnr.getElementsBySelector('input', 'select');
    var inps = {};
    for (var j = 0; j < inpsAll.length; j++) {
        var inp = $(inpsAll[j]);
        if (inp.type != 'hidden') {
            var val = inpsAll[j].type == "checkbox" ? inp.checked : inp.value;
            var ct = inp.up("." + ms.events.classPrefix);
            var vis = ct ? ct : inp;

            val = val + "";
            val = val.replaceAll("'", "\'");
            val = val.replaceAll("\"", "\\\"");
            val = val.replaceAll(",", "\,");
            val = val.replaceAll("[", "\[");
            val = val.replaceAll("]", "\]");
            val = val.replaceAll("{", "\}");
            val = val.replaceAll("}", "\}");
            val = val.replaceAll(":", "\:");
            val = encodeURI(val);
            val = val.replaceAll("&", "%26");
            val = val.replaceAll("?", "%3F");
            inps[inp.id] = { value: val, name: inp.name, id: inp.id, visible: vis.getStyle("display") };
        }
    }

    return $H(inps);
}
ms.events.setFormValues = function(form, values) {
    for (var j in values) {
        var c = $(j); 
        var i = $(values[j].controlid);
        ms.events.setValue(i, values[j].value);
        c.style.display = values[j].visible == true ? "" : "none";
        c.className = ms.events.classPrefix + values[j].className;
    }
}
ms.events.setValue = function(inp, val) {
    if (inp.type == "checkbox") inp.checked = val == "yes" || val == "true" || val == "on" || val == "1";
    else inp.value = val;
}
ms.events.setReasons = function(reasons, selector, className, header) {
    var divReasons = $$(selector)[0];
    divReasons.innerHTML = '';

    if (header) {
        var h5 = document.createElement('h2');
        h5.innerHTML = header;
        h5.style.color = 'red';
        h5.style.textAlign = 'center';
        divReasons.appendChild(h5);
    }
    if (!reasons || reasons.length == 0) return;

    var ul = document.createElement("ul");
    ul.className = className;
    divReasons.appendChild(ul);
    for (var j = 0; j < reasons.length; j++) {
        var li = document.createElement("li");
        li.innerHTML = reasons[j];
        ul.appendChild(li);
    }
    return divReasons;
}

String.prototype.replaceAll = function(strA, strB) {
    var x = this.split(strA);
    var res = x[0];
    for (var j = 1; j < x.length; j++) {
        res += strB + x[j];
    }
    return res;
}