function disable_checkout_fields() {
    var el = document.checkout_form.elements;
    for(var i=0;i<el.length;i++) {
	el[i].disabled = true;
    }
}

function enable_checkout_fields() {
    var el = document.checkout_form.elements;
    for(var i=0;i<el.length;i++) {
	el[i].disabled = false;
    }
}

function pause(millis)  {
    var date = new Date();
    var curDate = null;
    
    do {
	curDate = new Date();
    } while(curDate-date < millis);
}

function createRequestObject() {
    var ro;
    var browser = navigator.appName;
    if(browser == "Microsoft Internet Explorer"){
        ro = new ActiveXObject("Microsoft.XMLHTTP");
    }else{
        ro = new XMLHttpRequest();
    }
    return ro;
}

var popup_timeout = 5000; // How long the popup div stays on
var popup_timeout_inst = {}; // The timeout - clear before doing a new one

var navbar_http = createRequestObject();
var checkout_http = createRequestObject();
var message_http = createRequestObject();
var cart_http = createRequestObject();
var us_http = createRequestObject();
var canada_http = createRequestObject();
var int_http = createRequestObject();
var shipping_http = createRequestObject();
var address_http = createRequestObject();

function edit_address(id) {
    document.getElementById('address_'+id).style.display = 'none';
    document.getElementById('edit_address_'+id).style.display = 'inline';
}

function close_address(id) {
    document.getElementById('address_'+id).style.display = 'inline';
    document.getElementById('edit_address_'+id).style.display = 'none';
}

function save_address(id) {
    var header = "Content-Type:application/x-www-form-urlencoded; charset=UTF-8";
    var data = 'firstName='+document.getElementById('firstName_'+id).value;
    data += '&shipping_address_id='+id;
    data += '&lastName='+document.getElementById('lastName_'+id).value;
    data += '&address='+document.getElementById('_address_'+id).value;
    data += '&city='+document.getElementById('city_'+id).value;
    data += '&state='+document.getElementById('state_'+id).value;
    data += '&zip='+document.getElementById('zip_'+id).value;
    data += '&country_id='+document.getElementById('country_id_'+id).value;
    data += '&phoneNumber='+document.getElementById('phoneNumber_'+id).value;
    address_http.abort();
    address_http.open('post', 'update_address.php', true);
    address_http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
    address_http.onreadystatechange = address_list_response;
    address_http.send(data);
}

function save_billing_address(id) {
    var header = "Content-Type:application/x-www-form-urlencoded; charset=UTF-8";
    var data = 'firstName='+document.getElementById('firstName_'+id).value;
    data += '&billing_address_id='+id;
    data += '&lastName='+document.getElementById('lastName_'+id).value;
    data += '&address='+document.getElementById('_address_'+id).value;
    data += '&city='+document.getElementById('city_'+id).value;
    data += '&state='+document.getElementById('state_'+id).value;
    data += '&zip='+document.getElementById('zip_'+id).value;
    data += '&country_id='+document.getElementById('country_id_'+id).value;
    data += '&use_cc='+document.getElementById('use_cc_'+id).value;
    data += '&cardNumber='+document.getElementById('cc_num_'+id).value;
    data += '&expMonth='+document.getElementById('expirationMonth_'+id).value;
    data += '&expYear='+document.getElementById('expirationYear_'+id).value;
    data += '&nameOnAccount='+document.getElementById('nameOnAccount_'+id).value;
    data += '&routingNumber='+document.getElementById('routingNumber_'+id).value;
    data += '&accountNumber='+document.getElementById('accountNumber_'+id).value;
    data += '&phoneNumber='+document.getElementById('phoneNumber_'+id).value;
    address_http.abort();
    address_http.open('post', 'update_billing_address.php', true);
    address_http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
    address_http.onreadystatechange = address_list_response;
    address_http.send(data);
}

function primary_address(id) {
    address_http.abort();
    address_http.open('get', 'primary_address.php?address_id='+id, true);
    address_http.onreadystatechange = address_list_response;
    address_http.send(null);
}
function primary_billing_address(id) {
    address_http.abort();
    address_http.open('get', 'primary_billing_address.php?address_id='+id, true);
    address_http.onreadystatechange = address_list_response;
    address_http.send(null);
}

function delete_address(id) {
    if (confirm('Are you sure you want to delete this address?')) {
	address_http.abort();
	address_http.open('get', 'delete_address.php?address_id='+id, true);
	address_http.onreadystatechange = address_list_response;
	address_http.send(null);
    }
}
function delete_billing_address(id) {
    if (confirm('Are you sure you want to delete this billing address?')) {
	address_http.abort();
	address_http.open('get', 'delete_billing_address.php?address_id='+id, true);
	address_http.onreadystatechange = address_list_response;
	address_http.send(null);
    }
}

