var digits = "0123456789";
// non-digit characters which are allowed in phone numbers
var phoneNumberDelimiters = "()- ";
// characters which are allowed in international phone numbers
// (a leading + is OK)
var validWorldPhoneChars = phoneNumberDelimiters + "+";
// Minimum no of digits in an international phone no.
var minDigitsInIPhoneNumber = 10;
var d = new Date()
var yr = d.getFullYear();
var mn = d.getMonth();
mn = mn + 1;

function charge()
{
	var pndcharge = document.reservation.PnDselection.value;
	var charge =  document.reservation.PnDcharges.value;
	if(pndcharge == 2){
		document.reservation.PnDcharges.value = 75;
	}
	if(pndcharge == 1){
		document.reservation.PnDcharges.value = 0;
	}
	document.reservation.PnDcharges.value += "$";
	dateDiff(document.reservation.DateOfDeliver.value,document.reservation.DateOfpickup.value);
}
function emailvalidate(Email)
{
	if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(Email))
	{
		return true
	}
	alert("Invalid E-mail Address! Please re-enter.")
	return false
}

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 Securityno(s,CreditCard)
{
	var i;

	if(CreditCard == "American Express")
	{
		if(s.length >=5){
			alert("Please Enter Valid Security Code");
			document.reservation.SecurityCode.focus();
			return false;
		}
	}else{
		if(s.length >=4){
			alert("Please Enter Valid Security Code");
			document.reservation.SecurityCode.focus();
			return false;
		}
	}

	for (i = 0; i < s.length; i++)
	{
// Check that current character is number.
		var c = s.charAt(i);
		if (((c < "0") || (c > "9"))){
			alert("Please Enter Valid Security Code")
			document.reservation.SecurityCode.focus()
			return false;
		}
	}
	// All characters are numbers.
	return true;
}

function trim(Value)
{
	return Value.replace(/^\s+|\s+$/g, "");
}
var dtCh= "/";
var minYear=1900;
var maxYear=2100;

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 dateDiff(DateOfpickup,DateOfDeliver)
{
	date1 = new Date();
	date2 = new Date();
	diff  = new Date();

// Validates first date 
	date1temp = new Date(DateOfpickup);

	date1.setTime(date1temp.getTime());
// otherwise exits

// Validates second date 
	date2temp = new Date(DateOfDeliver );

	date2.setTime(date2temp.getTime());

	if(date1temp > date2temp)
	{
		alert("Pickup Date must be grater than Deliver Date");
		document.reservation.DateOfpickup.value="";
		document.reservation.DateOfpickup.focus();
	}

// otherwise exits
// sets difference date to difference of first date and second date
	diff.setTime(Math.abs(date1.getTime() - date2.getTime()));
	timediff = diff.getTime();

	month = Math.floor(timediff / (1000 * 60 * 60 * 24 * 30.42));
	timediff -= month * (1000 * 60 * 60 * 24 * 30.42);

	weeks = Math.floor(timediff / (1000 * 60 * 60 * 24 * 7));
	timediff -= weeks * (1000 * 60 * 60 * 24 * 7);

	days = Math.floor(timediff / (1000 * 60 * 60 * 24)); 
	timediff -= days * (1000 * 60 * 60 * 24);

//
	document.reservation.Days.value = month + " month, "+ weeks + " weeks, " + days + " days " ;
	day=document.reservation.Days.value
	
	price = document.reservation.Scootername.value.split("-");
	var subtotal = 0;
	var stax = 0;
	var total = 0;

	if (price[0] > 0)
		subtotal += (price[0] * days);
	if (price[1] > 0)
		subtotal += (price[1] * weeks);
	if (price[2] > 0)
		subtotal += (price[2] * month);

	document.reservation.Cost.value = subtotal + "$";
	stax += parseFloat((subtotal * 7)/100);
	document.reservation.Salestax.value = stax + "$";
	total += parseFloat(subtotal) + parseFloat(stax);
	//total +=document.reservation.PnDcharges.value
	
	if(document.reservation.PnDselection.value == 2)
	{
		total =total+50;
	}
	document.reservation.Total.value = total + "$";
	//alert(document.reservation.PnDcharges.value);
//return false; // form should never submit, returns false
}

