
ticks = function() { return (new Date()).valueOf(); };
try { $.ajaxSetup({ type: 'GET', dataType: 'html' }); }
catch(ex){}

g_el = function(el) { return document.getElementById(el); };

String.prototype.trim = function() { return this.replace(/^\s+/g, "").replace(/\s+$/g, ""); };

function getGUID() { return (new Date()).valueOf(); }


function g_elP(id)
{
	var o = g_el(id), l = t = 0, b = document.body;
	while(o)
	{
		l += o.offsetLeft;
		t += o.offsetTop;
		o = o.offsetParent;
	}
	
	if(navigator.userAgent.indexOf("Mac") != -1 && typeof b.leftMargin != "undefined")
	{
		l += b.leftMargin;
		t += b.topMargin;
	}
	return {left: l, top: t};
}

function g_mXY(e)
{
	var c = {left:0, top:0};
	if(e.pageX || e.pageY)
	{
		c.left = e.pageX;
		c.top = e.pageY;
	} 
	else if(e.clientX || e.clientY)
	{
		c.left = e.clientX;
		c.top = e.clientY;
		if(document.documentElement && (document.documentElement.scrollTop || document.documentElement.scrollLeft))
		{
			c.left += document.documentElement.scrollLeft;
			c.top += document.documentElement.scrollTop;
		}
		else if(document.body && (document.body.scrollTop || document.body.scrollLeft))
		{
			c.left += document.body.scrollLeft;
			c.top += document.body.scrollTop;
		}
	}
	return c;
}


