﻿var acct_info;
var is_cart_page = false;
var in_submit_order_process = false;
var veil_visible = false;
var panel_holder_zoomrect;
var panel_holder_mousepos;
var panel_holder_width = 545;
var panel_holder_height = 200;
var notification_visible = false;

function customer_status() {
    var cky = readCookie("KcoperaUser");
    var cart_cky = readCookie("kcoperacart");
    if (cky || cart_cky) 
    {
        var link_builder = "";
        if (cky)
            link_builder += "<a href=\"" + srvr + ROOT + "/account/index.aspx\">" + cky + "'s account</a> ";
        else
            link_builder += "<a id=\"login_link\" href=\"javascript:void(0);\" onclick=\"toggle_login(this);\">login</a> ";            

        if (cart_cky)
            link_builder += "<span style=\"padding:0 1em 0 1em\">|</span> <a href=\"" + srvr + ROOT + "/cart/index.aspx\">cart</a> ";
            
        if (cky)
            link_builder += "<span style=\"padding:0 1em 0 1em\">|</span> <a href=\"" + srvr + ROOT + "/account/logout.aspx\">logout</a>";
        
        $("#login_link_placeholder").html(link_builder);                 
    }
    else
        $("#login_link_placeholder").html("<a id=\"login_link\" href=\"javascript:void(0);\" onclick=\"toggle_login(this);\">login</a>");
}

function toggle_veil() {
    var ww = getwindowsize();

    if (!veil_visible) {
        $("#veil").css("width", "" + (ww.x) + "px");
        $("#veil").css("height", "" + (ww.y + 1000) + "px");
        $('#veil').css("filter", "alpha(opacity=20)");
        $('#veil').fadeIn('slow');
        veil_visible = true;
    } 
    else {
        $('#veil').fadeOut('slow');
        veil_visible = false;
    }
}

/* --------------------------------------------------------------------------------------------------------------------------- */

var login_zoomrect;
var login_mousepos;
var login_panel_visible = false;
function toggle_login( oCallback ) 
{
    var login_link = document.getElementById("login_link");
    var login_panel_holder = document.getElementById("login_panel_holder");

    if (login_panel_visible) 
    {
        animate.close("login_panel_holder", function() { $("#login_panel_holder").hide(); login_panel_visible = false; if (oCallback && in_submit_order_process) { oCallback(); } else { in_submit_order_process = false; } }, null, login_mouspos, login_zoomrect);    
    }
    else 
    {
        if (login_panel_holder) 
        {
            var loc = getxy(document.getElementById("login_link"));
            var ww = getwindowsize();
            $("#login_panel_holder").css("left", "" + ((ww.x / 2) -100) + "px");
            $("#login_panel_holder").css("top", "" + (ww.y / 2) + "px");
            login_zoomrect =
            {
                left: ((ww.x / 2) - 100),
                top: (ww.y / 2),
                width: login_panel_width,
                height: login_panel_height
            };
            login_mouspos = { x: loc.x, y: loc.y };
            animate.open("login_panel_holder", function() { $("#login_panel_holder").show(); login_panel_visible = true; addShadow("login_panel") }, null, login_mouspos, login_zoomrect);    
        }
    }    
}

