// JavaScript Document
var showExtraDetails = false;

function ToggleVis(ElementToToggle){
	// Switched the display of the given named element on or off
	if(document.getElementById(ElementToToggle).style.display == 'none'){
		document.getElementById(ElementToToggle).style.display = '';
		showExtraDetails = true;
		return;
	}else{
		document.getElementById(ElementToToggle).style.display = 'none';
		showExtraDetails = false;
		return
	}
}

// Image swaps
function SwapSource(imgName,imgSrc){
	document.getElementById(imgName).src = imgSrc;
}

// Style swaps
function SwapStyle(objName, className) {  
	 document.getElementById(objName).className = className;
} 


// Checks the Contact form on the client side
function checkQuickContact(){
	var errors = false;
	var errmsg = '';
	
	// Reg Expressions
	var nameRegexp = new RegExp(/^([\w ]+)$/);
	var emailRegexp = new RegExp(/^([\w]+)(.[\w]+)*@([\w]+)(.[\w]{2,3}){1,2}$/);
	var captchaRegexp = new RegExp(/^([0-9]+)$/);
									   
	// Strings that we will perform the Reg Expression on
	var fnamevalue = new String(document.getElementById('contactname').value);
	var emailvalue = new String(document.getElementById('contactemail').value);
	var captchavalue = new String(document.getElementById('verifycaptcha').value);
	
	// Check the values
	if(document.getElementById('contactname').value === ''){
		errors = true;
		errmsg = errmsg +  "Sorry, but you must enter your full name to contact us.<br />";
	}else{	
		RegExAnswer = nameRegexp.test(fnamevalue);
		if(!RegExAnswer){
			errors = true;
			errmsg = errmsg +  "Sorry, your name appears to contain invalid characters.<br />";
		}
	}   
	
	if(document.getElementById('contactemail').value === ''){
		errors = true;
		errmsg = errmsg +  "Sorry, but you must enter your email address to contact us.<br />";
	}else{
		RegExAnswer = emailRegexp.test(emailvalue);
		if(!RegExAnswer){
			errors = true;
			errmsg = errmsg +  "Sorry, but your email address is invalid.<br />";
		}
	}
	
	if(document.getElementById('verifycaptcha').value === ''){
		errors = true;
		errmsg = errmsg +  "Sorry, but you must enter the captacha verification number to contact us.<br />";
	}else{
		RegExAnswer = captchaRegexp.test(captchavalue);
		if(!RegExAnswer){
			errors = true;
			errmsg = errmsg + "Sorry, but the captcha field can only contain numbers.<br />";
		}
	}
	
	if(errors){
		document.getElementById('errormsg').innerHTML = errmsg;
		document.getElementById('errors').style.display = 'block';
		errmsg = '';
		return false;
	}else{
		return true;
	}
}

