////////////////////////////////////
function isAFloat(obj)
////////////////////////////////////
{
  var pString, message = "", decimal = 0;

  pString = obj.value;

  if (!pString.length > 0)
    return message;

  if(pString.indexOf(" ") > -1)
  {
    obj.select();
    //obj.focus ();
    message = "Spaces between characters are not required";
  }
  else
  {
    //the first digit was numeric, so check the rest
    for (var i=0; i<pString.length; i++)
    {
      if (pString.charAt(i) != "0"
        && pString.charAt(i) != "."
        && !parseFloat(pString.charAt(i)))
      {
        obj.select();
        //obj.focus ();
        message = "Please enter a numeric value.";
        break;
      }
      if (pString.charAt(i) == ".")
      {
        decimal++;
        if (decimal > 1)
        {
          obj.select();
          //obj.focus ();
          message = "Please enter a numeric value.";
          break;
        }
      }
    }
  }

  return message;
}

////////////////////////////////////
function isANumber(obj)
////////////////////////////////////
{
  var pString, message = "";

  pString = obj.value;

  if(!pString.length > 0)
    return message;

  if(pString.indexOf(" ") > -1)
  {
    obj.select();
    //obj.focus ();
    message = "Spaces between characters are not required";
  }
  else if ((pString.charAt(i) != "0")
    && (!parseFloat(pString)))
  {
    //the first digit wasn't numeric
    obj.select();
    //obj.focus ();
    message = "Please enter a numeric value.";
  }
  else
  {
    //the first digit was numeric, so check the rest
    for (var i=0; i<pString.length; i++)
    {
      if ((pString.charAt(i) != "0")
        && (!parseFloat(pString.charAt(i))))
      {
        obj.select();
        //obj.focus ();
        message = "Please enter a numeric value.";
        break;
      }
    }
  }

  return message;
}

////////////////////////////////////
// isPostCode function
// Checks Postcode is correct format
////////////////////////////////////
function isPostcode(obj)
{
	var postcodeexp = /^[a-z]{1,2}[0-9]{1,2}\s*\D{0,2}[0-9]{1,1}[a-z]{1,2}$/i;
	var objText=obj.value;
	var pString, message = "";

	if( objText.match(postcodeexp) || objText.length == 0)
	{
		objText=obj.value = objText=obj.value.toUpperCase();
	}
	else
	{
		obj.select();
        //obj.focus ();
		message = "Please enter a valid postcode\n";
	}
	return message;
}

///////////////////////////////////////////////////////
// isUKTelephoneNumber function
// Checks that telephone number is valid for the UK, ie. one of the following formats:
//
//  01234 987654
//  (01234) 123456
//  +44 1234 876543
//  020 12345678
//  (020) 12345678
//  +44 20 12345678
//
///////////////////////////////////////////////////////

function isUKTelephoneNumber(obj)
{
	var pString = obj.value;
	var message = "";
	var numCount = 0;

	if (pString.length <= 0)
		return message;

	if ((pString.charAt(0) != "0")
		&& (pString.charAt(0) != "+") 
		&& (pString.charAt(0) != " ") 
		&& (pString.charAt(0) != "(")
		//&& (pString.charAt(0) != ")") 
		//&& (pString.charAt(0) != "-"))
		//&& (!parseFloat(pString.charAt(0))
		) 
	{
		//the first digit wasn't valid
		message = "Please enter a valid UK telephone number \n" +
				"Acceptable formats include:\n" +
				"01234 987654\n" +
				"(01234) 123456\n" +
				"+44 1234 876543\n" +
				"020 12345678\n" +
				"(020) 12345678\n" +
				"+44 20 12345678\n";
	}
	else
	{
		if ((pString.charAt(0) == "0"))
			numCount++;

		//the first digit was valid, so check the rest
		for (var i=1; i<pString.length; i++)
		{
			if ((pString.charAt(i) != " ") 
				&& (pString.charAt(i) != "(") 
				&& (pString.charAt(i) != ")") 
				&& (pString.charAt(i) != "-"))
			{
				if (!parseInt(pString.charAt(i), 10) && pString.charAt(i) != "0")
				{
					message = "Please enter a valid telephone number";
					break;
				}
				else
				{
					numCount ++;
				}
			}
		}
		if (numCount < 11)
			message = "Please enter a valid telephone number complete with area code ";
	}

	return message;
}
///////////////////////////////////////////////////////
// isTelephoneInternational function
// Checks that telephone number is valid, ie. one of the following formats:
//
//  UK FORMATS:
//  01234 987654
//  (01234) 123456
//  +44 1234 876543
//  020 12345678
//  (020) 12345678
//  +44 20 12345678
//
//  AMERICAN FORMATS:
//  8184001908
//  818 400 1908
//  (818) 400 1908 - most websites will auto enter the telephone numbers in this format. 
//  818-400-1908 - or this format
//  [818][400][1908] 
//  18184001908
//  1 818 400 1908
//  1-818-400-1908
//
///////////////////////////////////////////////////////