function do_login() 
{
    var req = getreq();

    handler = function() {
        if (req.readyState == 4) {
            if (req.status == 200) {
                var rslt = JSON.parse(req.responseText);
                try {
                    rslt = rslt.d;
                }
                catch (Error) { /* ignore */ }
                if (rslt.Success) {
                    $("#login_wait").html("<i>Login Successful!</i>");
                    createCookie("KcoperaUser", rslt.AccountInfo.NameFirst + " " + rslt.AccountInfo.NameLast, 0);
                    customer_status();

                    if (is_cart_page) {
                        toggle_login(login_callback);
                        customer_logged_in = true;
                        document.getElementById("progress_tracker_1").className = "done";
                        acct_info = rslt.AccountInfo;
                    }
                    else 
                    {
                        toggle_login();
                        if (location.href.indexOf("register.aspx") > -1 || location.href.indexOf("logout.aspx") > -1)
                            window.location.href = srvr + ROOT + "/account/index.aspx";
                    }
                }
                else {
                    $("#login_wait").fadeOut("fast");
                    $("#btn_login").show();
                    $("#login_panel_error").html(rslt.ErrorMessage);
                    $("#login_panel_error").slideDown(function() { positionShadow("login_panel") });

                }
            }
        }
    }

    form_validate = function() {
        var retval = {};
        var errmsg = "";
        var username = document.getElementById("tbx_login_user").value.trim();
        if (username.length == 0)
            errmsg += "Email address required.<br/>";
        else
            retval.login = username;
        var passwd = document.getElementById("tbx_login_password").value.trim();
        if (passwd.length == 0)
            errmsg += "Password required.<br/>";
        else
            retval.passwd = passwd;
        retval.promo_code = 0;

        try {
            retval.remember_me = document.getElementById("chk_remember_me").checked;
        }
        catch (err) {
            retval.remember_me = false;
        }

        if (errmsg.length > 0) {
            $("#login_panel_error").html("Please correct the following:<br/>" + errmsg);
            $("#login_panel_error").slideDown(function() { positionShadow("login_panel"); });
        }
        else
            return retval;
    }

    var sendObj = form_validate();
    if (sendObj) 
    {
        req = getreq();
        req.open("POST", (srvr + ROOT + WEBSERVICE + "Login"), true);
        req.setRequestHeader(CONTENT_TYPE, APP_JSON);
        req.onreadystatechange = this.handler;
        req.send(JSON.serialize(sendObj));
        $("#btn_login").hide();
        $("#login_wait").html("<img src='" + srvr + ROOT + "/lib/images/wait_spinner24x24.gif' align='absmiddle' /> <i>Logging In...</i>")
        $("#login_wait").fadeIn("fast");
    }

}

function clear_login_error() 
{
    if (document.getElementById("login_panel_error").childNodes.length > 0)
        $("#login_panel_error").fadeOut(function() { positionShadow("login_panel"); });
}

/* --------------------------------------------------------------------------------------------------------------------------- */

var priceTypeQty = [];
var priceTypes = [];
var priceTypeToSubmit = "";
var zone_no = 0;
var total_selected_quantity = 0;
var swidth;
var sheight;
var zoomrect;
var mousepos;
var selected_perf_no = -1;
var iFacility_no = 0;

function doReserveTickets() {
    var req = null;
    handler = function() {
        if (req.readyState == 4) {
            if (req.status == 200) {
                var rslt = JSON.parse(req.responseText);
                try {
                    rslt = rslt.d;
                } catch (err) { }

                if (rslt.Success)
                    window.location.href = srvr + ROOT + "/cart/index.aspx";
                else {
                    $("#btn_purchase_submit").show();
                    if (rslt.ErrorMessage.length > 0)
                        $("#ticket_req_msg").html(rslt.ErrorMessage);
                    else
                        $("#ticket_req_msg").html(rslt.Message);
                }
            }
        }
    }

    form_validate = function() {
        var retval = {};
        retval.perf_no = selected_perf_no;
        retval.quantity = total_selected_quantity;


        for (x = 0; x < priceTypes.length; x++) {
            var i = priceTypes[x];

            if (i > 0) {
                var ptmenu = document.getElementById("pricetype_" + i);
                if (ptmenu && ptmenu.selectedIndex > 0) {
                    var howmany = parseInt(ptmenu.options[ptmenu.selectedIndex].value);
                    for (y = 0; y < howmany; y++) {
                        if (priceTypeToSubmit.length > 0)
                            priceTypeToSubmit += ",";

                        priceTypeToSubmit = priceTypeToSubmit + i;
                    }
                }
            }
        }

        retval.pricetype = priceTypeToSubmit;
        retval.zone = zone_no;
        retval.specialRequests = "";

        return retval;
    }

    var sendObj = form_validate();

    if (sendObj) {
        req = getreq();
        req.open("POST", (srvr + ROOT + WEBSERVICE + "ReserveTickets"), true);
        req.setRequestHeader(CONTENT_TYPE, APP_JSON);
        req.onreadystatechange = this.handler;
        req.send(JSON.serialize(sendObj));
        $("#ticket_req_msg").html("<img src='" + srvr + ROOT + "/lib/images/wait_spinner24x24.gif' align='absmiddle' /> <i style='color:#666;'>Please wait while we reserve your tickets...</i>");
        $("#btn_purchase_submit").hide();
    }
}

