// Javascript Rules

var moorules = {
	'div#cp-bottom' : function(element) {
		// See if Control Panel is rendered or die
		cpb = $('cp-bottom');
		cpt = $('cp-top');
		if (!cpb || !cpt) { return; };
		cpt.innerHTML = cpb.innerHTML;
		cpt.style.display = 'block';
		cpb.style.display = 'none';
	},
	'div#control-panel' : function(element) {
		cpt = $('cp-top');
		element.anim = new Fx.Slide(element, {duration: 800, transition: Fx.Transitions.quintOut});
		element.anim.hide();
	},
	'div#masthead-cp' : function(element) {
		var xcControlPanel = $('control-panel');
		element.onclick = function()
		{
			xcControlPanel.anim.toggle(); 
			return false;
		}
	},
	'div#masthead-login' : function(element) {
		// See if Login is rendered or die
		if (!element) { return; };
		element.style.display = 'block';
		element.anim = new Fx.Style(element, 'opacity', {duration: 800});
		element.anim.hide();
	},
	'a#toggleLogin' : function(element) {
		var xcLogin = $('masthead-login');
		if (element.innerHTML != 'logout')
		{
			element.onclick = function()
			{
				if (xcLogin.style.opacity == 0)
					xcLogin.anim.start(0,1);
				else
					xcLogin.anim.start(1,0);
				return false;
			}
		}
	},
	'input#search' : function(element){
		var defaultValue = 'xc:Search';
		element.value = defaultValue;
		element.onblur = function() {
			 if (this.value == '')
			{
				this.value = defaultValue;
			}
		}
		element.onfocus = function() {
			if (this.value == defaultValue)
			{
				this.value = '';
			}
		}
	},
	'div#account' : function(element) {
		var accountInfo = $('accountInfo');
		var finalStep = $('finalStep');
		var Account_Type = $('Account_Type');
		var accountOverlay = $('acctOverlay');
		isError = new Object();
		paymentInfo = false;
	},
	'select#Card_Expy_Month' : function(element) {
		isError['Card_Expy_Month'] = false;
		var selectYear = $('Card_Expy_Year');
		element.onchange = function()
		{
			var monthVal 	= element.options[element.selectedIndex].value;
			var yearVal 	= selectYear.options[selectYear.selectedIndex].value;
			var today 		= new Date();
			var expiry 		= new Date(yearVal, monthVal);
			var error 		= (today.getTime() > expiry.getTime()) ? true : false;
			if ( !error )
			{
				var elParent	= element.parentNode;
				var elError 	= element.previousSibling;
				if ( elError.className == 'formError' ) elParent.removeChild(elError);
				isError['Card_Expy_Month'] = false;
			}
			else
			{
				var elError 	= element.previousSibling;
				if ( elError.className != 'formError' ) 
				{
					var myError = document.createElement('strong');
					myError.className = 'formError';
					myError.innerHTML = 'Credit Card has Expired';
					element.parentNode.insertBefore(myError,element); 
				}
				else
				{
					elError.innerHTML = 'Credit Card has Expired';
				}
				isError['Card_Expy_Month'] = true;
			}
		}
	},
	'input.jsValidate' : function(element) {
		var inputType 		= validateFormatType(element.className);
		var initError 		= ( inputType == 'cvv' || inputType == 'creditcard' ) ? true : validateInput(element.value,inputType);
		initError			= ( !initError ) ? initError : true;
		isError[element.id] = initError;
		if ( ( $('acctOverlay').className == 'acctError' || $('acctOverlay').className == 'acctErrorDB' || $('acctOverlay').className == 'acctErrorCC' ) 
			 && element.previousSibling.className != 'formError' ) isError[element.id] = false;
		element.onblur = function()
		{
			var inputType 	= validateFormatType(element.className);
			var error 		= validateInput(element.value,inputType);
			if ( !error )
			{
				var elParent	= element.parentNode;
				var elError 	= element.previousSibling;
				if ( elError.className == 'formError' ) elParent.removeChild(elError);
				isError[element.id] = false;
			}
			else
			{
				var elError 	= element.previousSibling;
				if ( elError.className != 'formError' ) 
				{
					var myError = document.createElement('strong');
					myError.className = 'formError';
					myError.innerHTML = error;
					element.parentNode.insertBefore(myError,element); 
				}
				else
				{
					elError.innerHTML = error;
				}
				isError[element.id] = true;
			}
		}
	},
	'input#PasswordNew' : function(element) {
		element.onkeyup = function()
		{
			var testPass = testPassword(element.value);
			switch (testPass)
			{
				case 'Very Weak':
					element.style.backgroundColor = '#ffa0a0';
					break;
				case 'Weak':
					element.style.backgroundColor = '#f7f47f';
					break;
				case 'Mediocre':
					element.style.backgroundColor = '#f7f47f';
					break;
				case 'Strong':
					element.style.backgroundColor = '#96f77f';
					break;
				case 'Stronger':
					element.style.backgroundColor = '#96f77f';
					break;
				default:
					element.style.backgroundColor = '#ffffff';
			}
			if ( element.value == '' ) element.style.backgroundColor = '#ffffff';
		}
	},
	'input#PasswordNewConfirm' : function(element) {
		isError[element.id] = true;
		element.onblur = function()
		{
			var pass  = $('PasswordNew');
			var error = ( element.value != pass.value ) ? 'Passwords do not match' : false;
			if ( !error )
			{
				var elParent	= element.parentNode;
				var elError 	= element.previousSibling;
				if ( elError.className == 'formError' ) elParent.removeChild(elError);
				isError[element.id] = false;
			}
			else
			{
				var elError 	= element.previousSibling;
				if ( elError.className != 'formError' ) 
				{
					var myError = document.createElement('strong');
					myError.className = 'formError';
					myError.innerHTML = error;
					element.parentNode.insertBefore(myError,element);
				}
				else
				{
					elError.innerHTML = error;
				}
				isError[element.id] = true;
			}
		}
	},
	'#acctForms form' : function(element) {
		element.onsubmit = function() {
			var outArr = '';
			var formError = false;
			for ( keyVal in isError ) 
			{
				var validateThis = true;
				if ( $(keyVal).parentNode.parentNode.id != element.id ) validateThis = false;
				if ( validateThis && isError[keyVal] ) formError = true;
				outArr += keyVal+' = '+isError[keyVal]+' ['+validateThis+']\n';
			}
			if ( formError )
			{
				//alert(outArr);
				alert('There are errors or you have not completely filled out the submitted form, please correct and resubmit.');
				return false;
			}
			return true;
		}
	}
};
Behaviour.register(moorules);

