/* Quote Generator JS */
var locationName;
var lodgingOptions;
var courseOptions;
var tripDays;
var golfDays;
var itin;

var teeTimes = [];
for (var a = 5; a < 11; a++) {
 teeTimes[teeTimes.length] = a + ':00am - ' + (a + 1) + ':00am';
}
teeTimes[teeTimes.length] = '11:00am - 12:00pm';
var amTeeTimes = getOptionValues(teeTimes, 0, '', true, false);

var teeTimes = [];
teeTimes[0] = '12:00pm - 1:00pm';
for (var a = 1; a < 9; a++) {
 teeTimes[teeTimes.length] = a + ':00pm - ' + (a + 1) + ':00pm';
}
var pmTeeTimes = getOptionValues(teeTimes, 0, '', true, false);

var currentStep = 'step1';
var isStep1Complete = false;
var isStep2Complete = false;
var isStep3Complete = false;
var isStep4Complete = false;
var errorMessages = '';
var dayMsg = '';
var missingDays = [];

function showStep(tabId) {
 missingDays = [];
 errorMessages = '';
 //errorMessages = currentStep + " - " + tabId + "\n";

 if (currentStep == 'step1') {
  checkStep('Answer10', 'Select a trip destination.');
  checkStep('f_date_b', 'Enter the starting date for your trip.');
  checkStep('Answer13', 'Enter the length of your trip.');
 } else if (currentStep == 'step2') {
  if (tabId != 'step1') {
  for (var a = 1; a <= tripDays; a++) {
   dayMsg = '';
   var amValue = checkStep2('am', 'morning course', a);
   if (amValue != 'None') {
    checkStep2('amGolfers', 'morning golfers', a);
    //checkStep2('amTime', 'morning tee time', a);
   }

   var pmValue = checkStep2('pm', 'afternoon course', a);
   if (pmValue != 'None') {
    checkStep2('pmGolfers', 'afternoon golfers', a);
    //checkStep2('pmTime', 'afternoon tee time', a);
   }

   var lodgingValue = checkStep2('lodging', 'lodging', a);
   if (lodgingValue) {
    if (lodgingValue != 'None') {
     checkStep2('guests', 'number of guests', a);
     checkStep2('rooms', 'number of rooms', a);
     checkStep2('beds', 'number of beds', a);
    } 
   } else {
    if (amValue || pmValue) {
     dayMsg += " and lodging requirements";
    } else {
     dayMsg = '';
     missingDays[missingDays.length] = a;
    }
   }

   if (dayMsg) {
    dayMsg = "Your " + dayMsg + " for day " + a + ".\n";
    errorMessages += dayMsg;
   }
  
  }

  if (missingDays.length > 0) {
   errorMessages += "Your intinerary for day";
   if (missingDays.length > 1) {
    errorMessages += "s";
   } 
   errorMessages += " ";

   for (var b = 0; b < missingDays.length; b++) { 
    errorMessages += missingDays[b];
    if (b + 1 < missingDays.length) { 
     if (b + 2 == missingDays.length) {
       errorMessages += " and ";
     } else {
       errorMessages += ", ";
     }
    }
   }
   errorMessages += ".";
  }
  }
 } else {
  // step 3
 }

 if (errorMessages) {
  errorMessages = "Before moving to the next step, please provide the following information:\n" + errorMessages;
  alert(errorMessages);
 } else {
  showElement(tabId, 'step', 'step');
  currentStep = tabId;

  var stepsDiv = document.getElementById('stepLinks');
  if (tabId == 'step2') {
   stepsDiv.className = 'stepLinks2';
  } else if (tabId == 'step1') {
   stepsDiv.className = 'stepLinks1';
  } else if (tabId == 'step3') {
   stepsDiv.className = 'stepLinks3';
  }
  scroll(0,0);
 }
}

function checkStep(questionId, errorMsg) {
 var field = document.getElementById(questionId);
 if (field) {
  fieldValue = getFieldValue(field);
  if (!fieldValue) {
   errorMessages += errorMsg;
  }
 }
}

function getFieldValue(field) {
   if (field.value) {
    return field.value;
   } else if (field.type == 'select-one') {
    var options = field.options;
    for (var a = 0; a < options.length; a++) {
     if (options[a].value && options[a].selected) {
      return options[a].value;
     }
    }
   }
   return false;
}