function doGetPricingGrid(iPerf_no, el) {
    var loc = getxy(el);
    $("#wait").css("top", loc.y);
    $("#wait").css("left", (loc.x+30));
    
    selected_perf_no = iPerf_no;
    
    var sendObj = { "perf_no": iPerf_no }
    var req = getreq();

    handler = function() {
        if (req.readyState == 4) {
            $("#wait").fadeOut("slow");
            if (req.status == 200) {
                var rslt = JSON.parse(req.responseText);
                try {
                    rslt = rslt.d;
                } catch (err) { }

                if (rslt.Success) {
                    iFacility_no = rslt.VenueID;
                    priceTypes = rslt.PriceTypes;

                    var performance_summary = "";
                    performance_summary = rslt.PerformanceSummary + rslt.TicketPriceGrid + rslt.ZoneQuantitySelector;

                    $("#performance_summary").html(performance_summary);
                    document.getElementById("img_venue_map").setAttribute("src", srvr + ROOT + "/lib/images/seatmaps/V" + rslt.VenueID + ".gif");
                    var ww = getwindowsize();
                    sheight = ww.y;
                    swidth = (parseInt(ww.x) - 200);

                    $("#performance_summary_placeholder").css("left", "" + (((swidth / 2) + 200) - (ticketing_grid_width / 2)) + "px");
                    $("#performance_summary_placeholder").css("top", "" + ((sheight / 2) - (ticketing_grid_height / 2)) + "px");

                    var performance_summary_placeholder = document.getElementById("performance_summary_placeholder");
                    var placeholder_width = parseInt(performance_summary_placeholder.style.width);
                    var placeholder_height = parseInt(performance_summary_placeholder.style.height);
                    zoomrect =
                    {
                        left: (((swidth / 2) + 200) - (ticketing_grid_width / 2)),
                        top: ((sheight / 2) - (ticketing_grid_height / 2)),
                        width: ticketing_grid_width,
                        height: ticketing_grid_height
                    };

                    mousepos = { x: loc.x, y: loc.y };
                    animate.open("performance_summary_placeholder", function() { $("#performance_summary_placeholder").show(); addShadow("performance_summary_panel"); }, null, mousepos, zoomrect);
                }
                else {
                    if (rslt.ErrorMessage.length > 0)
                        alert(rslt.ErrorMessage);
                    else
                        alert(rslt.Message);
                }
            }
        }
    }

    req.open("POST", (srvr + ROOT + WEBSERVICE + "GetPerformancePricing"), true);
    req.setRequestHeader(CONTENT_TYPE, APP_JSON);
    req.onreadystatechange = this.handler;
    req.send(JSON.serialize(sendObj));
    $("#wait").fadeIn("slow");
}

function selectPriceTypeQty(iPriceType, iQty) {
    checkEnableSubmitPurchase();
}

function checkEnableSubmitPurchase() {
    total_selected_quantity = 0;
    $('select.ddlzoneqty').each(
		function(i) {
		    total_selected_quantity += parseInt(this.options[this.selectedIndex].value);
		}
	);
		if (zone_no > -1 && total_selected_quantity > 0)
		    $('#btn_purchase_submit').show(function() { positionShadow("performance_summary_panel"); });
		else
		    $('#btn_purchase_submit').hide(function() { positionShadow("performance_summary_panel"); });
}

