function update_shipping_elements(options, selected_option, subtotal, total, gift_total, remaining) {
	// shipping line
	options.hide();
	selected_option.show();

	// total calc
	var subtotal_amount = parseFloat(subtotal.html().replace(/[^0-9\.]/g,''));
	var cost = parseFloat(selected_option.html().replace(/[^0-9\.]/g,''));
	var total_amount = subtotal_amount + cost;

    if (gift_total != undefined && gift_total.length > 0) {
        var gift_total_amount = parseFloat(gift_total.html().replace(/[^0-9\.]/g, ''));
        var remaining_amount = total_amount - gift_total_amount;

        if (remaining_amount < 0) {
            remaining_amount = 0;
        }

        remaining.html('$' + remaining_amount.toFixed(2) + ' USD');
    }

	total.html('$' + total_amount.toFixed(2) + ' USD');
}

function update_shipping_cost(country) {
    update_shipping_elements(
        $('#shipping_cost span'),
        $('#shipping_cost #shipping_' + country),
        $('#subtotal'),
        $('#total, #top_total')
    );
}



$(document).ready(function() {	
	var updateTimeout = null;
	$(".arrows .up, .arrows .down").live("click", function() {
		quantity = $(this).closest(".quantity").find("input[type=text]");
		old = parseInt(quantity.val());
		
		if ($(this).hasClass("up")) {
			old ++;
			quantity.val(old);
		} else if (old > 1) {
			old --;
			quantity.val(old);
		}
		$(this).closest(".quantity").find(".spinner").show();
		
		// abort any pending updates
		window.clearTimeout(updateTimeout);
		
		updateTimeout = window.setTimeout(function() {
							// $(".spinner").fadeIn();
							$('#in_place_update').click();
						}, 600);
		
		
		
		return false;
	});

// for checkout
    $("#same_address").change(function() { 
			if (this.checked) { 
				$("#shipping").slideUp(400); 
			} else {
				$("#shipping").slideDown(400);
			}});
	if ($("#same_address").attr("checked")) {
		$("#shipping").hide(); 
	}
});

function cc_type(num) {
	num = $.trim(num);
	
	if(num[0] == '4')
		return 'visa';
		
	if(num.slice(0,4) == '6011' || num.slice(0,2) == '65')
		return 'discover';
		
	first_two = parseInt(num.slice(0,2));
	if(first_two >= 51 && first_two <= 55)
		return 'master';
	
	if(first_two == 34 || first_two == 37)
		return 'american_express'
		
	return null;
}



