function checkValid(frm)
{
	/* ---------------------------------------------------------- */
	ch1=frm.post_code.value.charAt(0);
	ch2=frm.post_code.value.charAt(frm.post_code.value.length-1);
	chk1="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

	ch1_mobile=frm.mobile.value.charAt(0);
	ch1_mobile+=frm.mobile.value.charAt(1);
	chk1_mobile="07";
	/* ---------------------------------------------------------- */

	if(Trim(frm.ntitle.value) == "0")
	{
		alert("Please Select TITLE");
		frm.ntitle.focus();
		return false;
	}
	if(Trim(frm.fname.value) == "")
	{
		alert("Please Enter FIRST NAME");
		frm.fname.focus();
		return false;
	}
	if(Trim(frm.lname.value) == "")
	{
		alert("Please Enter LAST NAME");
		frm.lname.focus();
		return false;
	}
	
	/* ---------------------------------------------- */
	myOptiong = -1;
	for (i=frm.gender.length-1; i > -1; i--) 
	{
		if (frm.gender[i].checked) 
		{
			myOptiong = i; i = -1;
		}	
	}
	if (myOptiong == -1) 
	{
			alert("Please Choose GENDER");
			return false;
	}
	/* ---------------------------------------------- */
	
	if(Trim(frm.house_number.value) == "")
	{
		alert("Please Enter HOUSE NUMBER");
		frm.house_number.focus();
		return false;
	}
	if(Trim(frm.street_name.value) == "")
	{
		alert("Please Enter STREET NAME");
		frm.street_name.focus();
		return false;
	}
	if(Trim(frm.city.value) == "")
	{
		alert("Please Enter CITY");
		frm.city.focus();
		return false;
	}

	/* ---------------------------------------------- */
	if (frm.post_code.value.length != 0)
	{
	if (frm.post_code.value.length<5) 
	{
		alert("POSTCODE must be 6 or 7 or 8 characters long");
		frm.post_code.focus();
		return false;
	}
	if (frm.post_code.value.length>8) 
	{
		alert("POSTCODE must not be more then 8 characters long");
		frm.post_code.focus();
		return false;
	}
	if (chk1.indexOf(ch1)==-1 || chk1.indexOf(ch2)==-1 )
	{
		alert("POSTCODE must start with a letter and end with a letter");
		frm.post_code.focus();
		return false;
		}
		
	 } 
	 else 
 	{
		 	alert("Please Enter POSTCODE");
			frm.post_code.focus();
			return false;
 	}	
	/* ---------------------------------------------- */
	/*
	if (isDate(frm.dob.value)==false){
		frm.dob.focus();
		return false;
	}
	*/
	if(Trim(frm.vDay.value) == "0")
	{
		alert("Please Select DAY");
		frm.vDay.focus();
		return false;
	}
	if(Trim(frm.vMonth.value) == "0")
	{
		alert("Please Select MONTH");
		frm.vMonth.focus();
		return false;
	}
	if(Trim(frm.vYear.value) == "0")
	{
		alert("Please Select YEAR");
		frm.vYear.focus();
		return false;
	}

	if(Trim(frm.telephone.value) == "")
	{
		alert("Please Enter TELEPHONE NUMBER");
		frm.telephone.focus();
		return false;
	}
	/* ---------------------------------------------- */
	/*
 	if(Trim(frm.mobile.value) != "")
	{
		if (chk1_mobile.indexOf(ch1_mobile)==-1)
		{
			alert("This is not a valid MOBILE number - MUST begin with 07");
			frm.mobile.focus();
			return false;
		}
	 } 
     */
	/* ---------------------------------------------- */
	
	/* ---------------------------------------------- */
	if(!isValidEmail(frm.email.value))
	{
		frm.email.select();
		return false;
	}
	if(!isValidEmail(frm.confirm_email.value))
	{
		frm.confirm_email.select();
		return false;
	}
	if(frm.email.value != frm.confirm_email.value){
		alert("EMAIL doesn't match with the CONFIRM EMAIL");
		frm.confirm_email.select();
		return false;
	}
	/* ---------------------------------------------- */
	myOption = -1;
	for (i=frm.daily_frequency.length-1; i > -1; i--) 
	{
		if (frm.daily_frequency[i].checked) 
		{
			myOption = i; i = -1;
		}	
	}
	if (myOption == -1) 
	{
			alert("HOW OFTEN DO YOU BUY THE TIMES NEWSPAPER ? MUST be answered. Can't leave blank");
			return false;
	}
	/* ---------------------------------------------- */
	myOption1 = -1;
	for (i=frm.saturday_frequency.length-1; i > -1; i--) 
	{
		if (frm.saturday_frequency[i].checked) 
		{
			myOption1 = i; i = -1;
		}	
	}
	if (myOption1 == -1) 
	{
			alert("HOW OFTEN DO YOU BUY THE TIMES ON SATURDAY ? MUST be answered. Can't leave blank");
			return false;
	}
	/* ---------------------------------------------- */
	myOption2 = -1;
	for (i=frm.sunday_frequency.length-1; i > -1; i--) 
	{
		if (frm.sunday_frequency[i].checked) 
		{
			myOption2 = i; i = -1;
		}	
	}
	if (myOption2 == -1) 
	{
			alert("HOW OFTEN DO YOU BUY THE SUNDAY TIMES ? MUST be answered. Can't leave blank");
			return false;
	}
	/* ---------------------------------------------- */
	if (frm.contact1.checked ||  frm.contact2.checked)
	{
		return true;
	}
	
	/*
	if(frm.offer_from_other.value == "0")
	{
		alert("Please Select Are you happy to receive such offers");
		frm.offer_from_other.focus();
		return false;
	}	
	*/
	/* ---------------------------------------------- */
	
		
	/* ---------------------------------------------- */
	if(!frm.chkTerms.checked)
	{
		alert("Please confirm you have read the Terms & Conditions");
		frm.chkTerms.select();
		return false;
	}
	/* ---------------------------------------------- */	
}