function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() 
{ //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) 
{ //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() 
{ //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}


// SUPPLEMENTARY FUNCTIONS

function isIntegerN(elID, n)
{	// interger ( n digits )
	var res = false;
	var el = g_el(elID);
	if(el && isInteger(elID) && (el.value.length == n))
	{
		res = true;
	}
	return res;
}

function isInteger(elID)
{	// integer
	var res = false;
	var el = g_el(elID);
	if(el)
	{
		var re = /^[0-9]*[0-9]+$|^[0-9]+[0-9]*$/;
    if (el.value.match(re)){
	    var num = parseInt(el.value, 10);
		  res = (isNaN(num) ? false : true);
		}
	}
	return res;
}

function TrimString(sInString) {
	sInString = sInString.replace( /^\s+/g, "" );// strip leading
	return sInString.replace( /\s+$/g, "" );// strip trailing
}

function isEmail(sValue){
	var res = false;
	var re = /^(?:[a-zA-Z0-9_'^&/+-])+(?:\.(?:[a-zA-Z0-9_'^&/+-])+)*@(?:(?:\[?(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))\.){3}(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\]?)|(?:[a-zA-Z0-9-]+\.)+(?:[a-zA-Z]){2,}\.?)$/;
	return (sValue.match(re)) ? true : false;
}

function isPhone(sValue){
	var res = false;
	sValue = sValue.replace(/\s+/g, '');
	sValue = sValue.replace('-', '');
	sValue = TrimString(sValue);
	var re = /^[0-9]*[0-9]+$|^[0-9]+[0-9]*$/;
	if (sValue.match(re)){
		var num = parseInt(sValue, 10);
		res = (isNaN(num) ? false : true);
	}
	return res;
}

function supressEnter(ev){
	if(!ev) var ev = window.event;
	if(ev && ev.keyCode == 13){
		return false;
	}
	return true;
}



var aChekLoginScriptError = "";
var aChekPasswdScriptError = "";

function checkLoginName (strLogin, isExtended)
{
	if (strLogin.value.trim() == "")
	{
		aChekLoginScriptError = "Please enter Username\n";
		return false;
	}
	if (isExtended)
	{
		if ((strLogin.value.trim().length < 6) || (strLogin.value.trim().length > 64))
		{
			aChekLoginScriptError = "Username requires a minimum of 6 characters.\n";
			return false;
		}
		
		// allow only letters, numbers, underscores and @ character
		var illegalChars = /[^a-zA-Z0-9_@.]/;
		if (illegalChars.test(strLogin.value.trim()))
		{
			aChekLoginScriptError = " Please use only alpha, numeric characters or @ _ . - for the Username. \n";
			return false;
		}
	}
	return true;
} 

function checkLoginNameExtended (strLogin)
{
	if ((strLogin.value.trim().length < 6) || (strLogin.value.trim().length > 64))
	{
		aChekLoginScriptError = "Username requires a minimum of 6 characters.\n";
		return false;
	}
	
	// allow only letters, numbers, underscores and @ character
	var illegalChars = /[^a-zA-Z0-9_@.]/;
	if (illegalChars.test(strLogin.value.trim()))
	{
		aChekLoginScriptError = " Please use only alpha, numeric characters or @ _ . - for the Username. \n";
		return false;
	}
	return true;
} 

function checkPassword (strPwd, isExtended)
{
	if (strPwd.value.trim() == "")
	{
		aChekPasswdScriptError = "Please enter Password\n";
		return false;
	}
	if (isExtended)
	{
		if ((strPwd.value.trim().length < 6) || (strPwd.value.trim().length > 64))
		{
			aChekPasswdScriptError = "Password requires a minimum of 6 characters.\n";
			return false;
		}
		
		// allow only letters and numbers
		var illegalChars = /[^a-zA-Z0-9_@.]/; 
		if (illegalChars.test(strPwd.value.trim()))
		{
			aChekPasswdScriptError = "Please use only alpha or numeric characters for the Password.\n";
			return false;
		}
	}
	return true;
}

function checkPasswordExtended (strPwd)
{
	if ((strPwd.value.trim().length < 6) || (strPwd.value.trim().length > 64))
	{
		aChekPasswdScriptError = "Password requires a minimum of 6 characters.\n";
		return false;
	}
	var illegalChars = /[^a-zA-Z0-9_]/; // allow only letters and numbers
	if (illegalChars.test(strPwd.value.trim()))
	{
		aChekPasswdScriptError = "Please use only alpha or numeric characters for the Password.\n";
		return false;
	}
	return true;
}



function showCover(isVisible)
{
	var ifr = g_el('cover'), b = document.body;
	
	if(isVisible) setBarOff();
	
	if(ifr) 
	{
		ifr.className = (isVisible) ? 'vcover' : 'hcover';
		var h1 = parseInt(b.offsetHeight);
		b.style.height = 'auto';
		var h2 = parseInt(b.offsetHeight);
		b.style.height = '100%';
		if(isVisible) ifr.style.height = (h1 > h2 ? h1 : h2) + 'px';
	}
	
	if(!isVisible) setBarOn();
}

function updateStatus(name){
	var btn = g_el('btnSingup');
	btn.onmousedown = '';
	btn.style.display = 'none';
	btn.parentNode.innerHTML = '<span class=\'white_txt2\'>Welcome ' + name + '!</span>';
	var lnks = "<a href='./' class='white'>Home</a>" + 
							" &nbsp;| &nbsp;<a href='individual_profile.aspx' class='white'>My Account</a>" + 
							" &nbsp;|&nbsp; <a href='order_history.aspx' class='white'>Order History</a>" + 
							" &nbsp;|&nbsp; <a href='logout.aspx' class='white'>Logout</a> " +
							"	&nbsp;| &nbsp;<a href='FAQGeneralQuestions.aspx' class='white'>FAQS</a>";
	var links = g_el('navlinks');
	if(links) links.innerHTML = lnks;
}

function initDivHoverEffect(obj){
	var obj = obj || document;
	var els = obj.getElementsByTagName('div');
	for(var i = 0, l = els.length; i < l; i++){
		if(els[i].className.indexOf('hover') > -1){
			events.add(els[i], 'mouseover', function(){ this.getElementsByTagName('input')[0].style.marginTop = -1 * this.offsetHeight + 'px'; } );
			events.add(els[i], 'mouseout',  function(){ this.getElementsByTagName('input')[0].style.marginTop = 0 + 'px'; } ); 
		}
	}
}


/* login */

var LM = {	// LM - login manager
	
	xhr: null,
	stamp: null,
	blockRef: null,
	
	loginPartRef: null,
	recoverPartRef: null,
	resultPartRef: null,
	answerPartRef: null,
	
	btnSubmitRef: null,
	btnNextRef: null,
	btnGoRef: null,
	btnCancelRef: null,
	
	nameRef: null,
	name2Ref: null,
	pswRef: null,
	rememberRef: null,
	
	errNameRef: null,
	errName2Ref: null,
	errPswRef: null,
	errTextRef: null,
	errAnswerRef: null,
	
	scriptRef: null,
	questionRef: null,
	answerRef: null,
	txtResultRef: null,
	errorId: -1,
	errText: ['* Please enter Username', '* Please enter Password', '* Wrong Login or Password', '* switch to https:// protocol', '* Your account has been disabled. Please call Customer Service at 866.545.8808', '* This username does not exist, Please contact customer service at <b>cs@liveonthego.com or 866.545.8808</b>, if you believe this error is incorrect', '* You exceeded maximum allowed login recovery attempts. Please re-open browser.'],
	path: 'userlogin.ashx',
	redirectpath : '',
	isFirstLogin: false,
	isUpdatedTermsOfUseAccepted: false,
	
	create: function()
	{
		if(!LM.blockRef)
		{
			LM.blockRef = document.createElement('DIV');
			LM.blockRef.className = 'hlogin';
			document.body.appendChild(LM.blockRef);
		}
	},
	
	show: function()
	{
		LM.create();
		
		showCover(true);
		LM.blockRef.innerHTML = '';
		LM.blockRef.className = 'vlogin';
		LM.loadForm();
	},
	
	hide: function()
	{
		LM.blockRef.className = 'hlogin';
		LM.blockRef.innerHTML = '';
		LM.stamp = null;
		showCover(false);
	},
	
	switchToLogin: function()
	{
		LM.resetError();
		LM.recoverPartRef.style.display = 'none';
		LM.loginPartRef.style.display = 'block';
		LM.answerPartRef.style.display = 'none';
		LM.resultPartRef.style.display = 'none';
		LM.nameRef.focus();
	},
	
	switchToRecover: function()
	{
		LM.resetError();
		LM.loginPartRef.style.display = 'none';
		LM.recoverPartRef.style.display = 'block';
		LM.answerPartRef.style.display = 'none';
		LM.resultPartRef.style.display = 'none';
		LM.name2Ref.focus();
	},
	
	switchToAnswer: function()
	{
		LM.resetError();
		LM.loginPartRef.style.display = 'none';
		LM.recoverPartRef.style.display = 'none';
		LM.answerPartRef.style.display = 'block';
		LM.resultPartRef.style.display = 'none';
		LM.answerRef.focus();
	},
	
	switchToResult: function()
	{
		LM.resetError();
		LM.loginPartRef.style.display = 'none';
		LM.recoverPartRef.style.display = 'none';
		LM.answerPartRef.style.display = 'none';
		LM.resultPartRef.style.display = 'block';
	},
	
	loadForm: function()
	{
		var ticks = (new Date()).valueOf();
		if(!LM.xhr) LM.xhr = new Ajax();
		LM.xhr.doneHandler = LM.ajaxLoadDone;
		LM.xhr.errorHandler = LM.ajaxError;
		LM.xhr.waitingHandler = LM.ajaxWaiting;
		LM.xhr.send('GET', LM.path + '?ticks=' + ticks, null);
	},
	
	submitForm: function()
	{
		LM.errorId = 0;
		if(!LM.isLoginInputValid()) return;
		
		LM.btnSubmitRef.onclick = '';
		var name = LM.nameRef.value;
		var hash = EncodeAlt(LM.pswRef.value, LM.stamp, 1);
		var isRememberMe = (LM.rememberRef.checked) ? 1 : 0;
		var data = 'action=login&' + 'name='+ name + '&hash=' + hash + '&isRemember=' + isRememberMe;
		if(LM.isOverride()) data += '&override=1';
		
		if(!LM.xhr) LM.xhr = new Ajax();
		LM.xhr.doneHandler = LM.ajaxSubmitDone;
		LM.xhr.errorHandler = LM.ajaxError;
		LM.xhr.waitingHandler = LM.ajaxWaiting;
		LM.xhr.send('POST', LM.path, data);
		LM.pswRef.value = '';
	},
	
	submitForm2: function()
	{
		LM.resetError();
		
		if(!checkLoginName (LM.name2Ref, LM.isRestrict)){
			LM.errName2Ref.className = 'error2';
			LM.errTextRef.innerHTML = '* ' + aChekLoginScriptError;
			LM.errTextRef.className = 'error';
			LM.name2Ref.focus();
			return false;
		}
		
		LM.btnNextRef.onclick = '';
		
		var data = 'action=recover&' + 'name='+ LM.name2Ref.value;
		
		if(!LM.xhr) LM.xhr = new Ajax();
		LM.xhr.doneHandler = LM.ajaxSubmit2Done;
		LM.xhr.errorHandler = LM.ajaxError;
		LM.xhr.waitingHandler = LM.ajaxWaiting;
		LM.xhr.send('POST', LM.path, data);
	},
	
	submitForm3: function()
	{
		LM.resetError();
		
		if(LM.answerRef.value.trim().length == 0){
			LM.errAnswerRef.className = 'error2';
			LM.errTextRef.innerHTML = '* Please enter answer';
			LM.errTextRef.className = 'error';
			LM.answerRef.focus();
			return false;
		}
		
		LM.btnGoRef.onclick = '';
		
		var data = 'action=answer&' + 'answer='+ LM.answerRef.value;
		
		if(!LM.xhr) LM.xhr = new Ajax();
		LM.xhr.doneHandler = LM.ajaxSubmit3Done;
		LM.xhr.errorHandler = LM.ajaxError;
		LM.xhr.waitingHandler = LM.ajaxWaiting;
		LM.xhr.send('POST', LM.path, data);
	},
	
	ajaxLoadDone: function(text, xml)
	{
		LM.blockRef.innerHTML = text;
		
		LM.loginPartRef = g_el('loginPart');
		LM.recoverPartRef = g_el('recoverPart');
		LM.answerPartRef = g_el('answerPart');
		LM.resultPartRef = g_el('resultPart');
		
		LM.btnSubmitRef = g_el('btnLoginSubmit');
		LM.btnNextRef = g_el('btnLoginNext');
		LM.btnGoRef = g_el('btnLoginGo');
		LM.btnCancelRef = g_el('btnLoginCancel');
		
		LM.nameRef = g_el('tbLoginName');
		LM.name2Ref = g_el('tbLoginName2');
		LM.pswRef = g_el('tbLoginPsw');
		LM.answerRef = g_el('tbLoginAnswer');
		LM.rememberRef = g_el('cbLoginRemember');
		
		LM.errNameRef = g_el('errLoginName');
		LM.errName2Ref = g_el('errLoginName2');
		LM.errPswRef = g_el('errLoginPsw');
		LM.errTextRef = g_el('errLoginText');
		LM.errAnswerRef = g_el('errLoginAnswer');
		
		LM.questionRef = g_el('txtLoginQuestion');
		LM.answerRef = g_el('tbLoginAnswer');
		LM.txtResultRef = g_el('txtLoginResult');
		
		LM.scriptRef = g_el('logindata');
		if(LM.scriptRef) eval(LM.scriptRef.innerHTML)
		
		initDivHoverEffect(LM.blockRef);	// div hover effect initializer
		events.add(LM.blockRef, 'keyup', function(ev){  if(ev.keyCode == 27) LM.hide(); });	// esc
		events.add(LM.loginPartRef, 'keyup', function(ev){ if(ev.keyCode == 13) LM.submitForm(); });
		events.add(LM.recoverPartRef, 'keyup', function(ev){ if(ev.keyCode == 13) LM.submitForm2(); });
		events.add(LM.answerPartRef, 'keyup', function(ev){ if(ev.keyCode == 13) LM.submitForm3(); });
		events.add(LM.resultPartRef, 'keyup', function(ev){ if(ev.keyCode == 13) LM.hide(); });
		
		LM.loginPartRef.style.display = 'block';
		if(LM.nameRef.value.length != 0) LM.pswRef.focus();
		else LM.nameRef.focus();
	},
	
	ajaxSubmitDone: function(text, xml)
	{
		LM.errorId = -1;
		
		if(LM.scriptRef)
		{
			LM.scriptRef.innerHTML = text;
			eval(LM.scriptRef.innerHTML);
		}
		
		LM.btnSubmitRef.onclick = LM.submitForm;
		
		if(LM.errorId == 0 || LM.errorId == 3 || LM.errorId == 4)
		{	// enter Login + not valid
			LM.errTextRef.innerHTML = LM.errText[LM.errorId];
			LM.errNameRef.className = 'error2';
			LM.nameRef.focus();
		}
		else if(LM.errorId == 1 || LM.errorId == 2)
		{	// enter Password
			LM.errTextRef.innerHTML = LM.errText[LM.errorId];
			LM.errPswRef.className = 'error2';
			LM.pswRef.focus();
		}
		else if(LM.errorId == 6)
		{
			LM.errTextRef.innerHTML = LM.errText[LM.errorId];
			LM.errPswRef.className = 'error2';
			
			LM.nameRef.disabled = true;
			LM.pswRef.disabled = true;
			LM.btnSubmitRef.onclick = '';
		}
		
		if(LM.errorId == -1)
		{
			if(LM.redirectpath && LM.redirectpath.length > 0)
			{
				var str = LM.redirectpath;
				if (str.match("corporate_") != null && window.location.href.indexOf('checkout.aspx') == -1) 
				{
					var prefix = window.location.protocol + '//';
					var url = prefix + window.location.hostname + "/" + LM.redirectpath;
					window.location.href = url;
				} 
				else 
				{
					var tempUrl = window.location.href.replace('&login=start', '').replace('?login=start&', '?').replace('?login=start', '').replace('&override=1', '');
					
					if (LM.isFirstLogin) 
					{
						LM.hide();
						FTLM.showWithURL(tempUrl);
					} 
					else if(!LM.isUpdatedTermsOfUseAccepted)
					{
						LM.hide();
						TOUM.showWithURL(tempUrl);
					}
					else 
					{
						window.location.href = tempUrl;
					}
				}
			} 
			else 
			{
				LM.hide();
				updateStatus(LM.fname);
				if (LM.isFirstLogin) 
				{
					FTLM.show();
				}
			}
		}
		else
		{
			LM.errTextRef.className = 'error';
		}
		
	},
	
	ajaxSubmit2Done: function(text, xml)
	{
		LM.errorId = -1;
		
		LM.btnNextRef.onclick = LM.submitForm2;
		
		eval(text);
		if(LM.errorId != -1){
			LM.errTextRef.innerHTML = LM.errText[LM.errorId];
			LM.errTextRef.className = 'error';
			LM.errName2Ref.className = 'error2';
			LM.name2Ref.focus();
			return;
		}
		
		LM.switchToAnswer();
		LM.questionRef.innerHTML = LM.question;
		LM.answerRef.focus();
		
	},
	
	ajaxSubmit3Done: function(text, xml)
	{
		LM.errorId = -1;
		
		eval(text);
		if(LM.errorId != -1)
		{
			LM.txtResultRef.innerHTML = LM.errText[LM.errorId];
		}
		
		LM.switchToResult();
	},
	
	ajaxError: function(status, errText)
	{ 
		LM.hide();
	},
	
	ajaxWaiting: function(){ },
	
	isLoginInputValid: function ()
	{
		LM.resetError();
		
		if(!checkLoginName (LM.nameRef, LM.isRestrict)){
			LM.errNameRef.className = 'error2';
			LM.errTextRef.innerHTML = '* ' + aChekLoginScriptError;
			LM.errTextRef.className = 'error';
			LM.nameRef.focus();
			return false;
		} 
		
		if(!checkPassword (LM.pswRef, LM.isRestrict)){
			LM.errPswRef.className = 'error2';
			LM.errTextRef.innerHTML = '* ' + aChekPasswdScriptError;
			LM.errTextRef.className = 'error';
			LM.pswRef.focus();
			return false;
		} 
		return true;
	},
	
	resetError: function()
	{
		LM.errNameRef.className = 'noerror2';
		LM.errName2Ref.className = 'noerror2';
		LM.errPswRef.className = 'noerror2';
		LM.errAnswerRef.className = 'noerror2';
		LM.errTextRef.innerHTML = '';
		LM.errTextRef.className = 'noerror';
	},
	
	gotoSignUp: function()
	{
		LM.hide();
		SM.showFromLogin();
	},
	
	isOverride: function()
	{
		return (window.location.href.indexOf('override=1') > -1);
	}
	
}

/* login end */




/* sign up */
// singup manager - SM
var SM = {
	
	cntRef: null,
	url: 'hdl_signup.ashx',
	xhr: null,
	btnSignupRef: null,	// page header's signup button
	isFromLogin: false,
	fields: {},
	errorOutput: null,
	message: 'Some of the required information is missing or incorrect, indicated by the red X.',
	isFreeOffer: false,
	
	create: function()
	{
		if(!SM.cntRef) SM.cntRef = $("<div class='no-overlay signupform'></div>").appendTo(document.body);
		if(!SM.btnRef) SM.btnSignupRef = $('#btnSignup').bind('click', SM.show)[0];
	},
	
	show: function()
	{
		SM.isFromLogin = false;
		SM.create();
		showCover(true);
		SM.load();
	},
	
	showFromLogin: function()
	{
		SM.isFromLogin = true;
		showCover(true);
		SM.create();
		SM.load();
	},
	
	load: function()
	{
		var opts = {
			url: SM.url, 
			data: { ticks: ticks(), isfreeoffer: (SM.isFreeOffer ? 1 : 0) }, 
			complete: SM.loadDone
		}
		$.ajax(opts);
	},
	
	loadDone: function(xhr, status)
	{
		if(status == 'error')	{	SM.cancel(); return; }		
		
		$(SM.cntRef).html(xhr.responseText);
		$(SM.cntRef).removeClass('no-overlay').addClass('overlay');
		
		markUrl.load();	// pre-load images
		
		$('.cancel, .closeX', SM.cntRef).bind('click', SM.cancel);
		$('#suSubmit', SM.cntRef).bind('click', SM.submit);
		$(SM.cntRef).bind('keyup', function(ev) { if(ev.keyCode == 27) SM.cancel(); else if(ev.keyCode == 13) SM.submit(); });
		// create error output
		SM.errorOutput = $('<div class="error_cnt" style="display:none;"></div>').appendTo(document.body)[0];
		// hover effect
		$('div.hover input', SM.cntRef)
				.bind('mouseover', function(ev) { $(this).css('marginTop', function(){ return (-1 * $(this).height() / 2) + 'px'; }); } )
				.bind('mouseout',  function(ev) { $(this).css('marginTop', function(){ return '0px'; }); } )
		
		$('.required-mark', SM.cntRef).append('<span class="required-star">*</span>');
		
		$('input, select', SM.cntRef).each(function(n){ 
			SM.fields[this.id] = { };
			SM.fields[this.id].field = this;
			SM.fields[this.id].messages = [this.title + ' is required.'];	// error messages
			SM.fields[this.id].errorIndex = -1;	// no error by default
			
			if(this.tagName.toUpperCase() == 'INPUT')
			{
				if($(this).hasClass('field-phone')) formatter.phone(SM.fields, this);
				else if($(this).hasClass('field-birthday')) formatter.birthday(SM.fields, this);
				else if($(this).hasClass('field-zip')) formatter.zip(SM.fields, this);
			}
			else if(this.tagName.toUpperCase() == 'SELECT')
			{
				if(this.id == 'suStates')
				{
					$.each(states, function(n, item){ 
						SM.fields['suStates'].field.options[n] = new Option(item.abbr, item.id, false, false); 
					} );
					SM.fields['suStates'].field.selectedIndex = 4;
				}
			}
			
			// error mark & set events
			if(this.type.toUpperCase() == 'CHECKBOX')
			{
				SM.fields[this.id].errorMark = $('<img src="' + markUrl.blank.src + '" class="check_mark" alt="" />').appendTo($(this).parent())[0];
				if(this.id == 'suAgree') $(this).bind('click', function(ev) { SM.isValid(this.id); });
			}
			else if(this.type.toUpperCase() != 'IMAGE')
			{
				SM.fields[this.id].errorMark = $('<img src="' + markUrl.blank.src + '" class="check_mark" alt="" />').insertAfter(this)[0];
				SM.setEvents(this.id);
			}
			
		});
		
		SM.setMessages();
		//SM.fillTest();
		
		var focusID = SM.isFreeOffer ? 'suCoupon' : 'suFName';
		SM.fields[focusID].field.focus();
		SM.fields[focusID].field.focus();
		
		SM.setError(focusID, -2, true);
		
		return;
	},
	
	setMessages: function()
	{
		SM.fields['suZip'].messages[1] = 'Enter valid ' + SM.fields['suZip'].field.title + ': xxxxx.';
		SM.fields['suPhone'].messages[1] = 'Enter valid ' + SM.fields['suPhone'].field.title + ': xxx.xxx.xxxx.';
		SM.fields['suMPhone'].messages[1] = 'Enter valid ' + SM.fields['suMPhone'].field.title + ': xxx.xxx.xxxx.';
		SM.fields['suProviders'].messages[1] = 'Select ' + SM.fields['suProviders'].field.title + '.';
		SM.fields['suEmail'].messages[1] = 'Enter valid ' + SM.fields['suEmail'].field.title + '.';
		SM.fields['suEmail2'].messages[1] = 'Enter valid ' + SM.fields['suEmail2'].field.title + '.';
		SM.fields['suEmail2'].messages[2] = SM.fields['suEmail2'].field.title + ' does not match.';
		SM.fields['suBirthday'].messages[1] = 'Enter valid ' + SM.fields['suBirthday'].field.title + ': MM/dd/yyyy.';
		SM.fields['suWV'].messages[1] = SM.fields['suWV'].field.title + ' is wrong. Please enter the simbols you see on the picture above.';
		SM.fields['suUNname'].messages[1] = 'Enter valid ' + SM.fields['suUNname'].field.title + ': must be at least 6 characters in length.';
		SM.fields['suUNname'].messages[2] = SM.fields['suUNname'].field.title + ' is already taken.';
		SM.fields['suUNname'].messages[3] = 'Please use only alpha, numeric characters or @ _ . - for the ' + SM.fields['suUNname'].field.title + '.';
		SM.fields['suPsw'].messages[1] = 'Enter valid ' + SM.fields['suPsw'].field.title + ': must be at least 6 characters in length.';
		SM.fields['suPsw'].messages[2] = 'Please use only alpha, numeric characters or @ _ . - for the ' + SM.fields['suPsw'].field.title + '.';
		SM.fields['suPsw2'].messages[1] = SM.fields['suPsw2'].field.title + ' does not match.';
		SM.fields['suReferredby'].messages[1] = SM.fields['suReferredby'].field.title + ' does not exist.';
		SM.fields['suReferredby'].messages[2] = 'The referral privileges for the username you have entered have been suspended. If you believe you have reached this message in error please contact LiveOnTheGo Customer Service at 866.545.8808';
		SM.fields['suReferredby'].messages[3] = 'Enter valid ' + SM.fields['suReferredby'].field.title + ': must be at least 6 characters in length.';
		SM.fields['suCoupon'].messages[1] = 'Invalid ' + SM.fields['suCoupon'].field.title + '. If you believe you have reached this error by mistake please contact our customer service at 866.545.8808';
		SM.fields['suCoupon'].messages[2] = SM.fields['suCoupon'].field.title + ' has expired. If you believe you have reached this error by mistake please contact our customer service at 866.545.8808';
		SM.fields['suCoupon'].messages[3] = SM.fields['suCoupon'].field.title + ' has already been used. If you believe you have reached this error by mistake please contact our customer service at 866.545.8808';
		
		$.each(SM.fields, function(n){ this.field.title = '';	});
		
	},
	
	setEvents: function(fieldID)
	{
		$(SM.fields[fieldID].field).bind('focus.ajaxform', function(ev) { SM.isValid(fieldID, true); });
		$(SM.fields[fieldID].field).bind('blur.ajaxform', function(ev) { SM.isValid(fieldID); });
		
		$(SM.fields[fieldID].field).bind('mouseover.ajaxform', function(ev) {
			if(SM.fields[fieldID].errorIndex != -1) 
			{
				$(SM.errorOutput)[0].innerHTML = SM.fields[fieldID].messages[SM.fields[fieldID].errorIndex];
				$(SM.errorOutput).show();
			}
			else 
			{
				$(SM.errorOutput).hide();
			}
		});
		
		$(SM.fields[fieldID].field).bind('mouseout.ajaxform', function(ev) { $(SM.errorOutput).hide(); });		
		
		$(SM.fields[fieldID].field).bind('mousemove.ajaxform', function(ev) {
			if(SM.fields[fieldID].errorIndex >= 0)  
			{
				$(SM.errorOutput).css('top', (ev.pageY - 20));
				$(SM.errorOutput).css('left', (ev.pageX + 10));
			}
		});
		
		$(SM.fields[fieldID].field).bind('keyup.ajaxform', function(ev) { SM.isValid(fieldID, true); });		
		
		if(fieldID == 'suPhone' || fieldID == 'suMPhone')
		{
			var ids = ['part1', 'part2', 'part3'];
			for(var i = 0; i < ids.length; i++)
			{
				$(SM.fields[fieldID][ids[i]]).bind('focus.ajaxform', function(ev) { SM.isValid(fieldID, true); });
				$(SM.fields[fieldID][ids[i]]).bind('blur.ajaxform', function(ev) { SM.isValid(fieldID); });
				$(SM.fields[fieldID][ids[i]]).bind('keyup.ajaxform', function(ev){ SM.isValid(fieldID, true); });
			}
		}
		
	},
	
	isValid: function(fieldID, isEditMode)
	{
		if(SM.isFreeOffer && fieldID == 'suCoupon')
		{
			if($.trim(SM.fields[fieldID].field.value).length == 0) return SM.setError(fieldID, 0, isEditMode);
			else return SM.setError(fieldID, -1, isEditMode);
		}
		
		if(fieldID == 'suFName') 
		{
			if($.trim(SM.fields[fieldID].field.value).length == 0) return SM.setError(fieldID, 0, isEditMode);
			else return SM.setError(fieldID, -1, isEditMode);
		}
		
		if(fieldID == 'suLName')
		{
			if($.trim(SM.fields[fieldID].field.value).length == 0) return SM.setError(fieldID, 0, isEditMode);
			else return SM.setError(fieldID, -1, isEditMode);
		}
		
		if(fieldID == 'suAddress')
		{
			if($.trim(SM.fields[fieldID].field.value).length == 0) return SM.setError(fieldID, 0, isEditMode);
			else return SM.setError(fieldID, -1, isEditMode);
		}
		
		if(fieldID == 'suCity')
		{
			if($.trim(SM.fields[fieldID].field.value).length == 0) return SM.setError(fieldID, 0, isEditMode);
			else return SM.setError(fieldID, -1, isEditMode);
		}
		
		if(fieldID == 'suZip')
		{
			if($.trim(SM.fields[fieldID].field.value).length == 0) return SM.setError(fieldID, 0, isEditMode);
			else if(!SM.fields[fieldID].field.value.match(fieldTypes.zip.expr)) return SM.setError(fieldID, 1, isEditMode);
			else return SM.setError(fieldID, -1, isEditMode);
		}
		
		if(fieldID == 'suPhone')
		{
			var v = $.trim(SM.fields['suPhone'].part1.value) + $.trim(SM.fields['suPhone'].part2.value) + $.trim(SM.fields['suPhone'].part3.value);
			
			if(v.length == 0) return SM.setError(fieldID, 0, isEditMode);
			else if(!v.match(fieldTypes.phone.expr)) return SM.setError(fieldID, 1, isEditMode);
			else return SM.setError(fieldID, -1, isEditMode);
		}
		
		if(fieldID == 'suProviders')
		{
			if(SM.fields['suConfirmation'].field.checked && SM.fields[fieldID].field.selectedIndex <= 0)
			{
				SM.setError(fieldID, 1, false);
				return false;
			}
			
			var v = $.trim(SM.fields['suMPhone'].part1.value) + $.trim(SM.fields['suMPhone'].part2.value) + $.trim(SM.fields['suMPhone'].part3.value);
			
			if(v.match(fieldTypes.phone.expr) && SM.fields['suProviders'].field.selectedIndex <= 0)
			{
				SM.setError(fieldID, 1, false);
				return false;
			}
			
			SM.setError(fieldID, -1, false);
		}
		
		if(fieldID == 'suMPhone')
		{
			var v = $.trim(SM.fields['suMPhone'].part1.value) + $.trim(SM.fields['suMPhone'].part2.value) + $.trim(SM.fields['suMPhone'].part3.value);
			
			if(SM.fields['suConfirmation'].field.checked && !v.match(fieldTypes.phone.expr))
			{
				SM.setError(fieldID, 1, false);
				return false;
			}
			
			SM.setError(fieldID, -1, false);
		}
		
		/*
		if(fieldID == 'suMPhone' || fieldID == 'suProviders')
		{
			var v = $.trim(SM.fields['suMPhone'].part1.value) + $.trim(SM.fields['suMPhone'].part2.value) + $.trim(SM.fields['suMPhone'].part3.value);
			
			if(v.length == 0) 
			{
				SM.setError('suMPhone', -3, isEditMode);
				SM.setError('suProviders', -3, false);
				return true;
			}
			
			if(!v.match(fieldTypes.phone.expr)) 
			{
				SM.setError('suMPhone', 1, isEditMode);
				SM.setError('suProviders', -3, false);
				return false;
			}
			
			if(SM.fields['suProviders'].field.selectedIndex <= 0) 
			{
				SM.setError('suMPhone', -1, isEditMode);
				SM.setError('suProviders', 1, false);
				return false;
			}
			
			SM.setError('suMPhone', -1, isEditMode);
			SM.setError('suProviders', -1, false);
			return true;
		}
		*/
		
		if(fieldID == 'suEmail' || fieldID == 'suEmail2')
		{
			if($.trim(SM.fields[fieldID].field.value).length == 0) return SM.setError(fieldID, 0, isEditMode);
			else if(!$.trim(SM.fields[fieldID].field.value).match(fieldTypes.email.expr)) return SM.setError(fieldID, 1, isEditMode);
			else if(fieldID == 'suEmail2' && ($.trim(SM.fields['suEmail'].field.value) != $.trim(SM.fields['suEmail2'].field.value))) return SM.setError(fieldID, 2, isEditMode);
			else return SM.setError(fieldID, -1, isEditMode);
		}
		
		/*
		if(fieldID == 'suBirthday')
		{
			var l = $.trim(SM.fields['suBirthday'].part1.value).length + $.trim(SM.fields['suBirthday'].part1.value).length + $.trim(SM.fields['suBirthday'].part1.value).length;
			if(l == 0) return SM.setError(fieldID, -2, isEditMode);
			
			if(!$.trim(SM.fields['suBirthday'].part1.value).match(fieldTypes.birthday1.expr)) return SM.setError(fieldID, 1, isEditMode);
			if(!$.trim(SM.fields['suBirthday'].part2.value).match(fieldTypes.birthday2.expr)) return SM.setError(fieldID, 1, isEditMode);
			if(!$.trim(SM.fields['suBirthday'].part3.value).match(fieldTypes.birthday3.expr)) return SM.setError(fieldID, 1, isEditMode);
			
			return SM.setError(fieldID, -1, isEditMode);
		}
		*/
		
		if(fieldID == 'suWV')
		{
			if($.trim(SM.fields[fieldID].field.value).length != 6) return SM.setError(fieldID, 0, isEditMode);
			else SM.doWVCheck();
		}
		
		if(fieldID == 'suAgree')
		{
			if(!SM.fields[fieldID].field.checked) return SM.setError(fieldID, 0, isEditMode);
			else return SM.setError(fieldID, -1, isEditMode);
		}
		
		if(fieldID == 'suUNname')
		{
			if($.trim(SM.fields[fieldID].field.value) == 0) return SM.setError(fieldID, 0, isEditMode);
			else if($.trim(SM.fields[fieldID].field.value).length < 6) return SM.setError(fieldID, 1, isEditMode);
			else if(/[^a-zA-Z0-9_@.]/.test(SM.fields[fieldID].field.value)) return SM.setError(fieldID, 3, isEditMode);
			else return SM.setError(fieldID, -1, isEditMode);
		}
		
		if(fieldID == 'suPsw' || fieldID == 'suPsw2')
		{
			if($.trim(SM.fields[fieldID].field.value).length == 0) return SM.setError(fieldID, 0, isEditMode);
			else if($.trim(SM.fields[fieldID].field.value).length < 6) return SM.setError(fieldID, 1, isEditMode);
			else if(/[^a-zA-Z0-9_@.]/.test(SM.fields[fieldID].field.value)) return SM.setError(fieldID, 2, isEditMode);
			else if(fieldID == 'suPsw2' && ($.trim(SM.fields['suPsw'].field.value) != $.trim(SM.fields['suPsw2'].field.value))) return SM.setError(fieldID, 1, isEditMode);
			else return SM.setError(fieldID, -1, isEditMode);
		}
		
		if(fieldID == 'suQuestions' || fieldID == 'suAnswer')
		{
			if(fieldID == 'suQuestions' && SM.fields[fieldID].field.selectedIndex <= 0) return SM.setError(fieldID, 0, isEditMode);
			else if(fieldID == 'suAnswer' && $.trim(SM.fields[fieldID].field.value).length == 0) return SM.setError(fieldID, 0, isEditMode);
			else return SM.setError(fieldID, -1, isEditMode);
		}
		
		if(fieldID == 'suReferredby')
		{
			if($.trim(SM.fields[fieldID].field.value).length == 0) return SM.setError(fieldID, -2, isEditMode);
		}
		
		return true;
	},
	
	doWVCheck: function()
	{
		var opts = {
			url: SM.url,
			type: 'POST',
			data: { isWVCheck: true, suWV: SM.fields['suWV'].field.value },
			complete: SM.WVCheckDone
		};
		$.ajax(opts);
	},
	
	WVCheckDone: function(xhr, status)
	{
		if(status == 'error')	{	SM.setError('suWV', -1, false); }
		
		eval('var isValid = ' + xhr.responseText + ';');
		if(isValid) SM.setError('suWV', -1, false);
		else SM.setError('suWV', 1, false);
	},
	
	isAllValid: function()
	{
		var isValid = true;
		$.each(SM.fields, function(n, item){ if(!SM.isValid(item.field.id)) isValid = false; });
		
		return isValid;		
	},
	
	setError: function(fieldID, errorIndex, isEditMode)
	{

		if(errorIndex == -3)
		{
			SM.fields[fieldID].errorIndex = -1;
			if(SM.fields[fieldID].errorMark) SM.fields[fieldID].errorMark.src = markUrl.blank.src;
			if(fieldID == 'suPhone' || fieldID == 'suMPhone')
			{
				$.each(['part1', 'part2', 'part3'], function(n){ 
					$(SM.fields[fieldID][this]).removeClass(fieldClasses.current + ' ' + fieldClasses.valid + ' ' + fieldClasses.notValid).addClass(fieldClasses.none);
				});
			}
			else $(SM.fields[fieldID].field).removeClass(fieldClasses.current + ' ' + fieldClasses.valid + ' ' + fieldClasses.notValid).addClass(fieldClasses.none);
			return true;
		}
		
		if(errorIndex == -2)
		{
			SM.fields[fieldID].errorIndex = -1;
			if(SM.fields[fieldID].errorMark) SM.fields[fieldID].errorMark.src = markUrl.blank.src;
			return true;
		}
		
		SM.fields[fieldID].errorIndex = errorIndex;
		
		if(isEditMode)
		{
			if(!(SM.fields[fieldID].field.tagName.toUpperCase() == 'INPUT' && SM.fields[fieldID].field.type.toUpperCase() == 'CHECKBOX')) 
			{
				if(fieldID == 'suPhone' || fieldID == 'suMPhone')
				{
					$.each(['part1', 'part2', 'part3'], function(n){ 
						$(SM.fields[fieldID][this]).removeClass(fieldClasses.none + ' ' + fieldClasses.valid + ' ' + fieldClasses.notValid).addClass(fieldClasses.current);
					});
				}
				else $(SM.fields[fieldID].field).removeClass(fieldClasses.none + ' ' + fieldClasses.valid + ' ' + fieldClasses.notValid).addClass(fieldClasses.current);
				
			}
			
			if(errorIndex == -1)
			{
				if(SM.fields[fieldID].errorMark) SM.fields[fieldID].errorMark.src = markUrl.valid.src;
			}
			else
			{
				if(SM.fields[fieldID].errorMark) SM.fields[fieldID].errorMark.src = markUrl.blank.src;
			}
		}
		else
		{
			if(errorIndex == -1)
			{
				if(!(SM.fields[fieldID].field.tagName.toUpperCase() == 'INPUT' && SM.fields[fieldID].field.type.toUpperCase() == 'CHECKBOX')) 
				{
					if(fieldID == 'suPhone' || fieldID == 'suMPhone')
					{
						$.each(['part1', 'part2', 'part3'], function(n){ 
							$(SM.fields[fieldID][this]).removeClass(fieldClasses.current + ' ' + fieldClasses.none + ' ' + fieldClasses.notValid).addClass(fieldClasses.valid);
						});
					}
					else $(SM.fields[fieldID].field).removeClass(fieldClasses.current + ' ' + fieldClasses.none + ' ' + fieldClasses.notValid).addClass(fieldClasses.valid);
				}
				if(SM.fields[fieldID].errorMark) SM.fields[fieldID].errorMark.src = markUrl.valid.src;
			}
			else
			{
				if(!(SM.fields[fieldID].field.tagName.toUpperCase() == 'INPUT' && SM.fields[fieldID].field.type.toUpperCase() == 'CHECKBOX')) 
				{
					if(fieldID == 'suPhone' || fieldID == 'suMPhone')
					{
						$.each(['part1', 'part2', 'part3'], function(n){ 
							$(SM.fields[fieldID][this]).removeClass(fieldClasses.none + ' ' + fieldClasses.current + ' ' + fieldClasses.valid).addClass(fieldClasses.notValid); 
						});
					}
					else $(SM.fields[fieldID].field).removeClass(fieldClasses.none + ' ' + fieldClasses.current + ' ' + fieldClasses.valid).addClass(fieldClasses.notValid); 
				}
				if(SM.fields[fieldID].errorMark) SM.fields[fieldID].errorMark.src = markUrl.notvalid.src;
			}
		}
		
		return (errorIndex == -1);
	},
	
	submit: function()
	{
		if(!SM.isAllValid()) 
		{
			SM.sendError();
			
			alert(SM.message);
			return false;
		}
		
		data = { isfreeoffer: (SM.isFreeOffer ? 1 : 0) };
		$.each(SM.fields, function(n) {
		
			if(this.field.tagName.toUpperCase() == 'INPUT')
			{
				if(this.field.type.toUpperCase() == 'TEXT' || this.field.type.toUpperCase() == 'PASSWORD') 
				{
					if(this.getPhone) data[this.field.id] = this.getPhone();
					else if(this.getBirthday) data[this.field.id] = this.getBirthday();
					else data[this.field.id] = $.trim(this.field.value);
				}
				else if(this.field.type.toUpperCase() == 'CHECKBOX') 
				{
					data[this.field.id] = this.field.checked;
				}
			}
			else if(this.field.tagName.toUpperCase() == 'SELECT')
			{
				data[this.field.id] = this.field.value;
			}
			
		});
		
		var opts = {
			url: SM.url,
			data: data,
			type: 'POST',
			complete: SM.submitDone
		}
		
		$('#suSubmit', SM.cntRef).unbind('click', SM.submit);
		$.ajax(opts);
		
	},
		
	submitDone: function(xhr, status)
	{
		if(status == 'error')	{	SM.cancel(); return; }
		
		eval('var res = ' + xhr.responseText + ';');
		var isValid = true;
		for(var i = 0; i < res.fields.length; i++)
		{
			if(res.fields[i].errorIndex > -1) isValid = false;
		}
		
		if(isValid)
		{
			SM.cancel();
			
			if(SM.isFreeOffer)
			{
				CCM.show();
				return;
			}
			
			if (SM.isFromLogin)
			{
				 var prefix = window.location.protocol + '//';
				 var url = prefix + window.location.hostname + '/';
				 window.location.href = url;
			}
			else 
			{
				window.location.href = window.location.href.replace('?signup=start', '').replace('&signup=start', '');
			}
		}
		else 
		{
			$('#suCaptcha', SM.cntRef)[0].src = res.captchaUrl;
			SM.fields['suWV'].field.value = '';
			
			$.each(res.fields, function(n) {
				SM.setError(this.fieldID, this.errorIndex, false);
			});
			
			alert(SM.message);
			$('#suSubmit', SM.cntRef).bind('click', SM.submit);
		}
	},
	
	cancel: function()
	{
		$('*').unbind('focus.ajaxform').unbind('blur.ajaxform');
		SM.hide();
	},
	
	hide: function()
	{
		$(SM.cntRef).removeClass('overlay').addClass('no-overlay');
		showCover(false);
		document.body.focus();
	},
	
	fillTest: function()
	{
		SM.fields['suFName'].field.value = 'Rustam';
		SM.fields['suLName'].field.value = 'Akhmadeev';
		SM.fields['suCName'].field.value = 'homeproduction';
		SM.fields['suAddress'].field.value = '675 san leon';
		SM.fields['suAddress2'].field.value = '#23';
		SM.fields['suCity'].field.value = 'irvine';
		SM.fields['suStates'].field.selectedIndex = 4;
		SM.fields['suZip'].field.value = '12345';
		
		SM.fields['suPhone'].part1.value = '123';
		SM.fields['suPhone'].part2.value = '456';
		SM.fields['suPhone'].part3.value = '7890';
		
		SM.fields['suMPhone'].part1.value = '123';
		SM.fields['suMPhone'].part2.value = '456';
		SM.fields['suMPhone'].part3.value = '7890';
		
		SM.fields['suProviders'].field.selectedIndex = 1;
		SM.fields['suEmail'].field.value = 'akhmadeev@gmail.com';
		SM.fields['suEmail2'].field.value = 'akhmadeev@gmail.com';
		
		SM.fields['suBirthday'].part1.value = '12';
		SM.fields['suBirthday'].part2.value = '24';
		SM.fields['suBirthday'].part3.value = '1984';
		SM.fields['suGender'].field.selectedIndex = 1;
		
		SM.fields['suUNname'].field.value = 'rustamtest111';
		SM.fields['suPsw'].field.value = '123456';
		SM.fields['suPsw2'].field.value = '123456';
		SM.fields['suQuestions'].field.selectedIndex = 1;
		SM.fields['suAnswer'].field.value = 'rustamanswer';
		
		SM.fields['suNews'].field.checked = true;
		SM.fields['suConfirmation'].field.checked = true;
		SM.fields['suAgree'].field.checked = true;
	},
	
	sendError: function()
	{
		data = { senderror:1, isfreeoffer: (SM.isFreeOffer ? 1 : 0) };
		$.each(SM.fields, function(n) {
		
			if(this.field.tagName.toUpperCase() == 'INPUT')
			{
				if(this.field.type.toUpperCase() == 'TEXT' || this.field.type.toUpperCase() == 'PASSWORD') 
				{
					if(this.getPhone) data[this.field.id] = this.getPhone();
					else if(this.getBirthday) data[this.field.id] = this.getBirthday();
					else data[this.field.id] = $.trim(this.field.value);
				}
				else if(this.field.type.toUpperCase() == 'CHECKBOX') 
				{
					data[this.field.id] = this.field.checked;
				}
			}
			else if(this.field.tagName.toUpperCase() == 'SELECT')
			{
				data[this.field.id] = this.field.value;
			}
			
		});
		
		var opts = {
			url: SM.url,
			data: data,
			type: 'POST',
			complete: function() {}
		}
		
		$.ajax(opts);
	}
	
}

/* sign up end */


/* credit card */

var CCM = {	// credit card manager - CCM
	btnRef: null,
	btnCancel: null,
	btnCancel1: null,
	btnSubmit: null,
	ccOutRef: null,
	ccRef: null,
	nickRef: null,
	ccTypeRef: null,
	ccNumberRef: null,
	ccMonthRef: null,
	ccYearRef: null,
	ccUseDefaultRef: null,
	ccAddress1Ref: null,
	ccAddress2Ref: null,
	ccCityRef: null,
	ccStateRef: null,
	ccZipRef: null,
	xhr: null,
	fieldNames: ['ccNickname', 'ccCardtype', 'ccNumber', 'ccMonth', 'ccYear', 'ccUseDefault', 'ccAddress1', 'ccAddress2', 'ccCity', 'ccStates', 'ccZip'],
	fieldRefs: [],
	errRefs: [],
	errPos: [],
	deaultAddress: {addr1:'', addr2:'', city:'', state:4, zip:''},
	errTextPos: ['Please specify valid month/year', 'Please select another Nickname ( you already use this Nickname )'],
	isFreeOffer: false,
	
	create: function()
	{
		if(!CCM.btnRef) CCM.btnRef = g_el('btnCC');
		if(!CCM.ccOutRef) CCM.ccOutRef = g_el('ccHolder');
		
		if(!CCM.ccRef)
		{
			CCM.ccRef = document.createElement('DIV');
			CCM.ccRef.className = 'hcredit';
			document.body.appendChild(CCM.ccRef);
		}
	},
	
	show: function()
	{
		CCM.create();
		
		showCover(true);
		CCM.ccRef.style.top = 50 + get_scrollXY().top + 'px';
		CCM.ccRef.className = 'vcredit';
		CCM.loadForm();
	},
	
	hide: function()
	{
		CCM.ccRef.className = 'hcredit';
		showCover(false);
	},
	
	loadForm: function()
	{
		var ticks = (new Date()).valueOf();
		if(!CCM.xhr) CCM.xhr = new Ajax();
		CCM.xhr.doneHandler = CCM.ajaxLoadDone;
		CCM.xhr.errorHandler = CCM.ajaxError;
		CCM.xhr.waitingHandler = CCM.ajaxWaiting;
		CCM.xhr.send('GET', 'usercreditcard.ashx?ticks=' + ticks + (CCM.isFreeOffer ? '&isfreeoffer=1' : ''), null);
	},
	
	submitForm: function()
	{
		CCM.resetError();
		
		if(!CCM.isDataValid())
		{
			CCM.setError();
			return;
		}
	
		CCM.btnSubmit.onclick = '';
		
		var data = '';
		for(var i = 0; i < CCM.fieldNames.length; i++)
		{
			if(data.length != 0) data += '&';
			if(i == 5) data += CCM.fieldNames[i] + '=' + encodeURIComponent(CCM.fieldRefs[i].checked);
			else data += CCM.fieldNames[i] + '=' + encodeURIComponent(CCM.fieldRefs[i].value);
		}
		data += '&isfreeoffer=1';
		
		CCM.xhr.doneHandler = CCM.ajaxSubmitDone;
		CCM.xhr.errorHandler = CCM.ajaxError;
		CCM.xhr.waitingHandler = CCM.ajaxWaiting;
		CCM.xhr.send('POST', 'usercreditcard.ashx', 'action=add&' + data);
	},
	
	resetError: function()
	{
		CCM.errPos.length = 0;
		for(var i = 0; i < CCM.errRefs.length; i++){
			if(CCM.errRefs[i]) CCM.errRefs[i].className = 'noerror2';
		}
	},
	
	cancelForm: function()
	{
		if(CCM.isFreeOffer)
		{
			if(!confirm('Are you sure you want to close this window? You will not be able to redeem your free meal if you do not add a credit card now. As long as your free meal is under $10 your credit card will not be charged.')) return;
			CCM.hide();
			window.location.reload();
			return;
		}
			
		CCM.resetError();
		CCM.hide();
	},
	
	isDataValid: function()
	{
		CCM.resetError();
		
		if(CCM.fieldRefs[0].value.trim().length == 0) CCM.errPos[CCM.errPos.length] = 0;	// nick
		if(CCM.fieldRefs[1].selectedIndex == 0)				CCM.errPos[CCM.errPos.length] = 1;	// ctype
		if(CCM.fieldRefs[1].selectedIndex == 3){
			if(!CCM.isCreditCardNumber(CCM.fieldRefs[2].value, 15)) CCM.errPos[CCM.errPos.length] = 2;	// cnumber
		}
		else {
			if(!CCM.isCreditCardNumber(CCM.fieldRefs[2].value, 16)) CCM.errPos[CCM.errPos.length] = 2;	// cnumber
		}
		if(CCM.fieldRefs[3].selectedIndex == 0)				CCM.errPos[CCM.errPos.length] = 3;	// month
		if(CCM.fieldRefs[4].selectedIndex == 0)				CCM.errPos[CCM.errPos.length] = 4;	// year
		
		if(!CCM.fieldRefs[5].checked){
			if(CCM.fieldRefs[6].value.trim().length == 0)		CCM.errPos[CCM.errPos.length] = 6;	// address1
			if(CCM.fieldRefs[8].value.trim().length == 0)		CCM.errPos[CCM.errPos.length] = 8;	// city
			if(CCM.fieldRefs[9].selectedIndex == 0)					CCM.errPos[CCM.errPos.length] = 9;	// state
			if(CCM.fieldRefs[10].value.trim().length == 0)	CCM.errPos[CCM.errPos.length] = 10;	// zip
		}
		
		return (CCM.errPos.length == 0);
	},
	
	setError: function()
	{
		if(CCM.errPos.length > 0)
		{
			CCM.fieldRefs[CCM.errPos[0]].focus();
			for(var i = 0; i < CCM.errPos.length; i++)
			{
				if(CCM.errRefs[CCM.errPos[i]]) CCM.errRefs[CCM.errPos[i]].className = 'error2';
			}
			//alert('errors amount: ' + CCM.errPos.length);
		}
	},
	
	isCreditCardNumber: function (v, c)
	{
		var ccn = parseInt(v.trim(), 10);
		if(isNaN(ccn) || (ccn + '').length != c) return false;
		return true;
	},
	
	ajaxLoadDone: function(text, xml)
	{
		var i;
		CCM.ccRef.innerHTML = text;
		
		var data = g_el('ccDefaultAddress');
		if(data){
			eval('var res = ' + data.innerHTML);
			CCM.deaultAddress.addr1 = res.addr1;
			CCM.deaultAddress.addr2 = res.addr2;
			CCM.deaultAddress.city = res.city;
			CCM.deaultAddress.state = res.state;
			CCM.deaultAddress.zip = res.zip;
		}
		
		for(i = 0; i < CCM.fieldNames.length; i++){
			CCM.fieldRefs[i] = g_el(CCM.fieldNames[i]);
		}
		
		for(var i = 0; i < CCM.fieldNames.length; i++){
			CCM.errRefs[i] = g_el(CCM.fieldNames[i] + 'Error');
		}
		
		if(states){
			for(i = 0; i < states.length; i++){
				CCM.fieldRefs[9].options[i] = new Option(states[i].abbr, states[i].id, false, false);
			}
			CCM.fieldRefs[9].options[4].selected = true;	// 'CA' default
		}
		
		CCM.btnCancel = g_el('ccCancel');
		//CCM.btnCancel1 = g_el('ccCancel1');
		CCM.btnSubmit = g_el('ccSubmit');
		
		CCM.btnCancel.onclick = CCM.cancelForm;
		//CCM.btnCancel1.onclick = CCM.cancelForm;
		CCM.btnSubmit.onclick = CCM.submitForm;
		CCM.fieldRefs[5].onclick = CCM.switchDefault;
		
		initDivHoverEffect(CCM.ccRef);	// div hover effect initializer
		events.add(CCM.ccRef, 'keyup', function(ev){ if(ev.keyCode == 27) CCM.cancelForm(); });	// esc
		events.add(CCM.ccRef, 'keyup', function(ev){ if(ev.keyCode == 13) CCM.submitForm(); });	// enter
		
		CCM.fieldRefs[0].focus();	
		CCM.switchDefault();
	},

	ajaxSubmitDone: function(text, xml)
	{
		var pos1 = text.indexOf('{');
		var pos2 = text.indexOf('}');
		eval('var res = ' + text.substring(pos1, pos2 + 1));
		
		if(res.status == 1)
		{
			if(CCM.isFreeOffer)
			{
				CCM.hide();
				window.location.reload();
				return;
			}
			
			CCM.ccOutRef.innerHTML = text.substring(pos2 + 1);
			CCM.hide();
		}
		else 
		{
			CCM.btnSubmit.onclick = CCM.submitForm;
			if(res.errTextPos > 0) alert(CCM.errTextPos[res.errTextPos]);
			if(res.errText) alert(res.errText);
			if(res.idPos != -1) 
			{ 
				if(CCM.errRefs[res.idPos]) CCM.errRefs[res.idPos].className = 'error2';
				CCM.fieldRefs[res.idPos].focus();
			}
		}
	},
	
	ajaxError: function(status, errText){
		
	},
	
	ajaxWaiting: function(){
		
	},
	
	switchDefault: function(){
	
		if(CCM.fieldRefs[5].checked){
			CCM.fieldRefs[6].value = CCM.deaultAddress.addr1;
			CCM.fieldRefs[7].value = CCM.deaultAddress.addr2;
			CCM.fieldRefs[8].value = CCM.deaultAddress.city;
			CCM.fieldRefs[9].selectedIndex = CCM.deaultAddress.state - 1;
			CCM.fieldRefs[10].value = CCM.deaultAddress.zip;
			
			for(var i = 6; i < 11; i++){
				CCM.fieldRefs[i].disabled = true;
			}
		}
		else{
			for(var i = 6; i < 11; i++){
				if(CCM.fieldRefs[i].tagName.toUpperCase() == 'INPUT') CCM.fieldRefs[i].value = '';
				if(CCM.fieldRefs[i].tagName.toUpperCase() == 'SELECT') CCM.fieldRefs[i].selectedIndex = 4;
				CCM.fieldRefs[i].disabled = false;
			}
		}
	},
	
	deleteCreditCard: function(id){
		if(!confirm('Are you sure you want to DELETE?')) return;
		
		if(!CCM.ccOutRef) CCM.ccOutRef = g_el('ccHolder');
		showCover(true);
		
		var data = 'delid=' + id;
		if(!CCM.xhr) CCM.xhr = new Ajax();
		CCM.xhr.doneHandler = CCM.ajaxDeleteDone;
		CCM.xhr.errorHandler = CCM.ajaxError;
		CCM.xhr.waitingHandler = CCM.ajaxWaiting;
		CCM.xhr.send('POST', 'usercreditcard.ashx', 'action=delete&' + data);
	},
	
	ajaxDeleteDone: function(text, xml){
		var pos1 = text.indexOf('{');
		var pos2 = text.indexOf('}');
		eval('var res = ' + text.substring(pos1, pos2 + 1));
		if(res.status == 1) CCM.ccOutRef.innerHTML = text.substring(pos2 + 1);
		else { }
		showCover(false);
	},
	
	setPrimary: function(id){
		if(!CCM.ccOutRef) CCM.ccOutRef = g_el('ccHolder');
		showCover(true);
		
		var data = 'setid=' + id;
		if(!CCM.xhr) CCM.xhr = new Ajax();
		CCM.xhr.doneHandler = CCM.ajaxDeleteDone;
		CCM.xhr.errorHandler = CCM.ajaxError;
		CCM.xhr.waitingHandler = CCM.ajaxWaiting;
		CCM.xhr.send('POST', 'usercreditcard.ashx', 'action=setprimary&' + data);
	},
	
	ajaxSetPrimaryDone: function(text, xml){
		var pos1 = text.indexOf('{');
		var pos2 = text.indexOf('}');
		eval('var res = ' + text.substring(pos1, pos2 + 1));
		if(res.status == 1) CCM.ccOutRef.innerHTML = text.substring(pos2 + 1);
		else{	}
		showCover(false);
	}
	
}

/* credit card end */


/* single delivery address */

var SDAM = {	//  single delivery address manager - SDAM
	btnRef: null,
	btnCancel: null,
	btnCancel1: null,
	btnSubmit: null,
	daOutRef: null,
	daRef: null,
	daAddressId: null,
	xhr: null,
	fieldNames: ['daNickname', 'daCompanyName', 'daStreetAddress', 'daDeliverySuite', 'daCity', 'daStates', 'daZip', 'datbPhone1', 'datbPhone2', 'datbPhone3', 'datbInstructions'],
	fieldRefs: [],
	errRefs: [],
	errPos: [],
	errTextPos: ['You exceeded the maximum allowed number of addresses.'],
	
	create: function()
	{
		if(!SDAM.btnRef) SDAM.btnRef = g_el('btnDA');
		if(!SDAM.daOutRef) SDAM.daOutRef = g_el('daHolder');
		
		if(!SDAM.daRef)
		{
			SDAM.daRef = document.createElement('DIV');
			SDAM.daRef.className = 'hsdelivaddr';
			document.body.appendChild(SDAM.daRef);
		}
	},
	
	show: function(aId)
	{
		SDAM.create();
		
		showCover(true);
		SDAM.daRef.style.top = 120 + get_scrollXY().top + 'px';
		SDAM.daRef.className = 'vsdelivaddr';
		SDAM.daAddressId = aId;
		SDAM.loadForm(aId);
	},
	
	hide: function()
	{
		SDAM.daRef.className = 'hsdelivaddr';
		showCover(false);
	},
	
	loadForm: function(aId)
	{
		var ticks = (new Date()).valueOf();
		if(!SDAM.xhr) SDAM.xhr = new Ajax();
		SDAM.xhr.doneHandler = SDAM.ajaxLoadDone;
		SDAM.xhr.errorHandler = SDAM.ajaxError;
		SDAM.xhr.waitingHandler = SDAM.ajaxWaiting;
		SDAM.xhr.send('GET', 'userdeliveryaddress.ashx', 'ticks=' + ticks + '&id=' + aId);
	},
	
	submitForm: function()
	{
		SDAM.resetError();
		
		if(!SDAM.isDataValid())
		{
			SDAM.setError();
			return;
		}
	
		SDAM.btnSubmit.onclick = '';
		
		var data = '';
		for(var i = 0; i < SDAM.fieldNames.length; i++){
			if(data.length != 0) data += '&';
			data += SDAM.fieldNames[i] + '=' + encodeURIComponent(SDAM.fieldRefs[i].value);
		}
		data += '&addrId=' + SDAM.daAddressId;
		//alert(data);
		
		SDAM.xhr.doneHandler = SDAM.ajaxSubmitDone;
		SDAM.xhr.errorHandler = SDAM.ajaxError;
		SDAM.xhr.waitingHandler = SDAM.ajaxWaiting;
		SDAM.xhr.send('POST', 'userdeliveryaddress.ashx', 'action=add&' + data);
	},
	
	resetError: function()
	{
		SDAM.errPos.length = 0;
		for(var i = 0; i < SDAM.errRefs.length; i++)
		{
			if(SDAM.errRefs[i]) SDAM.errRefs[i].className = 'noerror2';
		}
	},
	
	cancelForm: function()
	{
		SDAM.resetError();
		SDAM.hide();
	},
	
	isDataValid: function()
	{
		SDAM.resetError();
		
		if(SDAM.fieldRefs[0].value.trim().length == 0) SDAM.errPos[SDAM.errPos.length] = 0;	// nick
		if(SDAM.fieldRefs[2].value.trim().length == 0) SDAM.errPos[SDAM.errPos.length] = 2;	// address
		if(SDAM.fieldRefs[4].value.trim().length == 0) SDAM.errPos[SDAM.errPos.length] = 4;	// City
		if(SDAM.fieldRefs[5].value == '0') SDAM.errPos[SDAM.errPos.length] = 5;	// State
		if(SDAM.fieldRefs[6].value.trim().length == 0) SDAM.errPos[SDAM.errPos.length] = 6;	// zIP
		if(SDAM.fieldRefs[7].value.trim().length == 0 || SDAM.fieldRefs[8].value.trim().length == 0 || SDAM.fieldRefs[9].value.trim().length == 0) 
			SDAM.errPos[SDAM.errPos.length] = 7;	// Phone
		
		return (SDAM.errPos.length == 0);
	},
	
	setError: function(){
		if(SDAM.errPos.length > 0){
			SDAM.fieldRefs[SDAM.errPos[0]].focus();
			for(var i = 0; i < SDAM.errPos.length; i++){
				if(SDAM.errRefs[SDAM.errPos[i]]) SDAM.errRefs[SDAM.errPos[i]].className = 'error2';
			}
		}
	},
	
	/*isCreditCardNumber: function (v, c){
		var ccn = parseInt(v.trim());
		if(isNaN(ccn) || (ccn + '').length != c) return false;
		return true;
	},*/
	
	ajaxLoadDone: function(text, xml){
		var i;
		SDAM.daRef.innerHTML = text;
		
		for(i = 0; i < SDAM.fieldNames.length; i++){
			SDAM.fieldRefs[i] = g_el(SDAM.fieldNames[i]);
			//alert(SDAM.fieldRefs[i]+',' + DAM.fieldNames[i]);
		}
		
		for(var i = 0; i < SDAM.fieldNames.length; i++){
			SDAM.errRefs[i] = g_el(SDAM.fieldNames[i] + 'Error');
		}
		
		//if(states){
		//	for(i = 0; i < states.length; i++){
		//		SDAM.fieldRefs[5].options[i] = new Option(states[i].name, states[i].id, false, false);
		//	}
		//	SDAM.fieldRefs[5].options[4].selected = true;	// 'CA' default
		//}
		
		SDAM.btnCancel = g_el('daCancel');
		//SDAM.btnCancel1 = g_el('daCancel1');
		SDAM.btnSubmit = g_el('daSubmit');
		
		SDAM.btnCancel.onclick = SDAM.cancelForm;
		//SDAM.btnCancel1.onclick = SDAM.cancelForm;
		SDAM.btnSubmit.onclick = SDAM.submitForm;
		//SDAM.fieldRefs[5].onclick = SDAM.switchDefault;
		
		initDivHoverEffect(SDAM.daRef);	// div hover effect initializer
		events.add(SDAM.daRef, 'keyup', function(ev){ if(ev.keyCode == 27) SDAM.cancelForm(); });	// esc
		events.add(SDAM.daRef, 'keyup', function(ev){ if(ev.keyCode == 13) SDAM.submitForm(); });	// enter
		
		SDAM.fieldRefs[0].focus();	
		//SDAM.switchDefault();
		
	},

	ajaxSubmitDone: function(text, xml){
		var pos1 = text.indexOf('{');
		var pos2 = text.indexOf('}');
		eval('var res = ' + text.substring(pos1, pos2 + 1));
		if(res.status == 1)
		{
			SDAM.daOutRef.innerHTML = text.substring(pos2 + 1);
			SDAM.hide();
		}
		else 
		{
			SDAM.btnSubmit.onclick = SDAM.submitForm;
			if(res.errTextPos >= 0) alert(SDAM.errTextPos[res.errTextPos]);
			if(res.errText) alert(res.errText);
			if(res.idPos != -1) 
			{ 
				if(SDAM.errRefs[res.idPos]) SDAM.errRefs[res.idPos].className = 'error2';
				SDAM.fieldRefs[res.idPos].focus();
			}
		}
	},
	
	ajaxError: function(status, errText){
		
	},
	
	ajaxWaiting: function(){
		
	},
	
	deleteDeliveryAddress: function(id){
		if(!confirm('Are you sure you want to DELETE?')) return;
		
		if(!SDAM.daOutRef) SDAM.daOutRef = g_el('daHolder');
		showCover(true);
		
		var data = 'delid=' + id;
		if(!SDAM.xhr) SDAM.xhr = new Ajax();
		SDAM.xhr.doneHandler = SDAM.ajaxDeleteDone;
		SDAM.xhr.errorHandler = SDAM.ajaxError;
		SDAM.xhr.waitingHandler = SDAM.ajaxWaiting;
		SDAM.xhr.send('POST', 'userdeliveryaddress.ashx', 'action=delete&' + data);
	},
	
	ajaxDeleteDone: function(text, xml){
		var pos1 = text.indexOf('{');
		var pos2 = text.indexOf('}');
		eval('var res = ' + text.substring(pos1, pos2 + 1));
		if(res.status == 1) SDAM.daOutRef.innerHTML = text.substring(pos2 + 1);
		else { }
		showCover(false);
	},
	
	setPrimary: function(id){
		if(!SDAM.daOutRef) SDAM.daOutRef = g_el('daHolder');
		showCover(true);
		
		var data = 'setid=' + id;
		if(!SDAM.xhr) SDAM.xhr = new Ajax();
		SDAM.xhr.doneHandler = SDAM.ajaxDeleteDone;
		SDAM.xhr.errorHandler = SDAM.ajaxError;
		SDAM.xhr.waitingHandler = SDAM.ajaxWaiting;
		SDAM.xhr.send('POST', 'userdeliveryaddress.ashx', 'action=setprimary&' + data);
	},
	
	ajaxSetPrimaryDone: function(text, xml){
		var pos1 = text.indexOf('{');
		var pos2 = text.indexOf('}');
		eval('var res = ' + text.substring(pos1, pos2 + 1));
		if(res.status == 1) SDAM.daOutRef.innerHTML = text.substring(pos2 + 1);
		else{	}
		showCover(false);
	}
	
}

/* delivery address end */



/* window scrolling */

function get_scrollXY(){
	
	var x = 0, y = 0, b = document.body, d = document.documentElement;
	
	if(d.scrollTop && typeof d.scrollTop != 'undefined')
	{
		x = d.scrollLeft;
		y = d.scrollTop;
	}
	else if(b && typeof b.scrollTop != 'undefined')
	{
		x = b.scrollLeft;
		y = b.scrollTop;
	
		if(b && b.parentNode && typeof b.parentNode.scrollTop != 'undefined')
		{
			x += b.parentNode.scrollLeft;
			y += b.parentNode.scrollTop;
		}
	}
	else if(typeof window.pageXOffset != 'undefined')
	{
		x = window.pageXOffset;
		y = window.pageYOffset;
	}
	return {top: y, left: x};
}



/* menu-food item functionality */

var FIRef = null;
var FIcontent = null;

function createFI(url)
{
	removeFI();
	
	FIRef = document.createElement('iframe');
	FIRef.setAttribute('id', 'ifrFI');
	FIRef.setAttribute('name', 'ifrFI');
	FIRef.className = 'FIhidden';
	FIRef.setAttribute('frameborder', '0');
	FIRef.setAttribute('scrolling', 'no');
	FIRef.setAttribute('src', 'javascript:false;');
	
	document.body.appendChild(FIRef);
	
	var doc = document.all ? FIRef.contentWindow.document : document;
	FIcontent = doc.createElement('span');

	setTimeout('addFIContent(\'' + url + '\')', 0);
}


var fixSafariScrollTop = 0;
var fixIEScrollTop = 0;

function addFIContent(url)
{
	fixSafariScrollTop = get_scrollXY().top;
	
	FIRef.style.top = fixSafariScrollTop + 30 + 'px';
	FIRef.className = 'FIvisible';
	FIRef.contentWindow.window.location.href = url;
}

function removeFI()
{
	if(FIRef) 
	{ 
		document.body.removeChild(FIRef);
		FIRef = null;
	}
}


/* food details */

function qntCheck(el)
{
	if(!isInteger(el.id))
	{
		el.value = '1';
	}
	
	var _qty = parseInt(el.value);
	if(_qty < minQty) el.value = minQty;
	
	changePrice();
}

function check_MaxAllowedSelectionRules(el)
{
	var grID = parseInt(el.id.split('_')[1]);
	for(var i = 0; i < selectionRules.length; i++)
	{
		if(selectionRules[i].id == grID)
		{
			var selectedItems = 0;
			for(var k = 0; k < groupList.length; k++)
			{
				for(var t = 0; t < groupList[k].length; t++)
				{
					var _grID = parseInt(groupList[k][t].id.split('_')[1]);
					if(grID == _grID)
					{
						var el2 = g_el(groupList[k][t].id);
						if(el2 && el2.checked) selectedItems += parseInt(groupList[k][t].weighting);
					}
				}
			}
			
			if(selectionRules[i].max > 0 && selectedItems > selectionRules[i].max)
			{ 
				el.checked = false;
				alert('You may choose no more than ' + selectionRules[i].max + ' items from \'' + selectionRules[i].name + '\' group');
				break;
			}
		}
	}
}

function check_MaxAllowedSelectionRules2(el)
{
	var tempHtmlID = parseInt(el.id.split('_')[1]) + '_' + parseInt(el.id.split('_')[2]) + '_' + parseInt(el.id.split('_')[3]);
	var htmlGrID = 'slmg_' + tempHtmlID;
	for(var i = 0; i < selectionRules2.length; i++)
	{
		if(selectionRules2[i].htmlID == htmlGrID)
		{
			var selectedItems = 0;
			for(var k = 0; k < secondModList.length; k++)
			{
				if(secondModList[k].id.indexOf('slm_' + tempHtmlID) > -1)
				{
					var el2 = g_el(secondModList[k].id);
					if(el2 && el2.checked) selectedItems += parseInt(secondModList[k].weighting);
				}
			}
			
			if(selectionRules2[i].max > 0 && selectedItems > selectionRules2[i].max)
			{ 
				el.checked = false;
				alert('You may select no more than ' + selectionRules2[i].max + ' items from \'' + selectionRules2[i].name + '\' group');
			}
			
		}
	}
	
}


function changePrice()
{	// smod - single, gmod - mult checkbox, gsmod - mult radio

	var totalPrice = 0;
	var quantity = parseInt(g_el('tbQuantity').value, 10);
	totalPrice += getPrice(basicPrice);
	
	// check Options
	var optionPrice = 0;
	for(var i = 0; i < optionList.length; i++)
	{
		if(g_el(optionList[i].id).checked)
			optionPrice = getPrice(optionList[i].price);
	}
	totalPrice += optionPrice;
	
	// check SingleList
	var singlePrice = 0;
	for(var i = 0; i < singleList.length; i++)
	{
		if(g_el(singleList[i].id).checked)
			singlePrice += getPrice(singleList[i].price);
	}
	totalPrice += singlePrice;
	
	// check GroupList
	var groupPrice = 0;
	for(var i = 0; i < groupList.length; i++)
	{
		var free = 0;
		if(groupList[i].length > 0)
		{
			var grID = parseInt(groupList[i][0].id.split('_')[1]);
			for(var t = 0; t < selectionRules.length; t++)
			{
				if(selectionRules[t].id == grID)
				{
					free = selectionRules[t].free;
					break;
				}
			}
		}
		
		for(var j = 0; j < groupList[i].length; j++)
		{
			var _isChecked = g_el(groupList[i][j].id).checked;
			if(_isChecked)
			{
				if(free > 0) free = free - parseInt(groupList[i][j].weighting);
				else 
				{
					if(groupList[i][j].ispizzatoppings)
					{
						var _templId = 'prb_' + groupList[i][j].id.split('_')[1] + '_' + groupList[i][j].id.split('_')[2] + '_';
						g_el(_templId + 'cnt').style.display = 'block';
						
						if(g_el(_templId + 'full').checked) groupPrice += getPrice(groupList[i][j].price);
						else groupPrice += (getPrice(groupList[i][j].price) / 2);
					}
					else
					{
						groupPrice += getPrice(groupList[i][j].price);
					}
					
					// check Second Level Modifiers
					var groupPrice2 = 0;
					var tempFirstLevelMod = groupList[i][j].id.split('_')[1] + '_' + groupList[i][j].id.split('_')[2];
					
					for(var q = 0; q < selectionRules2.length; q++)
					{
						if(selectionRules2[q].htmlID.indexOf('slmg_' + tempFirstLevelMod) > -1)
						{
							var tempSecondGroup = selectionRules2[q].htmlID.split('_')[1] + '_' + selectionRules2[q].htmlID.split('_')[2] + '_' + selectionRules2[q].htmlID.split('_')[3];
							var free2 = selectionRules2[q].free;
							
							for(var w = 0; w < secondModList.length; w++)
							{
								if(secondModList[w].id.indexOf('slm_' + tempSecondGroup) > -1){
									var secondMod = secondModList[w].id;
									if(g_el(secondMod).checked)
									{
										if(free2 > 0)
										{
											free2 = free2 - parseInt(secondModList[w].weighting);
										}
										else
										{
											groupPrice2 += getPrice(secondModList[w].price);
										}
									}
								}
							}
							
						}
					}
					groupPrice += groupPrice2;
				}
			}
			else
			{
				if(groupList[i][j].ispizzatoppings)
				{
					var el = g_el('prb_' + groupList[i][j].id.split('_')[1] + '_' + groupList[i][j].id.split('_')[2] + '_cnt');
					el.style.display = 'none';
				}
			}
		}
		
	}
	totalPrice += groupPrice;
	
	// check GroupSingleList
	var groupSinglePrice = 0;
	var groupSinglePrice2 = 0;
	for(var i = 0; i < groupSingleList.length; i++)
	{
		for(var j = 0; j < groupSingleList[i].length; j++)
		{
			if(g_el(groupSingleList[i][j].id).checked)
				groupSinglePrice2 = getPrice(groupSingleList[i][j].price);
		}
		groupSinglePrice += groupSinglePrice2;
	}
	totalPrice += groupSinglePrice;
	
	// DO SOMETHING WITH COMBO !!!
	// check COMBO
	var cbCombo = g_el('cbCombo');
	if(cbCombo)
	{
		if(cbCombo.checked)
		{
			var comboPrice = getPrice(g_el('ihCombo').value);		// in the case we have only one size. Otherwise this value = 0
			for(var i = 0; i < comboList.length; i++)
			{
				if(g_el(comboList[i].id).checked)
					comboPrice = getPrice(comboList[i].price);
			}
			totalPrice += comboPrice;
		}
		showHideCombo();
	}
	
	var quantity = parseInt(g_el('tbQuantity').value, 10);
	totalPrice = totalPrice * quantity;
	totalPrice = totalPrice.toFixed(2);
	g_el('totalFoodPrice').innerHTML = '$' + totalPrice;
}


function tipsChange(el)
{
	var tips = getPrice(el.value);
	var ih = g_el('ihTotal');
	var total = g_el('spTotal');
	if(ih && total)
	{
		total.innerHTML = "$" + (getPrice(ih.value) + tips).toFixed(2);
	}
}


function getPrice(v)
{
	var price = 0;
	if(isNaN(parseFloat(v)))
		price = parseFloat(v.substring(1));
	else
		price = parseFloat(v);
	
	return price;
}

function checkIsRequired()
{
	var res = true;
	for( var i = 0; i < isRequiredList.length; i++)
	{
		var isRequiredGroup = isRequiredList[i];
		var isChecked = false;
		for(var j=0; j < isRequiredGroup.length; j++)
		{
			var el = g_el(isRequiredGroup[j]);
			if(el && el.checked)
				isChecked = true;
		}
		
		if(!isChecked && isRequiredGroup.length > 0)
		{
			res = false;
			var reqMessID = isRequiredGroup[0].split('_')[1];
			//g_el('requiredMess' + reqMessID).innerHTML = "(required)";
			g_el('requiredMess' + reqMessID).className = "black_txt3a";
		}
	}
	
	//if(!res) return false;
	
	// check aloha min constrains
	for(var i = 0; i < selectionRules.length; i++)
	{
		var grID = selectionRules[i].id;
		var selectedItems = 0;
		
		for(var k = 0; k < groupList.length; k++)
		{
			for(var t = 0; t < groupList[k].length; t++)
			{
				if(groupList[k][t].id.indexOf('gmod_' + grID) > -1)
				{
					var el = g_el(groupList[k][t].id);
					if(el && el.checked) 
					{
						selectedItems += parseInt(groupList[k][t].weighting);
					}
				}
			}
		}
		
		
		// fix for Single Choice & Required
		if(!!selectionRules[i].checksingle)
		{
			for(var q = 0; q < groupSingleList.length; q++)
			{
				for(var w = 0; w < groupSingleList[q].length; w++)
				if(groupSingleList[q][w].id.indexOf('gsmod_' + grID) > -1)
				{
					var sel = g_el(groupSingleList[q][w].id);
					if(sel && sel.checked) 
						selectedItems += 1;
				}
			}
		}
		
		
		if(selectionRules[i].min > 0 && selectionRules[i].min > selectedItems) 
		{ 
			//alert('Minimum22 selected modifiers constraint is not met.\nYou must select minimum ' + selectionRules[i].min + ' item(s) from \'' + selectionRules[i].name + '\'');
			alert('\"' + selectionRules[i].name + '\" requires at least ' + selectionRules[i].min + ' selection(s).');
			return false;
		}
	}
	
	// check aloha Second Level Modifier min constraint
	for(var i = 0; i < selectionRules.length; i++)
	{
		var grID = selectionRules[i].id;
		
		for(var k = 0; k < groupList.length; k++)
		{
			for(var t = 0; t < groupList[k].length; t++)
			{
				if(groupList[k][t].id.indexOf('gmod_' + grID) > -1)
				{
					var el3 = g_el(groupList[k][t].id);
					if(el3 && el3.checked) 
					{
						var tempFirstMod = groupList[k][t].id.split('_')[1] + '_' + groupList[k][t].id.split('_')[2];
						for(var q = 0; q < selectionRules2.length; q++)
						{
							if(selectionRules2[q].htmlID.indexOf('slmg_' + tempFirstMod) > -1)
							{
								
								if(selectionRules2[q].min > 0)
								{
									var secondLevelGr = selectionRules2[q].htmlID.split('_')[1] + '_' + selectionRules2[q].htmlID.split('_')[2] + '_' + selectionRules2[q].htmlID.split('_')[3];
									var selectedMod2 = 0;
									for(var w = 0; w < secondModList.length; w++)
									{
										if(secondModList[w].id.indexOf('slm_' + secondLevelGr) > -1)
										{
											var el4 = g_el(secondModList[w].id);
											if(el4 && el4.checked) selectedMod2 = selectedMod2 + parseInt(secondModList[w].weighting);
										}
									}
									
									if(selectionRules2[q].min > 0 && selectedMod2 < selectionRules2[q].min)
									{
									
										alert('Minimum selected modifiers constraint is not met.\nYou must select minimum ' + selectionRules2[q].min + ' item(s) from \'' + selectionRules2[q].name + '\'');
										return false;
									}
								}
								
							}
						}
						
					}
				}
			}
		}
		
		if(selectionRules[i].min > 0 && selectionRules[i].min < selectedItems && selectionRules[i].max < 1) 
		{	//my changes selectionRules-> selectionRules2				
			alert('Minimum selected modifiers constraint is not met.\nYou must select at least ' + selectionRules[i].min + ' modifiers from \'' + selectionRules[i].name + '\'');
			return false;
		}
	}
	
	if(res) g_el('addingMessage').style.display = 'inline';
	return res;
}

function showHideCombo()
{
	var el2 = g_el('tblCombo');
	if(el2) el2.style.display = (g_el('cbCombo').checked) ? 'block' : 'none';
}




			function showInfo(fid, mid)
			{
				if(!info) info = g_el('info');
				if(!info2) info2 = g_el('info2');
					
				if(!info || !info2) return;
				
				var source = g_el('div_' + mid + '_' + fid);
				
				if(source)
				{
					if(infoTOutRef)
					{
						clearTimeout(infoTOutRef);
						infoTOutRef = null;
					}

					info2.innerHTML = source.innerHTML;
					info.style.visibility = 'visible';
				} 
				else
				{
					hideInfo(0);
				}
			}
			
			function hideInfo(fid)
			{
				if(!infoTOutRef) infoTOutRef = setTimeout('infoTOutHide()', infoTOut);
			}
			
			function infoTOutHide()
			{
				if(infoTOutRef) clearTimeout(infoTOutRef);
				if(!info) info = g_el('info');
				if(info) info.style.visibility = "hidden";
			}

			function gotoFoodInfo(fid, grid)
			{
				if(fid)
				{ // currOpenContentID
					var url = fid + '&mt=' + MM.currMenuID + ((grid) ? '&gr=' + grid : '') + (isMenuDisabled ? '&disabled=true' : '') + (isForCorporate ? '&isforcorporate=true' : '');
					showFI(url);
				}
			}
			
			function showFI(url)
			{
				showCover(true);
				createFI(fooddetailsurl + url);
			}
			
			function deleteFI(url, message)
			{
				var message = 'Are you sure you want to DELETE "' + message + '" from your order?';
				if(confirm(message)) showFI(fooddetailsurl + 0 + '&d=' + url + (isMenuDisabled ? '&disabled=true' : '') + (isForCorporate ? '&isforcorporate=true' : '') );
			}
			
			function hideFI()
			{
				setTimeout('removeFI()', 0);	// fix for FF
				showCover(false);
			}
			
			var checkoutStatusMessages = ["", "* There is no items in your basket", "This restaurant has a $ food and beverage minimum for delivery orders. Please increase your order amount or change your order type to pickup", "* Your Address is beyond this Restaurant's Deliverable Area!", "Restaurant doesn't serve at the time. Please choose another time", "Sorry, this restaurant is not currently accepting orders. Please click on \"Find a Restaurant\" to locate another restaurant to order from."];
			
			function updateCompleted(data, data2, code, amount, showReorderBlock, showSuppliesPopup)
			{
				if(data) updateFoodList(data);
				
				if(data2) updateFooterData(data2);
				else updateFooterData();
				
				hideFI();
				
				if(window.location.href.indexOf('checkout.aspx') > -1) { window.location.href = window.location.href; return; }
				if(window.location.href.indexOf('reorder.aspx') > -1) { window.location.href = window.location.href; return; }
				if(window.location.href.indexOf('corporate_checkout2.aspx') > -1) { window.location.href = window.location.href; return; }
				
				var choutbtn = g_el('checkoutbtn');
				var fbChoutlnk = g_el('fbCheckoutLnk');
				
				if(choutbtn) 
				{ 
					var ibchout = choutbtn.getElementsByTagName('input')[0];
					if(code == 0)
					{
						choutbtn.style.display = 'block';
						if(showSuppliesPopup == 1) 
						{
							ibchout.onclick = function() { SPM.load(this); return false; };
							if(fbChoutlnk) fbChoutlnk.onclick = function() { SPM.load(this); return false; };
						}
						else ibchout.onclick = null;
					}
					else if(code == 1)
					{
						choutbtn.style.display = 'none';
						ibchout.onclick = function() { alert(checkoutStatusMessages[code]); return false; };
						if(fbChoutlnk) fbChoutlnk.onclick = function() { alert(checkoutStatusMessages[code]); return false; };
					}
					else if(code == 2 || code == 3 || code == 4)
					{
						choutbtn.style.display = 'block';
						ibchout.onclick = function() { alert(code == 2 ? checkoutStatusMessages[code].replace("$", "$" + amount) : checkoutStatusMessages[code]); return false; };
						if(fbChoutlnk) fbChoutlnk.onclick = function() { alert(code == 2 ? checkoutStatusMessages[code].replace("$", "$" + amount) : checkoutStatusMessages[code]); return false; };
					}
					else if(code == 5)
					{
						choutbtn.style.display = 'block';
						ibchout.onclick = function() { alert(checkoutStatusMessages[code]); return false; };
						if(fbChoutlnk) fbChoutlnk.onclick = function() { alert(checkoutStatusMessages[code]); return false; };
					}
				}
				
				var rb = g_el('reorderBlock');
				if(rb) rb.style.display = (showReorderBlock == 1) ? "block" : "none";
				
				var choutbtn2 = g_el('checkoutbtn2');
				if(choutbtn2)
				{
					choutbtn2.style.display = 'none';
					if(code == 0){ choutbtn2.style.display = 'block'; }
					else if(code == 1){	choutbtn2.style.display = 'none';	}
					else if(code == 2 || code == 3 || code == 4){	choutbtn2.style.display = 'block'; }
				}
				
			}
			
			function updateFoodList(data)
			{
				var fl = g_el('foodlist');
				if(fl) fl.innerHTML = data.innerHTML;
			}
			
			function updateFooterData(data)
			{
				var fb = g_el('footerbar');
				if(fb) 
				{
					if(data) 
					{
						fb.innerHTML = data.innerHTML;
						setTimeout('resetFooterBarNotification()', 10000);
					}
					else fb.innerHTML = '';
				}
			}
			
			function resetFooterBarNotification()
			{
				var fbt = g_el('fbNotification');
				if(fbt) fbt.innerHTML = '';
			}
			
			function updateHeight(h)
			{
				FIRef.style.height = h;
			}


/* food details end */

var o_mXY = {left:0, top:0};




/* add new address overlay */

var NAM = {

	xhr: null,
	blockRef: null,
	path: 'usernewaddress.ashx',
	
	isSaveVisible: false,
	isLoginVisible: false,
	isTooFar: true,
	
	streetRef: null,
	address2Ref: null,
	cityRef: null,
	stateRef: null,
	zipRef: null,
	saveRef: null,
	nicknameRef: null,
	phone1Ref: null,
	phone2Ref: null,
	phone3Ref: null,
	instructionsRef: null,
	companyRef: null,
	
	addressOutRef: null,
	addressDDLRef: null,
	addressBtnRef: null,
	
	btnSubmitRef: null,
	btnCancelRef: null,
	
	errRef: null,
	errStreetRef: null,
	errCityRef: null,
	errStateRef: null,
	errZipRef: null,
	errNicknameRef: null,
	errPhoneRef: null,
	
	errors: ['* Please enter Street Address', '* Please enter City', '* Please select State', '* Please enter Nickname', '* Please enter phone', '* Please enter Zip Code',  '* You need to Login first', '* Failed to locate this address', '* You already have such Nickname', '* Failed to add new address', '* You exceeded the maximum allowed number of addresses.'],
	errorRef: [],
	focusRef: [],
	
	isCateringRequested: false,
	
	create: function()
	{
		if(!NAM.blockRef)
		{
			NAM.blockRef = document.createElement('DIV');
			NAM.blockRef.className = 'hnewaddress';
			document.body.appendChild(NAM.blockRef);
		}
	},
	
	show: function(ddlid, outid, btnid)
	{	// logged in, no login
		NAM.isSaveVisible = true;
		NAM.isLoginVisible = false;
		
		NAM.create();
		NAM.addressDDLRef = g_el(ddlid);
		NAM.addressOutRef = g_el(outid);
		NAM.addressBtnRef = g_el(btnid);
		
		showCover(true);
		NAM.blockRef.innerHTML = '';
		NAM.blockRef.className = 'vnewaddress';
		NAM.loadForm();
	},
	
	show2: function(isLoginVisible)
	{	// simple mode: temporary address + login
		NAM.isSaveVisible = false;
		NAM.isLoginVisible = (typeof isLoginVisible == 'undefined') ? true : isLoginVisible;
		
		NAM.create();
		
		showCover(true);
		NAM.blockRef.innerHTML = '';
		NAM.blockRef.className = 'vnewaddress';
		NAM.loadForm();
	},
	
	show3: function()
	{	// delivery logged out, temporary address only
		NAM.isSaveVisible = false;
		NAM.isLoginVisible = false;
		
		NAM.create();
		
		showCover(true);
		NAM.blockRef.innerHTML = '';
		NAM.blockRef.className = 'vnewaddress';
		NAM.loadForm();
	},
	
	hide: function()
	{
		NAM.blockRef.className = 'hnewaddress';
		NAM.blockRef.innerHTML = '';
		showCover(false);
	},	
	
	loadForm: function()
	{
		var ticks = (new Date()).valueOf();
		if(!NAM.xhr) NAM.xhr = new Ajax();
		NAM.xhr.doneHandler = NAM.ajaxLoadDone;
		NAM.xhr.errorHandler = NAM.ajaxError;
		NAM.xhr.waitingHandler = NAM.ajaxWaiting;
		NAM.xhr.send('GET', NAM.path + '?ticks=' + ticks + (NAM.isSaveVisible ? "&savevisible=true" : "") + (NAM.isLoginVisible ? "&loginvisible=true" : ""), null);
	},
	
	ajaxLoadDone: function(text, xml)
	{
		var i, l;
		NAM.blockRef.innerHTML = text;
		
		var els = NAM.blockRef.getElementsByTagName('input');
		for(i = 0, l = els.length; i < l; i++)
		{
			if(els[i].id == 'daStreet') NAM.streetRef = els[i];
			if(els[i].id == 'daAddress2') NAM.address2Ref = els[i];
			if(els[i].id == 'daCity') NAM.cityRef = els[i];
			if(els[i].id == 'daCompany') NAM.companyRef = els[i];
			if(els[i].id == 'daZip') NAM.zipRef = els[i];
			if(els[i].id == 'daSave') NAM.saveRef = els[i];
			if(els[i].id == 'daNickname') NAM.nicknameRef = els[i];
			if(els[i].id == 'daPhone1') NAM.phone1Ref = els[i];
			if(els[i].id == 'daPhone2') NAM.phone2Ref = els[i];
			if(els[i].id == 'daPhone3') NAM.phone3Ref = els[i];
			if(els[i].id == 'daSubmit') NAM.btnSubmitRef = els[i];
		}
		NAM.instructionsRef = g_el('daInstructions');
		
		NAM.stateRef = NAM.blockRef.getElementsByTagName('select')[0];
		NAM.btnCancelRef = NAM.blockRef.getElementsByTagName('a')[2];
		
		var els = NAM.blockRef.getElementsByTagName('span');
		for(i = 0, l = els.length; i < l; i++)
		{
			if(els[i].id == 'daStreeError') NAM.errStreetRef = els[i];
			if(els[i].id == 'daCityError') NAM.errCityRef = els[i];
			if(els[i].id == 'daStateError') NAM.errStateRef = els[i];
			if(els[i].id == 'daZipError') NAM.errZipRef = els[i];
			if(els[i].id == 'daNicknameError') NAM.errNicknameRef = els[i];
			if(els[i].id == 'daPhoneError') NAM.errPhoneRef = els[i];
			if(els[i].id == 'daError') NAM.errRef = els[i];
		}
		
		if(states)
		{
			NAM.stateRef.options[NAM.stateRef.options.length] = new Option('', '0', false, false);
			for(i = 0; i < states.length; i++)
			{
				NAM.stateRef.options[NAM.stateRef.options.length] = new Option(states[i].abbr, states[i].id, false, false);
			}
		}
		
		NAM.saveRef.checked = NAM.isSaveVisible ? true : false;
		events.add(NAM.saveRef, 'click', NAM.saveClicked);
		
		NAM.errorRef = [NAM.errStreetRef, NAM.errCityRef, null, NAM.errNicknameRef, NAM.errPhoneRef, null, NAM.errNicknameRef, NAM.errStreetRef, null, NAM.errStreetRef];
		NAM.focusRef = [NAM.streetRef, NAM.cityRef, NAM.stateRef, NAM.nicknameRef, NAM.phone1Ref, null, NAM.nicknameRef, NAM.streetRef, null, NAM.streetRef];
		
		//events.add(NAM.zipRef, 'keyup', function(ev) { phoneInput(ev, this, 5, (NAM.isSaveVisible ? NAM.saveRef : NAM.btnSubmitRef)); } );
		if(NAM.isSaveVisible) events.add(NAM.zipRef, 'keyup', function(ev) { phoneInput(ev, this, 5, NAM.phone1Ref); } );
		else events.add(NAM.zipRef, 'keyup', function(ev) { phoneInput(ev, this, 5, NAM.instructionsRef); } );
		
		events.add(NAM.phone1Ref, 'keyup', function(ev) { phoneInput(ev, this, 3, NAM.phone2Ref); } );
		events.add(NAM.phone2Ref, 'keyup', function(ev) { phoneInput(ev, this, 3, NAM.phone3Ref); } );
		events.add(NAM.phone3Ref, 'keyup', function(ev) { phoneInput(ev, this, 4, NAM.instructionsRef); } );
		
		initDivHoverEffect(NAM.blockRef);	// div hover effect initializer
		events.add(NAM.blockRef, 'keyup', function(ev){ if(ev.keyCode == 27) { NAM.hide(); EAL.done(false); } });	// esc
		events.add(NAM.btnCancelRef, 'click', function(ev){ NAM.hide(); EAL.done(false); });
		events.add(NAM.blockRef, 'keyup', function(ev){ if(ev.keyCode == 13) NAM.submitForm(); });
		
		NAM.btnSubmitRef.onclick = NAM.submitForm;
		
		NAM.streetRef.focus();
	},	
	
	submitForm: function()
	{
		if(!NAM.isAddressInputValid()) return;
		
		NAM.btnSubmitRef.onclick = '';
		
		var stateAbbr = NAM.stateRef.options[NAM.stateRef.selectedIndex].text;
		
		var data =	'street=' + NAM.streetRef.value + '&address2=' + NAM.address2Ref.value + '&city=' + NAM.cityRef.value + '&company=' + NAM.companyRef.value + 
								'&stateid=' + NAM.stateRef.value + '&stateAbbr=' + stateAbbr + '&zip=' + NAM.zipRef.value + '&save=' + (NAM.saveRef.checked ? 'true' : 'false') +	
								'&nick=' + NAM.nicknameRef.value + '&phone=' + NAM.phone1Ref.value + NAM.phone2Ref.value + NAM.phone3Ref.value + '&instr=' + NAM.instructionsRef.value;
		
		var ticks = (new Date()).valueOf();
		if(!NAM.xhr) NAM.xhr = new Ajax();
		NAM.xhr.doneHandler = NAM.ajaxSubmitDone;
		NAM.xhr.errorHandler = NAM.ajaxError;
		NAM.xhr.waitingHandler = NAM.ajaxWaiting;
		NAM.xhr.send('POST', NAM.path + "?ticks=" + ticks + (NAM.isSaveVisible ? "&savevisible=true" : "") + (NAM.isLoginVisible ? "&loginvisible=true" : ""), data + (NAM.isCateringRequested ? "&isCatering=true" : ""));
	},
	
	ajaxSubmitDone: function(text, xml)
	{
		NAM.resetError();
		eval('var res = ' + text + ';');
		
		if(res.errorindex > -1)
		{
			NAM.errRef.innerHTML = NAM.errors[res.errorindex];
			NAM.errRef.style.display = 'inline';
			
			if(!NAM.isSaveVisible) NAM.setError(NAM.errorRef[res.errorindex], null);
			else NAM.setError(NAM.errorRef[res.errorindex], NAM.focusRef[res.errorindex]);
			
			NAM.btnSubmitRef.onclick = NAM.submitForm;
		}
		else
		{
			NAM.isTooFar = res.istoofar;
			
			if(!NAM.isLoginVisible)
			{
				if(NAM.isSaveVisible) 
				{
					var address = res.street + "<br />" + res.city + ", " + res.stateAbbr + " " + res.zip;
					NAM.addressOutRef.innerHTML = address;
					var nickname = (res.addressid > 0) ? res.nick : '--temporary address--';
					var opt = new Option(nickname, 'ta', false, true);
					
					NAM.addressDDLRef.selectedIndex = -1;
					for(var i = 0; i < NAM.addressDDLRef.options.length; i++)
					{
						if(NAM.addressDDLRef.options[i].value == 'ta')
						{
							NAM.addressDDLRef.options[i] = opt;
							opt = null;
							break;
						}
					}
					if(opt) NAM.addressDDLRef.options[NAM.addressDDLRef.options.length] = opt;
				}
				
				NAM.hide();
				window.location.href = window.location.href;
			}
			else
			{
				NAM.hide();
				EAL.done(true);
			}
		}

	},
	
	ajaxError: function(){ },
	ajaxWaiting: function(){ },
	
	isAddressInputValid: function()
	{
		NAM.resetError();
		
		if(NAM.streetRef.value.trim().length == 0) { NAM.setError(NAM.errStreetRef, NAM.streetRef); return false; }
		if(NAM.cityRef.value.trim().length == 0) { NAM.setError(NAM.errCityRef, NAM.cityRef); return false; }
		if(NAM.stateRef.value == '0') { NAM.setError(NAM.errStateRef, NAM.stateRef); return false; }
		
		var z = parseInt(NAM.zipRef.value.trim(), 10);
		if(isNaN(z) || ((z + '').length != 5 && ('0' + z).length != 5)) { NAM.setError(NAM.errZipRef, NAM.zipRef); return false; }
		
		var ph1 = parseInt(NAM.phone1Ref.value.trim(), 10);
		var ph2 = parseInt(NAM.phone2Ref.value.trim(), 10);
		var ph3 = parseInt(NAM.phone3Ref.value.trim(), 10);
		
		if(NAM.isSaveVisible) 
		{
			if(isNaN(ph1) || isNaN(ph2) || isNaN(ph3) || (ph1 + '' + ph2 + '' + ph3).length != 10) { NAM.setError(NAM.errPhoneRef, NAM.phone1Ref); return false; }
		}
		
		if(NAM.saveRef.checked)
		{
			if(NAM.nicknameRef.value.trim().length == 0) { NAM.setError(NAM.errNicknameRef, NAM.nicknameRef); return false; }
		}
		else
		{
			NAM.nicknameRef.value = '';
			//NAM.phone1Ref.value = '';
			//NAM.phone2Ref.value = '';
			//NAM.phone3Ref.value = '';
		}
		return true;
	},
	
	resetError: function()
	{
		NAM.errRef.style.display = 'none';
		NAM.hideError(NAM.errStreetRef);
		NAM.hideError(NAM.errCityRef);
		NAM.hideError(NAM.errStateRef);
		NAM.hideError(NAM.errZipRef);
		NAM.hideError(NAM.errNicknameRef);
		NAM.hideError(NAM.errPhoneRef);
	},
	
	setError: function(errRef, elRef){
		if(errRef) errRef.className = 'error2';
		if(elRef) elRef.focus();
	},
	
	hideError: function(errRef){
		errRef.className = 'noerror2';
	},
	
	saveClicked: function(){
		
		NAM.nicknameRef.disabled = !this.checked;
		//NAM.phone1Ref.disabled = !this.checked;
		//NAM.phone2Ref.disabled = !this.checked;
		//NAM.phone3Ref.disabled = !this.checked;
		
		NAM.nicknameRef.className = (this.checked) ? NAM.nicknameRef.className.replace(' gray', '') : NAM.nicknameRef.className + ' gray';
		//NAM.phone1Ref.className   = (this.checked) ? NAM.phone1Ref.className.replace(' gray', '') : NAM.phone1Ref.className + ' gray';
		//NAM.phone2Ref.className   = (this.checked) ? NAM.phone1Ref.className.replace(' gray', '') : NAM.phone1Ref.className + ' gray';
		//NAM.phone3Ref.className   = (this.checked) ? NAM.phone1Ref.className.replace(' gray', '') : NAM.phone1Ref.className + ' gray';
		
		if(this.checked) NAM.nicknameRef.focus();
		else NAM.btnSubmitRef.focus();
	},
	
	getAddress: function(v, outRef){
		if(!NAM.xhr) NAM.xhr = new Ajax();
		NAM.xhr.doneHandler = function(text, xml) { NAM.updateAddresInfo(text, xml, outRef); };
		NAM.xhr.send('GET', NAM.path, 'getaddress=' + v);
	},
	
	updateAddresInfo: function(text, xml, outRef){
		outRef.innerHTML = text;
	}

}

/* add new address overlay end */



/* too far */

var TFM = {
	
	currSelectedRed: null,
	blockRef: null,
	xhr: null,
	
	create: function(){
		TFM.blockRef = document.createElement('div');
		TFM.blockRef.className = 'htoofar';
		var temp = '<div class="content"><div style="margin-bottom:6px;"><span class="title">Your Address is beyond this <br />Restaurant\'s Deliverable Area!</span></div>'; 
		temp += '<div style="margin-top:20px; margin-bottom:10px;"><span class="title2">What do you want to do?</span></div>';
		temp += '<div>';
		temp += '<div style="margin-bottom:10px;"><input type="radio" name="dt_all" id="dt_1" tabindex="290" /><label for="dt_1">Change the order back to pick up</label></div>';
		temp += '<input type="radio" name="dt_all" id="dt_2" tabindex="291" /><label for="dt_2">See a list of restaurants that delivers to your area</label>';
		temp += '<div style="margin-top:10px; margin-left:300px;"><div class="hover submit" style="margin:0px;"><input type="image" onclick="TFM.click();" src="images/NewDesign/btn_submit_orng.gif" tabindex="292" /></div>';
		temp += '</div>';
		temp += '</div>';
		TFM.blockRef.innerHTML = temp;
		document.body.appendChild(TFM.blockRef);
	},
	
	show: function(el){
		TFM.currSelectedRed = el;
		TFM.create();
		
		showCover(true);
		TFM.blockRef.className = 'vtoofar';
	},
	
	hide: function(){
		TFM.blockRef.className = 'htoofar';
		TFM.blockRef = null;
		showCover(false);
	},
	
	click: function(){
		var els = TFM.blockRef.getElementsByTagName('input');
		if(els[0].checked) {
			TFM.currSelectedRed.checked = true;
			TFM.hide();
		}
		else if(els[1].checked) {
			TFM.resetBasket();
			//window.location.href = TFM.path;
		}
	},
	
	resetBasket: function(){
		if(!TFM.xhr) TFM.xhr = new Ajax();
		TFM.xhr.doneHandler = function() { window.location.href = TFM.path; };
		TFM.xhr.errorHandler = function() { window.location.href = TFM.path; };
		TFM.xhr.waitingHandler = null;
		TFM.xhr.send('GET', "usernewaddress.ashx?ticks=" + getGUID() + "&basket=reset", null);
	}
	
}

/* too far end */


/* enter address or login */

var EAL = {
	
	holderName: 'dtSelector',
	blockRef: null,
	deliveryRef: null,
	cateringDeliveryRef: null,
	rootPath: '',
	rootHttpsPath: '',
	deliveryPath: '',
	cateringDeliveryPath: '',
	isAllowed: false,
	lastClickedRef: null,
	currentTypeRef: null,
	isFromMenu: false,
	fullPath: '',
	isLoggedIn: false,
	
	init: function()
	{
		var els = g_el(EAL.holderName).getElementsByTagName('input'), i, l;
		for(i = 0, l = els.length; i < l; i++)
		{
			if(els[i].id && els[i].id.indexOf('rbDelivery') > -1) EAL.deliveryRef = els[i];
			if(els[i].id && els[i].id.indexOf('rbCateringDelivery') > -1) EAL.cateringDeliveryRef = els[i];
			if(els[i].checked && ((els[i].id.indexOf('rbPickup') > -1) || (els[i].id.indexOf('rbCurbside') > -1) || (els[i].id.indexOf('rbCateringPickup') > -1))) EAL.currentTypeRef = els[i];
		}
		
		EAL.deliveryRef.onclick = null;
		EAL.cateringDeliveryRef.onclick = null;
		events.add(EAL.deliveryRef, 'click', EAL.click)
		events.add(EAL.cateringDeliveryRef, 'click', EAL.click)
		EAL.deliveryPath = EAL.rootPath + 'delivery.aspx';
		EAL.cateringDeliveryPath = EAL.rootPath + 'catering-delivery.aspx';
	},
	
	click: function()
	{
		if(EAL.isAllowed) {
			window.location.href = (this == EAL.deliveryRef) ? EAL.deliveryPath : EAL.cateringDeliveryPath;
		}
		else{
			EAL.lastClickedRef = this;
			NAM.show2(!EAL.isLoggedIn);
		}
	},
	
	click2: function()
	{
		NAM.show2();
	},
	
	done: function(v)
	{
		if(v){
			if(EAL.isFromMenu) 
			{
				if(NAM.isTooFar) { TFM.show(EAL.currentTypeRef); initDTSelector1(); dtlastselected = EAL.currentTypeRef; }
				else EAL.lastClickedRef.oldaction();
			}
			else 
			{
				window.location.href = EAL.rootPath + ((EAL.lastClickedRef == EAL.deliveryRef) ? 'delivery.aspx' : 'catering-delivery.aspx');
			}
		}
		else
		{
			if(EAL.lastClickedRef) 
			{
				EAL.lastClickedRef.checked = false;
				EAL.currentTypeRef.checked = true;
			}
		}
	},
	
	loginRedirect: function()
	{
		if(EAL.isFromMenu) 
		{
			var url = 'https://' + window.location.hostname +  window.location.pathname;
			if(EAL.rootPath == EAL.rootHttpsPath) url = 'https://' + window.location.hostname + window.location.pathname;
			url = url + '?login=start&deltype=' + EAL.lastClickedRef.deliveryType + '&override=1';
			window.location.href = url;
		}
		else window.location.href = EAL.rootHttpsPath + 'pickup.aspx?login=start&redirect=' + (EAL.lastClickedRef == EAL.deliveryRef ? 'delivery.aspx' : 'catering-delivery.aspx') + '&override=1';
	}

}

/* enter address or login end */


/* Restaurant Description Manager */

var RDM = {
	
	show: function(el)
	{
		if(el.descr)
		{
			if($(el.descr).is(':hidden')) $(el.descr).show();
			else $(el.descr).hide();
			
			return;
		}
		
		$.ajax({
			link: el,
			url: 'hdl_restdescr.ashx',
			type: 'GET',
			dataType: 'html',
			data: { restid: $(el).parent()[0].id.split('_')[1] },
			complete: RDM.complete
		});
	},
	
	complete: function(xhr, status)
	{
		if(status == 'success')
		{
			this.link.descr = $('<div class="rest_descr"><div>' + xhr.responseText + '</div></div>').insertAfter($(this.link).parent()[0])[0];
			$(this.link.descr).height($(this.link.descr).children().height());
		}
	}
	
}

/* Restaurant Description Manager end */

function formatMapLine(siteUrl)
{
	$('.mapline').each(function(n){
		this.innerHTML = "<a class='blue' href='javascript:;' title='Show Map for &#39;" + this.innerHTML + "&#39;' onclick='showMap(\"" + siteUrl + "map.aspx?id=" + this.id.split('_')[1] + "\");'>Map</a>" + "&nbsp;|&nbsp;" + "<a class='blue' href='javascript:;' onclick='RDM.show(this);'>Restaurant Description</a>";
	});
}

function showMap(url)
{
	var feat = 'width=550,height=460,scrollbar=true,resizable=no';
	window.open(url, 'Location_Map', feat);
}


/* reorder check */

var RCM = {

	xhr: null,
	path: 'userreordercheck.ashx',
	reorderpath: null,
	blockRef: null,
	scriptRef: null,
	id: -1,
	status: -1,
	
	
	check: function(id){
		
		showCover(true);
		RCM.id = id;
		
		if(!RCM.blcokRef) {
			RCM.blockRef = document.createElement('DIV');
			document.body.appendChild(RCM.blockRef);
			RCM.blockRef.className = 'hreordercheck';
		}
		
		if(!RCM.xhr) RCM.xhr = new Ajax();
		RCM.xhr.doneHandler = RCM.ajaxCheckDone;
		RCM.xhr.errorHandler = RCM.ajaxError;
		RCM.xhr.waitingHandler = RCM.ajaxWaiting;
		RCM.xhr.send('GET', RCM.path + '?ticks=' + getGUID() + "&id=" + RCM.id, null);
	},
	
	ajaxCheckDone: function(text, xml){
		RCM.blockRef.innerHTML = text;
		initDivHoverEffect(RCM.blockRef);	// div hover effect initializer
		RCM.scriptRef = g_el('rcm_script');
		eval(RCM.scriptRef.innerHTML);
		
		if(RCM.status == 1){	// ok
			RCM.proceed();
			return;
		}
		
		if(RCM.status == -1){			 /* new prices */ }
		else if(RCM.status == -2){ /* food items changed */ }
		else if(RCM.status == -3){ /* bad restaurant */ }
		else if(RCM.status == -4){ /* bad order id */	 }
		else if(RCM.status == -5){ /* not logged in */  }
		
		RCM.blockRef.className = 'vreordercheck';
		
	},
	
	ajaxError: function() {},
	ajaxWaiting: function() {},
	
	proceed: function(){
		RCM.cancel();
		window.location.href = RCM.reorderpath + RCM.id;
	},
	
	cancel: function(){
		RCM.blockRef.className = 'hreordercheck';
		RCM.blockRef.innerHTML = '';
		showCover(false);
	}
	
}

/* reorder check end */



/* first time login manager */

var FTLM = {	// first time login manager - FTLM
	suRef: null,
	xhr: null,
	ids: ['psw', 'psw2', 'question', 'answer', 'agree', 'suSubmit', 'suCancel'],
	refs: [],
	errRefs: [],
	messages: [],
	errorPos: [],
	redirectURL: '0',
	
	create: function(){
		if(!FTLM.suRef){
			FTLM.suRef = document.createElement('DIV');
			FTLM.suRef.className = 'hfirsttimelogin';
			document.body.appendChild(FTLM.suRef);
		}
		//FTLM.suRef.innerHTML = "<div class='loading'><span>&nbsp;loading...&nbsp;</span></div>";
	},
	
	show: function(){
		FTLM.create();
		
		showCover(true);
		FTLM.suRef.className = 'vfirsttimelogin';
		FTLM.loadForm();
	},
	
	showWithURL: function(aURL){
		FTLM.create();
		FTLM.redirectURL = aURL;
		showCover(true);
		FTLM.suRef.className = 'vfirsttimelogin';
		FTLM.loadForm();
	},
	
	hideSignup: function(){
		FTLM.suRef.className = 'hfirsttimelogin';
		showCover(false);
	},
	
	loadForm: function(){
		var ticks = (new Date()).valueOf();
		if(!FTLM.xhr) FTLM.xhr = new Ajax();
		FTLM.xhr.doneHandler = FTLM.ajaxLoadDone;
		FTLM.xhr.errorHandler = FTLM.ajaxError;
		FTLM.xhr.waitingHandler = FTLM.ajaxWaiting;
		FTLM.xhr.send('GET', 'firstlogin.ashx?ticks=' + ticks, null);
	},
	
	submitForm: function(){
		FTLM.resetError();
		
		if(!FTLM.isDataValid()){
			FTLM.setError();
			return;
		}
	
		var data = '';
		data += ((data.length != 0) ? '&' : '') + FTLM.refs[0].id + '=' + encodeURIComponent(FTLM.refs[0].value);
		data += ((data.length != 0) ? '&' : '') + FTLM.refs[1].id + '=' + encodeURIComponent(FTLM.refs[1].value);
		data += ((data.length != 0) ? '&' : '') + FTLM.refs[3].id + '=' + encodeURIComponent(FTLM.refs[3].value);
		data += '&question=' + FTLM.refs[2].value;
		data += '&agree=' + FTLM.refs[4].checked;
		
		FTLM.refs[5].onclick = '';
		
		FTLM.xhr.doneHandler = FTLM.ajaxSubmitDone;
		FTLM.xhr.errorHandler = FTLM.ajaxError;
		FTLM.xhr.waitingHandler = FTLM.ajaxWaiting;
		FTLM.xhr.send('POST', 'firstlogin.ashx', data);
	},
	
	resetError: function(){
		for(var i = 0; i < FTLM.errRefs.length; i++){
			if(FTLM.errRefs[i]) FTLM.errRefs[i].className = 'noerror2';
		}
	},
	
	cancelForm: function(){
		FTLM.hideSignup();
		window.location.href = 'logout.aspx';
		
		//if (FTLM.redirectURL != '0') window.location.href = FTLM.redirectURL;
		
	},
	
	isDataValid: function(){
		FTLM.errorPos.length = 0;
		if(FTLM.refs[0].value.trim().length == 0) FTLM.errorPos[FTLM.errorPos.length] = 0;	// psw
		if(FTLM.refs[1].value.trim().length == 0 || FTLM.refs[0].value.trim() != FTLM.refs[1].value.trim()) FTLM.errorPos[FTLM.errorPos.length] = 1;	// psw2
		if(FTLM.refs[3].value.trim().length == 0) FTLM.errorPos[FTLM.errorPos.length] = 3;	// answer
		if(!FTLM.refs[4].checked) FTLM.errorPos[FTLM.errorPos.length] = 4;						// agree
		if(FTLM.refs[2].selectedIndex == 0) FTLM.errorPos[FTLM.errorPos.length] = 2;	// question
				
		if(!checkPasswordExtended (FTLM.refs[0])){
			alert(aChekPasswdScriptError);
			FTLM.refs[0].focus();
			FTLM.errorPos[FTLM.errorPos.length] = 0;
		}
		return (FTLM.errorPos.length == 0);
	},
	
	setError: function(){
		if(FTLM.errorPos.length > 0){
			FTLM.refs[FTLM.errorPos[0]].focus();
			for(var i = 0; i < FTLM.errorPos.length; i++){
				if(FTLM.errRefs[FTLM.errorPos[i]]) FTLM.errRefs[FTLM.errorPos[i]].className = 'error2';
			}
			//alert('errors amount: ' + FTLM.errorPos.length);
		}
	},
	
	ajaxLoadDone: function(text, xml){
		FTLM.suRef.innerHTML = text;
		var inps = FTLM.suRef.getElementsByTagName('INPUT'), i, k, l, s;
		var sps = FTLM.suRef.getElementsByTagName('SPAN');
		for(i = 0, l = inps.length; i < l; i++){
			for(k = 0; k < FTLM.ids.length; k++){
				if(inps[i].id == FTLM.ids[k]){
					FTLM.refs[k] = inps[i];
					for(s = 0; s < sps.length; s++){
						if(sps[s].id == FTLM.refs[k].id + 'Error'){
							FTLM.errRefs[k] = sps[s];
							break;
						}
					}
					break;
				}
			}
		}
		
		FTLM.refs[2] = g_el(FTLM.ids[2]);
		FTLM.refs[4] = g_el(FTLM.ids[4]);
		FTLM.refs[5] = g_el(FTLM.ids[5]);
		FTLM.refs[6] = g_el(FTLM.ids[6]);
		
		FTLM.refs[5].onclick = FTLM.submitForm;
		FTLM.refs[6].onclick = FTLM.cancelForm;
		
		initDivHoverEffect(FTLM.suRef);	// div hover effect initializer
		events.add(FTLM.suRef, 'keyup', function(ev){ if(ev.keyCode == 27) FTLM.cancelForm(); if(ev.keyCode == 13) FTLM.submitForm(); });
		
		FTLM.refs[0].focus();
	},

	
	ajaxSubmitDone: function(text, xml){
		eval('var res = ' + text);
		if(res.status == 1){
			FTLM.hideSignup();
			if (FTLM.redirectURL != '0') {
			    window.location.href = FTLM.redirectURL;
			}
			
		}
		else {
			FTLM.refs[5].onclick = FTLM.submitForm;
			if(res.errTextPos != -1) alert(FTLM.messages[res.errTextPos]);
			if(res.idPos != -1) { 
				if(FTLM.errRefs[res.idPos]) FTLM.errRefs[res.idPos].className = 'error2';
				FTLM.refs[res.idPos].focus();
			}
		}
	},
	
	ajaxError: function(status, errText){
		
	},
	
	ajaxWaiting: function(){
		
	},
	
	updateStatus: function(){
		
	}
	
}

/* first time login manager */


/* updated terms of use */

var TOUM = {

	xhr: null,
	ref: null,
	redirectURL: null,
	agree: null,
	btn: null,
	
	create: function()
	{
		if(TOUM.ref) return;
		
		TOUM.ref = document.createElement('DIV');
		TOUM.ref.className = 'htou';
		document.body.appendChild(TOUM.ref);
	},
	
	load: function()
	{
		var ticks = (new Date()).valueOf();
		if(!TOUM.xhr) TOUM.xhr = new Ajax();
		
		TOUM.xhr.doneHandler = TOUM.loaded;
		TOUM.xhr.errorHandler = TOUM.error;
		TOUM.xhr.waitingHandler = TOUM.waiting;
		TOUM.xhr.send('GET', 'userlogin.ashx?action=tou&ticks=' + ticks, null);
	},
	
	loaded: function(text, xml)
	{
		TOUM.ref.innerHTML = text;
		TOUM.agree = g_el('cbUpdatedTOUAgree');
		TOUM.btn = g_el('btnTUOContinue');
		
		//events.add(TOUM.btn, 'click', TOUM.submitted);
	},
	
	submit: function()
	{
		//events.remove(TOUM.btn, 'click', TOUM.submitted);
		var data = 'action=tou&ticks=' + ticks + '&accepted=' + (TOUM.agree.checked ? 'yes' : 'no');
		
		TOUM.xhr.doneHandler = function(){ TOUM.hide(); };
		TOUM.xhr.errorHandler = TOUM.error;
		TOUM.xhr.waitingHandler = TOUM.waiting;
		TOUM.xhr.send('POST', 'userlogin.ashx', data);
	},
	
	submitted: function(ev)
	{
		if(!TOUM.agree.checked)
		{ 
			alert('You must read and accept the Live On The Go Terms Of Use Agreement before continue.'); 
			return false; 
		} 
		else
		{ 
			TOUM.submit(); 
			return true;
		};
	},
	
	cancel: function()
	{
		var data = 'action=tou&ticks=' + ticks + '&accepted=no';

		TOUM.xhr.doneHandler = function(){ TOUM.hide(); };
		TOUM.xhr.errorHandler = TOUM.error;
		TOUM.xhr.waitingHandler = TOUM.waiting;
		TOUM.xhr.send('POST', 'userlogin.ashx', data);
	},
	
	hide: function()
	{
		TOUM.ref.className = 'htou';
		showCover(false);
		window.location.href = TOUM.redirectURL;
	},
	
	showWithURL: function(aURL)
	{
		TOUM.create();
		TOUM.redirectURL = aURL;
		showCover(true);
		TOUM.ref.className = 'vtou';
		TOUM.load();
	},
	
	error: function(){ },
	waiting: function(){ }
	
}

/* updated terms of use end */






/* charity selection manager */

var CSM = {
	
	xhr: null,
	cbRef: null,
	rblRef: null,
	rblName: '',
	errors: ['switch to https', 'please Sign In'],
	
	init: function(cbID, rblID, rblName){
		CSM.cbRef = g_el(cbID);
		CSM.rblRef = g_el(rblID);
		CSM.rblName = rblName;
		
		if(!CSM.rblRef || !CSM.rblName) return;
		
		events.add(CSM.cbRef, 'click', CSM.update);
		events.add(CSM.rblRef, 'click', CSM.update);
	},
	
	update: function(){
		
		if(CSM.isDisabled() && !CSM.cbRef.checked) return;
		
		showCover(true);
	
		var ticks = (new Date()).valueOf();
		if(!CSM.xhr) CSM.xhr = new Ajax();
		CSM.xhr.doneHandler = CSM.ajaxLoadDone;
		CSM.xhr.errorHandler = CSM.ajaxError;
		CSM.xhr.waitingHandler = CSM.ajaxWaiting;
		CSM.xhr.send('GET', 'usercharity.ashx?ticks=' + ticks + CSM.getData(), null);
	},
	
	getData: function(){
		
		var res = '';
		res += '&isOn=' + (CSM.cbRef.checked ? '1' : '0');
		
		var items = CSM.rblRef.getElementsByTagName('INPUT');
		for(var i = 0; i < items.length; i++){
			if(items[i].name == CSM.rblName && items[i].checked){
				res += '&chID=' + items[i].value;
				break;
			}
		}
		
		return res;
	},
	
	updateData: function(isOn, chID){	// true, 1
		
		var items = CSM.rblRef.getElementsByTagName('INPUT');
		
		if(!isOn || chID == 0){
			CSM.cbRef.checked = false
			for(var i = 0; i < items.length; i++){
				if(items[i].name == CSM.rblName){
					items[i].disabled = true;
					items[i].checked = false;
				}
			}
			if(items.length > 0) items[0].checked = true;
		}
		else{
			CSM.cbRef.checked = true;
			for(var i = 0; i < items.length; i++){
				if(items[i].name == CSM.rblName){
					items[i].disabled = false;
					items[i].parentNode.disabled = false;
					if(items[i].parentNode.parentNode.parentNode.parentNode.parentNode.tagName.toLowerCase() == 'table')
						items[i].parentNode.parentNode.parentNode.parentNode.parentNode.disabled = false;
					items[i].checked = (chID == parseInt(items[i].value)) ? true : false;
				}
			}
		}
		
	},
	
	isDisabled: function(){
		
		var items = CSM.rblRef.getElementsByTagName('INPUT');
		for(var i = 0; i < items.length; i++){
			if(items[i].name == CSM.rblName){
				if(items[i].disabled) return true;
				break;
			}
		}
		return false;
	},
	
	ajaxLoadDone: function(text, xml){
		
		eval('var res = {' + text + '};');
		
		if(res.errorPos > -1){
			alert(CSM.errors[res.errorPos]);
		}
		else{
			CSM.updateData((res.isOn == 1 ? true : false), res.chID);
		}
		
		showCover(false);
	},
	
	ajaxError: function(status, errText){ },
	ajaxWaiting: function(){ }
}

/* charity selection manager end */



/* timezone datetime manager */

var DTM = {
	
	xhr: null,
	timeRef: null,
	dateRef: null,
	fromFileRef: null,
	errors: ['there is no Customer Data'],

	update: function(el, isFromFile){
		
		if(!DTM.isInputValid(el)) return;
		
		//showCover(true);
	
		var ticks = (new Date()).valueOf();
		if(!DTM.xhr) DTM.xhr = new Ajax();
		DTM.xhr.doneHandler = DTM.ajaxLoadDone;
		DTM.xhr.errorHandler = DTM.ajaxError;
		DTM.xhr.waitingHandler = DTM.ajaxWaiting;
		DTM.xhr.send('GET', 'timezonedatetime.ashx?ticks=' + ticks + '&address=' + ((el.value.trim().length == '') ? encodeURIComponent('Irvine, CA'): encodeURIComponent(el.value)), null);
	},
	
	updateData: function(res){
		
		var v1 = DTM.dateRef.value;
		DTM.dateRef.options.length = 0;
		for(var i = 0; i < res.dateTexts.length; i++){
			DTM.dateRef.options[i] = new Option(res.dateTexts[i], res.dateValues[i], false, ((v1 == res.dateValues[i]) ? true : false));
		}
		
		var v2 = DTM.timeRef.value;
		DTM.timeRef.options.length = 0;
		for(var i = 0; i < res.timeTexts.length; i++){
			DTM.timeRef.options[i] = new Option(res.timeTexts[i], res.timeValues[i], false, ((v2 == res.timeValues[i]) ? true : false));
		}
		
	},
	
	isInputValid: function(el){
		return true;
	},
	
	ajaxLoadDone: function(text, xml){
		
		eval('var res = {' + text + '};');
		
		if(res.errorPos >= 0) alert(DTM.errors[res.errorPos]);
		else DTM.updateData(res);
		
		//showCover(false);
	},
	
	ajaxError: function(status, errText){ },
	ajaxWaiting: function(){ }
}

/* timezone datetime manager end */


/* facebook share link */

function fbs_click() {
	var u=location.href;
	var t=document.title;
	window.open('http://www.facebook.com/sharer.php?u='+encodeURIComponent(u)+'&t='+encodeURIComponent(t),'sharer','toolbar=0,status=0,width=626,height=436');
	return false;
}



/* SIDE NAVIGATION BLOCK */

var NAV = {

	contentBlockRef: null,
	blockRefs: [],
	
	init: function(blockID)
	{
		NAV.contentBlockRef = g_el(blockID);
		var els = NAV.contentBlockRef.getElementsByTagName('DIV');
		for(var i = 0; i < els.length; i++)
		{
			if(els[i].className == 'item_on') { 
				els[i].currentBlock = true;
				events.add(els[i], 'mouseover', NAV.setOver );
				events.add(els[i], 'mouseout', NAV.setOut );
				NAV.blockRefs[NAV.blockRefs.length] = els[i];
			}
			else if(els[i].className == 'item_off') 
			{ 
				els[i].currentBlock = false;
				events.add(els[i], 'mouseover', NAV.setOver );
				events.add(els[i], 'mouseout', NAV.setOut );
				NAV.blockRefs[NAV.blockRefs.length] = els[i];
			}
		}
		els = null;
		
	},
	
	setOver: function(){
		this.className = 'item_on';
	},
	
	setOut: function(){
		this.className = this.currentBlock ? 'item_on' : 'item_off';
	}
	
}

/* SIDE NAVIGATION BLOCK end */


/* CORPORATE REQUEST FORM */

var CRF = {
	
	xhr: null,
	cntRef: null,
	btnSubmitRef: null,
	fieldNames: ['csCompany', 'csName', 'csTitle', 'csEmail', 'csEmail2', 'csPhone1', 'csPhone2', 'csPhone3', 'csFax1', 'csFax2', 'csFax3'],
	fieldRefs: [],
	messages: ['Company Name is required', 'Name is required', 'E-mail is required', 'Wrong Re-type E-mail', 'Telephone is required', 'Not valid Telephone', 'Not valid Fax'],
	
	show: function()
	{
		if(!CRF.cntRef)
		{
			CRF.cntRef = document.createElement('DIV');
			CRF.cntRef.className = 'hscorp';
			document.body.appendChild(CRF.cntRef);
		}
		CRF.load();
	},
	
	load: function()
	{
		showCover(true);
		
		var ticks = (new Date()).valueOf();
		
		if(!CRF.xhr) CRF.xhr = new Ajax();
		CRF.xhr.doneHandler = CRF.loadDone;
		CRF.xhr.errorHandler = CRF.error;
		CRF.xhr.waitingHandler = CRF.waiting;
		
		CRF.xhr.send('GET', 'hdl_corporatesignup.ashx?ticks=' + ticks, null);
	},
	
	loadDone: function(text, xml)
	{
		CRF.cntRef.innerHTML = text;
		CRF.cntRef.className = 'vscorp';
		
		var els = CRF.cntRef.getElementsByTagName('INPUT');
		for(var i = 0, l = els.length; i < l; i++)
		{
			CRF.fieldRefs[els[i].id] = els[i];
			
			if(els[i].id == 'csTitle') continue;
			
			if(els[i].id == 'csPhone2' || els[i].id == 'csPhone3') 
			{
				CRF.fieldRefs[els[i].id].errorMark = CRF.fieldRefs['csPhone1'].errorMark;
				continue;
			}

			if(els[i].id == 'csFax2' || els[i].id == 'csFax3') 
			{
				CRF.fieldRefs[els[i].id].errorMark = CRF.fieldRefs['csFax1'].errorMark;
				continue;
			}
			
			CRF.fieldRefs[els[i].id].errorMark = document.createElement('SPAN');
			CRF.fieldRefs[els[i].id].errorMark.className = 'noerror2';
			CRF.fieldRefs[els[i].id].errorMark.innerHTML = '*';
			CRF.fieldRefs[els[i].id].parentNode.appendChild(CRF.fieldRefs[els[i].id].errorMark);
		}
		
		events.add(CRF.fieldRefs['csPhone1'], 'keypress', function() { checkInteger(this); } );
		events.add(CRF.fieldRefs['csPhone2'], 'keypress', function() { checkInteger(this); } );
		events.add(CRF.fieldRefs['csPhone3'], 'keypress', function() { checkInteger(this); } );
		
		events.add(CRF.fieldRefs['csPhone1'], 'keyup', function(ev) { return phoneInput(ev, this, 3, CRF.fieldRefs['csPhone2']); } );
		events.add(CRF.fieldRefs['csPhone2'], 'keyup', function(ev) { return phoneInput(ev, this, 3, CRF.fieldRefs['csPhone3']); } );

		events.add(CRF.fieldRefs['csFax1'], 'keypress', function() { checkInteger(this); } );
		events.add(CRF.fieldRefs['csFax2'], 'keypress', function() { checkInteger(this); } );
		events.add(CRF.fieldRefs['csFax3'], 'keypress', function() { checkInteger(this); } );

		events.add(CRF.fieldRefs['csFax1'], 'keyup', function(ev) { return phoneInput(ev, this, 3, CRF.fieldRefs['csFax2']); } );
		events.add(CRF.fieldRefs['csFax2'], 'keyup', function(ev) { return phoneInput(ev, this, 3, CRF.fieldRefs['csFax3']); } );
		
		CRF.btnSubmitRef = g_el('csSubmit');
		events.add(CRF.btnSubmitRef, 'click', CRF.submit);
		
		CRF.setMessages();

		events.add(CRF.cntRef, 'keyup', function(ev){ if(ev.keyCode == 27) CRF.hide(); });	// esc
		events.add(CRF.cntRef, 'keyup', function(ev){ if(ev.keyCode == 13) CRF.submit(); });
		
		CRF.fieldRefs['csCompany'].focus();
		CRF.fieldRefs['csCompany'].focus();
		//CRF.testData();
	},
	
	setMessages: function()
	{
		CRF.fieldRefs['csCompany'].message = CRF.messages[0];
		CRF.fieldRefs['csName'].message = CRF.messages[1];
		CRF.fieldRefs['csEmail'].message = CRF.messages[2];
		CRF.fieldRefs['csEmail2'].message = CRF.messages[3];
		CRF.fieldRefs['csPhone1'].message = CRF.messages[4];
		CRF.fieldRefs['csFax1'].message = CRF.messages[5];
	},
	
	testData: function()
	{
		CRF.fieldRefs['csCompany'].value = 'companytest';
		CRF.fieldRefs['csName'].value = 'nametest';
		CRF.fieldRefs['csTitle'].value = 'titletest';
		CRF.fieldRefs['csEmail'].value = 'akhmadeev@gmail.com';
		CRF.fieldRefs['csEmail2'].value = 'akhmadeev@gmail.com';
		CRF.fieldRefs['csPhone1'].value = '111';
		CRF.fieldRefs['csPhone2'].value = '222';
		CRF.fieldRefs['csPhone3'].value = '3333';
		CRF.fieldRefs['csFax1'].value = '444';
		CRF.fieldRefs['csFax2'].value = '555';
		CRF.fieldRefs['csFax3'].value = '6666';
	},
	
	submit: function()
	{
		if(CRF.isValid().hasError()) return;
		
		var data = '';
		for(var i = 0; i < CRF.fieldNames.length; i++)
		{
			data += (data.length > 0 ? '&' : '') + CRF.fieldNames[i] + '=' + CRF.fieldRefs[CRF.fieldNames[i]].value.trim();
		}
		
		var ticks = (new Date()).valueOf();
		
		if(!CRF.xhr) CRF.xhr = new Ajax();
		CRF.xhr.doneHandler = CRF.submitDone;
		CRF.xhr.errorHandler = CRF.error;
		CRF.xhr.waitingHandler = CRF.waiting;
		
		CRF.xhr.send('POST', 'hdl_corporatesignup.ashx?ticks=' + ticks, data);
	},
	
	submitDone: function(text, xml)
	{
		var fe = new FormError(CRF.fieldRefs, CRF.fieldNames);
		eval('var errs = [' + text + '];');
		
		for(var i = 0; i < errs.length; i++)
		{
			fe.add(errs[i]);
		}
		
		if(!fe.hasError()) 
		{
			CRF.hide();
			alert('Thank you for your request. Our account manager will contact you within 48 hours.');
		}
	},
	
	isValid: function()
	{	
		var fe = new FormError(CRF.fieldRefs, CRF.fieldNames);
		
		if(CRF.fieldRefs['csCompany'].value.trim().length == 0) fe.add('csCompany');
		if(CRF.fieldRefs['csName'].value.trim().length == 0) fe.add('csName');
		if(CRF.fieldRefs['csEmail'].value.trim().length == 0 || !isEmail(CRF.fieldRefs['csEmail'].value.trim())) fe.add('csEmail');
		if(CRF.fieldRefs['csEmail2'].value.trim().length == 0 || CRF.fieldRefs['csEmail'].value.trim() != CRF.fieldRefs['csEmail2'].value.trim()) fe.add('csEmail2');
		
		var phone = CRF.fieldRefs['csPhone1'].value.trim() + CRF.fieldRefs['csPhone2'].value.trim() + CRF.fieldRefs['csPhone3'].value.trim();
		if(isNaN(new Number(phone)) || phone.length != 10) fe.add('csPhone1');
		
		var fax = CRF.fieldRefs['csFax1'].value.trim() + CRF.fieldRefs['csFax2'].value.trim() + CRF.fieldRefs['csFax3'].value.trim();
		if(fax.length != 0)
			if(isNaN(new Number(fax)) || fax.length != 10) fe.add('csFax1');
			
		return fe;
	},
	
	cancel: function()
	{
		CRF.hide();
	},
	
	hide: function()
	{
		CRF.cntRef.className = 'hscorp';
		showCover(false);
	}, 
	
	error: function() {	},
	waiting: function()	{	}

}

/* CORPORATE REQUEST FORM end */


function FormError(elRefs, elNames)
{
	this.elNames = elNames;
	this.elRefs = elRefs;
	this.elIDs = [];
	
	// hide error marks
	for(var i = 0; i < this.elNames.length; i++)
	{
		if(this.elRefs[this.elNames[i]] != null && this.elRefs[this.elNames[i]].errorMark)
		{
			this.elRefs[this.elNames[i]].errorMark.className = 'noerror2';
		}
	}
	
}

FormError.prototype.add = function(elID)
{
	this.elIDs[this.elIDs.length] = elID;
}

FormError.prototype.hasError = function()
{
	if(this.elIDs.length == 0) return false;
	
	// show error marks
	for(var i = 0; i < this.elIDs.length; i++)
	{
		if(this.elRefs[this.elIDs[i]] != null && this.elRefs[this.elIDs[i]].errorMark)
		{
			this.elRefs[this.elIDs[i]].errorMark.className = 'error2';
		}
	}
	
	// show message
	if(this.elRefs[this.elIDs].message) alert('* ' + this.elRefs[this.elIDs].message);
	
	// set focus
	this.elRefs[this.elIDs[0]].focus();
	
	return true;
}


/* Restaurant Partner Sign Up */

var RPS = {
	
	errorCnt: null,
	
	sameAsChanged: function(el)
	{
		if(!el.checked) 
		{
			var day = RPS.ophours.getDay(el.index);
			day.from.disabled = day.closed.checked;
			day.to.disabled = day.closed.checked;
			day.closed.disabled = false;
		}
		
		for(var i in RPS.ophours)
		{
			if(typeof RPS.ophours[i] == 'function') continue;
			if(RPS.ophours[i].index == 0) continue;
			
			if(RPS.ophours[i].sameas.checked)
			{
				var day1 = RPS.ophours.getDay(RPS.ophours[i].index - 1);
				var day2 = RPS.ophours[i];
				day2.from.value = day1.from.value;
				day2.to.value = day1.to.value;
				day2.closed.checked = day1.closed.checked;
				
				day2.from.disabled = day2.closed.checked;
				day2.to.disabled = day2.closed.checked;
				day2.closed.disabled = true;
			}
			
		}
	},

	closedChanged: function(el)
	{
		var day = RPS.ophours.getDay(el.index);
		day.from.disabled = day.closed.checked;
		day.to.disabled = day.closed.checked;
		RPS.sameAsChanged(RPS.ophours.tue.sameas);
	},

	hourChanged: function(el)
	{
		RPS.sameAsChanged(RPS.ophours.tue.sameas);
	},

	initStates: function(elid)
	{
		var st = g_el(elid);
		for(var i = 0; i < states.length; i++) { st.options[i] = new Option(states[i].abbr, states[i].abbr); }
		st.options[4].selected = true;
	},

	initFields: function()
	{
		RPS.loadMarks();
		
		for(var f in RPS.fields)
		{
			RPS.fields[f].field = $('#' + RPS.fields[f].field)[0];
			RPS.fields[f].field.fieldName = f;
			RPS.fields[f].field.autocomplete = "off";
			
			$(RPS.fields[f].field).bind('focus', function(ev){ $(this).removeClass(fieldClasses.none + ' ' + fieldClasses.valid + ' ' + fieldClasses.notValid).addClass(fieldClasses.current); } );
			$(RPS.fields[f].field).bind('blur',  
				function(ev)
				{ 
					RPS.updateFieldState(this, false);
				} 
			);
				
			$(RPS.fields[f].field).bind('keyup', 
				function(ev)
				{
					RPS.updateFieldState(this, true);
					
					if(ev.target.fieldName == 'phoneNumber' || ev.target.fieldName == 'ownerPhone' || ev.target.fieldName == 'faxNumber' || ev.target.fieldName == 'zip')
						return checkInteger(ev.target);
					
				} 
			);
			
			$(RPS.fields[f].field).bind('mousemove', 
				function(ev)
				{
					var isValid = RPS.isFieldValid(this.fieldName);
					if(isValid) 
					{
						$(RPS.errorCnt).css('display', 'none');
						return false;
					}
					
					if(RPS.fields[this.fieldName].fieldType && RPS.fields[this.fieldName].fieldType.errorText || RPS.fields[this.fieldName].errorText)
					{
						$(RPS.errorCnt).text((RPS.fields[this.fieldName].errorText || RPS.fields[this.fieldName].fieldType.errorText));
						$(RPS.errorCnt).css('display', 'block');
						$(RPS.errorCnt).css('top', (ev.pageY - 20));
						$(RPS.errorCnt).css('left', (ev.pageX + 10));
					}
					else $(RPS.errorCnt).css('display', 'none');
					
					return false;
				}
			);
			
			$(RPS.fields[f].field).bind('mouseout', 
				function(ev)
				{
					$(RPS.errorCnt).css('display', 'none');
					return false;
				}
			);

			RPS.fields[f].checkMark = $("<img src='./images/NewDesign/blank.gif' alt='' class='" + markClasses.checkMark + "' />").insertAfter($(RPS.fields[f].field))[0];
		}
		
	},
	
	loadMarks: function()
	{
		markUrl.valid.image = new Image();
		markUrl.valid.image.src = markUrl.valid.src;
		
		markUrl.notvalid.image = new Image();
		markUrl.notvalid.image.src = markUrl.notvalid.src;
		
		markUrl.blank.image = new Image();
		markUrl.blank.image.src = markUrl.blank.src;
	},
	
	
	isFieldValid: function(fieldName)
	{
		if(RPS.fields[fieldName].field.tagName.toUpperCase() == 'SELECT')
		{
			if(RPS.fields[fieldName].isRequired && RPS.fields[fieldName].field.selectedIndex <= 0) return false;
			return true;
		}
		
		
		if(RPS.fields[fieldName].isRequired && $.trim(RPS.fields[fieldName].field.value).length == 0)
		{
			return false;
		}
		else if($.trim(RPS.fields[fieldName].field.value).length > 0 && RPS.fields[fieldName].fieldType)
		{
			return $.trim(RPS.fields[fieldName].field.value).match(RPS.fields[fieldName].fieldType.expr);
		}
		return true;
	},
	
	isAllFieldsValid: function()
	{
		var badField = null;
		
		for(var f in RPS.fields)
		{
			if(!RPS.updateFieldState(RPS.fields[f].field, false))
				badField = (badField) ? badField : RPS.fields[f].field;
		}
		if(badField)
		{
			badField.focus();
			return false;
		}
		return true;
	},
	
	updateFieldState: function(field, isEditMode)
	{
		var isValid = RPS.isFieldValid(field.fieldName);
		if(isEditMode)
		{
			if(isValid)
			{
				$(field).removeClass(fieldClasses.none + ' ' + fieldClasses.valid + ' ' + fieldClasses.notValid).addClass(fieldClasses.current); 
				RPS.fields[field.fieldName].checkMark.src = markUrl.valid.src;
				RPS.fields[field.fieldName].checkMark.title = 'Valid';
			}
			else 
			{
				$(field).removeClass(fieldClasses.none + ' ' + fieldClasses.valid + ' ' + fieldClasses.notValid).addClass(fieldClasses.current);
				RPS.fields[field.fieldName].checkMark.src = markUrl.notvalid.src;
				RPS.fields[field.fieldName].checkMark.title = 'Not valid';
			}
		}
		else
		{
			if(isValid)
			{
				$(field).removeClass(fieldClasses.none + ' ' + fieldClasses.current + ' ' + fieldClasses.notValid).addClass(fieldClasses.valid);
				RPS.fields[field.fieldName].checkMark.src = markUrl.valid.src;
				RPS.fields[field.fieldName].checkMark.title = 'Valid';
			}
			else 
			{
				$(field).removeClass(fieldClasses.none + ' ' + fieldClasses.valid + ' ' + fieldClasses.current).addClass(fieldClasses.notValid);
				RPS.fields[field.fieldName].checkMark.src = markUrl.notvalid.src;
				RPS.fields[field.fieldName].checkMark.title = 'Not valid';
			}
		}
		
		return isValid;
	},
	
	initPage: function(stateID)
	{
		RPS.initStates(stateID);
		
		for(var i in RPS.ophours)
		{
			if(typeof RPS.ophours[i] == 'function') continue;
			
			RPS.ophours[i].from = g_el(RPS.ophours[i].from);
			RPS.ophours[i].to = g_el(RPS.ophours[i].to);
			RPS.ophours[i].closed = g_el(RPS.ophours[i].closed);
			RPS.ophours[i].closed.index = RPS.ophours[i].index;
			events.add(RPS.ophours[i].from, 'change', function(ev) { RPS.hourChanged(this); } );
			events.add(RPS.ophours[i].to, 'change', function(ev) { RPS.hourChanged(this); } );
			events.add(RPS.ophours[i].closed, 'click', function(ev) { RPS.closedChanged(this); } );
			
			if(RPS.ophours[i].sameas) 
			{
				RPS.ophours[i].sameas = g_el(RPS.ophours[i].sameas);
				RPS.ophours[i].sameas.index = RPS.ophours[i].index;
				events.add(RPS.ophours[i].sameas, 'click', function(ev) { RPS.sameAsChanged(this); } );
			}
		}
		
		$('.requiredmark').append('<span class="required2">*</span>');
		RPS.errorCnt = $('<div class="error_cnt" style="display:none;"></div>').appendTo(document.body);
		
		RPS.initFields();
		
		RPS.fields.ownerName.field.focus();
	}
	
}

/* Restaurant Partner Sign Up end */


/* FORM VALIDATION */

var fieldTypes = {
	email: { expr: /^(?:[a-zA-Z0-9_'^&/+-])+(?:\.(?:[a-zA-Z0-9_'^&/+-])+)*@(?:(?:\[?(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))\.){3}(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\]?)|(?:[a-zA-Z0-9-]+\.)+(?:[a-zA-Z]){2,}\.?)$/, errorText:'Please enter valid E-mail.' },
	zip: { expr: /^\d{5}$/, errorText: '* Please enter valid ZIP: xxxxx.' },
	state: { expr: /^[a-bA-B]{2}$/ },
	date: { expr: ''},
	time: { expr: ''},
	
	phone:  { expr: /^\d{10}$/, errorText: '* Please enter valid Phone Number: xxx.xxx.xxxx.' },
	phone1: { expr: /^\d{3}$/ }, 
	phone2: { expr: /^\d{3}$/ }, 
	phone3: { expr: /^\d{4}$/ },
	
	fax:  { expr: /^\d{10}$/, errorText: '* Please enter valid Phone Number: xxx.xxx.xxxx.' },
	fax1: { expr: /^\d{3}$/ }, 
	fax2: { expr: /^\d{3}$/ }, 
	fax3: { expr: /^\d{4}$/ },
	
	birthday:  { expr: /^\d{10}$/, errorText: '* Please enter valid birthday.' },
	birthday1: { expr: /^([1-9]|1[0-2])$/, errorText: '* Please enter valid Month.' },
	birthday2: { expr: /^(([1-9])|([0-2][1-9])|(30)|(31))$/, errorText: '* Please enter valid Day.' },
	birthday3: { expr: /^\d{4}$/, errorText: '* Please enter valid Year: xxxx.' }
}