// For address forms
var PROVINCES = {
    'United States': [["Alabama", "AL"], ["Alaska", "AK"], ["American Samoa", "AS"], ["Arizona", "AZ"], ["Arkansas", "AR"], ["Armed Forces Americas", "AA"], ["Armed Forces Europe", "AE"], ["Armed Forces Pacific", "AP"], ["California", "CA"], ["Colorado", "CO"], ["Connecticut", "CT"], ["Delaware", "DE"], ["District of Columbia", "DC"], ["Federated States of Micronesia", "FM"], ["Florida", "FL"], ["Georgia", "GA"], ["Guam", "GU"], ["Hawaii", "HI"], ["Idaho", "ID"], ["Illinois", "IL"], ["Indiana", "IN"], ["Iowa", "IA"], ["Kansas", "KS"], ["Kentucky", "KY"], ["Louisiana", "LA"], ["Maine", "ME"], ["Marshall Islands", "MH"], ["Maryland", "MD"], ["Massachusetts", "MA"], ["Michigan", "MI"], ["Minnesota", "MN"], ["Mississippi", "MS"], ["Missouri", "MO"], ["Montana", "MT"], ["Nebraska", "NE"], ["Nevada", "NV"], ["New Hampshire", "NH"], ["New Jersey", "NJ"], ["New Mexico", "NM"], ["New York", "NY"], ["North Carolina", "NC"], ["North Dakota", "ND"], ["Northern Mariana Islands", "MP"], ["Ohio", "OH"], ["Oklahoma", "OK"], ["Oregon", "OR"], ["Palau", "PW"], ["Pennsylvania", "PA"], ["Puerto Rico", "PR"], ["Rhode Island", "RI"], ["South Carolina", "SC"], ["South Dakota", "SD"], ["Tennessee", "TN"], ["Texas", "TX"], ["U.S. Virgin Islands", "VI"], ["Utah", "UT"], ["Vermont", "VT"], ["Virginia", "VA"], ["Washington", "WA"], ["West Virginia", "WV"], ["Wisconsin", "WI"], ["Wyoming", "WY"]],
		'Canada': [['Ontario', 'ON'], ['Quebec', 'QC'], ['British Columbia', 'BC'], ['Alberta', 'AB'],
		        	['Manitoba', 'MB'], ['Saskatchewan', 'SK'], ['Nova Scotia', 'NS'], ['New Brunswick', 'NB'],
		        	['Newfoundland and Labrador', 'NL'], ['Prince Edward Island', 'PE'], ['Northwest Territories', 'NT'],
			        ['Yukon', 'YK'], ['Nunavut', 'NU']],
    'Belgium': ['Antwerp', 'East Flanders', 'Flemish Brabant', 'Limburg', 'West Flanders', 'Hainaut', 'Liège',
        'Luxembourg', 'Namur', 'Walloon Brabant'],
    'Denmark': ['Hovedstaden', 'Midtjylland', 'Nordjylland', 'Sjælland', 'Syddanmark'],
    'Finland': ['Åland', 'Eastern Finland', 'Lapland', 'Oulu', 'Southern Finland', 'Western Finland'],
    'Germany': ['Baden-Württemberg', 'Bavaria', 'Berlin', 'Brandenburg', 'Bremen', 'Hamburg', 'Hesse',
        'Mecklenburg-Vorpommern', 'Lower Saxony', 'North Rhine-Westphalia', 'Rhineland-Palatinate', 'Saarland',
        'Saxony', 'Saxony-Anhalt', 'Schleswig-Holstein', 'Thuringia'],
    'Greece': ['Attica', 'Central Greece', 'Central Macedonia', 'Crete', 'East Macedonia and Thrace',
        'Epirus', 'Ionan Islands', 'North Aegean', 'Peloponnese', 'South Aegean', 'Thessaly', 'West Greece',
        'West Macedonia', 'Mount Athos'],
    'Ireland': ['Leinster', 'Munster', 'Connacht', 'Ulster'],
    'Israel': ['Jerusalem District', 'North District', 'Haifa District', 'Center District',
        'Tel Aviv District', 'South District', 'Judea and Samaria Area'],
    'Italy': ['Abruzzo', 'Aosta Valley', 'Apulia', 'Basilicata', 'Calabria', 'Campania', 'Emilia-Romagna',
        'Friuli-Venezia', 'Lazia', 'Liguria', 'Lombardy', 'Marche', 'Molise', 'Piedmont', 'Sardinia', 'Sicily',
        'Trentino-Alta Adige/Südtirol', 'Tuscany', 'Umbria', 'Veneto'],
    'Mexico': ['Federal District (Mexico City)', 'Aguascalientes', 'Baja California', 'Baja California Sur',
        'Campeche', 'Chiapas', 'Chihuahua', 'Coahuila', 'Colima', 'Durango', 'Guanajuato', 'Guerrero', 'Hidalgo',
        'Jalisco', 'Mexico State', 'Michoacán', 'Morelos', 'Nayarit', 'Nuevo León', 'Oaxaca', 'Puebla', 'Querétaro',
        'Quintana Roo', 'San Luis Potosí', 'Sinaloa', 'Sonora', 'Tabasco', 'Tamaulipas', 'Tlaxcala', 'Veracruz',
        'Yucatán', 'Zacatecas'],
    'Norway': ['Akershus', 'Aust-Agder', 'Buskerud', 'Finnmark', 'Hedmark', 'Hordaland', 'Møre og Romsdal',
        'Nordland', 'Nord-Trøndelag', 'Oppland', 'Oslo', 'Østfold', 'Rogaland', 'Sogn og Fjordane', 'Sør-Trøndelag',
        'Telemark', 'Troms', 'Vest-Agder', 'Vestfold'],
    'Sweden': ['Stockholm', 'Västerbotten', 'Norrbotten', 'Uppsala', 'Södermanland', 'Östergötland',
        'Jönköping', 'Kronoberg', 'Kalmar', 'Gotland', 'Blekinge', 'Skåne', 'Halland', 'Västra Götaland',
        'Värmland', 'Örebro', 'Västmanland', 'Dalarna', 'Gävleborg', 'Västernorrland', 'Jämtland'],
    'Switzerland': ['Aargau', 'Appenzell Innerrhoden', 'Appenzell Ausserrhoden', 'Basel-Stadt',
        'Basel-Landschaft', 'Bern', 'Fribourg', 'Genève', 'Glarus', 'Graubünden', 'Jura', 'Lucerne', 'Neuchâtel',
        'Nidwalden', 'Obwalden', 'Schaffhausen', 'Schwyz', 'Solothurn', 'St. Gallen', 'Thurgau', 'Ticino', 'Uri',
        'Valais', 'Vaud', 'Zug', 'Zürich'],
    'United Kingdom': ['England', 'Northern Ireland', 'Scotland', 'Wales']
};

/* 
 * help for addresses... 
 */

// if the state select doesn't exist, 'eat' the normal input and create it
// if it exists, repopulate from our handy list of provinces
function populate_states() {
	var select = $('#state_select')[0];
	var state = $('#state');
	
	if(!select) {
		state.hide();
		
		select = document.createElement('select');
		select.id = 'state_select';
		select.onchange = function() {
			state[0].value = select.value;
		}

		state[0].parentNode.insertBefore(select, state[0].nextSibling);
	}
	
	var country = $('#country')[0].value;

	if (country == '') {
		$('#state_section').hide();
		state[0].value = '';

		return;

	} else {
		$('#state_section').show();
	}

	var provinces = PROVINCES[country];
	var found = false;

	select.options.length = 0;
	select.options[0] = new Option('');
	for (var i = 0; i < provinces.length; i++) {
		var province = provinces[i]

		if (typeof(province) == 'string') {
			var opt = new Option(province);
			var selval = province;
		} else {
			var opt = new Option(province[0], province[1]);
			var selval = province[1];
		}

		if (selval == state[0].value) {
			opt.selected = true;
			found = true;
		}

		select.options[i+1] = opt;
	}

	if (!found) {
		state[0].value = '';
	}
}

function selected_shipping_option() {
    switch($('#country')[0].value) {
        case "United States": return "us";
        case "Canada": return "canada";
        default: return "other";
    }
}

function update_sidecart_shipping() {
    var option = selected_shipping_option();

    $('#shipping_option')[0].value = option;
    $('#update_shipping_option_button').click();

    update_shipping_elements(
        $('.sidecart_shipping_option'),
        $('#sidecart_shipping_' + option),
        $('#sidecart_subtotal'),
        $('#sidecart_total'),
        $('#sidecart_gift_total'),
        $('#sidecart_remaining')
    );
}

$(document).ready(function() {
	// set all the coupon fields to the same when one is changed.
	$("#cart_wrapper form").bind("submit",function(e) {
		var code = $("#add_coupon .coupon_code_input").val();
		$("#cart_wrapper .coupon_code_input").val(code);
	});
});