// checks the registration form on the client side
function checkQuickReg(){
	var errors = false;
	var errmsg = '';
	
	// Reg Expressions
	var nameRegexp = new RegExp(/^([a-zA-Z]+)$/);
	var emailRegexp = new RegExp(/^([\w]+)(.[\w]+)*@([\w]+)(.[\w]{2,3}){1,2}$/);
	var captchaRegexp = new RegExp(/^([0-9]+)$/);
	
	// Strings that we will perform the Reg Expression on
	var fnamevalue = new String(document.getElementById('fname').value);
	var lnamevalue = new String(document.getElementById('lname').value);
	var emailvalue = new String(document.getElementById('emailaddress').value);
	var captchavalue = new String(document.getElementById('verifycaptcha').value);
	
	// Check the values
	if(document.getElementById('fname').value === ''){
		errors = true;
		errmsg = errmsg +  "Sorry, but you must enter your First name to register.<br />";
	}else{	
		RegExAnswer = nameRegexp.test(fnamevalue);
		if(!RegExAnswer){
			errors = true;
			errmsg = errmsg +  "Sorry, your First name appears to contain invalid characters.<br />";
		}
	}   
	   
	if(document.getElementById('lname').value === ''){
		errors = true;
		errmsg = errmsg +  "Sorry, but you must enter your Last name to register.<br />";
	}else{
		RegExAnswer = nameRegexp.test(lnamevalue);
		if(!RegExAnswer){
			errors = true;
			errmsg = errmsg +  "Sorry, but you Last name appears to contain invalid characters.<br />";
		}
	}
	
	if(document.getElementById('emailaddress').value === ''){
		errors = true;
		errmsg = errmsg +  "Sorry, but you must enter you Email address to register.<br />";
	}else{
		RegExAnswer = emailRegexp.test(emailvalue);
		if(!RegExAnswer){
			errors = true;
			errmsg = errmsg +  "Sorry, but your Email address is invalid.<br />";
		}
	}

	if(document.getElementById('verifycaptcha').value === ''){
		errors = true;
		errmsg = errmsg +  "Sorry, but you must enter the captacha verification number to contact us.<br />";
	}else{
		RegExAnswer = captchaRegexp.test(captchavalue);
		if(!RegExAnswer){
			errors = true;
			errmsg = errmsg + "Sorry, but the captcha field can only contain numbers.<br />";
		}
	}
	
	// If the Extra Details fields have been activated...
	if(showExtraDetails){
		
		// Reg Expressions
		var telRegexp  = new RegExp(/(((\+44)? ?(\(0\))? ?)|(0))( ?[0-9]{3,4}){3}/);
		var postRegexp = new RegExp(/^[a-zA-Z]{1,2}[0-9][0-9A-Za-z]{0,1} {0,1}[0-9][A-Za-z]{2}$/);
		var webRegexp  = new RegExp(/^(?:http:\/\/)?(?:[\w-]+\.)+[a-z]{2,6}$/);
		
		
		// Strings that we will perform the Reg Expression on
		var cityvalue 		= new String(document.getElementById('city').value);
		var postcodevalue 	= new String(document.getElementById('postcode').value);
		var telephonevalue 	= new String(document.getElementById('telephone').value);
		var faxvalue		= new String(document.getElementById('fax').value);
		var webvalue		= new String(document.getElementById('web').value);
		
		// Now we check the details if they have been entered
		if(postcodevalue != ''){
			RegExAnswer = postRegexp.test(postcodevalue);
			if(!RegExAnswer){
				errors = true;
				errmsg = errmsg + "Sorry, but your postcode is not a valid UK post code.<br />";
			}
		}

		if(telephonevalue != ''){
			RegExAnswer = telRegexp.test(telephonevalue);
			if(!RegExAnswer){
				errors = true;
				errmsg = errmsg + "Sorry, but your telephone number is not a valid UK phone number.<br />";
			}
		}

		if(faxvalue != ''){
			RegExAnswer = telRegexp.test(faxvalue);
			if(!RegExAnswer){
				errors = true;
				errmsg = errmsg + "Sorry, but your fax number is not a valid UK phone number.<br />";
			}
		}

		if(webvalue != ''){
			RegExAnswer = webRegexp.test(webvalue);
			if(!RegExAnswer){
				errors = true;
				errmsg = errmsg + "Sorry, but your website address is not a valid URL.<br />";
			}
		}
	}
	
	if(errors){
		document.getElementById('errormsg').innerHTML = errmsg;
		document.getElementById('errors').style.display = 'block';
		errmsg = '';
		return false;
	}else{
		return true;
	}
}

// Checks the user article submission form on the client side
function checkUserSubmission(){
	var errors = false;
	var errmsg = '';
	
	// Reg Expressions
	var emailRegexp 	= new RegExp(/^([\w]+)(.[\w]+)*@([\w]+)(.[\w]{2,3}){1,2}$/);
	var captchaRegexp	 = new RegExp(/^([0-9]+)$/);
		
	// Strings that we will perform the Reg Expression on
	var emailvalue = new String(document.getElementById('useremail').value);
	var captchavalue = new String(document.getElementById('verifycaptcha').value);
	
	// Check the values
	if(document.getElementById('username').value === ''){
		errors = true;
		errmsg = errmsg +  "Sorry, but you must enter your full name to submit an article to us.<br />";
	}   
	
	if(document.getElementById('useremail').value === ''){
		errors = true;
		errmsg = errmsg +  "Sorry, but you must enter your email address to submit an article to us.<br />";
	}else{
		RegExAnswer = emailRegexp.test(emailvalue);
		if(!RegExAnswer){
			errors = true;
			errmsg = errmsg +  "Sorry, but your email address is invalid.<br />";
		}
	}
	
	if(document.getElementById('verifycaptcha').value === ''){
		errors = true;
		errmsg = errmsg +  "Sorry, but you must enter the captacha verification number to contact us.<br />";
	}else{
		RegExAnswer = captchaRegexp.test(captchavalue);
		if(!RegExAnswer){
			errors = true;
			errmsg = errmsg + "Sorry, but the captcha field can only contain numbers.<br />";
		}
	}
	
	if(errors){
		document.getElementById('errormsg').innerHTML = errmsg;
		document.getElementById('errors').style.display = 'block';
		errmsg = '';
		return false;
	}else{
		return true;
	}
}

