	// ****************************************************************************************************
	// ***** This function evaluates the country selected, updates the hidden value and then displays *****
        // ***** the comms channel fields                                                                 *****
	// ****************************************************************************************************
	function evalctry(ctryval)
	{	


	   commsdisplay('hide');
	   postaldisplay('hide');
	   emaildisplay('hide');
	   datatabs('hide');
	   resetstyling();

           if ((ctryval=='')||(ctryval=='--Please Select--'))
              {
		alert('Please select a country');
              }
	   else
	      {
	   	commsdisplay('show');
	      }

	    var elem=document.getElementById('pcode_hdr');
		 		 
		 		 if (ctryval=='Eire')
		 		 {
		 		    elem.style.display='none';
	   }


	}

	// ****************************************************************************************************
	// ***** This function shows/hides comms channel fields                                           *****
	// ****************************************************************************************************
        function commsdisplay(act)
	{

		var elem = document.getElementById('optin_hdr');
		if (act=='show')
		   {elem.style.display='block';}
		else
		   {elem.style.display='none';}	
		
		elem = document.getElementById('comms_hdr');
		if (act=='show')
		   {elem.style.display='block';}
		else
		   {
	            dataform.postchk.checked=false;
		    dataform.emailchk.checked=false;
                    dataform.bothchk.checked=false;
                    dataform.nonechk.checked=false;
		    elem.style.display='none';
		   }
	}

	// ****************************************************************************************************
        // ***** This function evaluates which comm channel is selected and displays subsequent fields    *****
	// ****************************************************************************************************
	function evalchkbx(boxval) 
        {

	  // * reset the form
	  clraddressflds();
	  datatabs('hide');
	  clrchecks();
	  clradio('statements');
	  clradio('ukhol');
	  clradio('dp');
	  resetstyling();

	  if (boxval=='P')
              {
		emaildisplay('hide');
                dataform.emailchk.checked=false;
                dataform.bothchk.checked=false;
                dataform.nonechk.checked=false;
                postaldisplay('show');
	        datatabs('show');
	      }
	   else if (boxval=='E')
                   {
		    postaldisplay('hide');
                    dataform.postchk.checked=false;
                    dataform.bothchk.checked=false;
                    dataform.nonechk.checked=false;
               	    emaildisplay('show');
	            datatabs('show');
		   }
	           else if (boxval=='Y') 
	               {
			postaldisplay('hide');
			emaildisplay('hide');
                   	dataform.postchk.checked=false;
                    	dataform.emailchk.checked=false;
                        dataform.nonechk.checked=false;
			postaldisplay('show');
			emaildisplay('show');
	                datatabs('show');
                       }
	                else if (boxval=='N') 
	                  {
			    postaldisplay('hide');
			    emaildisplay('hide');
                   	    dataform.postchk.checked=false;
                    	    dataform.emailchk.checked=false;
                    	    dataform.bothchk.checked=false;
			    postaldisplay('show');
			    emaildisplay('show');
	                    buttonsdisplay('show');
                       }


         }
   
	// ************************************************************************************************
	// ***** This function shows/hides email address field                                        *****
	// ************************************************************************************************
        function emaildisplay(act)
	{
		if (dataform.ctry.value!='Eire')
		{
			var elem = document.getElementById('pcode_hdr');
					if (act=='show')
						 {elem.style.display='block';}
					else
				 {elem.style.display='none';}	
		}
		
		var elem = document.getElementById('email_hdr');
		if (act=='show')
		   {elem.style.display='block';}
		else
		   {elem.style.display='none';}		   
	}

	// ************************************************************************************************
	// ***** This function shows/hides postal address fields                                      *****
        // ************************************************************************************************
        function postaldisplay(act)
	{
		var elem = document.getElementById('add_hdr');
		if (act=='show')
		   {elem.style.display='block';}
		else
		   {elem.style.display='none';}	
		   
		if (dataform.ctry.value!='Eire')
			  {
					var elem = document.getElementById('pcode_hdr');
							if (act=='show')
								 {elem.style.display='block';}
							else
						 {elem.style.display='none';}	
		}
	}


	// ************************************************************************************************
	// ***** This function shows/hides buttons                                                    *****
        // ************************************************************************************************
        function buttonsdisplay(act)
	{
		var elem = document.getElementById('buttons');
		if (act=='show')
		   {elem.style.display='block';}
		else
		   {elem.style.display='none';}	
	}

	// ************************************************************************************************
	// ***** This function shows/hides miscellaneous data tables                                  *****
	// ************************************************************************************************
        function datatabs(act)
	{
		var elem = document.getElementById('thirdtable');

		if (act=='show')
		   {elem.style.display='block';}
		else
		   {elem.style.display='none';}	

		// * special processing for eire
		elem = document.getElementById('fourthtable');
		if (dataform.ctry.value=='Eire')
                   {elem.style.display='none';}
                else
		   if (act=='show')
		      {elem.style.display='block';}
		   else
		      {elem.style.display='none';}	


		elem = document.getElementById('fifthtable');
		if (act=='show')
		   {elem.style.display='block';}
		else
		   {elem.style.display='none';}	

		// * special processing for Eire
		elem = document.getElementById('sixthtable');
		if (dataform.ctry.value=='Eire')
		   {
                    if (act=='show')
		       {elem.style.display='block';}
		    else
		       {elem.style.display='none';}
		   }
	        else
		   {
                    elem.style.display='none';
                   }	

	        elem = document.getElementById('ftr_tab');
		if (act=='show')
		   {elem.style.display='block';}
		else
		   {elem.style.display='none';}	

                buttonsdisplay(act)
	   
	}


       // *********************************************************************************
       // * this function clears check boxes                                              *
       // *********************************************************************************
	function clrchecks()
	{

	  var elem = document.getElementsByName('acts');
          for (var i = 0; i < elem.length; i++) 
          {
              elem[i].checked = false;
          }


	}


       // *********************************************************************************
       // * this function clears address fields                                           *
       // *********************************************************************************
	function clraddressflds()
	{
	  dataform.add1.value ='';	  
	  dataform.add2.value ='';
	  dataform.add3.value ='';
	  dataform.town.value ='';
	  dataform.county.value ='';
	  dataform.pcode.value ='';
	  dataform.email.value ='';
	}


       // *********************************************************************************
       // * this function clears radio buttons                                            *
       // *********************************************************************************
	function clradio(radioname) 
        {
	  var elem = document.getElementsByName(radioname);
          for (var i = 0; i < elem.length; i++) 
          {
              elem[i].checked = false;
          }
        }

       // *********************************************************************************
       // * this function controls form validation                                        *
       // *********************************************************************************
 	function validate_form(passedform)
	{

	   valid=true;
	
	   
	   // ***** check title, first name and surname is supplied
           // ***** if invalid change id to the error id in order for css to take effect
	            
	   passedform.title.id = 'deflt';
	   passedform.title.value=strimmer(passedform.title.value);		
	   if (passedform.title.value=="")
	   {  

	    passedform.title.id='error';
	    valid=false;

	   }
 
	   passedform.fname.id = 'deflt';
	   passedform.fname.value=strimmer(passedform.fname.value);		
	   if (passedform.fname.value=="")
	   {  

	    passedform.fname.id='error';
	    valid=false;

	   }
          
	   passedform.sname.id = 'deflt';
	   passedform.sname.value=strimmer(passedform.sname.value);		
	   if (passedform.sname.value=="")
	   {  

	    passedform.sname.id='error';
	    valid=false;

	   }



	   // ***** check address1 and postcode if post or both clicked. 
	   // ***** if invalid change id to the error id in order for css to take effect
	   
	   if ((passedform.postchk.checked)||(passedform.bothchk.checked)||(passedform.nonechk.checked))        
	   {
	    passedform.add1.id = 'deflt';
	    passedform.add1.value=strimmer(passedform.add1.value);		
	    if (passedform.add1.value=="")
	    {  
 	       passedform.add1.id='error';
	       valid=false;
	    }
	    passedform.pcode.id = 'deflt';
	    // ***** Only check UK postcode
            if (passedform.ctry.value!='Eire')
	    {
	     var pcodevalid = ispostcode(passedform.pcode.value)
	     if (!pcodevalid)
	     {
 	       passedform.pcode.id='error';
	       valid=false;	       
	     }
	    }
	   }	    
	  

	   // ***** check email address if email or both clicked. 
	   // ***** if invalid change id to the error id in order for css to take effect
	   
	   if ((passedform.emailchk.checked)||(passedform.bothchk.checked)||(passedform.nonechk.checked))        
	   {
	    passedform.email.id = 'deflt';
	    passedform.email.value=strimmer(passedform.email.value);		
	    if (passedform.email.value=="")
	    {  
 	       passedform.email.id='error';
	       valid=false;
	    }
            else
	    {
	     var emailvalid = isemail(passedform.email.value)
	     if (!emailvalid)
	     {
 	       passedform.email.id='error';
	       valid=false;	       
	     }
	    }
	    
	     passedform.pcode.id = 'deflt';
				// ***** Only check UK postcode
							if (passedform.ctry.value!='Eire')
				{
				 var pcodevalid = ispostcode(passedform.pcode.value)
				 if (!pcodevalid)
				 {
					 passedform.pcode.id='error';
					 valid=false;	       
				 }
	    }

	   }



	   // ***** check data protection questions 
	   // ***** if invalid change backgroundcolor to yellow in this case

	    var elem = document.getElementById('radio2');
	    elem.style.backgroundColor='#FFFFFF';

	    var dpoption = false;	 		
	    for (i=0;i<passedform.dp.length;i++)
	    {
	     if (passedform.dp[i].checked)
             {
	    	dpoption=true;
	     }		
	    }
            
	
            
	     if ((!dpoption) && (!passedform.nonechk.checked))
	     {

		elem.style.backgroundColor='#FFFF00';
		valid=false;
	     }


	  // ***** If errors exist alert the user
	   if (!valid)
	   {
	     alert('Please correct the errors in the highlighted areas');
	   }


          // ***** return result of validation	
	
	  if (valid)
             {return true;}
	  else
	     {return false;}



	}

       // *********************************************************************************
       // * this function will reset fields in error back to the deflt style              *
       // *********************************************************************************
	function resetstyling()
	{
   	 for(i=0; i<document.forms[0].elements.length; i++)
	    {
   	     if (document.forms[0].elements[i].id == 'error')
	     	{document.forms[0].elements[i].id = 'deflt';}
            }

	    var elem=document.getElementById('radio2');
            elem.style.backgroundColor='#ffffff';


	}

       // *********************************************************************************
       // * this function will trim whitespace                                            *
       // *********************************************************************************
	function strimmer (myString)
	{
	 return myString.replace(/^\s+/g,'').replace(/\s+$/g,'')
	}

       // *********************************************************************************
       // * this validate any date given in uk format DD/MM/YYYY                          *
       // *********************************************************************************
	function IsDate(dateStr)
	{
	   var matchArray = new Array();
	   matchArray = dateStr.split("/");
	   var datestatus=true;
	   datemsg="";

	   day = matchArray[0];
	   month = matchArray[1];
	   year = matchArray[2];

	   if ( isNaN(day) || isNaN(month) || isNaN(year) )
	   {
		return false;
  	   }

	   if (matchArray == null || day==null || month==null || year==null || year=="") 
	   {
		return false;
	   }
	
	   if (year.length < 4 || year.length > 4)
	   {
		datestatus= false;
	   }

	   if (month < 1 || month > 12)
	   { 
		datestatus=false;
	   }

	   if (day < 1 || day > 31)
	   {
		datestatus=false;
	   }

	   if ((month==4 || month==6 || month==9 || month==11) && day==31)
	   {
		datestatus=false;
	   }

	   if (month == 2)
	   { // check for february 29th
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day > 29 || (day==29 && !isleap))
		{
			datestatus=false;
	   	}
	   }

	   return datestatus; 
        }

       // *********************************************************************************
       // * this validates uk postcode                                                    *
       // *********************************************************************************
	function ispostcode(StrPost)
	{
	 //var RegEx = /^[a-zA-Z]{1,2}[0-9][0-9A-Za-z]{0,1} {0,1}[0-9][A-Za-z]{2}$/;
	 var RegEx = /^(GIR 0AA)|((([A-PR-UWYZ][0-9][0-9]?)|(([A-PR-UWYZ][A-HK-Y][0-9][0-9]?)|(([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY])))) [0-9][ABD-HJLNP-UW-Z]{2})$/;

	 if (StrPost.toUpperCase().match(RegEx))
	 {
		return true;
	 }
	 else
	 {
		return false;
	 }
        }
 
       // *********************************************************************************
       // * this validates email address                                                  *
       // *********************************************************************************	
	function isemail(StrEmail)
	{

	// this regular expression is not complete and requires revision before use
	//	var RegEx = /^[A-Za-z0-9._-]+@[A-Za-z0-9.-]+\.(co.uk|com|org|net)$/;
  	 var RegEx = /^[a-zA-Z0-9\._\-]+@{1}[a-zA-Z0-9\._\-]*\.[a-zA-Z]+$/;

	 if (StrEmail.match(RegEx))
	 {
		return true;
	 }
	 else
	 {
		return false;
	 }
	}

       // *********************************************************************************
       // * this validates numeric flds                                                   *
       // *********************************************************************************
	function IsNumOrNone(StrNum)
	{
	 // StrNum can contain numbers or be empty
	 var RegEx = /^\d*$/;

	 if (StrNum.match(RegEx))
	 {
		return true;
	 }
	 else
	 {
		return false;
	 }
	}

       // *********************************************************************************
       // * this validates numeric flds                                                   *
       // *********************************************************************************
	function IsAlphaOrNone(StrAlpha)
	{

	// StrNum can contain alphabeticals or be empty
	 var RegEx = /^[a-zA-Z]*$/;

	 if (StrAlpha.match(RegEx))
	 {
		return true;
	 }
	 else
	 {
		return false;
	 }
	}
	
       //**********************************************************************************
       //******************** J A V A S C R I P T   E N D S   *****************************
       //**********************************************************************************