var field_main;

function do_blink(field)

{

	var errorcolor="#ff0000";

	field.focus();

	field.select();

	field.style.background=errorcolor;

    field_main=field;

	setInterval("temp()",500);    

}



function temp(field)

{

	var okcolor="#ffffff";

	field_main.style.background=okcolor;

}

function popitup(url) {

	newwindow=window.open(url,'name','height=350,width=415');

	if (window.focus) {newwindow.focus()}

	return false;

}

//delete data

function DeleteData(url)

{

	if(confirm("Are you sure you want to delete."))

		location.replace(url);	

	

}

// checks date formate

// validate date

function validDate(month, day, year){

	if(month =='0' || day =='0' || year=='0'){

		return false;

	}

	switch(month)

	{

		case '1': //** jan

		case '3': //** March

		case '5': //** May

		case '7': //** July

		case '8': //** Aug

		case '10': //** Nov

		case '12': //** Dec

			if(day>=1 && day<=31){

				return true;

			} else {

				return false;

			}

		case '4': //** APRIL

		case '6' : //** JUNE

		case '9' : //** SEPTEMBER

		case '11' : //** NOVEMBER

			if(day>=1 && day<=30){

				return true;

			} else {

				return false;

			}

		case '2' :

			if(isLeapYear(year)){

				if(day>=1 && day<=29){

					return true;

				}

			} else if(day>=1 && day <= 28){

				return true;

			} else {

				return false;

			}

		default:

			return false;

	}

}







function isLeapYear(year){  // Checking wdr a year is leap year or not

	if(year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)){

		return true;

	} else {

		return false;

	}

}



var MONTH_NAMES=new Array('January','February','March','April','May','June','July','August','September','October','November','December','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');

var DAY_NAMES=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sun','Mon','Tue','Wed','Thu','Fri','Sat');