function checkStep2(fieldType, msg, a) {
  var isValid = true;
  var fieldId = 'day' + a + fieldType;
  var field = document.getElementById(fieldId);

  if (field) {
   if (field.value) {
    return field.value;
   } else {
    if (dayMsg) {
     dayMsg += ", ";
    }
    dayMsg += msg;
   }
  }
}

function updateTripLength() {
 var startTime = getDateValue('f_date_b');
 var endTime = getDateValue('f_date_c');

 var tripTime = endTime - startTime;
  
 if (tripTime > 0) {
  tripDays = tripTime / 1000 / 60 / 60 / 24;
  document.quote.Answer13.value = tripDays;
  updateDays(tripDays);
 }
}

function getDateValue(fieldId) {
 var field = document.getElementById(fieldId);
 var fieldValue = field.value;
 return Date.parse(fieldValue);
}

function showDay(tabId) {
 showElement(tabId, 'dayStep', 'day');
}

function showElement(tabId, dynamicElement, linkRoot) {
 var containerId = dynamicElement + 's';
 var c = document.getElementById(containerId);
 if (!c) {
  return;
 }

 c.className = tabId;

 var tabs = c.getElementsByTagName('div');
 for (var a = 0; a < tabs.length; a++) {
  var tab = tabs[a];
  if (tab.className == dynamicElement) {
   if (tab.id == tabId) {
    tab.style.display = "block";
   } else {
    tab.style.display = "none";
   }
  }  
 }

 var linkId = tabId + "Link";
 var tabs = c.getElementsByTagName('a');
 for (var a = 0; a < tabs.length; a++) {
  var tab = tabs[a];
  if (tab.id.indexOf(linkRoot) == 0) {
   if (tab.id == linkId) {
    tab.className = "eSelect";
   } else {
    tab.className = "";
   }
  }  
 }

}

function formatDate(d) {
 var day = d.getDate();

 var month = d.getMonth();
 month += 1;

 var year = d.getFullYear();

 return month + "/" + day + "/" + year;
}

function updateEndField() {
 var length = document.quote.Answer13.value;
 if (length <= 0 || isNaN(parseInt(length))) {
  return false;
 }

 var startDate = getDateValue('f_date_b');
 if (isNaN(startDate)) {
  return length;
 }

 var tripTime = length * 24 * 60 * 60 * 1000;

 var endTime = startDate + tripTime;
 var newEndDate = new Date(endTime);
 var endDateFormatted = formatDate(newEndDate);
 
 var endDateField = document.getElementById('f_date_c');
 endDateField.value = endDateFormatted;
 return length;
}

function updateSidebarEndDate() {
 updateEndField();
}

function updateEndDate() {
 var length = updateEndField(true);
 if (length) {
  updateDays(length);
 }
}

function updateOptions() {
 updateDays(tripDays);
}

function updateDays(length) {

 if (!length || length <= 0) {
  return;   
 } 

 var msg = '';
 if (length > 21) {
  length = 21;
  msg = '<br /><em>For trips longer than three weeks, please make arrangements with your concierge.</em><br />';
 }

 var locationField = document.getElementById('Answer10');
 if (!locationField) {
  return;
 }

 if (locationField.value != locationName) {
  locationName = locationField.value;
  courseOptions = getOptionValues(courses[locationName], 0, '', true, false);
  lodgingOptions = getOptionValues(lodging[locationName], 0, '', true, false);
 }

 tripDays = length;

 golfDays = tripDays;
 golfDays++;

 html = msg;

 for (var a = 1; a <= golfDays; a++) {
  html += '<div id="day' + a + '" class="dayStep">';
  var onChange = '';
  var courseChange = ' onchange="disableTripFields(this,' + a + ')"';
  var onType = '';
  if (a == 1) {
   onChange = ' onchange="resetTripValues(this)"';
   onType = ' onkeyup="resetTripValues(this)"';
  } else {
   onChange = ' onchange="disableTripFields(this,' + a + ')"';
   onType = ' onkeyup="resetTripValues(this)"';
  }
  html += '<div class="dayHeader"><span class="dayNum">Day ' + a + '</span> Course Selection';
  html += '</div>';
  html += '<div class="formLine"><div class="formQuestion">AM Round:</div><select' + courseChange + ' class="selectCourse" id="day' + a + 'am">' + courseOptions + '</select></div>';
  html += '<div class="formLineDisabled" id="amGolfOptions' + a + '"><div class="formQuestion">Tee Time:</div><select disabled id="day' + a + 'amTime" class="selectTeeTime">' + amTeeTimes + '</select> &nbsp;Golfers: <input size="3" disabled id="day' + a + 'amGolfers" /></div>';
  html += '<div class="formLine"><div class="formQuestion">PM Round:</div><select' + courseChange + ' class="selectCourse" id="day' + a + 'pm">' + courseOptions + '</select></div>';
  html += '<div class="formLineDisabled" id="pmGolfOptions' + a + '"><div class="formQuestion">Tee Time:</div><select  disabled id="day' + a + 'pmTime" class="selectTeeTime">' + pmTeeTimes + '</select> &nbsp;Golfers: <input size="3" disabled id="day' + a + 'pmGolfers" /></div>';
  html += '<br clear="all" />';
  if (a < golfDays) {
   html += '<div class="dayHeader">';
   if (a == 1) {
    html += '<div style="float: right; font-size: 8pt; font-weight: normal; color: #fff;"><input type="checkbox" name="setByDay1" value="yes" id="setByDay1" checked />Apply these lodging selections to entire trip</div>';
   }
   html += '<span class="dayNum">Day ' + a + '</span> Lodging Selection</div>';
   html += '<div class="formLine"><div class="formQuestion">Lodging:</div><select' + onChange + ' id="day' + a + 'lodging">' + lodgingOptions + '</select></div>';
   html += '</div>';
   html += '<div id="lodgingOptions' + a + '" class="formLineGuestsDisabled"><div class="formQuestion">Guests:</div><input' + onType + '  disabled id="day' + a + 'guests" disabled />Beds:<input' + onType + ' id="day' + a + 'beds" />Rooms:<input' + onType + ' disabled id="day' + a + 'rooms" /></div>';
   html += '<br clear="all" />';
  }
 }

 var c = document.getElementById('daySteps');
 c.innerHTML = html;
}