function address_list_response() {
    if (address_http.readyState == 4) {
	var response = address_http.responseText.split("|-|-|");
	document.getElementById('primary_address').innerHTML = response[0];
	document.getElementById('address_list').innerHTML = response[1];
	get_message();
    }
}

function show_div(id) {
    document.getElementById(id).style.display = 'inline';
}

function hide_div(id) {
    document.getElementById(id).style.display = 'none';
}

function swap_divs(hide, show) {
    hide_div(hide);
    show_div(show);
}

function sign_in() {
    var header = "Content-Type:application/x-www-form-urlencoded; charset=UTF-8";
    var login_email = document.getElementById('login_email').value;
    var password = document.getElementById('login_password').value;
    var data="login_email="+login_email+"&password="+password;
    navbar_http.abort();
    navbar_http.open('post', 'sign_in.php', true);
    navbar_http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
    navbar_http.onreadystatechange = navbar_response;
    navbar_http.send(data);
}

function logoff() {
    navbar_http.abort();
    navbar_http.open('get', 'logoff.php', true);
    if (document.getElementById('logoff_redirect')) {
	// Don't AJAX the logoff, redirect to the homepage
	navbar_http.onreadystatechange = go_home;
    } else {
	navbar_http.onreadystatechange = navbar_response;
    }
    navbar_http.send(null);
}

function checkout_login() {
    var header = "Content-Type:application/x-www-form-urlencoded; charset=UTF-8";
    var login_email = document.getElementById('checkout_login_email').value;
    var password = document.getElementById('checkout_login_password').value;
    var data="login_email="+login_email+"&password="+password;
    checkout_http.abort();
    checkout_http.open('post', 'checkout_sign_in.php', true);
    checkout_http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
    checkout_http.onreadystatechange = checkout_response;
    checkout_http.send(data);
}

function checkout_create_account() {
    var header = "Content-Type:application/x-www-form-urlencoded; charset=UTF-8";
    var first_name = document.getElementById('new_first_name').value;
    var last_name = document.getElementById('new_last_name').value;
    var email = document.getElementById('new_email').value;
    var password = document.getElementById('new_password').value;
    var password_confirm = document.getElementById('new_password_confirm').value;
    var heard_id = document.getElementById('heard_id').value;
    var customers_newsletter = 1;
    if (password != password_confirm) {
	alert("Your password does not match the password confirmation.");
	return;
    }
    if (password.length < 5) {
	alert("Your password must be at least five characters.");
	return;
    }
    var data = 'customers_firstname='+first_name+'&customers_lastname='+last_name+'&customers_email='+email+'&password='+password+'&heard_id='+heard_id+'&customers_newsletter='+customers_newsletter;
    checkout_http.abort();
    checkout_http.open('post', 'checkout_create_account.php', true);
    checkout_http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
    checkout_http.onreadystatechange = checkout_response;
    checkout_http.send(data);
}

function navbar_response() {
    if (navbar_http.readyState == 4) {
	var response = navbar_http.responseText;
	document.getElementById('navbar').innerHTML = response;
	// Open the navbar
	open_quick_link('store_account');
	get_message();
    }
}

function go_home() {
    if (navbar_http.readyState == 4) {
	document.location = './';
    }
}

function checkout_response() {
    if (checkout_http.readyState == 4) {
	var response = checkout_http.responseText;
	if (response.length) {
	    document.getElementById('account_information').innerHTML = response;
	}
	get_shipping_options();
    }
}

function get_message() {
    message_http.abort();
    message_http.open('get', 'message.php', true);
    message_http.onreadystatechange = message_response;
    message_http.send(null);
}

function message_response() {
    if (message_http.readyState == 4) {
	var response = message_http.responseText;
	document.getElementById('message').innerHTML = response;
	if (response) {
	    document.getElementById('message').style.display = 'block';
	} else {
	    document.getElementById('message').style.display = 'none';
	}
    }
}

var showing_product_popup;

