﻿document.observe('dom:loaded', function() {
    Crate.StoreAvail.topNavMenus();
	Crate.StoreAvail.popupItemClickEvents();
	Crate.StoreAvail.popupScrollToActive();
});


var Crate = Crate || {};
Crate.StoreAvail = {
	lastSelected : null,
	
	applyZip : function() {
		var inStoreInputContainer = $('inStoreInputContainer');
		if( !inStoreInputContainer ){ return; }
		
		Crate.StoreAvail.validate( inStoreInputContainer,
			function( zipcode ) { // Success
				zipcode = zipcode.split(' ').join('');
				manageCookies.setCookie("zip", zipcode,0,0,45);
				manageCookies.setCookie("zipRemember", zipcode,0,0,45);
				window.location = window.location;
			},
			function( MessageList ) { // Error
				DisplayValidation( MessageList, $("validation"), false );
			}
		);
	},	
	checkAnotherZip : function() {
		$$('div.storeAvailForm').invoke('show');
		$$('div.storeAvailDisplay').invoke('hide');
	},
	topNavMenus : function() {
		$$('.jsNavMenu li.mainNavItem').invoke('observe', 'mouseover', function(event){
			// Highlight the one you moused over
			var liItem = this;
			if( !liItem.hasClassName('active') ) {
				liItem.addClassName("active");
				liItem.removeClassName("inactive");
			}
			//Crate.StoreAvail.lastSelected = liItem;
		});
		$$('.jsNavMenu li.mainNavItem').invoke('observe', 'mouseout', function(event){
			// Remove highlight of the one you moused out of
			var liItem = this;
			if( !liItem.hasClassName('inactive') ) {
				liItem.addClassName("inactive");
				liItem.removeClassName("active");
			}
			//Crate.StoreAvail.lastSelected = liItem;
		});
	},
	popupItemClickEvents : function() {
		$$('#storeAvailTable tr').invoke('observe', 'click', function(event){
			
			// unhighlight the last one
			//  this is set at the end of this function and in popupScrollToActive
			if( Crate.StoreAvail.lastSelected ) {
				Crate.StoreAvail.lastSelected.removeClassName("active");
				Crate.StoreAvail.lastSelected.addClassName("inactive");
			}
		
			// Highlight the one you clicked on
			var row = this;
			if( !row.hasClassName('active') ) {
				row.addClassName("active");
				row.removeClassName("inactive");
			}
			Crate.StoreAvail.lastSelected = row;
		});
	},
	popupScrollToActive : function() {
		var container = $$("div.scrollpanel");
		var tableRow = $$('#storeAvailTable tr.active');
		if( tableRow.length<1 || container.length<1 ){ return; }
		
		container = container[0];
		tableRow = tableRow[0];
		var top = tableRow.y ? tableRow.y : tableRow.offsetTop;
		container.scrollTop = top;
		
		Crate.StoreAvail.lastSelected = tableRow;
	},
	
	validate : function( inStoreInputContainer, successFun, errorFun ) {
	
		var zip = inStoreInputContainer.down(".zipCode");
		var city = inStoreInputContainer.down(".city");
		var state = inStoreInputContainer.down(".state");
		if( !zip || !city || !state ){ return false; }
				
		var MessageList = [];
		var isValid = true;
		var hasZip = zip.value.strip()!=="";
		if( hasZip ) {
			var isValidZip = (/\d{5}(-\d{4})?/).test(zip.value);
			if( !isValidZip ) {
				MessageList.push( new ValidationResult(false, InvalidZip, zip) );
				isValid = false;
			} else {
				MessageList.push( new ValidationResult(true, "", zip) );
			}
		}
		else {
			if( state.selectedIndex===0 || city.value.strip()==="" ) {
				MessageList.push( new ValidationResult(false, InvalidCityState, city) );
				isValid = false;
			} else {
				MessageList.push( new ValidationResult(true, "", city) );
			}
		}
		
		if( !isValid ) {
			errorFun( MessageList );
			return false;
		}
			
		var addressVal;
		if( hasZip ) {
			addressVal = new AddressValidation({type: "UPS",ValidateZipOnly: true, zip:zip,
				onReadyDelegate: function(){
					if( addressVal.Valid ) {
						successFun( zip.value );
					} else {
						errorFun( [new ValidationResult(false, InvalidZip, zip)] );
					}
				}});
		} else {
			addressVal = new AddressValidation({type: "UPS",ValidateStateOnly: true, city:city, state:state,
				onReadyDelegate: function(){
					if( addressVal.SuccessZIP ) {
						successFun( addressVal.SuccessZIP );
					} else if( addressVal.Suggestions && addressVal.Suggestions.length>0 ) {
						successFun( addressVal.Suggestions[0].zip );
					} else {
						errorFun( [new ValidationResult(false, InvalidCityState, city)] );
					}
				}});
		}
		return true;
	}
};
Crate.UI = {

	BindEnterKey : function(e, method) {
		if(e.keyCode == 13) {
			if( e.srcElement ) {
				e.target = e.srcElement;
				e.currentTarget = e.srcElement;
			}
			if( e.preventDefault ) {
				e.preventDefault();
			}
			method(e);
			return false;
		}
	},
	
	Toggle : {
		init : function( item ) {
			
			var toggle = {
			
				item : item,
				defaultVal : item.value,
				
				focus : function() {
					if( this.item.value==this.defaultVal ) {
						this.item.value = "";
					}
				},
				
				blur : function() {
					if( this.item.value==="" ){
						this.item.value = this.defaultVal;
					}
				}
						
			};
			item.observe("focus", Delegate.create( toggle, toggle.focus) );
			item.observe("blur", Delegate.create( toggle, toggle.blur) );	
		}
	}
};