function isTelephoneInternational(obj)
{
	var pString = obj.value;
	var message = "";
	var numCount = 0;
    var hereshow = "Please enter a valid telephone number \n" +
				    "Acceptable formats include:\n" +
				    "UK:\n" +
				    "01234987654\n" +
				    "01234 987654\n" +
				    "(01234) 123456\n" +
				    "+44 1234 876543\n" +
				    "020 12345678\n" +
				    "(020) 12345678\n" +
				    "+44 20 12345678\n" +
				    "\n" +
				    "AMERICA:\n" +
				    "8184001908\n" +
				    "[818][400][1908]\n" +
				    "(818) 400 1908\n" + 
				    "818-400-1908\n" + 
				    "18184001908\n" +
				    "1-818-400-1908";
				    
	if (pString.length <= 0)
		return message;

    // check first digit is ok ...
	if (  !(pString.charAt(0) >= "0" && pString.charAt(0) <= "9")
		&& (pString.charAt(0) != "+") 
		&& (pString.charAt(0) != " ") 
		&& (pString.charAt(0) != "(")
		&& (pString.charAt(0) != "[")
		) 
	{
		//the first digit wasn't valid
		message = hereshow;
	}
	else
	{
		if (pString.charAt(0) >= "0" && pString.charAt(0) <= "9")
			numCount++;

		//the first digit was valid, so check the rest
		for (var i=1; i<pString.length; i++)
		{
			if ((pString.charAt(i) != " ") 
				&& (pString.charAt(i) != "(") 
				&& (pString.charAt(i) != ")") 
				&& (pString.charAt(i) != "[") 
				&& (pString.charAt(i) != "]") 
				&& (pString.charAt(i) != "-")
				)
			{
				if (isNaN(pString.charAt(i)))
				{
					message = hereshow;
					break;
				}
				else
				{
					numCount ++;
				}
			}
		}

		if (numCount < 10 || numCount > 20)
			message = hereshow;
	}

	return message;
}

////////////////////////////////////////////////////
// isEmail function
// checks that E-mail address is in correct format
///////////////////////////////////////////////////
function isEmail(obj)
{
	var message = "";
	var emailexp = /^[a-z][a-z_0-9\.]+@[a-z_0-9\.]+\.[a-z]+$/i;
	var objText=obj.value;
	var reg01 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/;   // not valid
	var reg02 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/; // is valid

	if( (!reg01.test(objText) && reg02.test(objText)) || objText.length == 0)
	{
		message = "";
	}
	else
	{
		obj.select();
        //obj.focus ();
		message = "Please enter a valid email address\n";
	}

	return message;
}

////////////////////////////////////////////////////
function isAChar(obj)
////////////////////////////////////////////////////
{
	var pString, message = "";

	pString = obj.value;

	if(!pString.length > 0)
		return "";

	if (parseFloat(pString))
	{
		//the first digit was numeric
		obj.select();
        //obj.focus ();
		message = "Please enter a character only value for this field.";
	}
	else
	{
		//the first digit was char, so check the rest
		for (var i=0; i<pString.length; i++)
		{
			if ((pString.charAt(i) != "0")
				&& (parseFloat(pString.charAt(i))))
			{
				obj.select();
                //obj.focus ();
				message = "Please enter a character only value for this field.";
			}
		}
	}

	return message;
}