function add_to_cart(products_id, products_options_values_id) {
    if (showing_product_popup) {
	if (document.getElementById('add_popup_'+showing_product_popup).style.display == 'inline') {
	    hide_div('add_popup_'+showing_product_popup);
	    setTimeout("add_to_cart("+products_id+", "+products_options_values_id+")", 100);
	    showing_product_popup = 0;
	    return;
	}
    }
    showing_product_popup = products_id;
    var quantity = document.getElementById('quantity_'+products_options_values_id).value;
    if (!quantity) {
	document.getElementById('add_popup_'+products_id).innerHTML = 'Please select a quantity';
    } else {
	navbar_http.abort();
	navbar_http.open('get', 'add_to_cart.php?products_id='+products_id+'&products_options_values_id='+products_options_values_id+'&quantity='+quantity, true);
	navbar_http.onreadystatechange = navbar_response;
	navbar_http.send(null);
	document.getElementById('message').innerHTML = '';
	document.getElementById('message').style.display = 'none';
	document.getElementById('add_popup_'+products_id).innerHTML = 'This product has been added to your cart.';
    }
    show_div('add_popup_'+products_id);
    if (popup_timeout_inst[products_id]) { clearTimeout(popup_timeout_inst[products_id]) }
    popup_timeout_inst[products_id] = setTimeout("hide_div('add_popup_"+products_id+"')", popup_timeout);
}

function curr_special_cart(products_id, id) {
    // Special add-to-cart function for the curriculum special
    var curr = document.getElementById('curr_choices_'+id).value;
    var puppets = document.getElementById('puppet_choices_'+id).value;
    var options = '';
    var current = '';
    if (curr > 0) {
	for (var i=1; i<=curr; i++) {
	    current = getCheckedValue(getElementsById('curr_'+id+'_'+i));
	    if (current == '') {
		document.getElementById('add_popup_'+products_id).innerHTML = "You must choose your curriculum options.";
		show_div('add_popup_'+products_id);
		if (popup_timeout_inst[products_id]) { clearTimeout(popup_timeout_inst[products_id]) }
		popup_timeout_inst[products_id] = setTimeout("hide_div('add_popup_"+products_id+"')", popup_timeout);		
		return;
	    }
	    options += current + ":";
	}
    }
    if (puppets > 0) {
	current = getCheckedValue(getElementsById('puppets_'+id));
	if (current == '') {
	    document.getElementById('add_popup_'+products_id).innerHTML = "You must choose your puppet options.";
	    show_div('add_popup_'+products_id);
	    if (popup_timeout_inst) { clearTimeout(popup_timeout_inst) }
	    popup_timeout_inst = setTimeout("hide_div('add_popup_"+products_id+"')", popup_timeout);
	    return;
	}
	options += current;
    }
    navbar_http.abort();
    navbar_http.open('get', 'add_to_cart.php?products_id='+products_id+'&products_options_values_id='+options+'&quantity=1', true);
    navbar_http.onreadystatechange = navbar_response;
    navbar_http.send(null);
    document.getElementById('message').innerHTML = '';
    document.getElementById('message').style.display = 'none';
    document.getElementById('add_popup_'+products_id).innerHTML = "This product has been added to your cart.";
    show_div('add_popup_'+products_id);
    if (popup_timeout_inst) { clearTimeout(popup_timeout_inst) }
    popup_timeout_inst = setTimeout("hide_div('add_popup_"+products_id+"')", popup_timeout);
}

function get_cart() {
    cart_http.abort();
    cart_http.open('get', 'get_cart.php', true);
    cart_http.onreadystatechange = cart_response;
    cart_http.send(null);
}

function delete_cart(products_id, products_options_values_id) {
    cart_http.abort();
    cart_http.open('get', 'delete_cart.php?products_id='+products_id+'&products_options_values_id='+products_options_values_id, true);
    cart_http.onreadystatechange = cart_response;
    cart_http.send(null);
}

function update_cart_qty(products_id, products_options_values_id) {
    var qty = document.getElementById('qty_'+products_id+'_'+products_options_values_id).value;
    cart_http.abort();
    cart_http.open('get', 'update_cart_qty.php?products_id='+products_id+'&products_options_values_id='+products_options_values_id+'&products_quantity='+qty, true);
    cart_http.onreadystatechange = cart_response;
    cart_http.send(null);
}

function cart_response() {
    if (cart_http.readyState == 4) {
	var response = cart_http.responseText;
	document.getElementById('cart_contents').innerHTML = response;
	get_message();
    }
}

function get_shipping_options() {
    disable_checkout_fields();
    shipping_http.abort();
    shipping_http.open('get', 'shipping_options.php', true);
    shipping_http.onreadystatechange = update_shipping_options;
    shipping_http.send(null);
    document.getElementById('message').innerHTML = 'Calculating shipping charges...';
    document.getElementById('message').style.display = 'block';    
}

function get_shipping_cost_table() {
    disable_checkout_fields();
    shipping_http.abort();
    shipping_http.open('get', 'shipping_cost_table.php', true);
    shipping_http.onreadystatechange = update_shipping_cost_table;
    shipping_http.send(null);
    document.getElementById('message').innerHTML = 'Calculating shipping charges...';
    document.getElementById('message').style.display = 'block';
}