function isDate(dtStr1)
{
	dtStr=dtStr1.value
	var daysInMonth = DaysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strMonth=dtStr.substring(0,pos1)
	var strDay=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	rtn = true
	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 : mm/dd/yyyy")
		dtStr1.value=""
		
		dtStr1.focus()
		rtn = false
		return rtn
	}

	if (strMonth.length<1 || month<1 || month>12)
	{
		alert("Please enter a valid month, format should be : mm/dd/yyyy")
		dtStr1.value=""
		
		//document.getElementById('DateOfDeliver').focus()
		dtStr1.focus()
		rtn = false
		return rtn
	}

	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month])
	{
		alert("Please enter a valid day, format should be : mm/dd/yyyy")
		dtStr1.value=""
		
		//document.getElementById('DateOfDeliver').focus()
		dtStr1.focus()
		rtn = false
		return rtn
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear)
	{
		alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear)
		dtStr1.value=""
		
		//document.getElementById('DateOfDeliver').focus()
		dtStr1.focus()
		rtn = false
		return rtn
	}

	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false)
	{
		alert("Please enter a valid date, format should be : mm/dd/yyyy")
		//dtStr1.value=""
		
		//document.getElementById('DateOfDeliver').focus()
		dtStr1.focus()
		rtn = false
		return rtn
	}
 	return rtn
}



function IsValidTime(timeStr)
{
// Checks if time is in HH:MM:SS AM/PM format.
// The seconds and AM/PM are optional.
	var timePat = /^(\d{1,2}):(\d{2})(:(\d{2}))?(\s?(AM|am|PM|pm))?$/;
	var matchArray = timeStr.match(timePat);

	if (matchArray == null)
	{
		alert("Time is not in a valid format.");
		return false;
	}

	hour = matchArray[1];
	minute = matchArray[2];
	second = matchArray[4];
	ampm = matchArray[6];

	if (second=="") { second = null; }

	if (ampm=="") { ampm = null }

	if (hour < 0  || hour > 23) {
		alert("Hour must be between 1 and 12. (or 0 and 23 for military time)");
		return false;
	}

	if (hour <= 12 && ampm == null) {
		if (confirm("Please indicate which time format you are using.  OK = Standard Time, CANCEL = Military Time")) {
			alert("You must specify AM or PM.");
			return false;
		}
	}

	if  (hour > 12 && ampm != null) {
		alert("You can't specify AM or PM for military time.");
		return false;
	}

	if (minute<0 || minute > 59) {
		alert ("Minute must be between 0 and 59.");
		return false;
	}

	if (second != null && (second < 0 || second > 59)) {
		alert ("Second must be between 0 and 59.");
		return false;
	}

	return true;
}
//  End -->

function checkCheckBox(f)
{
	if (f.agree.checked == false )
	{
		alert("Please tick the box to continue");
		return false;
	}else
		return true;
}


