var SWK = {};

SWK.uiEnhancements = {
		prepTextInputs: function (input) {
				var inputName = input.name,
					formName,
					lc1;				//	Loop Counter

				input.value = input.title;
				input.onfocus = function() {
					this.value = '';
					this.onfocus = function() {};
				}

				for (lc1 = 0; lc1 < 1; lc1) {
					if (input.parentNode.tagName == 'FORM') {
						formName = input.parentNode.id;
						input.parentNode.onsubmit = function() {
							if (document.forms[formName][inputName].value == document.forms[formName][inputName].title) {
								document.forms[formName][inputName].value = '';
							}
						}
						lc1 = 9999;
					} else if (input.parentNode.tagName == 'BODY') {
						lc1 = 9999;
					} else input = input.parentNode;
				}
			}

	};

SWK.newReceiver = {
		nrForm: '<div id="shipto">\n' +
				'<h1>Add New Recipient for Shipping</h1>\n' +
				'<div class="addship" >\n' +
					'New Recipient\n' +
					 '<form name="inputshiptoform">\n' +
					   '<input name="promo_code" type="text" size="25" maxlength="10" id="promocode" />\n' +
					   '<input type="image" src="/images/content/add_recipient.gif"  class="button"/>\n' +
					 '</form>\n' +
					 '</div>\n' +
				'<!-- Closes div#shipto --></div>',

		nrFormSubmit: function (form) {
				var shipToForm = document.getElementById('shipToForm'),
					formOption = document.createElement('option'),
					receivers,
					selectOptions,
					newValue = true,
					lc1;				//	Loop Counter

				if (shipToForm && form.promo_code.value !== '') {
					receivers = shipToForm.shipto;

					if (receivers) {
						selectOptions = receivers.options;

						for (var lc1 = 0; lc1 < selectOptions.length; lc1++) {
							if (selectOptions[lc1].value.toLowerCase() === form.promo_code.value.toLowerCase()) {
								newValue = false;
								selectOptions[lc1].selected = true;
							}
						}

						if (newValue) {
							formOption.text = form.promo_code.value;
							formOption.value = form.promo_code.value;
							formOption.selected = true;
							receivers.options.add(formOption);
						}
					}
				}
			}
	};

SWK.miniCartControls = {
		miniCart: null,

		mcInitialize: function () {
				var mcLink = getElementsByClassName(document.getElementById('viewcart'), 'linkView')[0].getElementsByTagName('A')[0],
					mcClose = document.getElementById('MC_Close_Button').childNodes[0];


				this.miniCart = document.getElementById('Cart_Wrapper');
				this.miniCart.active = /\bactive\b/.test(this.miniCart.parentNode.className);


				if (this.miniCart.active) {
					this.miniCart.style.width = document.getElementById('viewcart').offsetWidth;
					this.miniCart.style.height = this.miniCart.clientHeight + 'px';

					document.getElementById('Quick_Shop_Cart')? this.miniCart.active = 'qsTrue' : this.miniCart.active;
					

				}

				mcLink.onclick = function () {
					return (SWK.miniCartControls.mcOpener());
				}
				
				mcClose.onclick = function () {
					Effect.SlideUp(SWK.miniCartControls.miniCart, {afterFinish: SWK.miniCartControls.mcCloser});
					

				}
				
				if (this.miniCart.active === 'qsTrue') {
					document.getElementById('QS_Close_Button').childNodes[0].onclick = function () {
						Effect.SlideUp(SWK.miniCartControls.miniCart, {afterFinish: SWK.miniCartControls.mcCloser});
					}

					this.miniCart.style.height = this.miniCart.clientHeight + 'px';
				}
			},

		mcOpener: function () {
				if(this.miniCart.active) {
					return true;
				} else {
					document.getElementsByTagName('BODY')[0].className += ' noselectbox';

					this.miniCart.style.visibility = 'hidden';
					this.miniCart.style.display = 'block';
					this.miniCart.style.width = document.getElementById('viewcart').offsetWidth;
					this.miniCart.style.height = this.miniCart.clientHeight + 'px';
					this.miniCart.style.display = 'none';
					this.miniCart.style.visibility = 'visible';
					this.miniCart.parentNode.className += ' active';
					Effect.SlideDown(this.miniCart);
					this.miniCart.active = true;
					return false;
					
				}
			},

		mcCloser: function () {
				var that = SWK.miniCartControls;
				that.miniCart.className = that.miniCart.className.replace(/active/, '');
				document.getElementsByTagName('BODY')[0].className = document.getElementsByTagName('BODY')[0].className.replace(/noselectbox/, '');

				if (that.miniCart.active === 'qsTrue') {
					that.miniCart.parentNode.className = that.miniCart.parentNode.className.replace (/qsActive/, '');
					that.miniCart.style.height = '';
					document.getElementById('Quick_Shop_Cart').parentNode.removeChild(document.getElementById('Quick_Shop_Cart'));
				}

				that.miniCart.active = false;
			},

		mcOpenedAtPageLoad: function (extraClasses) {
				var mcWrapper = getElementsByClassName(document.getElementById('viewcart'), 'linkView')[0];

				document.getElementsByTagName('BODY')[0].className += ' noselectbox';
				mcWrapper.className += ' active';

				if (extraClasses) {
					mcWrapper.className += (' ' + extraClasses);
				}
			}
	};