function getOptions(values) {
 return getOptionValues(values, 0, '', true, true);
}

function getOptionValues(values, selIndex, selValue, useNone, useSelect) {
  var options;
  var offset = 0;
  if (values) {
   if (useSelect) {
    options += '<option value="">Select</option>\n';
    offset++;
   }

   if (useNone) {
    options += '<option value="None">None</option>\n';
    offset++;
   }

   for (var a = 0; a < values.length; a++) {
    var sel = '';
    if (selIndex == a + offset) {
     sel = ' selected';
    } else if (selValue && selValue == values[a]) {
     sel = ' selected';
    }
     
    options += '<option value="' + values[a] + '"' + sel + '>' + values[a] + '</option>\n';
   }
  }
  return options;
}

courseOptions = '{$courseOptions}';
lodgingOptions = '{$lodgingOptions}';

function submitQuote() {
 var isValidated = validateQuote();
 if (isValidated) {
  document.quote.submit();
 }
}

function getParam(name) {
  var q = document.location.search;
  var i = q.indexOf(name + '=');

  if (i == -1) {
    return false;
  }

  var r = q.substr(i + name.length + 1, q.length - i - name.length - 1);

  i = r.indexOf('&');

  if (i != -1) {
    r = r.substr(0, i);
  }

  return r.replace('+', ' ');
}