function getDateFromFormat(val,format) {

	val=val+"";

	format=format+"";

	var i_val=0;

	var i_format=0;

	var c="";

	var token="";

	var token2="";

	var x,y;

	var now=new Date();

	var year=now.getYear();

	var month=now.getMonth()+1;

	var date=1;

	var hh=now.getHours();

	var mm=now.getMinutes();

	var ss=now.getSeconds();

	var ampm="";

	

	while (i_format < format.length) {

		// Get next token from format string

		c=format.charAt(i_format);

		token="";

		while ((format.charAt(i_format)==c) && (i_format < format.length)) {

			token += format.charAt(i_format++);

			}

		// Extract contents of value based on format token

		if (token=="yyyy" || token=="yy" || token=="y") {

			if (token=="yyyy") { x=4;y=4; }

			if (token=="yy")   { x=2;y=2; }

			if (token=="y")    { x=2;y=4; }

			year=_getInt(val,i_val,x,y);

			if (year==null) { return 0; }

			i_val += year.length;

			if (year.length==2) {

				if (year > 70) { year=1900+(year-0); }

				else { year=2000+(year-0); }

				}

			}

		else if (token=="MMM"||token=="NNN"){

			month=0;

			for (var i=0; i<MONTH_NAMES.length; i++) {

				var month_name=MONTH_NAMES[i];

				if (val.substring(i_val,i_val+month_name.length).toLowerCase()==month_name.toLowerCase()) {

					if (token=="MMM"||(token=="NNN"&&i>11)) {

						month=i+1;

						if (month>12) { month -= 12; }

						i_val += month_name.length;

						break;

						}

					}

				}

			if ((month < 1)||(month>12)){return 0;}

			}

		else if (token=="EE"||token=="E"){

			for (var i=0; i<DAY_NAMES.length; i++) {

				var day_name=DAY_NAMES[i];

				if (val.substring(i_val,i_val+day_name.length).toLowerCase()==day_name.toLowerCase()) {

					i_val += day_name.length;

					break;

					}

				}

			}

		else if (token=="MM"||token=="M") {

			month=_getInt(val,i_val,token.length,2);

			if(month==null||(month<1)||(month>12)){return 0;}

			i_val+=month.length;}

		else if (token=="dd"||token=="d") {

			date=_getInt(val,i_val,token.length,2);

			if(date==null||(date<1)||(date>31)){return 0;}

			i_val+=date.length;}

		else if (token=="hh"||token=="h") {

			hh=_getInt(val,i_val,token.length,2);

			if(hh==null||(hh<1)||(hh>12)){return 0;}

			i_val+=hh.length;}

		else if (token=="HH"||token=="H") {

			hh=_getInt(val,i_val,token.length,2);

			if(hh==null||(hh<0)||(hh>23)){return 0;}

			i_val+=hh.length;}

		else if (token=="KK"||token=="K") {

			hh=_getInt(val,i_val,token.length,2);

			if(hh==null||(hh<0)||(hh>11)){return 0;}

			i_val+=hh.length;}

		else if (token=="kk"||token=="k") {

			hh=_getInt(val,i_val,token.length,2);

			if(hh==null||(hh<1)||(hh>24)){return 0;}

			i_val+=hh.length;hh--;}

		else if (token=="mm"||token=="m") {

			mm=_getInt(val,i_val,token.length,2);



			if(mm==null||(mm<0)||(mm>59)){return 0;}

			i_val+=mm.length;}

		else if (token=="ss"||token=="s") {

			ss=_getInt(val,i_val,token.length,2);

			if(ss==null||(ss<0)||(ss>59)){return 0;}

			i_val+=ss.length;}

		else if (token=="a") {

			if (val.substring(i_val,i_val+2).toLowerCase()=="am") {ampm="AM";}

			else if (val.substring(i_val,i_val+2).toLowerCase()=="pm") {ampm="PM";}

			else {return 0;}

			i_val+=2;}

		else {

			if (val.substring(i_val,i_val+token.length)!=token) {return 0;}

			else {i_val+=token.length;}

			}

		}

	// If there are any trailing characters left in the value, it doesn't match

	if (i_val != val.length) { return 0; }

	// Is date valid for month?

	if (month==2) {

		// Check for leap year

		if ( ( (year%4==0)&&(year%100 != 0) ) || (year%400==0) ) { // leap year

			if (date > 29){ return 0; }

			}

		else { if (date > 28) { return 0; } }

		}

	if ((month==4)||(month==6)||(month==9)||(month==11)) {

		if (date > 30) { return 0; }

		}

	// Correct hours value

	if (hh<12 && ampm=="PM") { hh=hh-0+12; }

	else if (hh>11 && ampm=="AM") { hh-=12; }

	var newdate=new Date(year,month-1,date,hh,mm,ss);

	return newdate.getTime();

	}

function isDate(val,format) {

	var date=getDateFromFormat(val,format);

	if (date==0) { return false; }

	return true;

	}

function _isInteger(val) {

	var digits="1234567890";

	for (var i=0; i < val.length; i++) {

		if (digits.indexOf(val.charAt(i))==-1) { return false; }

		}

	return true;

	}

function _getInt(str,i,minlength,maxlength) {

	for (var x=maxlength; x>=minlength; x--) {

		var token=str.substring(i,i+x);

		if (token.length < minlength) { return null; }

		if (_isInteger(token)) { return token; }

		}

	return null;

	}



// check for number

function isNumber(str)

{

	if(str.length==0)

	{	

		

		return false;

	}

	p=0;

	for (i = 0; i < str.length; i++)

	{

		mychar = str.charAt(i);

		if(mychar == '.')

			p++;

		

	}

	

	

	

	if(p == 1)

	{

		

		mystr = str.split(".");

		str0 = mystr[0];

		str1 = mystr[1];

		

			numdecs = 0;

			// first str	

			for (i = 0; i < str0.length; i++)

			{

				mychar = str0.charAt(i);

	

				if (isNaN(mychar))

				{

					numdecs++;

				}

				

			}

			

			// second str	

			numdecs1 = 0;

			for (i = 0; i < str1.length; i++)

			{

				mychar1 = str1.charAt(i);

	

				if (isNaN(mychar1))

				{

					numdecs1++;

				}

				

			}

			

			if (numdecs == 0 && numdecs1 == 0)

			{

				return true;

			}

			else

			{

				return false;

			}

		

	}

	if(p == 0)

	{

		

		var numdecs = 0;

		

		for (i = 0; i < str.length; i++)

		{

			mychar = str.charAt(i);

			if(isNaN(mychar))

			{

				numdecs++;

				

			}

			

		}

		

		if (numdecs > 1)

		{

			return false;

		}

		else

			return true;

	}

	

}