function validService(frm)
{
/*	if (frm.contact3.checked==true)
	{
		frm.contact1.disabled = true;
		frm.contact2.disabled = true;
	} else
	{
		frm.contact1.disabled = false;
		frm.contact2.disabled = false;
	}
	
	if (frm.contact1.checked==true || frm.contact2.checked==true) 
	{
		frm.contact3.disabled = true;
	}
	else
	{
		frm.contact3.disabled = false;
	}
*/	
}
/*  ----------------------------------------------------------------------*/
/*  ----------------------------------------------------------------------*/
function Trim(s) 
{
	return s.replace(/^\s+/g, '').replace(/\s+$/g, '');
}

function isValidEmail(emailStr) {
	var checkTLD=1;
	var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
	var emailPat=/^(.+)@(.+)$/;
	var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
	var validChars="\[^\\s" + specialChars + "\]";
	var quotedUser="(\"[^\"]*\")";
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom=validChars + '+';
	var word="(" + atom + "|" + quotedUser + ")";
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
	var matchArray=emailStr.match(emailPat);
	if (matchArray==null) {
		alert("Email address seems incorrect (check @ and .'s)");
		return false;
	}
	var user=matchArray[1];
	var domain=matchArray[2];

	for (i=0; i<user.length; i++) {
		if (user.charCodeAt(i)>127) {
			alert("Ths username contains invalid characters.");
			return false;
		}
	}
	for (i=0; i<domain.length; i++) {
		if (domain.charCodeAt(i)>127) {
			alert("Ths domain name contains invalid characters.");
			return false;
		}
	}
	if (user.match(userPat)==null) {
		alert("The username doesn't seem to be valid.");
		return false;
	}
	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null) {
		for (var i=1;i<=4;i++) {
			if (IPArray[i]>255) {
				alert("Destination IP address is invalid!");
				return false;
	   		}
		}
		return true;
	}
	var atomPat=new RegExp("^" + atom + "$");
	var domArr=domain.split(".");
	var len=domArr.length;
	for (i=0;i<len;i++) {
		if (domArr[i].search(atomPat)==-1) {
			alert("The domain name does not seem to be valid.");
			return false;
	   }	
	}
	if (len<2) {
		alert("This address is missing a hostname!");
		return false;
	}	
	return true;
}
/*  ----------------------------------------------------------------------*/
/*  ----------------------------------------------------------------------*/

/*  ----------------------------------------------------------------------*/
/* DOB CHECKING START*/ 
/*  ----------------------------------------------------------------------*/
function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   } 
   return this
}

function isDate(dtStr){

	var dtCh= "/";
	var minYear=1900;
	var maxYear=2100;

	var daysInMonth = DaysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strDay=dtStr.substring(0,pos1)
	var strMonth=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYr)
	if (pos1==-1 || pos2==-1){
		alert("The date format should be : dd/mm/yyyy")
		return false
	}
	if (strMonth.length<1 || month<1 || month>12){
		alert("Please enter a valid month")
		return false
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		alert("Please enter a valid day")
		return false
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear)
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		alert("Please enter a valid date")
		return false
	}
return true
}
/*  ----------------------------------------------------------------------*/
/* DOB CHECKING START*/ 
/*  ----------------------------------------------------------------------*/