function update_shipping_options() {
    if (shipping_http.readyState == 4) {
	var response = shipping_http.responseText;
	if (response != '') {
	    document.getElementById('shipping_options').innerHTML = response;
	}
	get_shipping_cost_table();
    }
}

function update_shipping_cost_table() {
    if (shipping_http.readyState == 4) {
	var response = shipping_http.responseText;
	document.getElementById('shipping_cost_table').innerHTML = response;
	enable_checkout_fields();
	get_message();
    }
}

function account_info_sign_in() {
    show_div('sign_in');
    hide_div('create_account');
}

function account_info_create_account() {
    show_div('create_account');
    hide_div('sign_in');
}

function ship_different_click() {
    if (document.getElementById('ship_different').checked) {
	show_div('alt_shipping');
    } else {
	hide_div('alt_shipping');
    }
}

function change_shipping_address_id(id) {
    disable_checkout_fields();
    shipping_http.abort();
    shipping_http.open('get', 'update_shipping_address_id.php?id='+id, true);
    shipping_http.onreadystatechange = update_shipping_options;
    shipping_http.send(null);
    document.getElementById('message').innerHTML = 'Calculating shipping charges...';
    document.getElementById('message').style.display = 'block';    
}

function set_shipping() {
    disable_checkout_fields();
    if (document.getElementById('us_standard').checked) {
	url = 'set_shipping_method.php?method=us_standard';
    } else {
	url = 'set_shipping_method.php?method=us_express';
    }
    shipping_http.abort();
    shipping_http.open('get', url);
    shipping_http.onreadystatechange = update_shipping_cost_table;
    shipping_http.send(null);
    document.getElementById('message').innerHTML = 'Calculating shipping charges...';
    document.getElementById('message').style.display = 'block';    
}

var change_shipping_timeout;

function change_shipping() {
    if (typeof change_shipping_timeout != "indefined") {
	// A timeout already exists, clear it
	clearTimeout(change_shipping_timeout);
    }
    document.getElementById('message').innerHTML = 'Calculating shipping charges...';
    document.getElementById('message').style.display = 'block';    
    change_shipping_timeout = setTimeout("do_change_shipping()", 3000);
}

function do_change_shipping() {
    disable_checkout_fields();
    var zip = document.getElementById('shipping_zip').value;
    var country = document.getElementById('shipping_country').value;
    shipping_http.abort();
    shipping_http.open('get', 'change_shipping.php?zip='+zip+'&country='+country);
    shipping_http.onreadystatechange = update_shipping_options;
    shipping_http.send(null);
    document.getElementById('message').innerHTML = 'Calculating shipping charges...';
    document.getElementById('message').style.display = 'block';    
}

function submit_click() {
    document.getElementById('Submit_Order').disabled = true;
    document.form.submit();
}

function update_699_options(option) {
    //var option = document.getElementById('option').value;
    if (option == '0') {
	document.getElementById('option_1').style.display = 'none';
	document.getElementById('option_2').style.display = 'none';
    } else if (option == '1') {
	document.getElementById('option_1').style.display = 'inline';
	document.getElementById('option_2').style.display = 'none';
    } else if (option == '2') {
	document.getElementById('option_1').style.display = 'none';
	document.getElementById('option_2').style.display = 'inline';
    }
}

function checkout_other_shipping_address() {
    swap_divs('existing_shipping_address', 'new_shipping_address');
    document.getElementById('use_shipping_address_book').value = 0;
}
function checkout_shipping_address_book() {
    swap_divs('new_shipping_address', 'existing_shipping_address');
    document.getElementById('use_shipping_address_book').value = 1;
}
function checkout_other_billing_address() {
    swap_divs('existing_billing_address', 'new_billing_address');
    document.getElementById('use_billing_address_book').value = 0;
}
function checkout_billing_address_book() {
    swap_divs('new_billing_address', 'existing_billing_address');
    document.getElementById('use_billing_address_book').value = 1;
}

function new_use_cc_click() {
    var use_cc = document.getElementById('new_use_cc').value;
    if (use_cc == '1') {
	swap_divs('new_check', 'new_cc');
    } else {
	swap_divs('new_cc', 'new_check');
    }
}
function use_cc_click(id) {
    var use_cc = document.getElementById('use_cc_'+id).value;
    if (use_cc == '1') {
	swap_divs('check_'+id, 'cc_'+id);
    } else {
	swap_divs('cc_'+id, 'check_'+id);
    }
}

function update_series_if_text(text) {
    document.getElementById('series_imageflow_text').innerHTML = text;
}