function generateItinerary() {
 var tripLength = document.quote.Answer13.value;

 var startTime = getDateValue('f_date_b');
 var oneDay = 1000 * 60 * 60 * 24;  

 itin = '';

 var finalDay = 0;
 for (var a = 1; a <= tripLength; a++) {
  var d = new Date(startTime);
  var date = formatDate(d);
  var amGolf = getTripFieldValue(a, 'am');
  var amTimes = getTripFieldValue(a, 'amTime');
  var amGolfers = getTripFieldValue(a, 'amGolfers');
  var pmGolf = getTripFieldValue(a, 'pm');
  var pmTimes = getTripFieldValue(a, 'pmTime');
  var pmGolfers = getTripFieldValue(a, 'pmGolfers');
 
   var lodging = getTripFieldValue(a, 'lodging');
   var guests = getTripFieldValue(a, 'guests');
   var beds = getTripFieldValue(a, 'beds');
   var rooms = getTripFieldValue(a, 'rooms');

  itineraryLine('Day ' + a + ': ' + date);
  itineraryLine('AM Course: ' + amGolf);
  itineraryLine('AM Tee Times: ' + amTimes);
  itineraryLine('AM Golfers: ' + amGolfers);
  itineraryLine('PM Course: ' + pmGolf);
  itineraryLine('PM Tee Times: ' + pmTimes);
  itineraryLine('PM Golfers: ' + pmGolfers);
 
   itineraryLine('Lodging: ' + lodging);
    itineraryLine('Guests:' + guests);
    itineraryLine('Beds:' + beds);
    itineraryLine('Rooms:' + rooms);
  itineraryLine('');

  finalDay = a + 1;
  startTime += oneDay;
 }

  var a = finalDay;
  var d = new Date(startTime);
  var date = formatDate(d);
  var amGolf = getTripFieldValue(a, 'am');
  var amTimes = getTripFieldValue(a, 'amTime');
  var amGolfers = getTripFieldValue(a, 'amGolfers');
  var pmGolf = getTripFieldValue(a, 'pm');
  var pmTimes = getTripFieldValue(a, 'pmTime');
  var pmGolfers = getTripFieldValue(a, 'pmGolfers');
 
  itineraryLine('Day ' + a + ': ' + date);
  itineraryLine('AM Course: ' + amGolf);
  itineraryLine('AM Tee Times: ' + amTimes);
  itineraryLine('AM Golfers: ' + amGolfers);
  itineraryLine('PM Course: ' + pmGolf);
  itineraryLine('PM Tee Times: ' + pmTimes);
  itineraryLine('PM Golfers: ' + pmGolfers);
 
  itineraryLine('');

  startTime += oneDay;


 // Set itinerary field to contain itinerary value
 var itinField = document.getElementById('Answer14');
 itinField.value = itin;

 // Set item name field to contain item name 
 var name = getFieldValueById('Answer1');
 var date = getFieldValueById('f_date_b');
 var location = getFieldValueById('Answer10');

 var itemName = name;
 if (itemName && location) {
  itemName += ' - ';
 }
 itemName += location;

 if (itemName && date) {
  itemName += ' - ';
 }
 itemName += date;

 var itemNameField = document.getElementById('item_name');
 if (itemNameField) {
  itemNameField.value = itemName;
 }

}

function getFieldValueById(id) {
 var field = document.getElementById(id);
 if (field) {
  return getFieldValue(field);
 }
}

function itineraryLine(line) {
 itin += line;
 itin += '<br>\r\n';
}

function getTripFieldValue(day, fieldName) {
 var fieldId = 'day' + day + fieldName;
 var field = document.getElementById(fieldId);
 if (field) {
  return field.value;
 }
}

function writeLocationOptions() {
 var locationId = getParam('location');
 var selectedLocation = locationLookup[locationId];

 var locationName = getParam('Answer10');
 if (locationName) {
  selectedLocation = locationName;
 }

 for (var a = 0; a < locationNames.length; a++) {
  var selected = '';
  if (selectedLocation == locationNames[a]) {
   selected = ' selected';
  }
  document.writeln('<option value="' + locationNames[a] + '" ' + selected + '>' + locationNames[a] + '</option>');
 }
}

function resetOption(parentId, field) {
 var msg = '';
 var line = v[0];
 for (var a = 0; a < line.length; v++) {
  msg += line[a] + "\n";
 }
 alert(msg);
 disable(parentId, field);
}

function disable(parentId, field) {
 var isDisabled = false;
 var parent = document.getElementById(parentId);

 var fieldValue = getFieldValue(field);
 if (fieldValue == 'None') {
  isDisabled = true;
  if (parentId.indexOf('lodging') != -1) {
   parent.className = 'formLineGuestsDisabled';
  } else {
   parent.className = 'formLineDisabled';
  }
 } else {
  if (parentId.indexOf('lodging') != -1) {
   parent.className = 'formLineGuests';
  } else {
   parent.className = 'formLine';
  }
 }

 var inputs = parent.getElementsByTagName('input');

 for (var a = 0; a < inputs.length; a++) {
  inputs[a].disabled = isDisabled;
 }

 var inputs = parent.getElementsByTagName('select');
 for (var a = 0; a < inputs.length; a++) {
  inputs[a].disabled = isDisabled;
 }
}

function resetTripValues(field) {
 var value = field.value;
 var setByDay1Field = document.getElementById('setByDay1');
 if (setByDay1Field.checked) {
  var id = field.id; 
  resetTripField('lodging',value,id);
  resetTripField('am',value,id);
  resetTripField('amTime',value,id);
  resetTripField('amGolfers',value,id);
  resetTripField('pm',value,id);
  resetTripField('pmTime',value,id);
  resetTripField('pmGolfers',value,id);
  resetTripField('lodging',value,id);
  resetTripField('guests',value,id);
  resetTripField('rooms',value,id);
  resetTripField('beds',value,id);
 }

 disableTripFields(field, 1);
}

var msg = '';

