﻿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 (rslt.RedirectUrl)
    						location.href = rslt.RedirectUrl;
    					if (location.href.indexOf("register.aspx") > -1 || location.href.indexOf("logout.aspx") > -1)
    						window.location.href = srvr + ROOT + "/account/index.aspx";
    				}
    			}
    			else {
    				$("#login_wait").html("<span style='margin-left: 18px;color: #c00;' title='Either your login or password is incorrect, or your account may not exist.'>Your login failed.</span>");
    				$("#btn_login").show();
    				$("#login_panel_error").html(rslt.ErrorMessage);
    				$("#login_panel_error").slideDown(function() { positionShadow("loginex_panel") });

    			}
    		}
    	}
    }

    form_validate = function() {
    	var retval = {};
    	var errmsg = "";
    	var username = document.getElementById("tbx_login_user").value.trim();
    	if (username.length == 0)
    		errmsg += "\r\n - Email address required.";
    	else
    		retval.login = username;
    	var passwd = document.getElementById("tbx_login_password").value.trim();
    	if (passwd.length == 0)
    		errmsg += "\r\n - Password required.";
    	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"); });
    		alert("Please correct the following:\r\n" + errmsg);
    	}
    	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 do_subrenew(oCaller) {
		var req = getreq();

		this.handler = function() {
			if (req.readyState == 4) {
				var msg = "";
				document.body.style.cursor = "default";
				if (req.status == 200) {
					var rslt = JSON.parse(req.responseText);
					try {
						rslt = rslt.d;
					}
					catch (ex) { }
					if (rslt && rslt.Success) {
						location.href = "/renew/index.aspx";
					}
					else {
						msg = "<p>Sorry, this combination did not log you in correctly. Please check the numbers again.</p>";
						$("#btn_subrenew_submit").show();
					}
				}
				else {
					msg = "<p>An unanticipated error has occurred.</p>";
					$("#btn_subrenew_submit").show();
				}
				$("#subrenew_message").html(msg);
				positionShadow("loginex_panel");
			}
		}

		this.validate = function() {
			// LoginResp LoginWithOrderNo( int order_no, int customer_no )
			var retval = { order_no:0, customer_no:0 };
			var errmsg = "";
			var custno = $g("tbx_subrenew_custno").value;
			if (custno.trim().length > 0)
				retval.customer_no = custno;
			else
				errmsg += "\r\n - Customer Number required!";
			var orderno = $g("tbx_subrenew_orderno").value;
			if (orderno.trim().length > 0)
				retval.order_no = orderno;
			else
				errmsg += "\r\n - Order Number required!";

			if (errmsg.length == 0)
				return retval;
			else
				alert("Please complete these fields:" + errmsg);

		}

		var sendObj = this.validate()

		if (req && sendObj) {
			req.open("POST", (srvr + ROOT + WEBSERVICE + "LoginWithOrderNo"), true);
			req.setRequestHeader(CONTENT_TYPE, APP_JSON);
			req.onreadystatechange = this.handler;
			req.send(JSON.serialize(sendObj));
			$("#btn_subrenew_submit").hide();
			$("#subrenew_message").html("<img src='" + srvr + ROOT + "/lib/images/wait_spinner24x24.gif' align='absmiddle' /> <i>Retrieving Orders...</i>");
			document.body.style.cursor = "wait";			
		}
	}

	function do_account_lookup(oCaller) {
		var req = getreq();

		this.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 (ex) { }
					if (rslt && rslt.Success) {
						var msg = "<p>You have been logged in. </p><p>We've also emailed your login credentials to your email account. If you don't receive ";
						msg += "this message, please contact customer service.</p>";
						$("#acctlkup_message").html(msg);
					}
					else {
						var msg = "<p>We were not able to log you in with these credentials. If you believe that they're correct, please contact the customer service department. ";
						msg += "You can also use the <u>Forgot your password</u> link above with other email addresses you may have used. We regret any inconvenience.<p>";
						$("#acctlkup_message").html(msg);
					}
					positionShadow("loginex_panel");
				}
				else {
					alert("An unanticipated error has occurred.");
					$("#acctlkup_message").html("");
					$('#btn_acctlkup_submit').show();
				}
			}
		}

		this.validate = function() {	// string login, string passwd, string promo_code, bool remember_me
			var retval = { "login": "", "passwd": 0, "promo_code": "account lookup", "remember_me": false };
			var errmsg = "";
			var lastname = $g("tbx_acctlkup_lname").value;
			if (lastname.trim().length > 0)
				retval.login = lastname;
			else
				errmsg += "\r\n - Last Name required!";
			var cust_no = $g("tbx_acctlkup_custno").value;
			if (cust_no.trim().length > 0)
				retval.passwd = cust_no;
			else
				errmsg += "\r\n - Customer Number required!";

			if (errmsg.length == 0)
				return retval;
			else
				alert("Please complete these fields:" + errmsg);
		}

		var sendObj = this.validate();

		if (req && sendObj) {
			req.open("POST", (srvr + ROOT + WEBSERVICE + "Login"), true);
			req.setRequestHeader(CONTENT_TYPE, APP_JSON);
			req.onreadystatechange = this.handler;
			req.send(JSON.serialize(sendObj));
			$("#acctlkup_message").html("<img src='" + srvr + ROOT + "/lib/images/wait_spinner24x24.gif' align='absmiddle' /> <i>Logging in...</i>");
			$('#btn_acctlkup_submit').hide();
			document.body.style.cursor = "wait";
		}
		
	}

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_registerex_form"); //   was: customer_register_form

    	if (customer_register_form) {
    		userinputs = getObjectChildrenInput(customer_register_form);

    		if (!userinputs || userinputs.length == 0)
    			errmsg = "No userinputs\r\n";

    		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") {
    				if (V.length == 0)
    					errmsg += "Email Address required.\r\n";
    				else if (!email_validation(V))
    					errmsg += "Email Address format is not correct\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.\r\n";
    	}
    	else
    		errmsg = "Didn't get customer_registerex_form\r\n";

    	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(oCaller) 
{
    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. Your existing login has been emailed to the address associated with that account.");
    			else {
    				$("#retrieve_msg").html(rslt.ErrorMessage);
    				$('#btn_password_retrieve').show();
    			}
    			positionShadow("loginex_panel");
    		}
    		document.body.style.cursor = "default";
    	}
    }

    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");
        $('#btn_password_retrieve').hide();
        document.body.style.cursor = "wait";
       }

}

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");
}