//for this method to work you MUST put your elements in a container called 'row' that contains the button
//cssSelector --> the selector that will retrieve the button once you have the .row
function bindLineLevelEnterKey(cssSelector,event)
{
	var txtBox =  Attempt.theseTwo(
		function() {return event.element();},
		function() {return event.srcElement;}
	);
	
	var button = $(txtBox).up(".row").down(cssSelector);
	
	if(button.readAttribute("onclick") && button.readAttribute("onclick"))
	{
		eval(button.readAttribute("onclick").strip());
	}
	else
	{
		eval(button.readAttribute("href").strip());
	}
}

//bind enter keys for forms
//to use this, put the following code on the form html tag:
//<form onkeydown="if(event.keyCode == Event.KEY_RETURN){bindFormEnterKey([onEnterMethodGoesHere],event);return false;}" >
//</form>
function bindFormEnterKey(onEnterMethod,event,param)
{	
	//ie and every1 else handle this diff
	var src =  Attempt.theseTwo(
		function() {return event.element();},
		function() {return event.srcElement;}
	);
	
	//force the button into a state of "spin"
	//var button = $(src).up("form").down(".button");
	
	if(param)
	{
		onEnterMethod(param);
	}
	else
	{
		onEnterMethod();
	}
}

function resetButtonClickStatus()
{
	trace("Begin reset button click status");
	$$("[clicked]").each(function(btn){btn.removeAttribute("clicked");});
	trace("End reset button click status");
}

function zipToggle(){
	
	manageCookies.deleteCookie("zip");
	manageCookies.deleteCookie("zipRemember");
	var zipWrapper = $$('div.chkzip-wrapper');
	//var AlldivAddToCartToFlip = $$('div.add');
	//var AllAvailabilityMessagingToFlip = $$('p.extra-info,p.jsAvailability');
	//var AlllnkCheckAnotherZipToFlip = $$('p.availability-info');
	zipWrapper.each(function(zipField,index) {
		var row = zipField.up('div.row');
		
		var zipCodeMessageTestAndTarget = row.down('.jsZipCodeTestAndTarget');
		var availZip = row.down('.jsAvailZip');
		var availZip2 = row.down('.jsAvailZip2');
		
		var addToCart;
		if( row ) {
			addToCart = row.down('div.add');
		}
		if( addToCart ) {
			zipField.removeClassName("hide").addClassName("show");
			addToCart.removeClassName("show").addClassName("hide");
			zipCodeMessageTestAndTarget.removeClassName("hide").addClassName("show");
			availZip.removeClassName("show").addClassName("hide");
			availZip2.removeClassName("show").addClassName("hide");
		}			
	});
}

