// purchase.js
// JavaScript functions relating to buying items (show/review/modify cart, purchase items, etc.).

function Cart() {
	// Data
	this.mark_wishlist = new Object;
	this.mark_remove = new Object;
	this.mark_buy = new Object;
	this.price_list = new Object;

	// Methods
	this.save = function() {
		var add_to_wishlist = new Array;
		var del_from_cart = new Array;
		for (var i in this.mark_wishlist) {
			add_to_wishlist.push(this.mark_wishlist[i]);
			del_from_cart.push(this.mark_wishlist[i]);
		}
		for (var i in this.mark_remove) {
			del_from_cart.push(this.mark_remove[i]);
		}

		if (add_to_wishlist.length > 0) wish_list(add_to_wishlist, 'add', false);
		if (del_from_cart.length > 0) update_cart(del_from_cart, 'del', false, true);
	}

	this.getBuyTotal = function() {
		var amt = 0;
		for (var key in this.mark_buy) {
			var oii = this.mark_buy[key];
			amt += parseInt(this.price_list[key]);
		}

		return amt;
	}

	this.getBuyList = function() {
		var buy_list = new Array;
		for (var key in this.mark_buy) buy_list.push(this.mark_buy[key]);

		return buy_list;
	}

	// Find the key/value and put them into the container, which is passed by reference by nature of its objectness.
	this.selectedValue = function(class_name, container) {
		var field = dojo.query('.' + class_name);
		for (var i = 0; i < field.length; i++) {
			if (field[i].type != 'radio' || (field[i].type == 'radio' && field[i].checked)) {
				var name = field[i].name.split('-');
				var key = name[1];
				var value = field[i].value;
				container[key] = value;
			}
		}
	}


	// Constructor... kinda
	// Don't judge me. IE6 is a cruel mistress and I couldn't find any simpler cross-browser approaches.
	var cart = new Object;
	var cb_cart = new Object;

	this.selectedValue('cart_key', cart);
	this.selectedValue('cart_price', this.price_list);
	this.selectedValue('cb_wishlist', cb_cart);
	this.selectedValue('cb_remove', cb_cart);
	this.selectedValue('cb_buy', cb_cart);

	for (var i in cart) {
		if (cb_cart[i] != undefined) {
			var selection = cb_cart[i];
			var oii = cart[i];
			switch (selection) {
				case 'wishlist':
					this.mark_wishlist[i] = oii;
					break;
				case 'remove':
					this.mark_remove[i] = oii;
					break;
				case 'buy':
					this.mark_buy[i] = oii;
					break;
			}
		}
	}
}
function apply_discount() {
	var promo_code = document.getElementById('promo_code').value;
	show_cart(promo_code);

}
function disable_checkout_button() {
	var cb = document.getElementById('checkout_button');
	var pc = dojo.byId('promo_code').value;
	if (!pc) {
		cb.disabled = false;
	} else {
		cb.disabled = true;
	}
}
function enable_checkout_button() {
	var cb = document.getElementById('checkout_button');
	cb.disabled = false;
}
function show_cart(promo_code){
	var parms = new Object;
	parms['user'] = user_id;
	if (promo_code) {
		parms['promo_code'] = promo_code;
	}
	json_request('ajax/show_cart.phtml', parms, 'set_main_div');
}

function get_purchase_amount(radio_obj){
	for( var i=0; i<radio_obj.length; i++ ){
		if( radio_obj[i].checked == true ) return radio_obj[i].value;
	}
}

function save_cart(){
	var cart = new Cart;
	cart.save();
}

function remove_item_from_cart(key){
	var items = [ key ];
	update_cart(items,'del', false, true)
	return false;
}

function update_cart(item, action, b_feedback, b_show_cart) {
	if (action == undefined) action = 'add';
	if (b_feedback == undefined) b_feedback = true;
	if (b_show_cart == undefined) b_show_cart = false;

	var payload = {
		action: action,
		user: user_id,
		item: item
	};
	preparePostData(payload);
	json_request(
		'ajax/update_cart.phtml',
		payload,
		function(response) {
			if (response['error'] == '0') {
				if (action == 'add' && b_feedback) {
					make_rollover('cart_add', NCMallClientTrans.getTranslation(814) + "<br><b>" + desc_arr[item]['name'] + "</b><br><br>" + unescape(NCMallClientTrans.getTranslation(815)) + "&nbsp;<img src='http://images.neopets.com/ncmall/neocart_icon.jpg' style='position: relative; top: 3px;'>", NCMallClientTrans.getTranslation(198), 250, 100);
				}
				if (b_show_cart) show_cart();
			}
			else {
				make_rollover('Alert', response['error_msg'], NCMallClientTrans.getTranslation(216), 200, 100);
			}
		}
	);
}

function cartToggleAll(which) {
	var lookup = '.cb_' + which;
	check_all(lookup);
	calc_cart();
}

function empty_cart() {
	if (confirm(NCMallClientTrans.getTranslation(591))) {
		update_cart(undefined, 'empty', false, true);
	}
}

