/*  Cart Functions  */

YAHOO.namespace('cart.container');

var dh;
var cartid;

// Initialize the page
init = function() {
	dh = YAHOO.ext.DomHelper;
	
	// get all elements that need to be listened to
	var vcarts    = YAHOO.util.Dom.getElementsByClassName('viewcart', 'a');
	var additems  = YAHOO.util.Dom.getElementsByClassName('additem','input');
	var showitems = YAHOO.util.Dom.getElementsByClassName('row','th');
	YAHOO.util.Event.addListener(vcarts,'click',showCart);
	YAHOO.util.Event.addListener(additems,'click',addItemToCart);
	YAHOO.util.Event.addListener(showitems,'click',showRowItem);
	YAHOO.util.Dom.addClass(showitems,'pointer');
}

function showCart(e) {
	YAHOO.util.Connect.asyncRequest('POST','/api/cart/', showCartCallbackDialog, null);
	YAHOO.util.Event.stopEvent(e);
}

var showCartCallbackDialog = {
	success:showCartSuccess,
	failure:showCartFailure,
	timeout:5000
}

var cartDialog = 0;
var cartData;
function showCartSuccess (o) {
	if (!cartDialog) {
		cartDialog = new YAHOO.widget.Dialog("cartDialog", 
			{ 
				close:true,  
				visible:true,  
				draggable:true,
				width:"580px", 
				fixedcenter:true, 
				constraintoviewport:true
			} 
		); 
		cartDialog.setHeader('Items in Your Cart');
		cartDialog.setBody(o.responseText);
		cartDialog.render(document.body);
	}
	refreshCart(o);
}

function refreshCart(o) {
	cartDialog.setBody(o.responseText);
	cartDialog.render();
	cartDialog.show();
	
	// add listeners
	var qtyInputs   = YAHOO.util.Dom.getElementsByClassName('qty_inp','input');
	var removeLinks = YAHOO.util.Dom.getElementsByClassName('remove','input');
	var detailLinks = YAHOO.util.Dom.getElementsByClassName('detaillink','a');
	
	YAHOO.util.Event.addListener(qtyInputs,'change',changeItemQty);
	YAHOO.util.Event.addListener(removeLinks,'click',removeItem);
	YAHOO.util.Event.addListener(detailLinks,'click',showItem);
	
	YAHOO.util.Connect.asyncRequest('POST', '/api/cart/micro', refreshMicroCartCallback, null);
	
	cartData = cartDialog.getData();
}

function showRowItem(e) {
	var itemUPC  = this.childNodes[0].data;
	var multiadd = null;
	if ( document.getElementById('multiaddtotal') ) {
		multiadd = 'multi=1';
	}
	YAHOO.util.Connect.asyncRequest('POST', '/api/battery/'+itemUPC, showItemCallbackDialog, multiadd);
	YAHOO.util.Event.stopEvent(e);
}

function showItem(e) {
	var itemUPC = this.href.split('/')[4];
	YAHOO.util.Connect.asyncRequest('POST', '/api/battery/'+itemUPC, showItemCallbackDialog, 'multi=1');
	YAHOO.util.Event.stopEvent(e);
}

var showItemCallbackDialog = {
	success:showItemSuccess,
	failure:showItemFailure,
	timeout:5000
}

var itemDialog = 0;
function showItemSuccess(o) {
	if (!itemDialog) {
		itemDialog = new YAHOO.widget.Dialog("itemDialog", 
			{ 
				close:true,  
				visible:true,  
				draggable:true,
				width:"370px", 
				fixedcenter:true, 
				constraintoviewport:true
			} 
		); 
	}
	
	itemDialog.setHeader('Battery Details');
	itemDialog.setBody(o.responseText);
	itemDialog.render(document.body);
	itemDialog.show();
	
	// Add listeners
	var editItmQtyLink = YAHOO.util.Dom.getElementsByClassName('edit','a');
	var addItmQtyLink  = YAHOO.util.Dom.getElementsByClassName('addCurItem','input');
	YAHOO.util.Event.addListener(editItmQtyLink,'click',editItemQty);
	YAHOO.util.Event.addListener(addItmQtyLink,'click',editItemQty);
}