function hideTicketingGrid() 
{
    $("#ticket_req_msg").html("");
    $("#promo_msg").hide(function() { document.getElementById("tbx_promocode").value = ""; });
    
    animate.close("performance_summary_placeholder", function() { $("#performance_summary_placeholder").hide(); }, null, mousepos, zoomrect);
}

function selectZone(iZone_no) {
    zone_no = iZone_no;
    if (iZone_no > 0)
        document.getElementById("img_venue_map").setAttribute("src", srvr + ROOT + "/lib/images/seatmaps/" + iZone_no + ".gif");
    else
        document.getElementById("img_venue_map").setAttribute("src", srvr + ROOT + "/lib/images/seatmaps/V" + iFacility_no + ".gif");
}

/* --------------------------------------------------------------------------------------------------------------------------- */

function show_donor_notes() {
    var chk_donor_notes = document.getElementById("chk_donor_notes");

    if (chk_donor_notes.checked == true)
        $("#donor_notes_holder").slideDown("slow");
    else
        $("#donor_notes_holder").slideUp("slow");
}

var list_donor = true;
function set_listing_pref(li) 
{
    if (li == "N")
        list_donor = false;
    else if (li == "Y")
        list_donor = true;
}

function add_contribution() 
{
    var req = getreq();

    handler = function() 
    {
        if (req.readyState == 4) 
        {
            $("#btn_submit_contribution").show();
            if (req.status == 200) 
            {
                var rslt = JSON.parse(req.responseText);
                try 
                {
                    rslt = rslt.d;
                } catch (err) { }

                if (rslt.Success) 
                {
                    $("#contrib_wait").html("<i style='color:#666;'>Redirecting to cart...</i>");
                    window.location.href = srvr + ROOT + "/cart/index.aspx";
                }
                else 
                    $("#contrib_error_holder").html(rslt.ErrorMessage);
            }
        }
    }

    form_validate = function() {
        var retval = {};
        var errmsg = "";
        var amt = document.getElementById("tbx_amount").value;
        if (amt <= 0)
            errmsg = "<li>- Contribution amount must be greater than zero.</li>";
        else
            retval.amount = amt;

        var txt_area = document.getElementById("tbx_donor_notes").value;
        if (txt_area.length > 255)
            errmsg = "<li>- Your notes cannot exceed 255 characters.</li>";
        else
            retval.notes = txt_area;

        retval.anonymous = list_donor;
        retval.listingname = document.getElementById('tbx_donor_name').value; ;
        
        if (!retval.anonymous) {
            if (retval.listingname.length == 0)
                errmsg += "- Please enter your name / organization.";
        }

        if (errmsg.length > 0) {
            $("#contrib_error_holder").html("Please correct the following items:<ul>" + errmsg + "</ul>");
            $("#contrib_error_holder").slideDown("slow");
        }
        else
            return retval;
    }
    var sendObj = form_validate();
    if (sendObj) 
    {
        req.open("POST", (srvr + ROOT + WEBSERVICE + "AddContributionExtended"), true);
        req.setRequestHeader(CONTENT_TYPE, APP_JSON);
        req.onreadystatechange = this.handler;
        req.send(JSON.serialize(sendObj));
        $("#btn_submit_contribution").hide();
        $("#contrib_wait").html("<img src='" + srvr + ROOT + "/lib/images/wait_spinner24x24.gif' align='absmiddle' /> <i style='color:#666;'>Please wait...</i>");
    }
}

/* --------------------------------------------------------------------------------------------------------------------------- */

function validate_char_count(txt_area, error_holder) 
{
    var txt = txt_area.value;
    if (txt.length > 255)
        $("#" + error_holder).html("Your notes cannot exceed 255 characters.");
}