// checl post code

function checkPostCode (toCheck) {



  // Permitted letters depend upon their position in the postcode.

  var alpha1 = "[abcdefghijklmnoprstuwyz]";                       // Character 1

  var alpha2 = "[abcdefghklmnopqrstuvwxy]";                       // Character 2

  var alpha3 = "[abcdefghjkstuw]";                                // Character 3

  var alpha4 = "[abehmnprvwxy]";                                  // Character 4

  var alpha5 = "[abdefghjlnpqrstuwxyz]";                          // Character 5

  

  // Array holds the regular expressions for the valid postcodes

  var pcexp = new Array ();



  // Expression for postcodes: AN NAA, ANN NAA, AAN NAA, and AANN NAA

  pcexp.push (new RegExp ("^(" + alpha1 + "{1}" + alpha2 + "?[0-9]{1,2})(\\s*)([0-9]{1}" + alpha5 + "{2})$","i"));

  

  // Expression for postcodes: ANA NAA

  pcexp.push (new RegExp ("^(" + alpha1 + "{1}[0-9]{1}" + alpha3 + "{1})(\\s*)([0-9]{1}" + alpha5 + "{2})$","i"));



  // Expression for postcodes: AANA  NAA

  pcexp.push (new RegExp ("^(" + alpha1 + "{1}" + alpha2 + "?[0-9]{1}" + alpha4 +"{1})(\\s*)([0-9]{1}" + alpha5 + "{2})$","i"));

  

  // Exception for the special postcode GIR 0AA

  pcexp.push (/^(GIR)(\s*)(0AA)$/i);

  

  // Standard BFPO numbers

  pcexp.push (/^(bfpo)(\s*)([0-9]{1,4})$/i);

  

  // c/o BFPO numbers

  pcexp.push (/^(bfpo)(\s*)(c\/o\s*[0-9]{1,3})$/i);

  

  // Overseas Territories

  pcexp.push (/^([A-Z]{4})(\s*)(1ZZ)$/i);



  // Load up the string to check

  var postCode = toCheck;



  // Assume we're not going to find a valid postcode

  var valid = false;

  

  // Check the string against the types of post codes

  for ( var i=0; i<pcexp.length; i++) {

    if (pcexp[i].test(postCode)) {

    

      // The post code is valid - split the post code into component parts

      pcexp[i].exec(postCode);

      

      // Copy it back into the original string, converting it to uppercase and

      // inserting a space between the inward and outward codes

      postCode = RegExp.$1.toUpperCase() + " " + RegExp.$3.toUpperCase();

      

      // If it is a BFPO c/o type postcode, tidy up the "c/o" part

      postCode = postCode.replace (/C\/O\s*/,"c/o ");

      

      // Load new postcode back into the form element

      valid = true;

      

      // Remember that we have found that the code is valid and break from loop

      break;

    }

  }

  

  // Return with either the reformatted valid postcode or the original invalid 

  // postcode

  if (valid) {return postCode;} else return false;

}





// UK telephone number validation