var markClasses = {
	title: 'mark_title',
	checkMark: 'check_mark'
}

var fieldClasses = {
	none: 'fv_none',
	current: 'fv_current',
	valid: 'fv_valid',
	notValid: 'fv_notvalid'
}

var markUrl = {
	valid: { src:'./images/NewDesign/mark_valid.gif', image:null },
	notvalid: { src:'./images/NewDesign/mark_notvalid.gif', image:null },
	blank: { src:'./images/NewDesign/blank.gif', image:null },
	
	isLoaded: false,
	load: function()
	{
		if(markUrl.isLoaded) return;
		markUrl.valid.image = new Image();
		markUrl.valid.image.src = markUrl.valid.src;
		
		markUrl.notvalid.image = new Image();
		markUrl.notvalid.image.src = markUrl.notvalid.src;
		
		markUrl.blank.image = new Image();
		markUrl.blank.image.src = markUrl.blank.src;
		markUrl.isLoaded = true;
	}

}




// "form_text field-phone field-required"
// "form_text field-birthday field-required"
// "form_text field-zip field-required"


// FORMATTER
var formatter = {
	
	separatorDot: '<span class="field_sep_dot">.</span>',
	separatorSlash: '<span class="field_sep_slash">/</span>',
	
	phone: function(coll, el)
	{
		$(el).hide();	// hide base field
		
		// creat parts
		coll[el.id].part1 = $('<input type="text" maxlength="3" class="form_text phone1" style="width:30px;" tabindex="' + (el.tabIndex + 0) + '" />')[0];
		coll[el.id].part2 = $('<input type="text" maxlength="3" class="form_text phone2" style="width:30px;" tabindex="' + (el.tabIndex + 1) + '" />')[0];
		coll[el.id].part3 = $('<input type="text" maxlength="4" class="form_text phone3" style="width:40px;" tabindex="' + (el.tabIndex + 2) + '" />')[0];
		
		// bind event handlers
		$(coll[el.id].part1).bind('keypress', formatter.isDigit).bind('keyup', { coll: coll[el.id], from: 'part1', digits: 3, to: 'part2' }, formatter.autoTab);
		$(coll[el.id].part2).bind('keypress', formatter.isDigit).bind('keyup', { coll: coll[el.id], from: 'part2', digits: 3, to: 'part3' }, formatter.autoTab);
		$(coll[el.id].part3).bind('keypress', formatter.isDigit);
		
		coll[el.id].getPhone = function() { return coll[el.id].part1.value + coll[el.id].part2.value + coll[el.id].part3.value; };
		
		// insert before base field
		$(coll[el.id].part1).insertBefore(el);
		$(formatter.separatorDot).insertBefore(el);
		$(coll[el.id].part2).insertBefore(el);
		$(formatter.separatorDot).insertBefore(el);
		$(coll[el.id].part3).insertBefore(el);
	},
	
	birthday: function(coll, el)
	{
		$(el).hide();	// hide base field
		
		// creat parts
		coll[el.id].part1 = $('<input type="text" maxlength="2" class="form_text birthday1" style="width:20px;" tabindex="' + (el.tabIndex + 0) + '" />')[0];
		coll[el.id].part2 = $('<input type="text" maxlength="2" class="form_text birthday2" style="width:20px;" tabindex="' + (el.tabIndex + 1) + '" />')[0];
		coll[el.id].part3 = $('<input type="text" maxlength="4" class="form_text birthday3" style="width:40px;" tabindex="' + (el.tabIndex + 2) + '" />')[0];
		
		// bind event handlers
		$(coll[el.id].part1).bind('keypress', formatter.isDigit).bind('keyup', { coll: coll[el.id], from: 'part1', digits: 2, to: 'part2' }, formatter.autoTab);
		$(coll[el.id].part2).bind('keypress', formatter.isDigit).bind('keyup', { coll: coll[el.id], from: 'part2', digits: 2, to: 'part3' }, formatter.autoTab);
		$(coll[el.id].part3).bind('keypress', formatter.isDigit);
		
		coll[el.id].getBirthday = function() { 
			if(el.errorIndex != -1)
				return coll[el.id].part1.value + '-' + coll[el.id].part2.value + '-' + coll[el.id].part3.value; 
			else return '';
		};
		
		// insert before base field
		$(coll[el.id].part1).insertBefore(el);
		$(formatter.separatorSlash).insertBefore(el);
		$(coll[el.id].part2).insertBefore(el);
		$(formatter.separatorSlash).insertBefore(el);
		$(coll[el.id].part3).insertBefore(el);		
	},
	
	zip: function(coll, el)
	{
		$(coll[el.id]).bind('keypress', formatter.isDigit);
		el.style.width = '44px';
	},
	
	isDigit: function(ev)
	{
		if((ev.which < 48 || ev.which > 57) && !!ev.which) return false;
	},
	
	autoTab: function(ev)
	{
		var keyCode = (!!ev.which) ? ev.which : ev.keyCode;
		var filter  = (!!ev.which) ? [0,8,9] : [0,8,9,16,17,18,37,38,39,40,46];

		var contains = false;
		for(var i = 0, l = filter.length; i < l; i++) 
		{
			if(filter[i] == keyCode) 
			{
				contains = true;
				break;
			}
		}
		
		if(!contains && ev.data.coll[ev.data.from].value.length >= ev.data.digits)
		{
			ev.data.coll[ev.data.from].value = ev.data.coll[ev.data.from].value.slice(0, ev.data.digits);
			ev.data.coll[ev.data.to].focus();
		}
		return true;
	}

}