function log_out() {

    var req = getreq();

    handler = function() {
        if (req.readyState == 4) {
            if (req.status == 200) {
                var rslt = JSON.parse(req.responseText);
                try {
                    rslt = rslt.d;
                } catch (err) { }

                if (rslt.Success) {
                    eraseCookie("KcoperaUser");
                    window.location.href = srvr + ROOT + "/account/logout.aspx";
                }
                else {
                    $("#btn_submit_contribution").show();
                    $("#contrib_error_holder").html(rslt.ErrorMessage);
                }

            }
        }
    }
    if (req) 
    {
        req.open("POST", (srvr + ROOT + WEBSERVICE + "LogOut"), true);
        req.setRequestHeader(CONTENT_TYPE, APP_JSON);
        req.onreadystatechange = this.handler;
     
        req.send("");
    }
}

function build_customer_account_details(acct_info) {
    var col_one = "";
    var col_two = "";

    try 
    {
        col_one += get_menu_val(document.getElementById("ddl_polite")) + " ";
        col_one += document.getElementById("tbx_fname").value + " ";
        col_one += document.getElementById("tbx_lname").value + "<br/>";
        col_one += document.getElementById("tbx_street1").value + ", ";
        if (("" + document.getElementById("tbx_street2").value) != "")
            col_one += document.getElementById("tbx_street2").value + "<br/>";
        col_one += document.getElementById("tbx_city").value + ", ";
        col_one += get_menu_val(document.getElementById("ddl_state")) + " ";
        col_one += document.getElementById("tbx_zip").value + "<br/>";

        col_two += "Email: " + document.getElementById("tbx_emailaddr").value + "<br/>";
        col_two += "Day Phone: " + document.getElementById("tbx_phone").value + "<br/>";
        col_two += "Evening Phone: " + document.getElementById("tbx_evephone").value;
        if (is_cart_page) 
        {
            $("#customer_info_details_one").html(col_one);
            $("#customer_info_details_two").html(col_two);
            if (!customer_info_set)
                toggle_customer_panel();
        }
        else
            $("#customer_details").html(col_one + "<br/>" + col_two);
    }
    catch (err) {
        alert(err.description ? err.description : err);
    }
}

function build_customer_account_form(acct_info) {
    try {
        document.getElementById("tbx_emailaddr").value = acct_info.Email;
        document.getElementById("tbx_fname").value = acct_info.NameFirst;
        document.getElementById("tbx_lname").value = acct_info.NameLast;
        var menu = document.getElementById("ddl_polite");
        if (menu && (acct_info.Prefix.length > 0))
            set_selected_value(menu, acct_info.Prefix);
        document.getElementById("tbx_street1").value = acct_info.Street1;
        document.getElementById("tbx_street2").value = acct_info.Street2;
        document.getElementById("tbx_city").value = acct_info.City;
        menu = document.getElementById("ddl_state");
        if (menu && (acct_info.State.length > 0))
            set_selected_value(menu, acct_info.State);
        document.getElementById("tbx_zip").value = acct_info.PostalCode;
        document.getElementById("tbx_phone").value = acct_info.PhoneDay;
        document.getElementById("tbx_evephone").value = acct_info.PhoneEve;
        build_customer_account_details();
    }
    catch (err) {
        alert(err.description ? err.description : err);
    }
}

var customer_info_panel_visible = false;
function toggle_account_panel() {

    if (customer_info_panel_visible) {
        $("#customer_info_panel").slideUp('slow');
        customer_info_panel_visible = false;
    }
    else {
        $("#customer_info_panel").slideDown('slow');
        customer_info_panel_visible = true;
    }
}