SWK.catQuickAdd = {
		addPromoCode: function () {
				var innercontent = '<div class="closeLink">\n' +
					'<a href="#" class="lbAction" rel="deactivate"><img src="/images/content/framework/lb_close.png" alt="close window"/></a>\n' +
					'<!-- Closes div.closeLink --></div>\n' +
					'<div class="maincontent">\n' +
					document.getElementById("addkeycodetocartcontainer").innerHTML + 
					'<!-- Closes div.maincontent --></div>\n';
					innercontent = innercontent;
				eoneCreateLightBox(innercontent);
			}
	};

SWK.pageLoad = function () {
		var inputs = document.getElementsByTagName('INPUT'),
			thumbsListParent,
			thumbsList,
			productForm = document.getElementById('Product_Form') || document.getElementById('product_form') || false,
			count1, count2, count3;				//	Loop Counter

		for (count1 = 0; count1 < inputs.length; count1++) {
			if ((inputs[count1].type == 'text') && inputs[count1].title) {
				SWK.uiEnhancements.prepTextInputs(inputs[count1]);
			}
		}
/*
		if (document.getElementById('SubCgy_Thumbs')) {
			thumbsListParent = document.getElementById('SubCgy_Thumbs');
			thumbsListParent = getElementsByClassName(thumbsListParent, 'thumbsList');
			thumbsList = new Array;
			for (count1 = 0; count1 < thumbsListParent.length; count1++) {
				var count2 = thumbsListParent[count1].getElementsByTagName('LI')
				for (count3 = 0; count3 < count2.length; count3 += 1) {
					thumbsList.push(count2[count3]);
				}
			}
		}

		if (document.getElementById('Item_Thumbs')) {
			thumbsList = document.getElementById('Item_Thumbs');
			thumbsList = thumbsList.getElementsByTagName('TD');
		}
*/
		if (document.getElementById('MC_Close_Button')) {
			SWK.miniCartControls.mcInitialize();
		}

		if (productForm && productForm.groupIID) {
			addEvent(productForm, 'submit', SWK.addToCart.skuSelectionCheck, false);
		}
	};

SWK.addToCart = {
		submitAddToCart: function (control) {
				var cartForm = control.form,
					shipToForm = document.getElementById('shipToForm'),
					shipTo = shipToForm.shipto.options[shipToForm.shipto.selectedIndex].value;

					cartForm.shipto.value=shipTo;
			},

		submitRecipeAddToCart: function (control) {
				var cartForm = control.form,
					shipToForm = document.getElementById('shipToForm'),	
					recipeId = shipToForm.IID.value,
					shipTo = shipToForm.shipto.options[shipToForm.shipto.selectedIndex].value;
				
				cartForm.shipto.value=shipTo;
				cartForm.overridefamilyid.value = recipeId;
				
			},

		skuSelectionCheck: function (e) {
				var sku,
					nodeName = false,
					failMsg = false,
					lc1;

				try {
					sku = document.getElementById('Product_Form').groupIID;
					nodeName = sku.nodeName
				} catch(er1) {
					sku = document.getElementById('product_form').groupIID;

					try {
						nodeName = sku.nodeName || false;
					} catch(er2) {
					}
				}

				if (nodeName === 'SELECT') {
					if (sku.selectedIndex === 0) {
						failMsg = sku.options[0].firstChild.nodeValue;
					}
				} else if (nodeName === 'RADIO' || sku.length){
					if (sku.length) {
						for (lc1 = 0; lc1 < sku.length; lc1 += 1) {
							if (sku[lc1].checked) {
								sku = sku[lc1];
							}
						}
					}

					if (!sku.checked) {
						failMsg = 'please select option';
					}
				}

				if (failMsg) {
					if (e.preventDefault) {
						e.preventDefault();
					} else {
						e.returnValue = false;
					}

					alert('Attention: ' + failMsg + '.');
				}
			}
};