// This form is used in the online reservation.
function Validation()
{	
var srenter = document.reservation.SRenter.value;
var SDeliver = document.reservation.SDeliver.value;
var BillingAddress = document.reservation.BillingAddress.value;
var City = document.reservation.City.value;
var State = document.reservation.State.value;
var Zip = document.reservation.Zip.value;
var Country = document.reservation.Country.value;
var Homephone = document.reservation.Homephone.value;
var Cell = document.reservation.Cell.value;
var Email = document.reservation.Email.value;
var HearAbout = document.reservation.HearAbout.value;
var AccName = document.reservation.AccomodtionName.value;
var Address = document.reservation.Address.value;
var City1 = document.reservation.City1.value;
var Phone = document.reservation.Phone.value;
var sindex = document.reservation.Scootername.selectedIndex;
var Scootername = document.reservation.Scootername[sindex].text;
var Weight = document.reservation.Weight.value;
var Days = document.reservation.Days.value;
var Cost = document.reservation.Cost.value;
var Salestax = document.reservation.Salestax.value;
var Total = document.reservation.Total.value;
var RHeight = document.reservation.RHeight.value;
var RWeight = document.reservation.RWeight.value;
var Arrivaldate = document.reservation.Arrivaldate.value;
//var Artime = document.reservation.Arrivaltime.value;
var dateofdeliver = document.reservation.DateOfDeliver.value;
//var timeofdeliver = document.reservation.TimeOfDeliver.value;
var dateofpickup = document.reservation.DateOfpickup.value;
//var timeofpickup = document.reservation.TimeOfPickup.value;
var AgentEmail = document.reservation.AgentEmail.value;
var AgentCode = document.reservation.AgentCode.value;
var OtherDeliveryInfo = document.reservation.OtherDeliveryInfo.value;
//var CreditCard = document.reservation.Creditcard.checked;
var CreditcardNo = document.reservation.CreditcardNo.value;
for (var i=0; i < document.reservation.Creditcard.length; i++)
   {
   if (document.reservation.Creditcard[i].checked)
      {
      	
     var CreditCard = document.reservation.Creditcard[i].value;
      }
   }
var CardHolderName = document.reservation.CardHolderName.value;
var Mindex = document.reservation.CCMonth.selectedIndex
var Month = document.reservation.CCMonth[Mindex].text
var Yindex = document.reservation.CCYear.selectedIndex
var Year = document.reservation.CCYear[Yindex].text
var SecurityCode = document.reservation.SecurityCode.value
//alert(CreditcardNo.substr(0,1))
//alert(CreditcardNo.substr(0,1))
//alert(CreditCard)
//alert(CreditcardNo.length)


if(trim(srenter) == "")
{
	alert("Please Enter Scooter Renter Name");
	document.reservation.SRenter.focus();
	rtn = false;
	return rtn;
}
if(trim(SDeliver) == "")
{
	alert("Please Enter Person Name Holding Hotel/Accommodation Reservation where we will be delivering Scooter");
	document.reservation.SDeliver.focus();
	rtn = false;
	return rtn;
}
if(trim(BillingAddress) == "")
{
	alert("Please Enter Street billing address of scooter renter credit card that will be used");
	document.reservation.BillingAddress.focus();
	rtn = false;
	return rtn;
}


if(Email != "")
{
	if(emailvalidate(Email)==false){
		alert("Please Enter Email Address")
		document.reservation.Email.value=""
		document.reservation.Email.focus()
		rtn = false
		return rtn
	}
}else{
	alert("Please Enter Email Address")
	document.reservation.Email.value=""
	document.reservation.Email.focus()
	rtn = false
	return rtn
}

if(trim(AccName) == "")
{
	alert("Please Enter where will we be delivering the scooter: Accommodation Name");
	document.reservation.AccomodtionName.focus();
	rtn = false;
	return rtn;
}

if(trim(dateofdeliver) == "")
{
	alert("Please Enter Date of Delivery in mm/dd/yyyy format");
	document.reservation.DateOfDeliver.focus();
	return false;
}else{
	if(isDate(document.reservation.DateOfDeliver) == false)
	{
		dateofdeliver="";
		document.reservation.DateOfDeliver.focus();
		return false;
	}
}

/*if(trim(timeofdeliver) == "")
{
	alert("Please Enter Time of Delivery in hh:mm:ss format");
	document.reservation.TimeOfDeliver.focus();
	return false;
}else{
	if(IsValidTime(timeofdeliver) == false)
	{
		document.reservation.TimeOfDeliver.value=""
		document.reservation.TimeOfDeliver.focus();
		return false;
	}
}*/

if(trim(dateofpickup) == "")
{
	alert("Please Enter Date of Pick up in mm/dd/yyyy format");
	document.reservation.DateOfpickup.focus();
	return false;
}else{
	if(isDate(document.reservation.DateOfpickup) == false)
	{
		dateofpickup="";
		document.reservation.DateOfpickup.focus();
		return false;
	}
}

/*if(trim(timeofpickup) == "")
{
	alert("Please Enter TIme of Pick up in hh:mm:ss format");
	document.reservation.TimeOfPickup.focus();
	return false;
}*//*else{
	if(IsValidTime(timeofpickup)== false)
	{
		document.reservation.TimeOfPickup.value=""
		document.reservation.TimeOfPickup.focus();
		return false;
	}
}*/


if(trim(RHeight) == "" || (trim(RHeight))==0)
{
	alert("Please Enter Height");
	document.reservation.RHeight.focus();
	rtn = false;
	return rtn;
}

if(trim(RWeight) == "" || (trim(RWeight))==0)
{
	alert("Please Enter Weight");
	document.reservation.RWeight.focus();
	rtn = false;
	return rtn;
}

/*else{
	if(isInteger(RWeight) == false)
	{
		alert("Riders Weight Must Be Numeric Value");
		document.reservation.RWeight.focus();
		rtn = false;
		return rtn;
	}
}*/

if(CreditcardNo.length == 15)
{
	if(CreditCard=="American Express" && CreditcardNo.indexOf("3")!=0 )
	{
		alert("Please Enter Valid Credit Card Number!");
		document.reservation.CreditcardNo.value=""
		document.reservation.CreditcardNo.focus(); 
		return false;
	}
}
else if(CreditcardNo.length==16)
{
	if(CreditCard=="Visa" && CreditcardNo.indexOf("4")!=0 )
	{
		alert("Please Enter Valid Credit Card Number!");
		document.reservation.CreditcardNo.value=""
		document.reservation.CreditcardNo.focus(); 
		return false;
	}

	if(CreditCard=="Master Card" && CreditcardNo.indexOf("5")!=0 )
	{ 
		alert("Please Enter Valid Credit Card Number!");
		document.reservation.CreditcardNo.value=""
		document.reservation.CreditcardNo.focus(); 
		return false;
	}

	if(CreditCard=="Discover" && CreditcardNo.indexOf("6")!=0 )
	{
		alert("Please Enter Valid Credit Card Number!");
		document.reservation.CreditcardNo.value=""
		document.reservation.CreditcardNo.focus(); 
		return false;
	}
}else{
	alert("Please Enter Valid Credit Card Number!");
	document.reservation.CreditcardNo.value=""
	document.reservation.CreditcardNo.focus(); 
	return false;
}

if(trim(CardHolderName) == "")
{
	alert("Please Enter Credit Card Holder Name");
	document.reservation.CardHolderName.focus();
	rtn = false;
	return rtn;
}

if(mn >= Month )
{
	if(Year > yr)
	{
		rtn = true
	}
	else
	{
		alert("Please Enter Valid Year & Month For credit Card Expiration Date")
		document.reservation.CCMonth.focus();
		rtn = false;
		return rtn;
	}
}
if(trim(SecurityCode) == "")
{
	alert("please Enter Security Code")
	document.reservation.SecurityCode.focus();
	rtn = false;
	return rtn;
}
if(Securityno(SecurityCode,CreditCard) == "")
{
	document.reservation.SecurityCode.focus();
	rtn = false;
	return rtn;
}
if (document.reservation.Agree.checked == false)
{
	alert('Please check the box to continue.');
	rtn = false;
	return rtn;
}
	return rtn;
}

