function createRequest()
{
	try {request = new XMLHttpRequest();}
    catch (trymicrosoft)
    {
       try{request = new ActiveXObject("Msxml2.XMLHTTP");}
       catch (othermicrosoft)
       {
    		try{request = new ActiveXObject("Microsoft.XMLHTTP");}
            catch (failed)
            {
            	request = null;
            }
        }
     }
     if (request == null)
        alert("Error creating request object!");
     else
	     return request;
}


function inputSupportsType(test) 
{
	var input = document.createElement('input');
  	input.setAttribute('type',test);
  	if (input.type == 'text') 
    	return false;
	else
		return true;
}


function pStriength(val)
{
	var sp_ = document.getElementById('sp_pass');
	sp_.innerHTML = '<img src="/img/icons/animated_loading.gif" />';
	var pword = val.value;
	var msg = document.getElementById('sp_pwordMsg');
	var hd_score = document.getElementById('hd_score');
	var tb_username = document.getElementById('tb_username').value;
	var score = 0;

	if (pword.length < 1)
	{
		emptyPrompts(msg,sp_);
		hd_score.value = score;
	}
	else if (pword.length < 6)
	{
		score = -1;
		msg.innerHTML = '<span class="err">Your password needs to be at least 6 characters long</span>';
		sp_.innerHTML = '<img src="/img/icons/sad.gif" alt="invalid password" />';
		hd_score.value = score;
	}
	else if (tb_username == val)
	{
		score = -2;
		msg.innerHTML = '<span class="err">Your password cannot be the same as your username</span>';
		sp_.innerHTML = '<img src="/img/icons/sad.gif" alt="invalid password" />';
		hd_score.value = score;
	}
 	else
	{
		score = pword.length;
		//---- if password has both lowercase and uppercase characters, give 1 point.
	    if ( ( pword.match(/[a-z]/) ) && ( pword.match(/[A-Z]/) ) )
			score = score + 3;

    	//---- if password has at least one number, give 1 point.
	    if (pword.match(/\d+/))
			score = score + 3;

    	//---- if password has at least one special character, give 1 point.
	    if (pword.match(/.[!,@,#,$,%,^,&,*,?,_,~,-,(,)]/) )
			score = score + 4;

		if (pword.length > 10)
			score ++;

		//alert(score)
		checkPassword(pword,score);
	}
}

function checkPassword(pword,score)
{
   	createRequest();
	if (request)
	{
		var url = 'password_ajax.aspx?score='+score+'&pword='+pword+'&dummy='+new Date().getTime();
		//alert(url)
   		request.onreadystatechange = function() {
		};
   	    request.open("GET", url, true);
	    request.onreadystatechange = returnStrength;
   		request.send(null);
    	return true;
	}
	else
   		return false;
}

function returnStrength()
{
	if (request.readyState == 4)
   	{
   		if (request.status == 200 || request.status == 304)
        {
			var score = unescape(request.responseText);
			var sp_ = document.getElementById('sp_pass');
			var msg = document.getElementById('sp_pwordMsg');
			var hd_score = document.getElementById('hd_score');

			//alert(score)
			if (score < 7)
			{
				msg.innerHTML = 'Very weak';
				sp_.innerHTML = '<img src="/img/icons/sad.gif" title="it is STRONGLY recommended that you create a stronger password" alt="invalid password" />';
			}
			else if (score >= 7 && score < 8)
			{
				msg.innerHTML = 'Weak';
				sp_.innerHTML = '<img src="/img/icons/Questionmark.gif" title="it is recommended that you create a stronger password" alt="questionalable" />';
			}
			else if (score >= 8 && score < 10)
			{
				msg.innerHTML = 'Medium strength';
				sp_.innerHTML = '<img src="/img/icons/tick.gif" alt="medium strength password" />';
			}
			else if (score >= 10 && score < 13)
			{
				msg.innerHTML = 'Strong';
				sp_.innerHTML = '<img src="/img/icons/tick.gif" alt="strong password" />';
			}
			else
			{
				msg.innerHTML = 'Very Strong';
				sp_.innerHTML = '<img src="/img/icons/smile.gif" alt="very strong password" />';
			}
			hd_score.value = score;
		}
	}
}

function userNameExists(val)
{
	var sp_ = document.getElementById('sp_uname');
	sp_.innerHTML = '<img src="/img/icons/animated_loading.gif" />';
	var msg = document.getElementById('sp_usernMsg');
	var username = val.value;

	if (username.length < 1)
		emptyPrompts(msg,sp_)
	else if (username.length < 5)
	{
		msg.innerHTML = '<span class="err">Your username needs to be at least 5 characters long</span>';
		sp_.innerHTML = '<img src="/img/icons/sad.gif" alt="invalid username" />';
	}
	else
		checkUsername(username);
}

function checkUsername(username)
{
   	createRequest();
	if (request)
	{
		var url = 'password_ajax.aspx?username='+username+'&dummy='+new Date().getTime();
		//alert(url)
   		request.onreadystatechange = function() {
		};
   	    request.open("GET", url, true);
	    request.onreadystatechange = returnUsername;
   		request.send(null);
    	return true;
	}
	else
   		return false;
}

function returnUsername()
{
	if (request.readyState == 4)
   	{
   		if (request.status == 200 || request.status == 304)
        {
			var score = unescape(request.responseText);
			var sp_ = document.getElementById('sp_uname');
			var msg = document.getElementById('sp_usernMsg');

			//alert(score.toLowerCase())
			if (score.toLowerCase() == 'true')
			{
				msg.innerHTML = '<span class="err">Looks like that username has been taked</span>';
				sp_.innerHTML = '<img src="/img/icons/cross.gif" alt="invalid username" />';
			}
			else
				Thnaks(msg,sp_);
		}
	}
}


function emailExists(val)
{
	var sp_ = document.getElementById('sp_email');
	sp_.innerHTML = '<img src="/img/icons/animated_loading.gif" />';
	var msg = document.getElementById('sp_emailMsg');
	var email = val.value;
	var re_alph = /^\w+([-+./']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;

	if (email.length < 1)
		emptyPrompts(msg,sp_);
	else if (! re_alph.test(email))
	{
		msg.innerHTML = '';
		sp_.innerHTML = '<img src="/img/icons/cross.gif" alt="invalid email address" />';
	}
	else
		checkEmailAddress(email);
}

function checkEmailAddress(email)
{
   	createRequest();
	if (request)
	{
		if (document.getElementById('hd_userid'))
		{
			var userid = document.getElementById('hd_userid').value;
			var url = 'password_ajax.aspx?userid='+userid+'&email='+email+'&dummy='+new Date().getTime();
		}
		else
			var url = 'password_ajax.aspx?email='+email+'&dummy='+new Date().getTime();
		//alert(url)
   		request.onreadystatechange = function() {
		};
   	    request.open("GET", url, true);
	    request.onreadystatechange = returnEamil;
   		request.send(null);
    	return true;
	}
	else
   		return false;
}

function returnEamil()
{
	if (request.readyState == 4)
   	{
   		if (request.status == 200 || request.status == 304)
        {
			var score = unescape(request.responseText);
			var sp_ = document.getElementById('sp_email');
			var msg = document.getElementById('sp_emailMsg');

			if (score.toLowerCase() == 'true')
			{
				msg.innerHTML = '<span class="err">Looks like this email address has alreaday been registered</span>';
				sp_.innerHTML = '<img src="/img/icons/cross.gif" alt="invalid username" />';
			}
			else
				Thnaks(msg,sp_);
		}
	}
}


function fname(val)
{
	var sp_ = document.getElementById('sp_fname');
	sp_.innerHTML = '<img src="/img/icons/animated_loading.gif" />';
	var msg = document.getElementById('sp_fnameMsg');
	var input = val.value;

	if (input.length < 1)
	{
		msg.innerHTML = '<span class="err">Please enter your firstname</span>';
		sp_.innerHTML = '<img src="/img/icons/warning.gif" alt="" />';
	}
	else
		Thnaks(msg,sp_);
}


function sname(val)
{
	var sp_ = document.getElementById('sp_sname');
	sp_.innerHTML = '<img src="/img/icons/animated_loading.gif" />';
	var msg = document.getElementById('sp_snameMsg');
	var input = val.value;

	if (input.length < 1)
	{
		msg.innerHTML = '<span class="err">Please enter your surname</span>';
		sp_.innerHTML = '<img src="/img/icons/warning.gif" alt="" />';
	}
	else
		Thnaks(msg,sp_);
}

function fullname(val)
{
	var sp_ = document.getElementById('sp_fullname');
	sp_.innerHTML = '<img src="/img/icons/animated_loading.gif" />';
	var msg = document.getElementById('sp_fullnameMsg');
	var input = val.value;

	if (input.length < 8)
	{
		msg.innerHTML = '<span class="err">You need to enter your fullname</span>';
		sp_.innerHTML = '<img src="/img/icons/warning.gif" alt="" />';
	}
	else
		Thnaks(msg,sp_);
}

function add1(val)
{
	var sp_ = document.getElementById('sp_add1');
	sp_.innerHTML = '<img src="/img/icons/animated_loading.gif" />';
	var msg = document.getElementById('sp_add1Msg');
	var input = val.value;

	//alert(input)
	if (input.length < 1)
		emptyPrompts(msg,sp_);
	else if (input.length < 10)
	{
		msg.innerHTML = '<span class="err">You need to enter your full address</span>';
		sp_.innerHTML = '<img src="/img/icons/warning.gif" alt="" />';
	}
	else
		Thnaks(msg,sp_);
}

function town(val)
{
	var sp_ = document.getElementById('sp_town');
	sp_.innerHTML = '<img src="/img/icons/animated_loading.gif" />';
	var msg = document.getElementById('sp_townMsg');
	var input = val.value;

	if (input.length < 1)
		emptyPrompts(msg,sp_);
	else if (input.length < 4)
	{
		msg.innerHTML = '<span class="err">You need to enter your full Town</span>';
		sp_.innerHTML = '<img src="/img/icons/warning.gif" alt="" />';
	}
	else
		Thnaks(msg,sp_);
}

function checkTel(val,compulsory)
{
	var sp_ = document.getElementById('sp_tel');
	if (document.getElementById('dd_country'))
		var country = document.getElementById('dd_country')[document.getElementById('dd_country').selectedIndex].value;
	else
		var country = 0
	//alert(compulsory)
	sp_.innerHTML = '<img src="/img/icons/animated_loading.gif" />';
	var msg = document.getElementById('sp_telMsg');
	var input = val.value;

	if (!compulsory)
	{
		if (input.length < 1)
			emptyPrompts(msg,sp_)
	}
	else if (input.length < 8)
	{
		msg.innerHTML = '<span class="err">Please enter your telephone number</span>';
		sp_.innerHTML = '<img src="/img/icons/warning.gif" alt="" />';
	}
	else if (country == 1) // UK
	{
		if (input.length < 11)
		{
			msg.innerHTML = '<span class="err">Please enter your telephone number includind STD (area) code</span>';
			sp_.innerHTML = '<img src="/img/icons/warning.gif" alt="" />';
		}
		else
			Thnaks(msg,sp_);
	}
	else
		Thnaks(msg,sp_);
}

function pcode(val)
{
	var sp_ = document.getElementById('sp_pcode');
	var country = document.getElementById('dd_country')[document.getElementById('dd_country').selectedIndex].value;
	//alert(country)
	sp_.innerHTML = '<img src="/img/icons/animated_loading.gif" />';
	var msg = document.getElementById('sp_pcodeMsg');
	var input = val.value;

	if (input.length < 1)
		emptyPrompts(msg,sp_);
	else if (input.length < 4)
	{
		msg.innerHTML = '<span class="err">Please enter your full postcode</span>';
		sp_.innerHTML = '<img src="/img/icons/warning.gif" alt="" />';
	}
	else if (country == 1) // UK
	{
		var re_alph = /^([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) {0,1}[0-9][A-Za-z]{2})$/;
		if (! re_alph.test(input))
		{
			msg.innerHTML = '<span class="err">invalid UK postcode</span>';
			sp_.innerHTML = '<img src="/img/icons/warning.gif" alt="" />';
		}
		else
			Thnaks(msg,sp_);
	}
	else
		Thnaks(msg,sp_);
}

function checkEmail(val,compulsory)
{
	var sp_ = document.getElementById('sp_email');
	sp_.innerHTML = '<img src="/img/icons/animated_loading.gif" />';
	var msg = document.getElementById('sp_emailMsg');
	var email = val.value;
	var re_alph = /^\w+([-+./']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;

	if (!compulsory)
	{
		if (email.length < 1)
			emptyPrompts(msg,sp_)
	}
	else if (! re_alph.test(email))
	{
		msg.innerHTML = '<span class="err">Looks like you have entered an invalid email address</span>';
		sp_.innerHTML = '<img src="/img/icons/warning.gif" alt="" />';
	}
	else
		Thnaks(msg,sp_);
}

function checkComment(val,compulsory)
{
	var sp_ = document.getElementById('sp_Comment');
	sp_.innerHTML = '<img src="/img/icons/animated_loading.gif" />';
	var msg = document.getElementById('sp_CommentMsg');
	var input = val.value;

	if (!compulsory)
	{
		if (input.length < 1)
			emptyPrompts(msg,sp_)
	}
	else if (input.length < 10)
	{
		msg.innerHTML = '<span class="err">Please enter your comment</span>';
		sp_.innerHTML = '<img src="/img/icons/warning.gif" alt="" />';
	}
	else
		Thnaks(msg,sp_);
}

function checkdate(val)
{
	var sp_ = document.getElementById('sp_date');
	sp_.innerHTML = '<img src="/img/icons/animated_loading.gif" />';
	var msg = document.getElementById('sp_dateMsg');
	var input = val.value;

	if (! validateDate(input))
	{
		msg.innerHTML = '<span class="err">Invalid Date Format</span>';
		sp_.innerHTML = '<img src="/img/icons/warning.gif" alt="" />';
	}
	else
		Thnaks(msg,sp_);
}

function validateDate(input)
{
    var validformat=/^\d{1,2}\/\d{1,2}\/\d{4}$/ //Basic check for format validity
    var returnval=false
    if (!validformat.test(input))
		returnval = false;
    else
	{
		//Detailed check for valid date ranges
    	var dayfield = input.split("/")[0]
	    var monthfield = input.split("/")[1]
	    var yearfield = input.split("/")[2]
	    var dayobj = new Date(yearfield, monthfield-1, dayfield)
    	if ((dayobj.getMonth()+1!=monthfield)||(dayobj.getDate()!=dayfield)||(dayobj.getFullYear()!=yearfield))
		    alert('Invalid Day, Month, or Year range detected. Please correct.')
	    else
        	returnval = true;
    }
   	return returnval
}


function checkGenerticText(val,sp_span,msg_span,errMess,minLength)
{
	var sp_ = document.getElementById(sp_span);
	sp_.innerHTML = '<img src="/img/icons/animated_loading.gif" />';
	var msg = document.getElementById(msg_span);
	var input = val.value;

	if (input.length < minLength && input.length > 0)
	{
		msg.innerHTML = errMess;
		sp_.innerHTML = '<img src="/img/icons/warning.gif" alt="'+errMess+'" />';
	}
	else if (input.length > 0)
		Thnaks(msg,sp_);
	else
		sp_.innerHTML='';
}

function combo(val,notset)
{
	var sp_ = document.getElementById('sp_tot');
	sp_.innerHTML = '<img src="/img/icons/animated_loading.gif" />';
	var msg = document.getElementById('sp_totMsg');
	var input = val[val.selectedIndex].value;
	if (input == notset)
	{
		msg.innerHTML = errMess;
		sp_.innerHTML = '<img src="/img/icons/warning.gif" alt="'+errMess+'" />';
	}
	else
		Thnaks(msg,sp_);
}


function ccCardNo(val)
{
	var sp_ = document.getElementById('sp_cardNo');
	sp_.innerHTML = '<img src="/img/icons/animated_loading.gif" />';
	var msg = document.getElementById('sp_cardNoMsg');
	var email = val.value;
	var re_alph = /^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/;

	if (email.length < 1)
		emptyPrompts(msg,sp_)
	else if (! re_alph.test(email))
	{
		msg.innerHTML = '<span class="err">Looks like you have entered an invalid card number</span>';
		sp_.innerHTML = '<img src="/img/icons/warning.gif" alt="" />';
	}
	else
		Thnaks(msg,sp_);
}

function ccFullname(val)
{
	var sp_ = document.getElementById('sp_cardFullname');
	sp_.innerHTML = '<img src="/img/icons/animated_loading.gif" />';
	var msg = document.getElementById('sp_cardFullnameMsg');
	var input = val.value;

	if (input.length < 8)
	{
		msg.innerHTML = '<span class="err">You need to enter the name as it apears on your card</span>';
		sp_.innerHTML = '<img src="/img/icons/warning.gif" alt="" />';
	}
	else
		Thnaks(msg,sp_);
}

function ccsv2(val)
{
	var sp_ = document.getElementById('sp_cv2');
	sp_.innerHTML = '<img src="/img/icons/animated_loading.gif" />';
	var msg = document.getElementById('sp_cv2Msg');
	var input = val.value;

	if (input.length < 3)
	{
		msg.innerHTML = '<span class="err">You need to enter your 3 digit CV2 number</span>';
		sp_.innerHTML = '<img src="/img/icons/warning.gif" alt="" />';
	}
	else if (!IsNumeric(input))
	{
			msg.innerHTML = '<span class="err">invalid CV number</span>';
			sp_.innerHTML = '<img src="/img/icons/cross.gif" alt="invalid CV2 number" />';
	}
	else
		Thnaks(msg,sp_);

}

function emptyPrompts(msg,sp_)
{
	msg.innerHTML = '';
	sp_.innerHTML = '';
}

function Thnaks(msg,sp_)
{
	msg.innerHTML = '';
	sp_.innerHTML = '<img src="/img/icons/tick.gif" alt="done" />';
}

function IsNumeric(sText)
{
   var ValidChars = "0123456789.";
   var IsNumber=true;
   var Char;

 	for (i = 0; i < sText.length && IsNumber == true; i++)
   	{
   		Char = sText.charAt(i);
      	if (ValidChars.indexOf(Char) == -1)
			IsNumber = false;
	   return IsNumber;
   }
}

