// JavaScript Document
function isEMailAddr(str) {
    var re = /^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/;
    if (!str.match(re)) {
        return false;
    } else {
        return true;
    }
}

function mkDate(str){
	// returns false OR date object
	var bits = str.split("/");
	if(bits.length==3){
		var date = Number(bits[0]);
		var month = Number(bits[1]);
		var year = Number(bits[2]);
		if(date!=0 && month!=0 && year!=0){
			var testDate = new Date(year, month-1, date);
			//alert(testDate.getUTCFullYear()+"=="+year+" && "+(testDate.getMonth()+1)+" == "+month+" && "+testDate.getDate()+" == "+date);
			if(testDate.getUTCFullYear() == year && (testDate.getMonth()+1) == month && (testDate.getDate()) == date){
				return testDate;
			}
		}
	}
	return false;
}


function validate(){
	var errors = 0;
	var errmsg = '';
	for (var i = 0; i < document.forms[0].elements.length; i++){
		var element = document.forms[0].elements[i];
		var elementId = document.forms[0].elements[i].id;
		//check if required field
		if (elementId.substr(0,3)=="req"){
			if (element.value==""){
				element.className = 'textField_error';
				errors++;
			} else {
				element.className = 'textField';
			}
		} else {
			element.className = 'textField';
		}
		// other validation
		var departureDateObj;
		var returnDateObj;
		
		switch(element.name){
			case 'email_txt':
			if(!isEMailAddr(element.value)){
				element.className = 'textField_error';
				errors++;
				errmsg+='<p class="redText">Email address incorrectly formatted</p>';
			}
			break;
			
			case 'departureDate_txt':
				departureDateObj = mkDate(element.value);
				if(departureDateObj==false){
					element.className = 'textField_error';
					errors++;
				}
					
				break;
				
			case 'returnDate_txt':
				returnDateObj = mkDate(element.value);
				if(returnDateObj==false){
					element.className = 'textField_error';
					errors++;
				} else {
					// any comparative validation here
					if(departureDateObj!=false){
						var departTs = departureDateObj.getTime();
						var returnTs = returnDateObj.getTime();
						
						if(departTs>returnTs){
							element.className = 'textField_error';
							var el = document.getElementById('req_departureDate_txt');
							el.className = 'textField_error';
							errors++;
							errmsg+='<p class="redText">Return date must be after departure date!</p>';
						}
					}
				}				
				break;
		}
		
		
	}
	//we have an error
	if (errors>0){
		document.getElementById('formError').innerHTML='<p class="redText">Please check the highlighted fields.</p>'+errmsg;
		return false;
	} else {
		document.getElementById('formError').innerHTML='';
	}
}

function calcCost(days){
	var cost;
	//1 to 5 days
	if ((days>=0) && (days<=5)){
		cost = 27;
	}
	switch (days){
		case 6:
			cost = 30;
		break;
		case 7:
			cost = 35;
		break;
		case 8:
			cost = 42;
		break;
		case 9:
			cost = 46;
		break;
		case 10:
			cost = 50;
		break;
		case 11:
			cost = 54;
		break;
		case 12:
			cost = 58;
		break;
		case 13:
			cost = 62;
		break;
		case 14:
			cost = 66;
		break;
		case 15:
			cost = 70;
		break;
	}
	//each day is 4 pound extra
	if (days>15){
		var daysExtra
		daysExtra = days-15;
		cost = daysExtra*4;
		cost = cost + 70;
	}
	if(!isNaN(cost)){
		document.getElementById('cost').innerHTML='&pound;'+cost;
	}
}
function calcDays(date1,date2){
  date1 = date1.split("/");
  date2 = date2.split("/");
  var sDate = new Date(date1[1]+"/"+(date1[0]-1)+"/"+date1[2]);
  var eDate = new Date(date2[1]+"/"+(date2[0]-1)+"/"+date2[2]);  
  //::EDIT::CEL:: include return date
  var daysApart = Math.round((eDate-sDate)/86400000)+1;
  if (!isNaN(daysApart) && daysApart>0){
  	document.getElementById('daysRequired').innerHTML=Math.max(1,daysApart);
	calcCost(Math.max(1,daysApart));
	var el = document.getElementById('price_details');
	el.style.visibility='visible';
  }else{
  	return;
  }
}
function dwCaldate_txt(date, month, year){
	var testDate = mkDate(date+'/'+month+'/'+year);
	if(testDate!=false){
		formatToDate(document.forms[0].departureDate_txt,date,month,year);
		calcDays(document.forms[0].departureDate_txt.value,document.forms[0].returnDate_txt.value);
		dwCalObjdate2_txt.setMinDate(year+''+(month<10?'0':'')+month+''+(date<10?'0':'')+date);
	}	
}
function dwCaldate2_txt(date, month, year){
	var testDate = mkDate(date+'/'+month+'/'+year);
	if(testDate!=false){
		formatToDate(document.forms[0].returnDate_txt,date,month,year);
		calcDays(document.forms[0].departureDate_txt.value,document.forms[0].returnDate_txt.value);
		dwCalObjdate_txt.setMaxDate(year+''+(month<10?'0':'')+month+''+(date<10?'0':'')+date);
	}
}
function checkDate(str){
	var bits = str.split("/");
	if(bits.length==3){
		dwCaldate_txt(Number(bits[0]),Number(bits[1]),Number(bits[2]));
	}
}
function checkDate2(str){
	var bits = str.split("/");
	if(bits.length==3){
		dwCaldate2_txt(Number(bits[0]),Number(bits[1]),Number(bits[2]));
	}
}