// This function is used in the validation of the contact us page.
function ContactValidation()
{
	var firstname;
	var lastname;
	var phone;
	var email;
	var message;

	firstname = CheckingNull("frm_contactus","FirstName","Enter Valid First Name");
	if(firstname == false)
	{
		return false;
	}

	lastname = CheckingNull("frm_contactus","LastName","Enter Valid Last Name");
	if(lastname == false)
	{
		return false;
	}

	var optobj =eval("document.frm_contactus."+"rd_contact");

	if (optobj[0].checked)
	{
		phone = CheckingNull("frm_contactus","Phone","Enter Valid Phone Number");
		if(phone == false)
		{
			return false;
		}
		else
		{
			if (isNaN(document.frm_contactus.Phone.value))
			{
				alert("Enter Valid Phone Number");
				document.frm_contactus.Phone.value = '';
				document.frm_contactus.Phone.focus();
				return false;
			}
		}
	}

	if (optobj[1].checked)
	{
		email = CheckingNull("frm_contactus","Email","Enter Valid Email Address");

		if(email == false)
		{
			return false;
		}
		else
		{
			email = checkvalidemail("frm_contactus","Email","Enter Valid Email Address");
			if(email == false)
			{
				return false;
			}
		}
		cemail = checkvalidemail("frm_contactus","Confirmemail","Enter Valid Confirm Email Address");
		if(cemail == false)
		{
			return false;
		}
		else
		{
			if (document.frm_contactus.Email.value != document.frm_contactus.Confirmemail.value)
			{
				alert("Email & Confirm Email should be same.");
				document.frm_contactus.Confirmemail.value = '';
				document.frm_contactus.Confirmemail.focus();
				return false;
			}
		}
	}

	if (document.frm_contactus.txt_zip.value != "")
	{
		if (isNaN(document.frm_contactus.txt_zip.value))
		{
			alert("Enter Valid Zip Code");
			document.frm_contactus.txt_zip.value = '';
			document.frm_contactus.txt_zip.focus();
			return false;
		}
	}

	message = CheckingNull("frm_contactus","Message","Enter Message");
	if(message == false)
	{
		return false;
	}
}