SWK.itemDetail = {};

SWK.csr = {};

SWK.whlsl = {
	formChecks: [],

	validateInput: function validate (input, type) {
		var valid = true,
			testObj;

		input = input || this;
		type = type || input.validatorType;

		switch(type) {
			case 'postalcode':
				valid = validate(input, 'text');
				if (valid === true) {
					testObj = /(^\d{5}$)|(^\d{5}-\d{4}$)/;
					if (!testObj.test(input.value)) {
						valid = '<a onclick="document.' + input.form.name + '.' + input.name + '.focus(); eoneCloseLightBox();">' + input.display_name + '</a> is not a valid US ZIP Code.';
					}
				}
				break;

			case 'phone':
				valid = validate(input, 'text');

				if (valid === true) {
					testObj = /[\(]*[0-9]{3}[\)\-.\s]*[0-9]{3}[\-.\s]*[0-9]{4}/;
					
					if (!testObj.test(input.value)) {
						valid = '<a onclick="document.' + input.form.name + '.' + input.name + '.focus(); eoneCloseLightBox();">' + input.display_name + '</a> is not a valid 10-digit phone number.';
					}
				}
					
				break;

			case 'email':
				valid = validate(input, 'text');

				if (valid === true) {
					testObj =  /(^[a-z]([a-z_\.]*)@([a-z_\.]*)([.][a-z]{3})$)|(^[a-z]([a-z_\.]*)@([a-z_\.]*)(\.[a-z]{2,})(\.[a-z]{2})*$)/i;
					
					if (!testObj.test(input.value)) {
						valid = '<a onclick="document.' + input.form.name + '.' + input.name + '.focus(); eoneCloseLightBox();">' + input.display_name + '</a> is not a valid e-mail address.';
					}
				}
				
				break;
			
			case 'date':
				valid = validate(input, 'text');

				if (valid === true) {
					testObj = /[0,1][0-9]\/[0-3][0-9]\/[0-9]{2}/;
					
					if (!testObj.test(input.value)) {
						valid = '<a onclick="document.' + input.form.name + '.' + input.name + '.focus(); eoneCloseLightBox();">' + input.display_name + '</a> must be formatted MM/DD/YY.';
					}
				}
				
				break;

			case 'select':
				if (input.selectedIndex === 0) {
					valid = 'You must select a ' + '<a onclick="document.' + input.form.name + '.' + input.name + '.focus(); eoneCloseLightBox();">' + input.display_name + '</a>.';
				}
				
				break;

			case 'payment':
				testObj = input.form;
				testObj.PaymentType.getAttribute('display_name') ? testObj.PaymentType.display_name = testObj.PaymentType.getAttribute('display_name') : testObj.PaymentType.display_name = testObj.PaymentType.name;
				testObj.LastFourDigits.getAttribute('display_name') ? testObj.LastFourDigits.display_name = testObj.LastFourDigits.getAttribute('display_name') : testObj.LastFourDigits.display_name = testObj.LastFourDigits.name;
				if (testObj.Payment[0].checked) {
					valid = validate(testObj.PaymentType, 'select');
					if (valid === true) {
						valid = validate(testObj.LastFourDigits, 'text');
					} else {
						if (validate(testObj.LastFourDigits, 'text') !== true) {
							valid += '</li>\n'
									+ '<li>' + validate(testObj.LastFourDigits, 'text');
						} else if (!(/[0-9]{4}/.test(testObj.LastFourDigits.value))) {
							valid += '</li>\n'
									+ '<li>' + testObj.LastFourDigits.display_name + ' is not valid.'; 
						}
					}
				}

				break;

			case 'text':
				if (input.value === '') {
					valid = '<a onclick="document.' + input.form.name + '.' + input.name + '.focus(); eoneCloseLightBox();">' + input.display_name + '</a> is required.';
				}

				break;

			default:
				break;
				
		}

		return valid;
	},

	formValidator: function (e) {
		var that = SWK.whlsl,
			valid = true,
			testor,
			msg = '<ul class="jsValidatorErrors">\n',
			lc1;

		for (lc1 = 0; lc1 < that.formChecks.length; lc1 += 1) {
			testor = that.validateInput(that.formChecks[lc1])
			if (testor !== true) {
				valid = false;
				msg += '<li>' + testor + '</li>\n';
			}
		}

		if (valid !== true) {
			msg += '</ul>';
			document.getElementById('errors').innerHTML = msg;
			msg = '<div class="closeLink">\n' +
					'<a href="#" class="lbAction" rel="deactivate"><img src="/images/content/framework/lb_close.png" alt="close window"/></a>\n' +
					'<!-- Closes div.closeLink --></div>\n' +
					'<div class="maincontent">\n' +
					'<strong>Before we can process this request, the following needs further attention:</strong>\n' +
					msg + 
					'<!-- Closes div.maincontent --></div>\n';
			eoneCreateLightBox(msg, 'whlslErrorsLB');
			e.preventDefault ? e.preventDefault() : e.returnValue = false;
		}
	},

	initialize: function (form) {
		var lc1;

		for (lc1 = 0; lc1 < this.formChecks.length; lc1 += 1) {
			form.elements[this.formChecks[lc1][0]].validatorType = this.formChecks[lc1][1];
			this.formChecks[lc1] = form.elements[this.formChecks[lc1][0]];

			if (this.formChecks[lc1].getAttribute('display_name')) {
				this.formChecks[lc1].display_name = this.formChecks[lc1].getAttribute('display_name');
			} else {
				this.formChecks[lc1].display_name = this.formChecks[lc1].name;
			}
		}

		addEvent(form, 'submit', SWK.whlsl.formValidator);
	}
	
};