/* FORM VALIDATION end */


/* SUPPLY MANAGER */

var SPM = {
	
	url: 'hdl_supplies.ashx',
	ref: null,
	btn: null,
	idTempl: 'splitem_',
	isCorporate: 0,
	orderid: 0,	// corp with invites
	isEditMode: 0,
	
	load: function(btn, orderid, isEditMode)
	{
		SPM.btn = btn;
		SPM.orderid = orderid || 0;
		SPM.isEditMode = isEditMode ? 1 : 0;
		
		if(!SPM.ref) SPM.ref = $('<div class="hspl"></div>').appendTo(document.body)[0];
		SPM.checkCorporateMode();
		
		// update top
		var data = {iscorporate: SPM.isCorporate, orderid: SPM.orderid, iseditmode: SPM.isEditMode};
		var opt = {url:SPM.url + '?ticks=' + getGUID(), type:'GET', dataType:'html', complete:SPM.loadDone, data:data};
		$.ajax(opt);
		showCover(true);
	},
	
	loadDone: function(xhr, status)
	{
		if(status == 'success') $(SPM.ref).html(xhr.responseText).removeClass('hspl').addClass('vspl');
		else SPM.cancel();
	},
	
	submit: function()
	{
		var data = {};
		var autoAmount = 0;
		
		$('input:text,input:checkbox', SPM.ref).each(function(){
			if(this.id == 'splitem_auto') autoAmount = this.value * 1;
			
			if(this.type.toUpperCase() == 'CHECKBOX')
			{
				if(!this.checked) data[this.id] = autoAmount;
				else data[this.id] = 0;
			}
			else if(this.type.toUpperCase() == 'TEXT')
			{
				data[this.id] = this.value;
			}
		});
		data.iscorporate = SPM.isCorporate;
		data.orderid = SPM.orderid;
		
		var opt = {url:SPM.url, type:'POST', dataType:'html', complete:SPM.submitDone, data:data};
		$.ajax(opt);
	},
	
	submitDone: function(xhr, status)
	{
		if(status == 'success')
		{
			if(xhr.responseText == "1")
			{
				SPM.cancel();
				if(SPM.btn)
				{
					if(SPM.btn.tagName.toUpperCase() == 'A' && SPM.btn.href.indexOf('javascript:') > -1)
						eval(SPM.btn.href.replace('javascript:', ''));
					else
						$(SPM.btn).attr('onclick', null).click();
					return;
				}
				else
				{	// checkout page: reload
					SPM.reload();
				}
			}
		}
		
		SPM.cancel();
	},
	
	remove: function(supplyID)	// checkout page: delete functionality
	{
		SPM.checkCorporateMode();
		var opt = {url:SPM.url, type:'POST', dataType:'html', complete:SPM.reload, data:{supplyid:supplyID, iscorporate:SPM.isCorporate}};
		$.ajax(opt);
	},
	
	cancel: function()
	{
		$(SPM.ref).empty().removeClass('vspl').addClass('hspl');
		showCover(false);
	},
	
	reload: function()
	{
		SPM.cancel();
		window.location.href = window.location.href;
	},
	
	checkCorporateMode: function()
	{
		try { SPM.isCorporate = isForCorporate ? 1 : 0; } catch(e){}
	}
	
}