function checkLogin(){
	var errors = false;
	var errmsg = '';
	
	if(document.getElementById('username').value == ''){
		errors = true;
		errmsg = errmsg + "You must enter a username to login.<br />";
	}
	
	if(document.getElementById('password').value == ''){
		errors = true;
		errmsg = errmsg + "You must enter a password to login.<br />";
	}
	
	if(errors){
		document.getElementById('errormsg').innerHTML = errmsg;
		document.getElementById('errors').style.display = 'block';
		errmsg = '';
		return false;
	}else{
		return true;
	}
}

function checkClassified(){
	var errors = false;
	var errmsg = '';
	var captchaRegexp	 = new RegExp(/^([0-9]+)$/);

	if(document.getElementById('atitle').value == ''){
		errors = true;
		errmsg = errmsg + "Sorry, but you must enter a title for your advert.<br />";
	}
	if(document.getElementById('adesc').value == ''){
		errors = true;
		errmsg = errmsg + "Sorry, but you have to enter the description for your advert.<br />";
	}
	if(document.getElementById('verifycaptcha').value === ''){
		errors = true;
		errmsg = errmsg +  "Sorry, but you must enter the captacha verification number.<br />";
	}else{
		RegExAnswer = captchaRegexp.test(document.getElementById('verifycaptcha').value);
		if(!RegExAnswer){
			errors = true;
			errmsg = errmsg + "Sorry, but the captcha field can only contain numbers.<br />";
		}
	}
	
	if(errors){
		document.getElementById('errormsg').innerHTML = errmsg;
		document.getElementById('errors').style.display = 'block';
		errmsg = '';
		return false;
	}else{
		return true;
	}		
}

function checkProperty(){
	var errors = false;
	var errmsg = '';
	
	if(document.getElementById('ptype').value == ''){
		errors = true;
		errmsg = errmsg + "Sorry, but you must choose a property listing type.<br />"
	}
	if(document.getElementById('pletsale').value == ''){
		errors = true;
		errmsg = errmsg + "Sorry, but you must choose a property listing agreement type.<br />"
	}	
	if(document.getElementById('pletsale').value == ''){
		errors = true;
		errmsg = errmsg + "Sorry, but you must choose a property listing agreement type.<br />"
	}
	if(document.getElementById('ptitle').value == ''){
		errors = true;
		errmsg = errmsg + "Sorry, but you must a title for the property listing.<br />"
	}
	if(document.getElementById('pshortdesc').value == ''){
		errors = true;
		errmsg = errmsg + "Sorry, but you must a short description for the property listing.<br />"
	}	
	if(document.getElementById('pprice').value == ''){
		errors = true;
		errmsg = errmsg + "Sorry, but you must a price/rent amount pcm for the property listing.<br />"
	}	
	if(document.getElementById('expiry').value == ''){
		errors = true;
		errmsg = errmsg + "Sorry, but you must enter an expiry date for the property listing.<br />"
	}
	if(document.getElementById('ptelephone').value == ''){
		errors = true;
		errmsg = errmsg + "Sorry, but you must enter contact phone number for the property listing.<br />"
	}
	if(document.getElementById('verifycaptcha').value == ''){
		errors = true;
		errmsg = errmsg + "Sorry, but you must enter the captcha numbers as they appear in the box.<br />"
	}	
	if(errors){
		document.getElementById('errormsg').innerHTML = errmsg;
		document.getElementById('errors').style.display = 'block';
		errmsg = '';
		return false;
	}else{
		return true;
	}	
}

function checkTitleLength(){
	var titleStr = document.getElementById('atitle').value;

	titleLength = titleStr.length;
	
	if(titleLength > 128){
		alert("Character limit reached");
		return false;
	}else{
		var CharLeft = 128 - titleLength;
		document.getElementById('titlechars').innerHTML = CharLeft + '/128';
		return true;
	}
}

function checkDescLength(){
	var descStr = document.getElementById('adesc').value;

	descLength = descStr.length;
	
	if(descLength > 400){
		alert("Character limit reached");
		return false;
	}else{
		var CharLeft = 400 - descLength;
		document.getElementById('descchars').innerHTML = CharLeft + '/400';
		return true;
	}
}

function checkCharsLeft(objName, charLimit, outputTarget){
// for keypress event: 
// return checkCharsLeft(ElementToCheck, CharacterLimit, ElementToDisplayOutput)
	if(!objName || !charLimit || !outputTarget){
		alert("function checkCharsLeft requires a valid element ID, character limit and output target element ID");
		return false;
	}
	
	var descStr = document.getElementById(objName).value;
	descLength = descStr.length;
	if(descLength > charLimit){
		alert("Character limit reached");
		return false;
	}else{
		var CharLeft = charLimit - descLength;
		document.getElementById(outputTarget).innerHTML = CharLeft + '/' + charLimit;
		return true;
	}	
}