SWK.csr.commentLength = {
	updateCounter: function (commentBox) {
		if (commentBox.value.length === 0) {
			commentBox.lengthCounter.innerHTML = '';
		} else {
			if (commentBox.value.length > commentBox.maxLength) {
				commentBox.value = commentBox.value.slice(0, (commentBox.maxLength));
			}

			commentBox.lengthCounter.innerHTML = commentBox.value.length + ' characters (' + commentBox.maxLength + ' maximum)';
		}
	},

	initialize: function(commentBox, length) {
		var lengthCounter = document.createElement('SPAN');

		lengthCounter.className += ' commentLength';

		if (commentBox.nextSibling) {
			commentBox.parentNode.insertBefore(lengthCounter, commentBox.nextSibling);
		} else {
			commentBox.parentNode.appendChild(lengthCounter);
		}

		commentBox.lengthCounter = lengthCounter;
		commentBox.maxLength = length;

		SWK.csr.commentLength.updateCounter(commentBox);

		commentBox.onkeydown = commentBox.onkeyup = function () {
				SWK.csr.commentLength.updateCounter(this);
			};
	}
};

SWK.csr.xoutViewItems = {
	req: function () {
		parms = 'dsp=900002&dnXMLNodeName=lbContent';
		ajaxShop(parms, '', SWK.csr.xoutViewItems.resp);
	},

	resp: function (req) {
		if(req.responseXML) {
			eoneCreateLightBox('', 'xoutViewItems');
			ajaxShopResponse(req);
		}
	}
};

SWK.tracking = {};
SWK.tracking.ga = {
	ajaxTracking: function (pageName) {
		try {
			if (pageTracker) {
				pageTracker._trackPageview(pageName);
			}
		} catch (err) {
		}
	}
};

addEvent(window, 'load', SWK.pageLoad, false);






/*		
 *		Cleaning Up - these functions have been relocated to the SWK object
 * 		Leaving this here, just to make sure we don't leave any other functions behind.
 */
function addNewRecieverForm() {
	return SWK.newReceiver.nrForm;
}

function submitNewReceiver(form) {
	SWK.newReceiver.nrFormSubmit(form);
}

function submitAddToCart(control) {
	SWK.addToCart.submitAddToCart(control);
}

function submitRecipeAddToCart(control) {
	SWK.addToCart.submitRecipeAddToCart(control);
}

