$(document).ready(function(){
	var quickOrderAjax = $.manageAjax.create('quickOrderAjax',{
		queue: true,
		cacheResponse: false,
		maxRequests: 3
	});
	
	suggestNodeClass = 'quickOrder-Suggest';
	suggestLineClass = 'quickOrder-SuggestLine';
	
	suggestModalDiv = $('<div id="quickOrder-Modal" />').html('<h4>We came up with some close matches though</h4>');
	suggestModalDiv.dialog({
			modal:true,
			dialogClass:'quickOrder-SuggestModal',
			autoOpen:false,
			width:'500px',
			title:'We couldn\'t find that catalog number'
		});
	$('.quickOrder-PackSize').live('change',updateCatalogInput);
	
	$('.quickOrder-CatalogInput').live('blur',function(event){
		var jqCatalogEl = $(event.target),
			sCatalogVal = jqCatalogEl.val();
		
		if (sCatalogVal.length > 3) {
			
			catalogCell = jqCatalogEl.parent();
			catalogCell.next('td').find('.quickOrder-QuantityInput').val('1');
			catalogCell.prev('td').html('<div class="quickOrder-RemoveLine"><span class="quickOrder-RemoveLineImage"></span></div>');
			
			row = jqCatalogEl.closest('.quickOrder-ProductLine');
			
			if (row.find('.' + suggestNodeClass).length > 0) {
				row.find('.' + suggestNodeClass).remove();
			}
			row.append('<td class="' + suggestNodeClass + '"><div class="quickOrder-Loading"></div></td>');
			
			$.manageAjax.add('quickOrderAjax',{
				success: function(jsonResponse) {
					
					if (row.find('.' + suggestNodeClass).length > 0) {
						row.find('.' + suggestNodeClass).remove();
						row.find('input.quickOrder-Input').removeClass('error');
					}
					suggestNode = $('<td/>').addClass(suggestNodeClass);
					
					if (jsonResponse.status == 'product') {
						// show a list of pack sizes to choose from
						// auto select the entered pack size
						suggestSelect = $('<select class="quickOrder-PackSize quickOrder-Input"/>');
						
						$.each(jsonResponse.packs, function(i,val){
							opt = $('<option value="' + val.catalog_number + '"/>').html(val.product_name);
							if (opt.val() == sCatalogVal) {
								opt.attr('selected',true);
							}
							opt.appendTo(suggestSelect);
						});
						suggestSelect.appendTo(suggestNode);
						suggestNode.appendTo(row);
						row.find('input.quickOrder-Input').removeClass('error');
						changeCatalogInput(suggestSelect);
						
					} else if (jsonResponse.status == 'packsize') {
						// show a list of pack sizes to choose from
						suggestSelect = $('<select class="quickOrder-PackSize quickOrder-Input"/>');
						$('<option value="0"/>').html('Available Pack Sizes').appendTo(suggestSelect);
						
						$.each(jsonResponse.packs, function(i,val){
							$('<option value="' + val.catalog_number + '"/>').html(val.product_name).appendTo(suggestSelect);
						});
						suggestSelect.appendTo(suggestNode);
						suggestNode.appendTo(row);
						row.find('input.quickOrder-Input').removeClass('error');
					} else if (jsonResponse.status == 'suggest') {
						if (typeof jsonResponse.error === 'undefined') {
							suggestModalDiv.find('ul').remove();
							pl = $('#quickOrder-Products');
							
							rowIndex = $('#quickOrder-ProductList tr').index(row);
							
							suggestUl = $('<ul/>');
							// show a list of close items
							$.each(jsonResponse.products,function(i,product) {

								
								suggestSelect = $('<select class="quickOrder-PackSize quickOrder-Input" />');
								$('<option value="0"/>').html('Available Pack Sizes').appendTo(suggestSelect);
								
								$.each(product.packs,function(n,pack) {
									$('<option value="' + pack.catalog_number + '"/>').html(pack.product_name).appendTo(suggestSelect);
								});
								suggestSelect.data('row',rowIndex);
								suggestListItem = $('<li><a class="'+ suggestLineClass +'" href="javascript:;">' + product.product_name + '</a> (' + product.catalog_number + ')</li>');

								suggestUl.append(suggestListItem.append(suggestSelect.hide()));
								suggestUl.appendTo(suggestModalDiv);
							});
							
							suggestModalDiv.dialog('open');
							
						} else {
							suggestNode.append('<div class="quickOrder-Error">' + jsonResponse.error + '</div>');
							suggestNode.appendTo(row);
							row.find('input.quickOrder-Input').addClass('error');
						}
					}
					suggestModalDiv.append('<div class="clr"></div>');
				},
				data: {catalog_number: sCatalogVal},
				url: 'quick_order_hints.php',
				dataType: 'json'
			});
		}
	});
	
	$('.' + suggestLineClass).live('click',function(event) {
		var linkEl = $(event.target);
		var selectEl = linkEl.next('select');
		suggestNode = $('<td/>').addClass(suggestNodeClass);
		selectEl.clone(true).show().appendTo(suggestNode);
		$('#quickOrder-ProductList tr:eq(' + selectEl.data('row') + ')').append(suggestNode);
		suggestModalDiv.dialog('close');
	});
	
	$('.quickOrder-LastRow').live('focus',function() {
		var rowEl = $(this).closest('tr').clone().appendTo('#quickOrder-ProductList').find('td:eq(0)').html($('#quickOrder-ProductList tr').length - 1).end().end().end().find('.quickOrder-LastRow').removeClass('quickOrder-LastRow');
	});
	
	$('.quickOrder-RemoveLineImage').live('click',function(event) {
		var clicked = $(event.target);
		clicked.closest('tr').remove();
		$('#quickOrder-ProductList tr:gt(0)').find('td:eq(0)').each(function(i,el) {
			if ($(this).find('.quickOrder-RemoveLine').length == 0) {
				$(this).html(i + 1);
			}
		});
	});
	
	$('#quickOrder-AddFromFavorites, #quickOrder-FavoriteView-Close').click(function() {
		
		var viewPane = $('#quickOrder-FavoriteView:visible');
		viewPane.length ? $('#quickOrder-FavoriteView').hide() : $('#quickOrder-FavoriteView').show();
	});
	
	$('.quickOrder-FavoritesAdd a').click(function(event) {
		event.preventDefault();
		var link = $(event.target);
		var catalogNumber = link.attr('href');
		$('.quickOrder-CatalogInput:empty:first').val(catalogNumber);
		$('#quickOrder-FavoriteView').hide();
	});
	
	$('#quickOrder-Form').submit(function(event) {
		retVal = true;
		$('#quickOrder-Form .quickOrder-PackSize').each(function(i,el) {
		    selectEl = $(this);
		    if (selectEl.val() == '0') {
		        selectEl.css({borderColor:'#C01016'});
		        retVal = false;
		    }
		});
		
		if (retVal === false) {
			quickOrderDialog = $('<div id="quickOrder-SubmitError">').html('You must select a pack size for the highlighted items. If you would like to remove a product please click the red \'X\' to remove it.');
			quickOrderDialog.dialog({
					modal:true,
					dialogClass:'quickOrder-Dialog',
					title:'Please Select A Pack Size',
					width:'500px'
				});
		}
		
		return retVal;
	});
});

function updateCatalogInput(event) {
	changeCatalogInput($(event.target));
}

function changeCatalogInput(selectEl) {
	selectEl.css('border-color','');
	selectEl.find('option[value="0"]').remove();
	selectEl.closest('.quickOrder-Suggest').prevAll('.quickOrder-CatalogCell').find('.quickOrder-CatalogInput').val(selectEl.val());
}
