/* Validate Form */
  var map;
  var foundEndCoords = false;
  var foundStartCoords = false;
  var startGoogleAddress;
  var endGoogleAddress;

 Array.prototype.findIndex = function(value){
 	var ctr = "";
 	for (var i=0; i < this.length; i++) {
 	if (this[i] == value) {
 		return i;
 	}
 	}
 	return ctr;
 };

 function reCheckCoords(){
 	if(!foundStartCoords || !foundEndCoords){
  		setTimeout("submitForm()",500);
  	} else {
  		submitForm();
  	}
  }
  
  function submitForm(){
  	$("#frm_itinerary_planning").submit();
  }
  
  /* Check if coordinates already exist for starting address otherwise use google geocoder to find it */ 
  function checkStartCoords(){
     //Don't do the geocoding if the user selects from autocomplete.
     if(siw && isUsingAutoComplete()){
    	return;
     } 
     var travelFrom = $("input#starting_street_address").val();
  
  	 var travelFromIndex = landMarksList.findIndex(travelFrom);
     var travelFromLatLong = landMarksCoordinatesList[travelFromIndex];
     if(!travelFromLatLong){
     	setStartCoordinates(travelFrom);
      } else {
    	$("input#TravelFromLatLong").val(travelFromLatLong);
    	foundStartCoords = true;
     }
     return true;
  }
  
   
  function setStartCoordinates(address) {
 	  var startState,startAddr;
 	  if (geocoder) {
         geocoder.getLocations(
          address,
          function(response) {
            if (!response || response.Status.code != 200) {
              //alert("\"" + address + "\" not found");
            } else {
              if(response.Placemark.length > 0 ){
              	for(i=0;i<response.Placemark.length;i++){
              			startState = response.Placemark[i].AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;
              			//Get first google address in any of valid US States (PA,NJ,DE,NY)
              			if(isValidIPState(startState)){
              				startAddr = response.Placemark[i].address;	
              				selpoint = response.Placemark[i].Point;	
              				foundStartCoords = true;
              				break;	
              			}
               	 }
              }
              if(foundStartCoords){
  	             startGoogleAddress = startAddr;
 	             $("input#TravelFromLatLong").val(selpoint.coordinates[1]+","+selpoint.coordinates[0]);
 	             startGoogleAddress = startGoogleAddress.replace(", USA", "");
 	             $("input#starting_street_address").val(startGoogleAddress);
              }
           }
          }
        );
      }
  }
  
  /* Check if coordinates already exist for ending address otherwise use google geocoder to find it */ 
   function checkEndCoords(){
     //Don't do the geocoding if the user selects from autocomplete.
     if(siw && isUsingAutoComplete()){
    	return;
     } 
     var travelTo = $("input#dest_street_address").val();
   	 var travelToIndex = landMarksList.findIndex(travelTo);
   	 var travelToLatLong = landMarksCoordinatesList[travelToIndex];
     if(!travelToLatLong){
     	setEndCoordinates(travelTo);
     } else {
    	 $("input#TravelToLatLong").val(travelToLatLong);
    	 foundEndCoords = true;
    }
  }
  
  
  function setEndCoordinates(address) {
 	  var endState,endAddr;
 	  if (geocoder) {
         geocoder.getLocations(
          address,
          function(response) {
            if (!response || response.Status.code != 200) {
              //alert("\"" + address + "\" not found");
            } else {
              if(response.Placemark.length > 0 ){
              	for(i=0;i<response.Placemark.length;i++){
              			endState = response.Placemark[i].AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;
              			//Get first google address in any of valid US States (PA,NJ,DE,NY)
              			if(isValidIPState(endState)){
              				endAddr  = 	response.Placemark[i].address;	
              				selpoint = response.Placemark[i].Point;	
              				foundEndCoords = true;
              				break;	
              			}
               	 }
              }
              if(foundEndCoords){
  	             endGoogleAddress = endAddr;
 	             $("input#TravelToLatLong").val(selpoint.coordinates[1]+","+selpoint.coordinates[0]);
 	             endGoogleAddress = endGoogleAddress.replace(", USA", "");
 	             $("input#dest_street_address").val(endGoogleAddress);
              }
           }
          }
        );
      }
  }
 
  
  function isValidIPState(state){
    var validIPStates = ['NJ','PA','NY','DE'];
    state = state.toUpperCase();
    if($.inArray(state, validIPStates) == -1) {
    	return false;
    }
    return true;
  }
  
  function isUsingAutoComplete(){
  	var index = getCurrentlySelectedSmartInputItem();
  	if(index >= 0){
  		return true;
  	}
  	return false;
  }
  
  function trim(value) {
		if (value == null) return value;
		if (value.length < 1) return value;
		var result = new String(value);
		while (result.charAt(0) == ' ') {
			result = result.substr(1);
		}
		while (result.charAt(result.length - 1) == ' ') {
			result = result.substring(0, result.length - 1);
		}
		return result;
  } 
	
  function isValidTime(time) {
	var pattern = new RegExp(/^(0[1-9]|1[012]|[0-9]):([0-5][0-9])$/);
	return pattern.test(time);
  }

  var form = $("#frm_itinerary_planning");
  
    //disable sumbit on enter 
  form.keypress(function (evt) { 
     if (evt.keyCode == 13) {
     	return false;
     } 
  });
  
  $(document).ready(function() {		 
	initialize();
	setTime(); //current time
	$("input#starting_street_address").val("");
	$("input#starting_street_address").blur();
	$("input#dest_street_address").blur();
		
 	form.submit(function(e){  
 		var reqFields = ['#starting_street_address', '#dest_street_address', '#Time'];
		var isValidForm = 1; //default to valid form - true
 	    
 	    
 	    $.each(reqFields, function(n, value) {
		var j = $(value).val();
			if (j == "" || j == $(value).attr('title')) {
				var fieldName = $(value).attr('name');
				var alertMsg = "";
				if(fieldName == 'starting_street_address'){
					alertMsg = "Please enter an origin address, it is one of the required fields.";
				}
				if(fieldName == 'dest_street_address'){
					alertMsg = "Please enter an destination address, it is one of the required fields.";
				}
				if(fieldName == 'Time'){
					alertMsg = "Please enter the time of travel, it is one of the required fields.";
				}
				alert(alertMsg);
				$(value).focus(); 
				e.preventDefault();
				isValidForm = 0;
				document.getElementById('submit').style.visibility = 'visible'; 
				document.getElementById('wait').style.visibility = 'hidden';
				return false;
			}
 				
	});
	if(isValidForm){
		var vTravelFromLatLong= $("input#TravelFromLatLong").val();
		var vTravelToLatLong= $("input#TravelToLatLong").val();
		if(vTravelFromLatLong == vTravelToLatLong){
			alert("Origin and destination addresses are the same. Please enter different origin and destination addresses.");
			e.preventDefault();
			isValidForm = 0;
			document.getElementById('submit').style.visibility = 'visible'; 
			document.getElementById('wait').style.visibility = 'hidden';
			return false;		
		}	
	}
   /* check for time format HH:MM */
	var enteredTime = $("input#Time").val();
	var selectedSuffix = $("select#Suffix").val();
	if(!isValidTime(enteredTime)){
		alert("Please enter the time of travel in the format of HH:MM");
		$("input#Time").focus();
		e.preventDefault();
		isValidForm = 0;
		document.getElementById('submit').style.visibility = 'visible'; 
		document.getElementById('wait').style.visibility = 'hidden';
		return false;
	} 

	if(!isValidForm){
		document.getElementById('submit').style.visibility = 'visible'; 
		document.getElementById('wait').style.visibility = 'hidden';
		return false;
	}
  
   /*	
   		passed all validations at this point.
   */
   //showloading();
   //var selectedDate =  $("input#datepicker").val();
   //var dateParts = selectedDate.split("/");

   //$("input#Month").val(dateParts[0]);
   //$("input#Day").val(dateParts[1]);
   //$("input#Year").val(dateParts[2]);
  
   var timeParts = enteredTime.split(":");
   $("input#Hour").val(timeParts[0]);
   $("input#Minute").val(timeParts[1]);
     
   return true;
	
  });
 
 });
 