/* SUPPLY MANAGER end */


/* FAVORITE ORDER MANAGER */

var FOM = {
	
	url: 'hdl_favorites.ashx',
	ref: null,
	btn: null,
	error: null,
	orderId: 0,
	lastLink: null,
	
	load: function(orderId, lnk)
	{
		showCover(true);
		FOM.orderId = orderId || 0;
		if(!FOM.ref) FOM.ref = $('<div class="hfo"></div>').appendTo(document.body)[0];
		
		FOM.ref.style.top = 100 + get_scrollXY().top + 'px';
		
		FOM.lastLink = lnk;
		
		var data = { orderid: FOM.orderId, ticks: getGUID() };
		var opt = {url:FOM.url, type:'GET', dataType:'html', complete:FOM.loadDone, data:data};
		$.ajax(opt);
	},
	
	loadDone: function(xhr, status)
	{
		if(status != 'success') return;
		
		$(FOM.ref).html(xhr.responseText).removeClass('hfo').addClass('vfo');
		
		FOM.btnAdd = $('#foAdd', FOM.ref).bind('click', FOM.add)[0];
		FOM.btnCancel = $('#foCancel', FOM.ref).bind('click', FOM.cancel)[0];
		FOM.foName = $('#foName', FOM.ref)[0];
		FOM.error = $('#foError', FOM.ref).empty().hide()[0];
		
		$(FOM.ref).bind('keyup', function(ev) { if(ev.keyCode == 27) FOM.cancel(); else if(ev.keyCode == 13) FOM.add(); });
		
		FOM.foName.focus();
	},
	
	add: function(ev)
	{	// orderId = 0 or not specify means order from Basket
		if($.trim(FOM.foName.value).length == 0)
		{
			$(FOM.error).html('* Please enter Name.').show();
			return;
		}
		
		$(FOM.btnAdd).unbind('click');
		
		var data = { orderid: FOM.orderId, foname:FOM.foName.value };
		var opt = { url:FOM.url, type:'POST', data:data, complete:FOM.addDone };
		$.ajax(opt);
	},
	
	addDone: function(xhr, status)
	{
		if(status == 'error') 
		{
			FOM.cancel();
			return;
		}
		
		if(xhr.responseText == '0')
		{	// naming collision
			$(FOM.error).html('* You already has an order in Favorites with the same name.<br /> &nbsp;&nbsp;&nbsp;Please enter different name.').show();
			$(FOM.btnAdd).bind('click', FOM.add);
		}
		else if(xhr.responseText == '1')
		{	// this order is already in favorites
			$(FOM.error).html('* You already has this order in Favorites.').show();
			$(FOM.btnAdd).bind('click', FOM.add);
		}
		else 
		{	// successfill
			$(FOM.error).empty().hide();
			FOM.cancel();
			
			if(FOM.lastLink)
			{
				FOM.lastLink.style.visibility = 'hidden';
			}
			FOM.lastLink = null;
		}
	},
	
	remove: function(outCntId, orderId)
	{
		showCover(true);
		FOM.outCnt = $('#' + outCntId)[0];
		
		var data = { orderid: orderId, action:'remove' };
		var opt = { url:FOM.url, type:'POST', data:data, complete:FOM.removeDone };
		$.ajax(opt);
	},
	
	removeDone: function(xhr, status)
	{
		if(status == 'error') 
		{
			FOM.outCnt = null;
			showCover(false);
			return;
		}
		
		FOM.updateFavsCnt();
	},
	
	updateFavsCnt: function()
	{
		var data = { ticks: getGUID(), isfavsupdate:1 };
		var opt = { url:FOM.url, type:'GET', dataType:'html', data:data, complete:FOM.updateFavsCntDone };
		$.ajax(opt);
		
	},
	
	updateFavsCntDone: function(xhr, status)
	{
		if(status == 'success')
		{
			$('#moFavsCnt').html(xhr.responseText);
		}
		showCover(false);
	},
	
	updateHistoryCnt: function()
	{
		$hlinks = $('#moHistoryCnt a[title=Save]').css('visibility', 'visible');
		$flinks = $('#moFavsCnt a[title=Delete]');
		$flinks.each(function(){ $('#flsave_' + this.id.split('_')[1]).css('visibility', 'hidden'); });
	},
	
	cancel: function()
	{
		$(FOM.ref).empty().removeClass('vfo').addClass('hfo');
		FOM.orderId = 0;
		showCover(false);
	},
	
	toggle: function(el)
	{
		if(el.id == 'rolFavs')
		{
			$('#rohHistory').removeClass('on').addClass('off');
			$('#roHistoryCnt').hide();
			$('#rohFavs').removeClass('off').addClass('on');
			$('#roFavsCnt').show();
		}
		else 
		{
			$('#rohFavs').removeClass('on').addClass('off');
			$('#roFavsCnt').hide();
			$('#rohHistory').removeClass('off').addClass('on');
			$('#roHistoryCnt').show();
		}
	},
	
	toggle2: function(v)
	{
		if(v == 'v1')
		{
			FOM.updateHistoryCnt();
			
			$('#moHistoryCnt').show(); 
			$('#moFavsCnt').hide();
			
			$('#ohpCnt').removeClass('v2').addClass('v1');
		}
		else 
		{
			FOM.updateFavsCnt();
			
			$('#moHistoryCnt').hide(); 
			$('#moFavsCnt').show();
			
			$('#ohpCnt').removeClass('v1').addClass('v2');
			
		}
	}

}