function register() {
    var req = getreq();
    var login_source_no = -1;

    handler = function() {
        if (req.readyState == 4) {
            $("#btn_register").show();
            if (req.status == 200) {
                var rslt = JSON.parse(req.responseText);
                try {
                    rslt = rslt.d;
                }
                catch (E) { }
                if (rslt.Success) {
                    $("#register_msg").html("<i>Redirecting...</i>");
                    if (rslt.RedirectUrl.length > 0)
                        window.location.href = srvr + ROOT + rslt.RedirectUrl;
                    else
                        window.location.href = srvr + ROOT + "/account/index.aspx";
                }
                else { 
                    var register_err = "";
                    register_err += "It appears an account with that email address already exists in our system."
                    register_err += "Please <a href='javascript:void(0);' onclick='toggle_login();'>login</a> to your account."
                    register_err += "Forgot your password?  Enter your email address on the \"Password Retrieve\" on the right-hand side of this page."
                    register_err += "If you believe you are receiving this message in error, please call the Ticket Office at 816-471-7344";
                    $("#register_msg").html(register_err);
                }
            }
        }
    }

    form_validate = function() {
        //        var retval = [];
        //        var customer_register_form = document.getElementById("customer_register_form");

        //        if (customer_register_form) {
        //            var inputs = customer_register_form.getElementsByTagName("input");
        //            for (var x = 0; x < inputs.length; x++) {
        //                var kvpair = { K: "", V: "" };
        //                if (inputs[x].name != null && inputs[x].name != "") {
        //                    kvpair.K = inputs[x].name;
        //                    if (inputs[x].type == "checkbox")
        //                        kvpair.V = inputs[x].checked;
        //                    else
        //                        kvpair.V = inputs[x].value.trim();

        //                    retval[retval.length] = kvpair;
        //                }
        //            }
        //            var selects = customer_register_form.getElementsByTagName("select");
        //            for (var x = 0; x < selects.length; x++) {
        //                var kvpair = { K: "", V: "" };
        //                kvpair.K = selects[x].name;
        //                kvpair.V = get_menu_val(selects[x]);
        //                retval[retval.length] = kvpair;
        //            }
        //        }
        //        return { userinfo: retval };

        var userinputs = [];
        var errmsg = "";
        var customer_register_form = document.getElementById("customer_register_form");

        if (customer_register_form) {
            userinputs = getObjectChildrenInput(customer_register_form);

            var PhoneDay = "";
            var PhoneEve = "";
            for (var x = 0; x < userinputs.length; x++) {
                var K = userinputs[x].K;
                var V = userinputs[x].V;

                if (K == "Email" && V.length == 0)
                    errmsg += "Email Address required.\r\n";

                if (K == "Password" && V.length == 0)
                    errmsg += "Password required.\r\n";

                if (K == "NameFirst" && V.length == 0)
                    errmsg += "First Name required.\r\n";

                if (K == "NameLast" && V.length == 0)
                    errmsg += "Last Name required.\r\n";

                if (K == "Street1" && V.length == 0)
                    errmsg += "Street Address Required.\r\n"

                if (K == "City" && V.length == 0)
                    errmsg += "City Required.\r\n"

                if (K == "PhoneDay")
                    PhoneDay = V;

                if (K == "PhoneEve")
                    PhoneEve = V;

                if (K == "PostalCode" && V.length == 0)
                    errmsg += "Postal Code is required.\r\n";
            }

            if (PhoneDay.length == 0 && PhoneEve.length == 0)
                errmsg += "Day Phone or Evening Phone is required.";
        }

        var email_address = document.getElementById("tbx_emailaddr").value;
        var email_valid = true;

        if (email_address.length > 0)
            email_valid = email_validation(email_address);
        if (!email_valid)
            errmsg += "Email format is incorrect";
        
        if (errmsg.length == 0)
            return { userinfo: userinputs };
        else
            alert(errmsg);
    }

    var sendObj = form_validate();

    if (sendObj) 
    {
        req.open("POST", (srvr + ROOT + WEBSERVICE + "SubmitUserInfo"), true);
        req.setRequestHeader(CONTENT_TYPE, APP_JSON);
        req.onreadystatechange = this.handler;
        req.send(JSON.serialize(sendObj));
        $("#btn_register").hide();
        $("#register_msg").html("<img src='" + srvr + ROOT + "/lib/images/wait_spinner24x24.gif' align='absmiddle' /> <i style='color:#666;'>Please wait...</i>");
        $("#register_msg").fadeIn("fast");
    }
}