function calc_cart() {
	var cart = new Cart;
	var total = cart.getBuyTotal();
	try{
		document.getElementById('cart_total').innerHTML = format_currency(total);
		document.getElementById('cart_total_bot').innerHTML = format_currency(total);
	} catch(e) {}
}

function get_cart_review() {
	var cart = new Cart;
	var buy_arr = cart.getBuyList();
	var parms = {			
		id: user_id,
		buy_arr: buy_arr
	};
	var promo_code = dojo.byId('promo_code');
	if (promo_code) {
		parms['promo_code'] = promo_code.value;
	}

	json_request("ajax/review_cart.phtml", parms, "set_main_div");
}

function process_purchase() {
	var parms = {
		id: user_id,
		passwd: dojo.byId('passwd').value,
		subtotal: dojo.byId('subtotal').value
		
	};
	var promo_code = dojo.byId('promo_code');
	if (promo_code) {
		parms['promo_code'] = promo_code.value;
	}
	
	json_request('ajax/purchase.phtml', parms, 'do_purchase');
}

function do_purchase(response) {
	if (response['neocash'] != undefined) {
		dojo.byId('neocash_balance').innerHTML = format_currency(response['neocash']);
		dojo.byId('template_neocash_amt').innerHTML = format_currency(response['neocash']);
	}
	switch (response['error']) {
		case '0':
			set_main_div(response);
			break;
		case '29':
			make_rollover("item_purch_alert", response['error_msg'] + "<br><br><a href='javascript:;' onclick='show_item_rollover(36259); get_neocash();'><b>" + NCMallClientTrans.getTranslation(215) + "</b></a>", NCMallClientTrans.getTranslation(216), 200, 100);
			break;
		case '36':
			make_rollover("item_purch_alert", response['error_msg'], NCMallClientTrans.getTranslation(216), 200, 100);
			document.getElementById('btn_buy_now').disabled = false;
			break;
		case '37':
			document.getElementById('main_div').innerHTML = response['error_msg'];
			break;
		default:
			make_rollover("item_purch_alert", response['error_msg'], NCMallClientTrans.getTranslation(216), 200, 100);
			break;
	}
}

function do_billing(response){
	if (response['error'] > 0){
		make_rollover('alert', response['error_msg'], NCMallClientTrans.getTranslation(216), 250, 100);
		return;
	}
	set_main_div(response);
	if (typeof response['redirect'] != 'undefined') {
		window.scroll(0, 0);
		setTimeout("window.location='" + response['redirect'] + "'", 3000);
	}
}

function show_img(b_show, div_name){
	var status = b_show? 'block' : 'none';
	dojo.query('.toggle_img').style('display', status);
}

function get_neocash(){
	try{
		remove_rollover(0);
	}catch(e){}
	json_request('ajax/neocash_index.phtml', '', 'set_main_div');
}

function buy_neocash(){
	try{
		remove_rollover(0);
	}catch(e){}
	json_request('ajax/neocash_recharge.phtml', { step: 1 }, 'set_main_div');
}
function redeem_neocash(){
	try{
		remove_rollover(0);
	}catch(e){}
	json_request('ajax/neocash_prepaid_redeem.phtml', { step: 1 }, 'set_main_div');
}
// handles highlighting the prepaid card that the user selects and setting the selected_card var

function hilite_card(card_name) {

	var ic_pin          = document.getElementById('ic_pin');
	var redeem_button   = document.getElementById('redeem_button');
	var selected_card   = document.getElementById('selected_card');
	var amount          = document.getElementById('amount_'+card_name);
	var selected_amount = document.getElementById('selected_amount');

	var cards = document.getElementsByTagName('A');
	for(var i=0; i < cards.length; ++i )
	{
		if(cards[i].id == card_name)
		{
			selected_card.value = card_name;
			selected_amount.value = amount.value;

			cards[i].className = 'hilite_card';
			if(ic_pin.value.length >= 10)
			{
				redeem_button.disabled = false;
			}
		}
		else if(cards[i].className == 'no_hilite_card' || cards[i].className=='hilite_card')
		{
			cards[i].className='no_hilite_card';
		}
	}
}
function check_redeem()
{
	var ic_pin = document.getElementById('card_pin');
	var selected_card = document.getElementById('selected_card');

	if( ic_pin == null || ic_pin.value.length < 10 )
	{
		make_rollover(NCMallClientTrans.getTranslation(216), NCMallClientTrans.getTranslation(726), NCMallClientTrans.getTranslation(216),200,100);
		return false;
	}
	else
	{
		return true;
	}
}

function balance_update(response)
{
	if (response['new_balance']) {
		dojo.byId('neocash_balance').innerHTML = response['new_balance'];
		dojo.byId('template_neocash_amt').innerHTML = format_currency(response['neocash']);
	}
	set_main_div(response);
}

function do_optin(response)
{
	var elem = document.getElementById('email_optin');
	if(elem)
	{
		elem.style.border='1px solid lightblue';
		elem.innerHTML = response['html'];
	}
}