// This function is used in the validation of the Partnerregistration page.
function PartnerValidation()
{
	var partnername;
	var companyaddress;
	var city;
	var zip;
	var country;
	var firstname;
	var lastname;
	var phone;
	var fax;
	var email;
	var cemail;

	partnername = CheckingNull("frm_partner","partnername","Enter Reservation Partner Name");
	if(partnername == false)
	{
		return false;
	}

	companyaddress = CheckingNull("frm_partner","companyaddress","Enter Company Address");
	if(companyaddress == false)
	{
		return false;
	}

	city = CheckingNull("frm_partner","city","Enter City/County");
	if(city == false)
	{
		return false;
	}

	zip = CheckingNull("frm_partner","zip","Enter Zip Code");
	if(zip == false)
	{
		return false;
	}
	else
	{
		if (isNaN(document.frm_partner.zip.value))
		{
			alert("Enter Valid Zip Code");
			document.frm_partner.zip.value = '';
			document.frm_partner.zip.focus();
			return false;
		}
	}

	country = CheckingNull("frm_partner","country","Enter Valid Country");
	if(country == false)
	{
		return false;
	}

	firstname = CheckingNull("frm_partner","firstname","Enter Valid First Name");
	if(firstname == false)
	{
		return false;
	}

	lastname = CheckingNull("frm_partner","lastname","Enter Valid Last Name");
	if(lastname == false)
	{
		return false;
	}

	phone=CheckingNull("frm_partner","telephone","Enter Valid Phone Number");
	if(phone == false){
		return false;
	}
	if (isNaN(document.frm_partner.telephone.value))
	{
		alert("Enter Valid Phone Number");
		document.frm_partner.telephone.value = '';
		document.frm_partner.telephone.focus();
		return false;
	}

	fax=CheckingNull("frm_partner","fax","Enter Valid Fax Number");
	if(fax == false){
		return false;
	}
	if (isNaN(document.frm_partner.fax.value))
	{
		alert("Enter Valid Fax Number");
		document.frm_partner.fax.value = '';
		document.frm_partner.fax.focus();
		return false;
	}
	
	email = CheckingNull("frm_partner","email","Enter Valid Email Address");
	if(email == false)
	{
		return false;
	}
	else
	{
		email = checkvalidemail("frm_partner","email","Enter Valid Email Address");
		if(email == false)
		{
			return false;
		}
	}

	cemail = checkvalidemail("frm_partner","confirmemail","Enter Valid Confirm Email Address");
	if(cemail == false)
	{
		return false;
	}
	else
	{
		if (document.frm_partner.email.value != document.frm_partner.confirmemail.value)
		{
			alert("Email & Confirm Email should be same.");
			document.frm_partner.confirmemail.value = '';
			document.frm_partner.confirmemail.focus();
			return false;
		}
	}

	if (document.frm_partner.agree.checked == false)
	{
		alert('Please check the box to continue.');
		return false;
	}
}