function editItemQty(e) {
	var editCartDiv       = document.getElementById('curItemQty');
	var itemQtyContainer  = document.getElementById('cartitemqty');
	var itemId            = this.id;
	var itemQty           = '';
	var itemCost          = document.getElementById('curItemCost').innerHTML;
	
	if (itemQtyContainer) {
		itemQty = document.getElementById('cartitemqty').innerHTML;
	}
	
	var formHTML =  '<form onsubmit="return false;">'+
									'<span class="cost">'+itemCost+'</span>'+
									'<label for="cur_item_qty">Quantity</label>'+
									'<input type="hidden" name="itemId" id="curItemIdInp" value="'+itemId+'" />';
	
	if (itemQtyContainer) {
		formHTML += '<input type="text" name="cur_item_qty" id="curItemQtyInp" value="'+itemQty+'" />'+
								'<input type="button" value="Update Quantity" id="curItemQtyUpdateBtn" /></form>';
	}
	else {
		formHTML += '<input type="text" name="cur_item_qty" id="curItemQtyInp" value="1" />'+
								'<input type="button" value="Add Item" id="curItemQtyUpdateBtn" /></form>';
	}
	
	/*
	editCartDiv.innerHTML = '<form onsubmit="return false;">'+
													'<label for="cur_item_qty">Quantity</label>'+
													'<input type="hidden" name="itemId" id="curItemIdInp" value="'+itemId+'" />'+
													'<input type="text" name="cur_item_qty" id="curItemQtyInp" value="'+itemQty+'" />'+
													'<input type="button" value="Update Quantity" id="curItemQtyUpdateBtn" />'+
													'</form>';
	*/
	editCartDiv.innerHTML = formHTML;
	YAHOO.util.Event.addListener('curItemQtyUpdateBtn','click',changeCurItemQty);
	
	var qtyInput = document.getElementById('curItemQtyInp');
	qtyInput.focus();
	
	YAHOO.util.Event.stopEvent(e);
}

var curItemQty = 0;
var curItemId  = 0;
function changeCurItemQty(e) {
	curItemId  = document.getElementById('curItemIdInp').value.split('_')[1];
	curItemQty = document.getElementById('curItemQtyInp').value;
	
	YAHOO.util.Connect.asyncRequest('POST', '/api/cart/', changeCurItemQtyCallback, 
																	'updateqty=1&'+curItemId+'_qty='+curItemQty);
	YAHOO.util.Connect.asyncRequest('POST', '/api/cart/micro', refreshMicroCartCallback, null);
	YAHOO.util.Event.stopEvent(e);
}

var changeCurItemQtyCallback = {
	success:changeCurItemSuccess,
	failure:changeCurItemFailure,
	timeout:5000
}

function changeCurItemSuccess(o) {
	var editCartDiv = document.getElementById('curItemQty');
	editCartDiv.innerHTML = '<p>You have <span class="emph" id="cartitemqty">'+curItemQty+
													'</span> of these in your cart. '+
													'<a href="/cart/" class="edit" id="edit_'+curItemId+'_qty">Edit</a></p>';
	// Add listeners
	var editItmQtyLink = YAHOO.util.Dom.getElementsByClassName('edit','a');
	YAHOO.util.Event.addListener(editItmQtyLink,'click',editItemQty);
	// refresh the showCart dialog box
	refreshCart(o);
}

function changeCurItemFailure(o) {
	alert('Could not update item quantity. Please try again.');
}

function showItemFailure(o) {
	alert('The server failed able to pull up the battery details. Please try again.');
}

function dummyEvent(e) {
	alert('Hi Dummy!');
	YAHOO.util.Event.stopEvent(e);
}

function refreshMicroCart(e) {
	YAHOO.util.Connect.asyncRequest('POST','/api/cart/micro/',refreshMicroCartCallback,null);
}

function refreshMicroCartFailure(o) {
	// This probably happened as a result of hitting the "Purchase" button
	// alert('Oops, we weren\'t able to update the cart. '+
	// 			'It should be right if you refresh the page, but you should check to be sure.');
}

var refreshMicroCartCallback = {
	success:refreshMicroCartSuccess,
	failure:refreshMicroCartFailure,
	timeout:5000
}