function validateFormatType(clnm) {
	if ( clnm.match(/validateEmail/i) != null ) 	return 'email';
	if ( clnm.match(/validateUsername/i) != null ) 	return 'username';
	if ( clnm.match(/validatePassword/i) != null ) 	return 'password';
	if ( clnm.match(/validateBlank/i) != null ) 	return 'blank';
	if ( clnm.match(/validateZip/i) != null ) 		return 'zip';
	if ( clnm.match(/validateCCNumber/i) != null ) 	return 'creditcard';
	if ( clnm.match(/validateCVVNumber/i) != null ) return 'cvv';
	return false;
}

function validateInput(val,type) {
	// Check if left blank first
	var trimVal = val.replace(/^\s+|\s+$/g,"");
	if ( val == null || val.length == 0 || trimVal == '' ) return 'Required Field';
	// Check specific type
	switch (type)
	{
		case 'blank':
			if ( val == null || val.length == 0 || trimVal == '' ) return 'Required Field';
			break;
		case 'email':
			if ( !/\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.test(val) ) return 'Email Address Invalid';
			break;
		case 'username':
			if ( /\W/.test(val) || val.length > 14 ) return 'Invalid Username';
			var url = 'https://www.xtremecamera.com/inc/Ajax/Signup.ajax.php';
			var pars = 'action=checkUsername&value='+val;
			var myAjax = new Ajax(url+'?'+pars, 
							{
								method: 'get', 
								onComplete: function(responseText) {
									if ( !responseText )
									{
										var elParent	= $('User').parentNode;
										var elError 	= $('User').previousSibling;
										if ( elError.className == 'formError' ) elParent.removeChild(elError);
									}
									else
									{
										var elError 	= $('User').previousSibling;
										if ( elError.className != 'formError' ) 
										{
											var myError = document.createElement('strong');
											myError.className = 'formError';
											myError.innerHTML = responseText;
											$('User').parentNode.insertBefore(myError,$('User'));
										}
										else
										{
											elError.innerHTML = responseText;
										}
									}
								}
						 	}).request();
			break;
		case 'password':
			if ( /\s/.test(val) || val.length < 6 ) return 'Invalid Password';
			break;
		case 'zip':
			if ( !/^\d+$/.test(val) ) return 'Numbers Only';
			break;
		case 'creditcard':
			var type = cardType();
			if ( !/^\d+$/.test(val) ) return 'Numbers Only';
			switch (type)
			{
				case 'AMEX':
					if ( !/([34|37]{2})(\d{13})$/.test(val) ) return 'Invalid '+type+' Number';
					break;
				case 'VISA':
					if ( !/([4]{1})(\d{12,15})$/.test(val) ) return 'Invalid '+type+' Number';
					break;
				case 'MC':
					if ( !/([5]{1})(\d{15})$/.test(val) ) return 'Invalid '+type+' Number';
					break;
				case 'DISCOVER':
					if ( !/([6011]{4})(\d{12})$/.test(val) ) return 'Invalid '+type+' Number';
					break;
				default:
					return type+' is an invalid card';
					break;
			}

			if ( !/^\d+$/.test(val) ) return 'Numbers Only';
			break;
		case 'cvv':
			var type = cardType();
			if ( !/^\d+$/.test(val) ) return 'Numbers Only';
			switch (type)
			{
				case 'AMEX':
					if ( !/^\d{4}$/.test(val) ) return 'AMEX CVV is 4 digits';
					break;
				default:
					if ( !/^\d{3}$/.test(val) ) return type+' CVV is 3 digits';
					break;
			}
			break;
	}
	return false;
}

function cardType() {
	var radioLen = $('acctFormBilling').Card.length;
	var radioVal = false;
	for (i=0;i<radioLen;i++)
	{
		var thisRadio = $('acctFormBilling').Card[i];
		if ( thisRadio.checked ) radioVal = thisRadio.value;
	}
	return radioVal;
}

function processTimer(sec) {
	// if process running normally
	if (theTime != -1) {
		// loop if process time still under 3 seconds
		if (theTime < sec) {
			theTime++;
			$('Name_First').value = theTime;
			var timerTimeout = window.setTimeout('processTimer('+sec+')', 1000);
		} else {
			// timed out, process taken 3 seconds already
			theTime = 0;
			return false;
		}
	} else {
		theTime = -1;
		return true;
	}
}