/* --------------------------------------------------------------------------------------------------------------------------- */


var prev_panel_holder_mousepos;
var registerex_panel_visible = false;
function toggle_register(oCallback) {
	var loc = getxy($g("registerex_link"));
	var registerex_panel_holder = $g("registerex_panel_holder");

	if (registerex_panel_visible) {
		animate.close("registerex_panel_holder", function() {
			$("#registerex_panel_holder").hide();
			registerex_panel_visible = false;
			if (oCallback)
				oCallback();
			else { in_submit_order_process = false; }
		}, null, panel_holder_mousepos, panel_holder_zoomrect);
	}
	else {
		if (registerex_panel_holder) {
			var ww = getwindowsize();
			var ss = getscrolltop();
			var target_top = Math.floor(ww.y / 2) + ss.y - 230;
			var target_left = (Math.floor(ww.x / 2) - 300);

			$("#registerex_panel_holder").css("left", "" + target_left + "px");
			$("#registerex_panel_holder").css("top", "" + target_top + "px");
			panel_holder_zoomrect =
                {
                	left: target_left,
                	top: target_top,
                	width: 600,
                	height: 460
                };
			prev_panel_holder_mousepos = panel_holder_mousepos;
			panel_holder_mousepos = { x: loc.x, y: loc.y };
			animate.open("registerex_panel_holder", function() {
				$("#registerex_panel_holder").show();
				registerex_panel_visible = true; addShadow("registerex_panel");
				$('#loginex_panel_holder').hide();
				loginex_panel_visible = false;
				panel_holder_mousepos = prev_panel_holder_mousepos;
			}, null, panel_holder_mousepos, panel_holder_zoomrect);
		}
	}
}

var loginex_panel_visible = false;
function toggle_login(oCallback) {
	var loc = getxy($g("login_link"));
	var loginex_panel_holder = $g("loginex_panel_holder");

	if (loginex_panel_visible) {
		animate.close("loginex_panel_holder", function() {
			$("#loginex_panel_holder").hide();
			loginex_panel_visible = false;
			if (oCallback)
				oCallback();
			else { in_submit_order_process = false; }
		}, null, panel_holder_mousepos, panel_holder_zoomrect);
	}
	else {
		if (loginex_panel_holder) {
			var ww = getwindowsize();
			var ss = getscrolltop();
			var target_top = Math.floor(ww.y / 2) + ss.y - 130;
			if (target_top < 0)
				target_top = 0;
			var target_left = ((ww.x / 2) - 200);

			$("#loginex_panel_holder").css("left", "" + target_left + "px");
			$("#loginex_panel_holder").css("top", "" + target_top + "px");
			panel_holder_zoomrect =
                {
                	left: target_left,
                	top: target_top,
                	width: 400,
                	height: 260
                };

			panel_holder_mousepos = { x: loc.x, y: loc.y };
			animate.open("loginex_panel_holder", function() {
				$("#loginex_panel_holder").show();
				loginex_panel_visible = true; addShadow("loginex_panel");
			}, null, panel_holder_mousepos, panel_holder_zoomrect);
		}
	}
}
function toggle_remember() {
	$("#remember_panel_holder").toggle("slow", function() { positionShadow("loginex_panel"); });
}
var current_lg = 1;
function toggle_loginex_panel(id) {
	if (current_lg == 1 && id == 1)
		return;

	$("#lg" + current_lg).slideUp("slow", function() {
		//positionShadow("loginex_panel");
		$("#lg" + id).slideDown("slow", function() { positionShadow("loginex_panel") });
		current_lg = id;
	});
}