function resetTripField(name,value,id) {
 if (id.indexOf(name) == -1) {
  return;
 }

 var success = false;
 for (var a = 2; a <= golfDays; a++) {
  var fieldId = 'day' + a + name;
  var field = document.getElementById(fieldId);
  if (field) {
   var success = true;
   field.value = value;
   disableTripFields(field, a);
  }
 }

 //if (!success) {
  //alert("no field found for: dayx" + name);
 //}
}

function disableTripFields(field, day) {
 var id = field.id;
 if (id.indexOf('day' + day + 'lodging') != -1) {
  disable('lodgingOptions' + day, field);
 } else if (id.indexOf('day' + day + 'am') != -1) {
  disable('amGolfOptions' + day, field);
 } else if (id.indexOf('day' + day + 'pm') != -1) {
  disable('pmGolfOptions' + day, field);
 }
}


/* Form Js */


                        function isValidEmail(email) {

 

                                    invalidChars = " /:,;"

           

                                    if (email == "") {                                                             // cannot be empty

                                                return false

                                    }

                                    for (i=0; i<invalidChars.length; i++) {         // does it contain any invalid characters?

                                                badChar = invalidChars.charAt(i)

                                                if (email.indexOf(badChar,0) > -1) {

                                                            return false

                                                }

                                    }

                                    atPos = email.indexOf("@",1)                             // there must be one "@" symbol

                                    if (atPos == -1) {

                                                return false

                                    }

                                    if (email.indexOf("@",atPos+1) != -1) {     // and only one "@" symbol

                                                return false

                                    }

                                    periodPos = email.indexOf(".",atPos)

                                    if (periodPos == -1) {                                                      // and at least one "." after the "@"

                                                return false

                                    }

                                    var periodDiff = periodPos - atPos;
                                    if (periodDiff == 1) {  //must have a domain name
                                                //alert("Email address must have a domain name");
                                                return false;
                                    }

                                    if (periodPos+3 > email.length)    {                       // must be at least 2 characters after the "."

                                                return false

                                    }

                                    return true

                        }
function validate_text(field, error) {
	f = document.getElementById(field);
	if (f.value == "") {
		alert('The ' + error + ' field requires a value');
		return false;
	}
	return true;
}

function validate_checkbox(field, error) {
	if (! field) {
		alert('The ' + error + ' question requires you check at least one value.');
		return false;
	}
	return true;
}

function validate_select(field, error) {
	f = document.getElementById(field);
	if (f.options.selectedIndex == -1) {
		alert('The ' + error + ' question requires you select at least one value.');
		return false;
	}
	return true;
}

	function validateQuote(f) {

								if (! validate_text('Answer1', 'Name')) return false;
													if (! validate_text('Answer2', 'Email')) return false;
													if (! validate_text('Answer3', 'Phone')) return false;
																																		
        var emailField = document.getElementById('Answer2');
        var email = emailField.value;
        if (!isValidEmail(email)) {
         alert('"' + email + '" does not appear to be a valid email address. Please check to make sure this value is correct.');
         return false;
        }
          generateItinerary();

	  return true;
	}



function openPopup(sURL, width, height) {
 var sFeatures = "top=50,left=50,height=" + height + ",width=" + width + ",status=yes,scrollbars=no,resizable=1,menubar=";
 var win = window.open(sURL,"_popup",sFeatures);
 win.focus();
}

function setIncomingStep() {
 var locationName = getParam('Answer10');
 if (locationName) {
  updateEndDate();
  showStep('step2');
 }
}

function writeToWindow(content, width, height) {
	var sFeatures = "top=50,left=50,height=" + height + ",width=" + width + ",status=yes,scrollbars=yes,resizable=1,menubar=yes";
	var win = window.open('',"_blank",sFeatures);

        win.document.writeln('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">');
        win.document.writeln('<html>');
        win.document.writeln('<head>');
        win.document.writeln('<link href="/custom/styles/smc.css" rel="stylesheet" rev="stylesheet" type="text/css">');
        win.document.writeln('</head>');
        win.document.writeln('<body id="printPage" class="body" style="background-image: none !important;">');
        win.document.writeln('<h1>Your Custom Trip</h1>');
        win.document.writeln(' <div class="pageContent">');
        win.document.writeln('<a href="javascript: window.close()">Close this Window</a><br /><br />');
        win.document.writeln(content);
        win.document.writeln(' </div>');
        win.document.writeln('</body>');
        win.document.writeln('</html>');
        win.document.close();
        win.focus();
}