function checkUKTelephone (telephoneNumber) {



  // Convert into a string and check that we were provided with something

  var telnum = telephoneNumber + " ";

  if (telnum.length == 1)  {

     telNumberErrorNo = 1;

     return false

  }

  telnum.length = telnum.length - 1;

  

  // Don't allow country codes to be included (assumes a leading "+")

  var exp = /^(\+)[\s]*(.*)$/;

  if (exp.test(telnum) == true) {

     telNumberErrorNo = 2;

     return false;

  }

  

  // Remove spaces from the telephone number to help validation

  while (telnum.indexOf(" ")!= -1)  {

    telnum = telnum.slice (0,telnum.indexOf(" ")) + telnum.slice (telnum.indexOf(" ")+1)

  }

  

  // Remove hyphens from the telephone number to help validation

  while (telnum.indexOf("-")!= -1)  {

    telnum = telnum.slice (0,telnum.indexOf("-")) + telnum.slice (telnum.indexOf("-")+1)

  }  

  

  // Now check that all the characters are digits

  exp = /^[0-9]{10,11}$/;

  if (exp.test(telnum) != true) {

     telNumberErrorNo = 3;

     return false;

  }

  

  // Now check that the first digit is 0

  exp = /^0[0-9]{9,10}$/;

  if (exp.test(telnum) != true) {

     telNumberErrorNo = 4;

     return false;

  }

	

	// Disallow numbers allocated for dramas.

	 

  // Array holds the regular expressions for the drama telephone numbers

  var tnexp = new Array ();

	tnexp.push (/^(0113|0114|0115|0116|0117|0118|0121|0131|0141|0151|0161)(4960)[0-9]{3}$/);

	tnexp.push (/^02079460[0-9]{3}$/);

	tnexp.push (/^01914980[0-9]{3}$/);

	tnexp.push (/^02890180[0-9]{3}$/);

	tnexp.push (/^02920180[0-9]{3}$/);

	tnexp.push (/^01632960[0-9]{3}$/);

	tnexp.push (/^07700900[0-9]{3}$/);

	tnexp.push (/^08081570[0-9]{3}$/);

	tnexp.push (/^09098790[0-9]{3}$/);

	tnexp.push (/^03069990[0-9]{3}$/);

	

	for (var i=0; i<tnexp.length; i++) {

    if ( tnexp[i].test(telnum) ) {

      telNumberErrorNo = 5;

      return false;

    }

	}

  

  // Finally check that the telephone number is appropriate.

  exp = (/^(01|02|03|05|070|071|072|073|074|075|07624|077|078|079)[0-9]+$/);

	if (exp.test(telnum) != true) {

     telNumberErrorNo = 5;

     return false;

  }

  

  // Telephone number seems to be valid - return the stripped telehone number  

  return telnum;

}

var telNumberErrorNo = 0;

var telNumberErrors = new Array ();

telNumberErrors[0] = "Valid UK telephone number";

telNumberErrors[1] = "Telephone number not provided";

telNumberErrors[2] = "UK telephone number without the country code, please";

telNumberErrors[3] = "UK telephone numbers should contain 10 or 11 digits";

telNumberErrors[4] = "The telephone number should start with a 0";

telNumberErrors[5] = "The telephone number is either invalid or inappropriate";

function copyshtobilling(form)

{

	index_sep=10;

	if(form.shsamebilling.checked)

	{

		

		for(counter=0;counter<10;counter++)

		{

			

			//alert(form[counter].value);

			index_sep++;

			form[index_sep].value=form[counter].value;

			

		}

		

	}

	else

	{

		index_sep=10;

		for(counter=0;counter<10;counter++)

		{

			index_sep++;

			form[index_sep].value="";

		}	

	}

}

//*******************************************************************************************************************************	

	

	

var ccErrorNo = 0;

var ccErrors = new Array ()



ccErrors [0] = "Unknown card type";

ccErrors [1] = "No card number provided";

ccErrors [2] = "Credit card number is in invalid format";

ccErrors [3] = "Credit card number is invalid";

ccErrors [4] = "Credit card number has an inappropriate number of digits";