function submit_customer_info() {
    var login_source_no = -1;
    var req = null;

    handler = function() {
        if (req.readyState == 4) {
            document.body.style.cursor = "default";
            if (req.status == 200) {
                var rslt = JSON.parse(req.responseText);
                try {
                    rslt = rslt.d;
                }
                catch (E) { }
                if (rslt.Success) {
                    if (is_cart_page) {
                        customer_info_set = true;
                        document.getElementById("progress_tracker_2").className = "done";
                        $("#edit_account_link").show();
                        toggle_customer_panel(customer_callback);
                    }
                    else {
                        toggle_account_panel();
                        build_customer_account_details(rslt.AccountInfo);
                        customer_status();
                    }
                }
                else
                    alert(rslt.ErrorMessage);
            }
        }
    }

    form_validate = function() {
        var errmsg = "";
        var retval = [];
        var customer_panel_form = document.getElementById("customer_panel_form");
        if (customer_panel_form == null)
            customer_panel_form = document.getElementById("customer_info_panel");

        if (customer_panel_form) {
            var inputs = customer_panel_form.getElementsByTagName("input");
            for (var x = 0; x < inputs.length; x++) {
                var kvpair = { K: "", V: "" };
                if (inputs[x].name != null && inputs[x].name != "") {
                    kvpair.K = inputs[x].name;
                    if (inputs[x].type == "checkbox")
                        kvpair.V = inputs[x].checked;
                    else
                        kvpair.V = inputs[x].value.trim();

                    retval[retval.length] = kvpair;
                }
            }
            var selects = customer_panel_form.getElementsByTagName("select");
            for (var x = 0; x < selects.length; x++) {
                var kvpair = { K: "", V: "" };
                kvpair.K = selects[x].name;
                kvpair.V = get_menu_val(selects[x]);
                retval[retval.length] = kvpair;
            }
            var email_address = document.getElementById("tbx_emailaddr").value;
            var email_valid = true;

            if (email_address.length > 0)
                email_valid = email_validation(email_address);
            if (!email_valid)
                errmsg += "Email format is incorrect";
        }
        
        if (errmsg.length == 0)
            return { userinfo: retval };
        else
            alert(errmsg);

    }

    var sendObj = form_validate();

    if (sendObj) {
        req = getreq();
        req.open("POST", (srvr + ROOT + WEBSERVICE + "SubmitUserInfo"), true);
        req.setRequestHeader(CONTENT_TYPE, APP_JSON);
        req.onreadystatechange = this.handler;
        req.send(JSON.serialize(sendObj));
        document.body.style.cursor = "wait";
    }
}

function do_password_retrieve() 
{
    var req = getreq();

    handler = function() {
        if (req.readyState == 4) {
            if (req.status == 200) {
                var rslt = JSON.parse(req.responseText);
                try {
                    rslt = rslt.d;
                }
                catch (E) { }
                if (rslt.Success)
                    $("#retrieve_msg").html("Your request has been submitted. If the login you submitted matches an existing login, it has been emailed to the address associated with that account.");
                else
                    $("#retrieve_msg").html(rslt.ErrorMessage);
            }
        }
    }

    var email = document.getElementById('tbx_forgot_email').value;
    if (email.length == 0)
        alert("Email Address required.");

    var e = email_validation(email);
    if (e)
        sendObj = { "email": email };
    else
        alert("Email format is incorrect.");        
    
    if (sendObj) {
        req.open("POST", (srvr + ROOT + WEBSERVICE + "ForgotLogin"), true);
        req.setRequestHeader(CONTENT_TYPE, APP_JSON);
        req.onreadystatechange = this.handler;
        req.send(JSON.serialize(sendObj));
        $("#retrieve_msg").html("<img src='" + srvr + ROOT + "/lib/images/wait_spinner24x24.gif' align='absmiddle' /> <i style='color:#666;'>Please wait...</i>");
        $("#retrieve_msg").fadeIn("fast");
    }

}