function unZipToggle(xml)
{
	trace("unZipToggle()");
	$$("#innererrorpu").invoke("remove");
	
	var zipWrapper = $$('div.chkzip-wrapper');
	//var AlldivAddToCartToFlip = $$('div.add');
	//var AllAvailabilityMessagingToFlip = $$('p.extra-info,p.jsAvailability');
	//var AlllnkCheckAnotherZipToFlip = $$('p.availability-info');
	zipWrapper.each(function(zipField,index) {
		var row = zipField.up('div.row');		
		if( row ) {
			var addToCart = row.down('div.add');
			var zipCodeMessageTestAndTarget = row.down('.jsZipCodeTestAndTarget');
			var availZip = row.down('.jsAvailZip');
			var availZip2 = row.down('.jsAvailZip2');
			
			var availMessage = row.down('.jsAvailMsg');
			var checkAnother = row.down('.jsCheckAnotherZip');		
			var availZipCode = row.down('.jsAvailZipCode');	
		}
		// Quit if we cant find the elements
		if( !addToCart || !zipCodeMessageTestAndTarget || !availZip || !availZip2 || !availMessage || !checkAnother || !availZipCode  ) { return; }
			
		zipField.removeClassName("show").addClassName("hide");
		addToCart.removeClassName("hide").addClassName("show");
		zipCodeMessageTestAndTarget.removeClassName("show").addClassName("hide");
		availZip.removeClassName("hide").addClassName("show");
		availZip2.removeClassName("hide").addClassName("show");
								
		var sku = $F(row.down(".fieldTypeSku"));
		var message = $xml(xml, "MESSAGE" + sku);
		var status = $xml(xml, "STATUS" + sku);
		var freeDeliveryMessage = $xml(xml, "FREEDELIVERY" + sku);
		
		var lnkFreeLocalDeliveryNote = row.down(".lnkFreeLocalDeliveryNote");		
		if (freeDeliveryMessage != null && lnkFreeLocalDeliveryNote != null) {
			lnkFreeLocalDeliveryNote.update(freeDeliveryMessage);
		}
		
		if(message) {
			var zip = manageCookies.getCookie("zip");
			availZipCode.update(zip);
			
			availMessage.update(message.unescapeHTML());
			
			var removedClass;
			var addedClass;
			if(status == 9 || status == 10 || status == 12 || status == 83) {
				removedClass = "show";
				addedClass = " hide";
			} else {
				removedClass = "hide";
				addedClass = " show";
			}
			
			var divAddToButtons = row.down("[id$=divAddToButtons]");
			var divAddToCartButton = row.down("[id$=divAddToCartButton]");
			var pQuantityHeader = row.down("[id$=pQuantityHeader]");
			
			//javascript:OpenShippingDelivery('/Popup/Shipping.aspx?s=283226')
			var lnkShippingCharges = row.down("[id$=lnkShippingChargeNote]");
			var spanSku = row.down("span[id^=sku]");
			
			if(lnkShippingCharges && spanSku) {
				lnkShippingCharges.writeAttribute("href", "javascript:OpenShippingDelivery('/Popup/Shipping.aspx?s=" + spanSku.innerHTML + "')");
			}			
			if(divAddToButtons) {
				divAddToButtons.removeClassName(removedClass).addClassName(addedClass);
			}			
			if(divAddToCartButton) {
				divAddToCartButton.removeClassName(removedClass).addClassName(addedClass);
			}			
			if(pQuantityHeader) {
				pQuantityHeader.removeClassName(removedClass).addClassName(addedClass);
			}
		}
	});
	
	trace("End unZipToggle()");
}

