var lmajax = function() {
	var cKey;	// Campaign Key
	var pKey;	//
	var sId;	// Session Id
	
	var fn;		// First Name
	var ln;		// Last Name
	var em;		// Email
	var by;		// Birth Year (used for age restriction)
	
	var toCount;	// Timeout Counter
	
	return {
		fn: fn,
		em: em,
		initialize: function() {
			if (arguments[0]) {lmajax.cKey = arguments[0];}
			if (arguments[1]) {lmajax.pKey = arguments[1];}
			lmajax.toCount = 2;
			lmajax.css = true;
			lmajax.getOffers();
		},
		validateName: function(input) {
			return /^[a-zA-Z]+([\-\']?[a-zA-Z])*$/.test(input);
		},
		validateEmail: function(input) {
			return /^\s*[\w\-\+_]+(\.[\w\-\+_]+)*\@[\w\-\+_]+\.[\w\-\+_]+(\.[\w\-\+_]+)*\s*$/.test(input);
		},
		validate: function(input) {
			lmajax.fn = input.firstName.value;
			lmajax.ln = input.lastName.value;
			lmajax.em = input.email.value;
			if (input.birthYear) {lmajax.by = input.birthYear.value;}

			var feedback = [];
			
			if (lmajax.fn == '') {
				feedback[0] = 'Required';
			} else if (lmajax.validateName(lmajax.fn)) {
				feedback[0] = '';
			} else {
				feedback[0] = 'Invalid';
			}
			
			if (lmajax.ln == '') {
				feedback[1] = 'Required';
			} else if (lmajax.validateName(lmajax.ln)) {
				feedback[1] = '';
			} else {
				feedback[1] = 'Invalid';
			}
			
			if (lmajax.em == '') {
				feedback[2] = 'Required';
			} else if (lmajax.validateEmail(lmajax.em)) {
				feedback[2] = '';
			} else {
				feedback[2] = 'Invalid';
			}
			
			if(input.birthYear && lmajax.by == -1) {
				feedback[3] = 'Required';
			} else {
				feedback[3] = '';
			}
			
			lmui.message('login', feedback);
			
			if (feedback[0] == '' && feedback[1] == '' && feedback[2] == '' && feedback[3] == '') {
				var url = '/ajax/checkout/cart';
				var params = 'firstName=' + lmajax.fn + '&lastName=' + lmajax.ln + '&email=' + (typeof(encodeURIComponent) == 'function' ? encodeURIComponent(lmajax.em) : escape(lmajax.em)) + '&c=' + lmajax.cKey;
				if (lmajax.pKey) {params = params + '&p=' + lmajax.pKey;}
				if (lmajax.by) {params = params + '&birthYear=' + lmajax.by;}
				var axreq = new Ajax.Request(url, { method:'post', parameters:params, onComplete: lmajax.login });
			}
		},
		login: function(response, json) {
			var status = eval('(' + response.responseText + ')');
			if (status.success) {
				lmajax.css = false;
				lmajax.getOffers();
			} else if (status.errors) {
				var feedback = [];
				
				if (status.errors.firstName) {
					feedback[0] = status.errors.firstName;
				} else {
					feedback[0] = '';
				}
				if (status.errors.lastName) {
					feedback[1] = status.errors.lastName;
				} else {
					feedback[1] = '';
				}
				if (status.errors.email) {
					feedback[2] = status.errors.email;
				} else {
					feedback[2] = '';
				}
				if (status.errors.birthYear) {
					feedback[4] = true;
				} else {
					feedback[4] = false;
				}
				
				lmui.message('login', feedback);
			} else {
				//TODO: WHAT DO WE DO HERE?
			}
		},
		getOffers: function(response, json, track) {
			if (response) {
				lmajax.offers = eval('(' + response.responseText + ')');
				lmui.showCat(lmui.currCat);
				lmui.update('loggedin');
			} else {
				var url = '/ajax/checkout/offers';
				var params = '&c=' + lmajax.cKey;
				if (lmajax.pKey) {params = params + '&p=' + lmajax.pKey;}
				if (track) {params = params + '&trackImpressions=1';}
				var axreq = new Ajax.Request(url, { method:'post', parameters:params, onComplete: lmajax.getOffers });
			}
		},
		getCatOffers: function(catId) {
			var catOffers = [];
			for (x in lmajax.offers.distribution.mappings[catId]) {
				catOffers[catOffers.length] = lmajax.offers.distribution.mappings[catId][x];
			}
			return catOffers;
		},
		hitCat: function(catId) {
			var url = '/ajax/checkout/category';
			var params = 'categoryId=' + catId + '&c=' + lmajax.cKey;
			if (lmajax.pKey) {params = params + '&p=' + lmajax.pKey;}
			if ((document.getElementById('startcheckout') && document.getElementById('startcheckout').style.display != 'none') && 
			(lmajax.fn == '' || lmajax.fn === undefined || lmajax.ln == '' || lmajax.ln === undefined || lmajax.em == '' || lmajax.em === undefined)) {
			} else {
				params = params + '&trackImpressions=1';
			}
			var axreq = new Ajax.Request(url, { method:'post', parameters:params });
		},
		hitOffer: function(oid) {
			var url = '/ajax/checkout/offerClick';
			var params = 'o=' + oid + '&c=' + lmajax.cKey;
			if (lmajax.pKey) {params = params + '&p=' + lmajax.pKey;}
			var axreq = new Ajax.Request(url, { method:'post', parameters:params });
		},
		getReportingDelay: function(offerId) {
			var delay = lmajax.offers.distribution.offers[offerId].reportingDelayType;
			if (delay == 'instant') {
				return "Instantly!";
			} else if (delay == 'hourly') {
				return "Hourly";
			} else if (delay == 'days') {
				if (lmajax.offers.distribution.offers[offerId].reportingDelayMin == 1) {
					return "Within 1 Day";
				} else {
					return "Within " + lmajax.offers.distribution.offers[offerId].reportingDelayMin + " Days";
				}
			} else {
				return "Within " + lmajax.offers.distribution.offers[offerId].reportingDelayMin + "-" + lmajax.offers.distribution.offers[offerId].reportingDelayMax + " Days";
			}
		},
		getOfferInfo: function(offerId) {
			offer = lmajax.offers.distribution.offers[offerId];
			var offerInfo = [];
				offerInfo['id'] = offerId;
				offerInfo['oid'] = offer.id;
				offerInfo['name'] = offer.name;
				offerInfo['title'] = offer.title;
				offerInfo['delay'] = lmajax.getReportingDelay(offerId);
				offerInfo['thumbnail'] = offer.thumbnail;
				offerInfo['thumbnailSmall'] = offer.thumbnailSmall;
				offerInfo['desc'] = offer.description;
				offerInfo['ins1'] = offer.instruction1;
				offerInfo['ins2'] = offer.instruction2;
				offerInfo['ins3'] = offer.instruction3;
				offerInfo['ins4'] = offer.instruction4;
			return offerInfo;
		},
		submitEmail: function(that) {
			lmajax.em2 = that.emailInput.value;
			var url = '/ajax/checkout/updateemail';
			var params = 'email=' + (typeof(encodeURIComponent) == 'function' ? encodeURIComponent(lmajax.em2) : escape(lmajax.em2)) + '&c=' + lmajax.cKey;
				if (lmajax.pKey) {params = params + '&p=' + lmajax.pKey;}
			var axreq = new Ajax.Request(url, { method:'get', parameters:params, onComplete: lmajax.updateEmailStatus });
		},
		updateEmailStatus: function(response, json) {
			if(response && response.responseText) {
				var status = eval('(' + response.responseText + ')');
				if(!status) {
					lmui.message('emailChange');
				} else {
					if(status.success) {
						lmajax.em = lmajax.em2;
						lmui.changeEmail();
					} else if (status.message) {
						lmui.message('emailChange', status.message);
					} else {
						lmui.message('emailChange');
					}
				}
			} else {
				lmui.message('emailChange');
			}
		},
		showConfirmation: function(oid) {
			var url = '/ajax/checkout/offer';
			var params = 'o=' + oid + '&c=' + lmajax.cKey;
				if (lmajax.pKey) {params = params + '&p=' + lmajax.pKey;}
			var axreq = new Ajax.Request(url, { method:'get', parameters:params, onComplete: lmajax.updatesId });
		},
		updatesId: function(response, json) {
			var status = eval('(' + response.responseText + ')');
			if (status.success) {
				lmajax.sId = status.sId;
				lmajax.checkStatus(lmajax.sId);
			}
		},
		checkStatus: function(sId) {
			var url = '/ajax/checkout/status';
			var params = 'sId=' + lmajax.sId + '&c=' + lmajax.cKey;
				if (lmajax.pKey) {params = params + '&p=' + lmajax.pKey;}
			var axreq = new Ajax.Request(url, { method:'get', parameters:params, onComplete: lmajax.updateStatus });
		},
		updateStatus: function(response, json) {
			var status = eval('(' + response.responseText + ')');
			if (status.message) {
				lmajax.toCount = 2;
				conmsg = status.message;
				setTimeout("lmui.message('confirmStatus', conmsg);", 5000);
			} else {
				if (lmajax.toCount > 0) {
					lmajax.toCount = lmajax.toCount - 1;
					setTimeout("lmajax.checkStatus(lmajax.sId)", 5000);
				} else {
					lmajax.toCount = 2;
					lmui.message('confirmStatus');
				}
			}
		},
		hitGoogle: function(pubName, prodName, conName, step) {
			for (i=0; i<arguments.length; i++){
				//arguments[i] = '' + arguments[i];
				var spaces = / /g;
				arguments[i] = arguments[i].replace(spaces,'');
			}
			if (pageTracker) {
				pageTracker._trackPageview('/'+pubName+'/'+prodName+'/'+conName+'/checkout/'+step);
				/*var hitme = '/'+pubName+'/'+prodName+'/'+conName+'/checkout/'+step;
				if (value) { hitme = hitme + '/' + value; }*/
			}
		},
		sfv: function(fv) {
			var url = '/ajax/checkout/sfv';
			var params = 'c=' + lmajax.cKey + '&fv=' + fv;
			if (lmajax.pKey) {params = params + '&p=' + lmajax.pKey;}
			//alert("URL: " + url + "?" + params);
			var axreq = new Ajax.Request(url, { method:'get', parameters:params });
		}
	};
}();