/* FAVORITE ORDER MANAGER end */

function moveRefRestLine(counter)
{
	if(counter <= 6) 
	{
		var $tr1 = $('.rrswitch1:last');
		if($tr1.length > 0)
		{
			var $tr2 = $('.rrswitch2:last');
			$tr1.replaceWith($tr2);
		}
	}
}


function setBarOn()
{
	if(!window.XMLHttpRequest) 
	{
		if($('#contentarea').length == 0) return;
		
		$('#contentarea')[0].style.visibility = 'hidden';
		window.scrollTo(0, 0);
		$('html').removeClass('bar_off').addClass('bar_on');
		$('#contentarea')[0].scrollTop = fixIEScrollTop;
		$('#contentarea')[0].style.visibility = 'visible';
	}
	
}

function setBarOff()
{
	if(!window.XMLHttpRequest) 
	{
		if($('#contentarea').length == 0) return;
		
		fixIEScrollTop = $('#contentarea')[0].scrollTop;
		$('html').removeClass('bar_on').addClass('bar_off');
	}
}



function showVideoLayer()
{
	showCover(true);
	var $cnt = $('<div class="hhtv"></div>').appendTo(document.body);
	$('<a class="closeX" href="javascript:;" onclick="hideVideoLayer();" title="close"></a>').appendTo($cnt);
	$cnt.removeClass('hhtv').addClass('vhtv');
	$('<div style="margin:30px 10px;"><embed src="http://blip.tv/play/hN4W%2B9RDAA" type="application/x-shockwave-flash" width="754" height="558" allowscriptaccess="always" allowfullscreen="false"></embed></div>').appendTo($cnt);
}

function hideVideoLayer()
{
	$('.vhtv').remove();
	showCover(false);
}