function validateField(fieldName,validateType){
	if(!fieldName){
		alert("You must enter a field name to validate");
		return false;
	}
	
	if(!validateType){
		alert("you must enter a validation type to match against this element: " + fieldName);
		return false;
	}
	
	if(!document.getElementById(fieldName)){
		alert("the element: " + fieldName + " does not exist in this page.");
		return false;
	}
	
	// Setup Error message space in the DOM
	var msg = ''
	var msgBox = document.createElement('span')
	var msgID = fieldName + '_msg';
	msgBox.setAttribute('id',msgID);	
	
	var highlightStyle = 'display: block; color: #FF0000;';
	var isRequired = (isRequired == null) ? "false" : isRequired;
	var field = document.getElementById(fieldName)
	var pattern
	var RegEx
	
	switch(validateType){
		case 'name' :
			pattern = /^[a-zA-Z''-'\s]{1,40}$/;
		break;
		case 'telephone' :
			pattern = /(((\+44)? ?(\(0\))? ?)|(0))( ?[0-9]{3,4}){3}/;
		break;
		case 'email' :
			pattern = /^([\w]+)(.[\w]+)*@([\w]+)(.[\w]{2,3}){1,2}$/;
		break;
		case 'url' :
			pattern = /^(?:http:\/\/)?(?:[\w-]+\.)+[a-z]{2,6}$/;
		break;
		case 'postcode' :
			pattern = /^[a-zA-Z]{1,2}[0-9][0-9A-Za-z]{0,1} {0,1}[0-9][A-Za-z]{2}$/;
		break;
		case 'textonly' :
			pattern = /^[a-zA-Z]$/;
		break;
		case 'numbersonly' :
			pattern = /^[0-9]$/
		break;
		case 'creditcard' :
			pattern = /^((4\d{3})|(5[1-5]\d{2}))[ -]?(\d{4}[ -]?){3}$|^(3[4,7]\d{2})[ -]?\d{6}[ -]?\d{5}$/
		break;
		case 'date' :
			pattern = /^\d{1,2}\/\-\d{1,2}\/\-\d{4}$/
		break;
		case 'password' : // minimum 2 different characters & 2 different digits
			pattern = /^(?=.*[a-zA-Z].*[a-zA-Z])(?=.*\d.*\d)[a-zA-Z0-9]{4,20}$/
		break;
	}

	RegEx = new RegExp(pattern);
	fieldValue = new String(field.value)
	var answer = RegEx.test(fieldValue);
	
	if(!answer){
		if(!document.getElementById(msgID)){
			msgBox.setAttribute('id',msgID);
			if(msgBox.style.setAttribute){ 
				msgBox.style.setAttribute("cssText", highlightStyle); 
			}else{ 
				msgBox.setAttribute("style", highlightStyle);
			}
			msg = "This field has invalid data."
			msgBox.innerHTML = msg;
			field.parentNode.insertBefore(msgBox, field);
		}
	}else{
		if(removeSpan = document.getElementById(msgID)){
			removeSpan.parentNode.removeChild(removeSpan);
		}
	}
}

function validateForm(formName,requiredElements){
	// for onsubmit event or submit button onclick event
	// FUNCTION USAGE:
	// javascript: return validateForm('MyForm','fieldname1,fieldname2,fieldname3');
	
	if(!formName){
		alert("you must enter a form ID to check for required elements");
		return false;
	}
	
	if(!requiredElements){
		alert("you must enter a list of elements to check that are in the form: " + formName);
		return false;
	}
	
	var highlightStyle = 'display: block; color: #FF0000;';
	var errors = false;
	var elementsArray = requiredElements.split(',');
	// alert(elementsArray);
	for( var fieldname, i = 0; fieldname = elementsArray[i]; i++){
		if(!document.getElementById(fieldname)){
			alert("you are trying to validate a field that does not exist: " + formName + '.' + fieldname);
			return false;
		}
		field = document.getElementById(fieldname);
		if(field.value == ''){
			errors = true;
			// Setup Error message space in the DOM
			var msg = ''
			var msgBox = document.createElement('span')
			var msgID = fieldname + '_msg';
			if(!document.getElementById(msgID)){
				msgBox.setAttribute('id',msgID);
				if(msgBox.style.setAttribute){ 
					msgBox.style.setAttribute("cssText", highlightStyle); 
				}else{ 
					msgBox.setAttribute("style", highlightStyle);
				}
				//msgBox.setAttribute('class','required_msg_class');
				//msgBox.setAttribute('className','required_msg_class');
				msg = "This is a required field."
				msgBox.innerHTML = msg;
				field.parentNode.insertBefore(msgBox, field);
			}
		}
	} 
	
	if(errors){
		return false;
	}else{
		return true;
	}
}