function showCartFailure (o) {
	alert('The server seems to be having trouble pulling up your cart. Please try again.');
}

function removeItem(e) {
	var itemId = this.name.split('_')[1];
	YAHOO.util.Connect.asyncRequest('POST', '/api/cart/', showCartCallbackDialog, 
																	'remove_'+itemId+'=1');
	YAHOO.util.Event.stopEvent(e);
}

// Change this to refresh the cart dialog box, so the totals are correct,
// it also needs to put the focus on the next item, so if they are tabbing through
// the list, they won't have to start at the beginning each time they change an item.
function changeItemQty(e) {
	var itemId = this.name.split('_')[0];
	YAHOO.util.Connect.asyncRequest('POST', '/api/cart/', updateQtyCallbackDialog,
																	'updateqty=1&'+itemId+'_qty='+this.value);
	cartData = cartDialog.getData();
	YAHOO.util.Event.stopEvent(e);
}

var updateQtyCallbackDialog = {
	success:showCartSuccess,
	failure:updateQtyFailure,
	timeout:5000
}

function updateQtySuccess(o) {
	return;
}

function updateQtyFailure(o) {
	alert ('Unable to change item quantity. Please try again.');
}

var itemQtyDialog;
function addItemToCart (e) {
	var itemUPC = this.id.split('_')[2];
	var itemId  = this.id.split('_')[1];
	itemQtyDialog = new YAHOO.widget.Dialog("itemQtyDialog", 
		{ 
			close:true,  
			visible:true,  
			draggable:true,
			width:"350px", 
			fixedcenter:true, 
			constraintoviewport:true
		} 
	);

	itemQtyDialog.setHeader('Adding <span>'+itemUPC+'</span> to Cart');
	itemQtyDialog.setBody('<form action="/api/cart/micro/" method="POST" onsubmit="return false;">'+
		'<label for="qty">Quantity: </label>'+
		'<input type="text" name="qty" id="qty" tabindex="1" value="1" />'+
		'<input type="hidden" name="action" value="addcartitem" />'+
		'<input type="hidden" name="id" value="'+itemId+'" />'+
		'</form>');
	var myButtons = [ { text:"Add", handler:handleAddItemSubmit, isDefault:true },
				  					{ text:"Cancel", handler:handleCancel } ];
	itemQtyDialog.cfg.queueProperty("buttons", myButtons);
	
	// Enter Key Handler for Dialog boxes
	var listeners = new YAHOO.util.KeyListener(document, { keys : 13 }, 
																						 {fn:handleAddItemSubmit,scope:itemQtyDialog,correctScope:true} );
	itemQtyDialog.cfg.queueProperty("keylisteners", listeners);
	
	itemQtyDialog.callback.success = refreshMicroCartSuccess; 
	itemQtyDialog.callback.failure = addItemFailure; 
	
	
	itemQtyDialog.render(document.body);
	itemQtyDialog.focusFirst();
	
	//var inputBox = document.getElementById('qty');
	//inputBox.focus();
	
	YAHOO.util.Event.stopEvent(e);
}

var handleCancel = function() {
	this.cancel();
}

var handleAddItemSubmit = function() {
	var itemId  = this.getData().id;
	var itemQty = this.getData().qty;
	YAHOO.util.Connect.asyncRequest('POST', '/api/cart/micro/', addItemCallbackDialog, 
																	'additems=1&'+itemId+'_qty='+itemQty);
	this.hide();
}

var addItemCallbackDialog = {
	success:refreshMicroCartSuccess,
	failure:addItemFailure,
	timeout:5000
}

function refreshMicroCartSuccess(o) {
	var microcart = document.getElementById('cartwrapper');
	microcart.innerHTML = o.responseText;
	
	// reset cart listeners
	var vcarts = YAHOO.util.Dom.getElementsByClassName('viewcart', 'a');
	YAHOO.util.Event.removeListener(vcarts,'click',showCart);
	YAHOO.util.Event.addListener(vcarts,'click',showCart);
}

function addItemFailure (o) {
	alert ('The server could not add this item to your cart. Please try again.');
}

YAHOO.util.Event.addListener(window,'load',init);