function checkCreditCard (cardnumber, cardname) {

     

  // Array to hold the permitted card characteristics

  var cards = new Array();



  // Define the cards we support. You may add addtional card types.

  

  //  Name:      As in the selection box of the form - must be same as user's

  //  Length:    List of possible valid lengths of the card number for the card

  //  prefixes:  List of possible prefixes for the card

  //  checkdigit Boolean to say whether there is a check digit

  

  cards [0] = {name: "Visa", 

               length: "13,16", 

               prefixes: "4",

               checkdigit: true};

  cards [1] = {name: "MasterCard", 

               length: "16", 

               prefixes: "51,52,53,54,55",

               checkdigit: true};

  cards [2] = {name: "DinersClub", 

               length: "14,16", 

               prefixes: "300,301,302,303,304,305,36,38,55",

               checkdigit: true};

  cards [3] = {name: "CarteBlanche", 

               length: "14", 

               prefixes: "300,301,302,303,304,305,36,38",

               checkdigit: true};

  cards [4] = {name: "AmEx", 

               length: "15", 

               prefixes: "34,37",

               checkdigit: true};

  cards [5] = {name: "Discover", 

               length: "16", 

               prefixes: "6011,650",

               checkdigit: true};

  cards [6] = {name: "JCB", 

               length: "15,16", 

               prefixes: "3,1800,2131",

               checkdigit: true};

  cards [7] = {name: "enRoute", 

               length: "15", 

               prefixes: "2014,2149",

               checkdigit: true};

  cards [8] = {name: "Solo", 

               length: "16,18,19", 

               prefixes: "6334, 6767",

               checkdigit: true};

  cards [9] = {name: "Switch", 

               length: "16,18,19", 

               prefixes: "4903,4905,4911,4936,564182,633110,6333,6759",

               checkdigit: true};

  cards [10] = {name: "Maestro", 

               length: "16,18", 

               prefixes: "5020,6",

               checkdigit: true};

  cards [11] = {name: "VisaElectron", 

               length: "16", 

               prefixes: "417500,4917,4913",

               checkdigit: true};

               

  // Establish card type

  var cardType = -1;

  for (var i=0; i<cards.length; i++) {



    // See if it is this card (ignoring the case of the string)

    if (cardname.toLowerCase () == cards[i].name.toLowerCase()) {

      cardType = i;

      break;

    }

  }

  

  // If card type not found, report an error

  if (cardType == -1) {

     ccErrorNo = 0;

     return false; 

  }

   

  // Ensure that the user has provided a credit card number

  if (cardnumber.length == 0)  {

     ccErrorNo = 1;

     return false; 

  }

    

  // Now remove any spaces from the credit card number

  cardnumber = cardnumber.replace (/\s/g, "");

  

  // Check that the number is numeric

  var cardNo = cardnumber

  var cardexp = /^[0-9]{13,19}$/;

  if (!cardexp.exec(cardNo))  {

     ccErrorNo = 2;

     return false; 

  }

       

  // Now check the modulus 10 check digit - if required

  if (cards[cardType].checkdigit) {

    var checksum = 0;                                  // running checksum total

    var mychar = "";                                   // next char to process

    var j = 1;                                         // takes value of 1 or 2

  

    // Process each digit one by one starting at the right

    var calc;

    for (i = cardNo.length - 1; i >= 0; i--) {

    

      // Extract the next digit and multiply by 1 or 2 on alternative digits.

      calc = Number(cardNo.charAt(i)) * j;

    

      // If the result is in two digits add 1 to the checksum total

      if (calc > 9) {

        checksum = checksum + 1;

        calc = calc - 10;

      }

    

      // Add the units element to the checksum total

      checksum = checksum + calc;

    

      // Switch the value of j

      if (j ==1) {j = 2} else {j = 1};

    } 

  

    // All done - if checksum is divisible by 10, it is a valid modulus 10.

    // If not, report an error.

    if (checksum % 10 != 0)  {

     ccErrorNo = 3;

     return false; 

    }

  }  



  // The following are the card-specific checks we undertake.

  var LengthValid = false;

  var PrefixValid = false; 

  var undefined; 



  // We use these for holding the valid lengths and prefixes of a card type

  var prefix = new Array ();

  var lengths = new Array ();

    

  // Load an array with the valid prefixes for this card

  prefix = cards[cardType].prefixes.split(",");

      

  // Now see if any of them match what we have in the card number

  for (i=0; i<prefix.length; i++) {

    var exp = new RegExp ("^" + prefix[i]);

    if (exp.test (cardNo)) PrefixValid = true;

  }

      

  // If it isn't a valid prefix there's no point at looking at the length

  if (!PrefixValid) {

     ccErrorNo = 3;

     return false; 

  }

    

  // See if the length is valid for this card

  lengths = cards[cardType].length.split(",");

  for (j=0; j<lengths.length; j++) {

    if (cardNo.length == lengths[j]) LengthValid = true;

  }

  

  // See if all is OK by seeing if the length was valid. We only check the 

  // length if all else was hunky dory.

  if (!LengthValid) {

     ccErrorNo = 4;

     return false; 

  };   

  

  // The credit card is in the required format.

  return true;

}