////////////////////////////////////////////////////
function isPassword(obj)
////////////////////////////////////////////////////
{
	return "";
}

////////////////////////////////////////////////////
function isVerified(obj)
////////////////////////////////////////////////////
{
	return "";
}

////////////////////////////////////////////////////
function checkPwd(obj1, obj2)
////////////////////////////////////////////////////
{
var pwdText = obj1.value;
var caps = "ABCDEFGHIJKLMNOPQRSTUVWX";
var nums = "0123456789";
var spec = "!\"£$%^&*()_+{}[]-=;:@\'#~?<>.,"
var foundCaps = false;
var foundNums = false;
var foundSpec = false;

//alert(obj2 != null);

    if (pwdText.length != 0)
    {
	    if (pwdText.length < 8)
        {
            alert("Password must be 8 or more characters long, have at least one capital letter, \none number and one special character (" + spec + ")");
            return false;
        }
        else
        {
            for (var x = 0; x < pwdText.length; x++)
            {
                if (caps.indexOf(pwdText.charAt(x), 0) >= 0 ) foundCaps = true;
                if (nums.indexOf(pwdText.charAt(x), 0) >= 0 ) foundNums = true;
                if (spec.indexOf(pwdText.charAt(x), 0) >= 0 ) foundSpec = true;
            }
//alert(foundCaps + " - " + foundNums + " - " + foundSpec);
            
            if (!foundCaps || !foundNums || !foundSpec)
            {
                alert("Password must be 8 or more characters long, have at least one capital letter, \none number and one special character (" + spec + ")");
                return false;
            }
            else
            {
                if (obj2 != null)
                {
	                if (obj1.value != obj2.value) 
	                {
		                alert("Password entries do not match");
		                obj2.select();
		                //obj2.focus ();
		                return false;
	                }
	                else
	                {
		                return true;
	                }
	            }
	        }
        }
    }
    else
    {
        // check part 1 of password is also empty:
        if (obj2 != null)
        {
            if (obj1.value != obj2.value) 
            {
	            alert("Password entries do not match");
	            obj2.select();
	            //obj2.focus ();
	            return false;
            }
            else
            {
	            return true;
            }
        }
        else
        {
            return true;
        }
    }
}

////////////////////////////////////////////////////
function validateField(obj, type, popupalert)
////////////////////////////////////////////////////
{
	var message = "";
//alert (type);
	switch (type)
	{
		case "chr":
			message = message + isAChar(obj);
			break;
		case "eml":       
			message = message + isEmail(obj);
			break;
		case "flt":
			message = message + isAFloat(obj);
			break;
		case "num":
			message = message + isANumber(obj);
			break;
		case "pcd":
			message = message + isPostcode(obj);
			break;
		case "phn":
			message = message + isUKTelephoneNumber(obj);
			break;
		case "ipn":
			message = message + isTelephoneInternational(obj);
			break;
		case "pwe":
			message = message + isPassword(obj);
			break;
		case "pwv":
			message = message + isVerified(obj);
			break;
		case "usn":
			message = message + isValidUSN(obj);
			break;
		case "reg":
			message = message + isRegUSN(obj);
			break;
		default :
			;
	}

	if (message != "")
	{
		popupalert ? alert (message): false;
        obj.select();
        obj.focus();
		return false;
	}
	else
	{
		return true;
	}
}