function do_update_attr() {

    var req = getreq();
    handler = function() 
    {
        if (req.readyState == 4) 
        {
            if (req.status == 200) 
            {
                var rslt = JSON.parse(req.responseText);
                try 
                {
                    rslt = rslt.d;
                }
                catch(Err){ }
                $("#contact_attributes").toggle("slow");
            }
        }
    }

    var retval = [];
    var contact_attributes = document.getElementById("contact_attributes");
    if (contact_attributes) {
        var inputs = contact_attributes.getElementsByTagName("input");
        for (var x = 0; x < inputs.length; x++) {
            var kvpair = { K: "", V: "" };
            if (inputs[x].name != null && inputs[x].name != "") {
                kvpair.K = inputs[x].name;
                if (inputs[x].type == "checkbox")
                    kvpair.V = inputs[x].checked;
                else
                    kvpair.V = inputs[x].value.trim();

                retval[retval.length] = kvpair;
            }
        }
        
    }

    if (retval) 
    {
        req.open("POST", (srvr + ROOT + WEBSERVICE + "UpdateContactPreferences"), true);
        req.setRequestHeader(CONTENT_TYPE, APP_JSON);
        req.onreadystatechange = this.handler;
        req.send(JSON.serialize({ contactinfo: retval }));
    }
}

function apply_promo_code() 
{
    var req = getreq();
    handler = function() {
        if (req.readyState == 4) {
            document.body.style.cursor = "default";
            if (req.status == 200) {
                var rslt = JSON.parse(req.responseText);
                try {
                    rslt = rslt.d;
                }
                catch (Err) { }
                var errmsg = rslt.Message;
                if (rslt.Success) 
                {
                    
                    if (!is_cart_page)
                        doGetPricingGrid(selected_perf_no, document.getElementById("buylink"+selected_perf_no));

                    if (rslt.FormattedHTML.length > 0)
                        $("#formatted_cart").html(rslt.FormattedHTML);
                } else {
                    if (errmsg.length > 0)
                        $("#promo_msg").html(errmsg);

                    $("#promo_msg").fadeIn(function() { positionShadow("performance_summary_panel") });
                }
            }
        }
    }
    var promo = document.getElementById("tbx_promocode").value;

    if (promo.length > 0) 
    {
        var use_webmethod = "AddPromoCode";
        if (is_cart_page)
            use_webmethod = "SetPromoCode";
            
        req.open("POST", (srvr + ROOT + WEBSERVICE + use_webmethod), true);
        req.setRequestHeader(CONTENT_TYPE, APP_JSON);
        req.onreadystatechange = this.handler;
        req.send(JSON.serialize({ "promo_code": promo }));
        document.body.style.cursor = "wait";
    }
}

function updatePassword() {
    var req = getreq();

    handler = function() {
        if (req.readyState == 4) {
            if (req.status == 200) {
                var rslt = JSON.parse(req.responseText);
                try {
                    rslt = rslt.d;
                }
                catch (err) { alert(err); }
                if (rslt.Success) {
                    $("#account_login").toggle("normal");
                    document.getElementById("tbx_current_password").value = "";
                    document.getElementById('tbx_new_password').value = "";
                    alert("Your Password has been updated!");
                }
                else
                    alert(rslt.ErrorMessage);
            }
        }
    }

    form_validate = function() {
        var retval = {};
        var errmsg = "";

        retval.login = document.getElementById('hdn_login').value;
        if (document.getElementById("tbx_current_password").value.length == 0)
            errmsg += "Current Password required.\r\n";
            
        retval.password = document.getElementById('tbx_new_password').value;
        if (retval.password.length == 0)
            errmsg += "New Password required.";

        retval.email = retval.login;

        if (errmsg.length > 0)
            alert(errmsg);
        else
            return retval;
    }
    
    var sendObj = form_validate();

    req.open(HTTP_VERB, (srvr + ROOT + WEBSERVICE + "UpdateLogin"), true);
    req.setRequestHeader(CONTENT_TYPE, APP_JSON);
    req.onreadystatechange = this.handler;
    req.send(JSON.serialize(sendObj));
}


function doShowEditPanel(id) {
    $("#edit_panel_" + id).toggle("normal");
}

function doCloseEditPanel(id) {
    $("#edit_panel_" + id).toggle("normal");
}