//////////////////////////////////////////////////////////////////////////
function isValidUSN(obj)
{
    var bStatus = "";
    
    obj.value = obj.value.toUpperCase();

    var mystring = obj.value;
    if (mystring == "") return "";
    
//var sProduct = obj.value.substr(0, 6);
//alert(sProduct);

    
	// RD5000
    if (obj.value.substr(0, 5) == '10/5K')
    {
		// Model
		var sModel = mystring.substr(5, 3);
		if (sModel == "WLI" || sModel == "WLM")
		{
			var sHyphen = mystring.substr(8,1);
			if (sHyphen == "-")
			{
				for (var i=9 ; i<mystring.length ; i++)
				{

					var cVal = mystring.substr(i, 1);
					if (cVal < '0' || cVal> '9')
					{
						//alert("Non integer character after \'-\'");
						bStatus = "Non integer character after \'-\' : " + cVal;
						break;
					}
				}
			}
			else
			{
				//alert("Non \'-\' character after RD5000 Model");
				bStatus = "Non \'-\' character after RD5000 Model";
			}
		}
		// Illegal RD7000 Model
		else
		{
			//alert("Illegal RD5000 Model\r\n{use WLI | WLM }");
			bStatus = "Illegal RD5000 Model\r\n{use WLI | WLM }";
		}
    }

	// RD7000+
    else if (obj.value.substr(0, 6) == '10/7K+')
    {
		// Model
		var sModel = mystring.substr(6, 2);
		if (sModel == "TL" || sModel == "PL" || sModel == "SL" || sModel == "DL")
		{
			var sHyphen = mystring.substr(8,1);
			if (sHyphen == "-")
			{
				for (var i=9 ; i<mystring.length ; i++)
				{

					var cVal = mystring.substr(i, 1);
					if (cVal < '0' || cVal> '9')
					{
						//alert("Non integer character after \'-\'");
						bStatus = "Non integer character after \'-\' : " + cVal;
						break;
					}
				}
			}
			else
			{
				//alert("Non \'-\' character after RD7000+ Model");
				bStatus = "Non \'-\' character after RD7000+ Model";
			}
		}
		// Illegal RD7000+ Model
		else
		{
			//alert("Illegal RD7000+ Model\r\n{use TL | PL | SL | DL }");
			bStatus = "Illegal RD7000+ Model\r\n{use TL | PL | SL | DL }";
		}
    }

	// RD7000
    else if (obj.value.substr(0, 5) == '10/7K')
    {
		// Model
		var sModel = mystring.substr(5, 2);
		if (sModel == "TL" || sModel == "PL" || sModel == "SL" || sModel == "DL")
		{
			var sHyphen = mystring.substr(7,1);
			if (sHyphen == "-")
			{
				for (var i=8 ; i<mystring.length ; i++)
				{

					var cVal = mystring.substr(i, 1);
					if (cVal < '0' || cVal> '9')
					{
						//alert("Non integer character after \'-\'");
						bStatus = "Non integer character after \'-\' : " + cVal;
						break;
					}
				}
			}
			else
			{
				//alert("Non \'-\' character after RD7000 Model");
				bStatus = "Non \'-\' character after RD7000 Model";
			}
		}
		// Illegal RD7000 Model
		else
		{
			//alert("Illegal RD7000 Model\r\n{use TL | PL | SL | DL }");
			bStatus = "Illegal RD7000 Model\r\n{use TL | PL | SL | DL }";
		}
    }

	// RD8000
	else if (obj.value.substr(0, 5) == "10/8K")
	{
		// Model
		var sModel = mystring.substr(5, 3);
		if (sModel == "PDL" || sModel == "PXL")
		{
			// Bluetooth
			var sBluetooth = mystring.substr(8,1);
			if (sBluetooth == "B")
			{
				var sHyphen = mystring.substr(9,1);
				if (sHyphen == "-")
				{				
					for (var i=10 ; i<mystring.length; i++)
					{					
						var cVal = mystring.substr(i, 1);
						if (cVal < '0' || cVal > '9')
						{
							//alert("Non integer character after \'-\'");
							bStatus = "Non integer character after \'-\' : " + cVal;
							break;
						}
					}
				}
				else
				{
					//alert("Non \'-\' character after RD8000 Model");
					bStatus = "Non \'-\' character after RD8000 Model";
				}
			}
			else
			{
				var sHyphen = mystring.substr(8,1);
				if (sHyphen == "-")
				{
					for (var i=9 ; i<mystring.length ; i++)
					{
						var cVal = mystring.substr(i, 1);
						if (cVal < '0' || cVal > '9')
						{
							//alert("Non integer character after \'-\'");
							bStatus = "Non integer character after \'-\' : " + cVal;
							break;
						}
					}
				}
				else
				{
					//alert("Non \'-\' character after RD8000 Model");
					bStatus = "Non \'-\' character after RD8000 Model";
				}
			}
		}
		else
		{
			//alert("Illegal RD8000 Model\r\n{ PDL | PXL | PDLB | PXLB }");
			bStatus = "Illegal RD8000 Model\r\n{ PDL | PXL | PDLB | PXLB }";
		}
	}	
	
	// We can just check for 10/TX-	
	else if (obj.value.substr(0, 6) == "10/TX-")
	{
		// Model 10/TX-10B
		//var sModel = mystring.substr(6, 3);
		//alert(sModel);
		if (mystring.substr(6, 3) == "10B")
		{
			var sHyphen = mystring.substr(9,1);
			if (sHyphen == "-")
			{				
				for (var i=10 ; i<mystring.length; i++)
				{
					var cVal = mystring.substr(i, 1);
					if (cVal < '0' || cVal > '9')
					{
						//alert("Non integer character after \'-\'");
						bStatus = "Non integer character after \'-\' : " + cVal;
						break;
					}
				}
			}
			else
			{
				//alert("Non \'-\' character after RD8000 Model");
				bStatus = "Non \'-\' character after 10/TX-10B Model";
			}
		}
		
		//Model 10/TX-10
		else if (mystring.substr(6,2) == "10")
		{
			var sHyphen = mystring.substr(8,1);
			if (sHyphen == "-")
			{				
				for (var i=9 ; i<mystring.length; i++)
				{					
					var cVal = mystring.substr(i, 1);
					if (cVal < '0' || cVal > '9')
					{
						//alert("Non integer character after \'-\'");
						bStatus = "Non integer character after \'-\' : " + cVal;
						break;
					}
				}
			}
			else
			{
				//alert("Non \'-\' character after RD8000 Model");
				bStatus = "Non \'-\' character after 10/TX-10 Model";
			}
		}
		
		//Model 10/TX-3B
		else if (mystring.substr(6,2) == "3B")
		{
			var sHyphen = mystring.substr(8,1);
			if (sHyphen == "-")
			{				
				for (var i=9 ; i<mystring.length; i++)
				{					
					var cVal = mystring.substr(i, 1);
					if (cVal < '0' || cVal > '9')
					{
						//alert("Non integer character after \'-\'");
						bStatus = "Non integer character after \'-\' : " + cVal;
						break;
					}
				}
			}
			else
			{
				//alert("Non \'-\' character after RD8000 Model");
				bStatus = "Non \'-\' character after 10/TX-3B Model";
			}	
		}
		
		// Model 10/TX-3
		else if (mystring.substr(6,1) == "3")
		{
			var sHyphen = mystring.substr(7,1);
			if (sHyphen == "-")
			{				
				for (var i=8 ; i<mystring.length; i++)
				{					
					var cVal = mystring.substr(i, 1);
					if (cVal < '0' || cVal > '9')
					{
						//alert("Non integer character after \'-\'");
						bStatus = "Non integer character after \'-\' : " + cVal;
						break;
					}
				}
			}
			else
			{
				//alert("Non \'-\' character after RD8000 Model");
				bStatus = "Non \'-\' character after 10/TX-3 Model";
			}
		}
		
		// Model 10/TX-1
		else if (mystring.substr(6,1) == "1")
		{
			var sHyphen = mystring.substr(7,1);
			if (sHyphen == "-")
			{				
				for (var i=8 ; i<mystring.length; i++)
				{					
					var cVal = mystring.substr(i, 1);
					if (cVal < '0' || cVal > '9')
					{
						//alert("Non integer character after \'-\'");
						bStatus = "Non integer character after \'-\' : " + cVal;
						break;
					}
				}
			}
			else
			{
				//alert("Non \'-\' character after RD8000 Model");
				bStatus = "Non \'-\' character after 10/TX-1 Model";
			}
		}
		
		//Else illegal 10/TX model
		else
		{
			bStatus = "Illegal 10/TX Model\r\n{ 1 | 3 | 3B | 10 | 10B }";
		}
	}
	
	
	// 10/T-	
	else if (obj.value.substr(0, 5) == "10/T-")
	{
		//var sModel = mystring.substr(6, 3);
		//alert(sModel);
		
		// Model 10/T-WL
		if (mystring.substr(5, 2) == "WL")
		{
			var sHyphen = mystring.substr(7, 1);
			if (sHyphen == "-")
			{				
				for (var i=8 ; i<mystring.length; i++)
				{
					var cVal = mystring.substr(i, 1);
					if (cVal < '0' || cVal > '9')
					{
						//alert("Non integer character after \'-\'");
						bStatus = "Non integer character after \'-\' : " + cVal;
						break;
					}
				}
			}
			else
			{
				//alert("Non \'-\' character after 10/T-WL Model");
				bStatus = "Non \'-\' character after 10/T-WL  Model";
			}
		}
		
		//Model 10/T-BL
		else if (mystring.substr(5, 2) == "BL")
		{
			var sHyphen = mystring.substr(7, 1);
			if (sHyphen == "-")
			{				
				for (var i=8 ; i<mystring.length; i++)
				{					
					var cVal = mystring.substr(i, 1);
					if (cVal < '0' || cVal > '9')
					{
						//alert("Non integer character after \'-\'");
						bStatus = "Non integer character after \'-\' : " + cVal;
						break;
					}
				}
			}
			else
			{
				//alert("Non \'-\' character after 10/T-BL Model");
				bStatus = "Non \'-\' character after 10/T-BL Model";
			}
		}
		
		//Model 10/T-ML
		else if (mystring.substr(5, 2) == "ML")
		{
			var sHyphen = mystring.substr(7, 1);
			if (sHyphen == "-")
			{				
				for (var i=8 ; i<mystring.length; i++)
				{					
					var cVal = mystring.substr(i, 1);
					if (cVal < '0' || cVal > '9')
					{
						//alert("Non integer character after \'-\'");
						bStatus = "Non integer character after \'-\' : " + cVal;
						break;
					}
				}
			}
			else
			{
				//alert("Non \'-\' character after 10/T-ML Model");
				bStatus = "Non \'-\' character after 10/T-ML Model";
			}	
		}
		
		
		
		//Else illegal 10/TX model
		else
		{
			bStatus = "Illegal 10/T Model\r\n{ WL | BL | ML }";
		}
	}
	
		
	// Illegal Product Code
	else
	{
		//alert("Illegal Product Code\r\n{ 10/7K | 10/8K }");
		bStatus = "Illegal Product Code\r\n{ 10/5K | 10/7K | 10/8K | 10/TX- | 10/T- }";
	}
	
	if (mystring.length > 16) {
		bStatus = "Illegal Product Code - Too many characters";
	}
	return bStatus;
}
/////////////////////////////////////////////////////////////////////
function isRegUSN(obj)
{
    var bStatus = "";
    var response = "";
    
    var mystring = obj.value;
    if (mystring == "") return ""
       
    bStatus = isValidUSN(obj);
   
    if (bStatus == "")
    {
        new Ajax.Request("includes/survey_validation_registration.asp",
            {
              method: "post",
              parameters: 'regno=' + mystring,
              asynchronous: false,
              onFailure: function(transport) {
                  response = transport.responseText;
                },
              onSuccess: function(transport) {
                  response = transport.responseText;
                }
            });
        
        if (response.indexOf("not") > 0)
        {
            bStatus = response;
        }   
    }
        
    return bStatus;
}

