/* verifies emailaddress, pass1 and vehicleName fields in a saveMyVehicle form */
function checkLoginModal() {
    	var errors = false;
	if(document.saveMyVehicle.emailaddress) {
		if(checkGenericField("ibox_username", "Por favor, ingrese su direcci\u00F3n email. ")) errors = true;
	}
	if(document.saveMyVehicle.pass1) {
		if(checkGenericField("ibox_pw", "Por favor, ingrese su contrase\u00F1a.")) errors = true;
	}
	if(document.saveMyVehicle.vehicleName) {
		if(checkGenericField("vehicleName", "Por favor, elija el nombre de su veh\u00EDculo guardado. ")) errors = true;
	}
	return !errors;
}
/* clears any error messages associated with the given field */
function clearStatusFieldsModal(fieldName) {
	document.getElementById(fieldName).className="";
	removeChildren(document.getElementById(fieldName));
}
/* utility method to remove all children of an element */
function removeChildren(myElement) {
	while(myElement.firstChild) {
		myElement.removeChild(myElement.firstChild);
	}
}
/* changes the parent page to the modalbox when a success event occurs */
function saveSuccess(nameGiven) {
	//if we were on Garage.jsp, we need to refresh the page
	if(location.href && location.href.indexOf('/upgrade_garage/Garage.jsp') > -1) {
		document.location.replace("/upgrade_garage/Garage.jsp?oEvent=event4");
		return;
	}
	try {
		//some cases will require that we explicitly hide the modalbox
		Modalbox.hide();
	} catch (err) { }

	/* change the "+ Save This Vehicle" to a checkmark with "Vehicle Saved!" */
	if(document.getElementById("svAdd")) {
		var svAdd = document.getElementById("svAdd");
		removeChildren(svAdd);
		svAdd.style.backgroundImage = 'url(/images/upgrade_garage/lp/blue_check_sm.gif)';
		svAdd.appendChild(document.createTextNode("Vehicle Saved!"));
	}
	/* hide the "Save This Vehicle" in the pers. vehicle nav */
	if(document.getElementById("persnavbarsavevehicle")) {
		document.getElementById("persnavbarsavevehicle").style.display = "none";
	}
	/* hide the | after "Save This Vehicle" in the pers. vehicle nav */
	if(document.getElementById("persVehPipe")) {
		document.getElementById("persVehPipe").style.display = "none";
	}
	/* change the name shown of the vehicle in the pers. vehicle nav */
	if(document.getElementById("persVehMMY")) {
		if(nameGiven.length) {
			removeChildren(document.getElementById("persVehMMY"));
			document.getElementById("persVehMMY").appendChild(document.createTextNode(nameGiven));
		}
	}
	/* the customer is now logged in, so if they weren't before, update
	   the "LOG IN" in the navigation to "LOG OUT"
	*/
	swapLoginText();
}
/* changes login in the navigation to logout */
function swapLoginText() {
	if(document.getElementById("login")) {
		var aTags = document.getElementById("login").getElementsByTagName("A");
		aTags[0].title = "Log Out";
		var aKids = aTags[0].childNodes;
		for(var i=0; i<aKids.length; i++) {
			if(aKids[i].data &&
			   aKids[i].data == "LOG IN") {
				aKids[i].data = "LOG OUT";
			}
		}
	}
}
/* used whenever there is an error with the modalbox */
function saveError() {
	try {
		Modalbox.hide();
	} catch (err) { }
	openInfoBox("/modalPopups/genericAlert.jsp?message=Pedimos+disculpas+hemos+experimentado+un+error+guardando+su+veh%26iacute%3Bculo.+Por+favor+intente+nuevamente+m%26aacute%3Bs+tarde.", 'Por+favor+intente+nuevamente+m\u00E0s+tarde', 'default', 'default');
}
/* function used in the jsp to make an AJAX call to the server and decide
   if we need to trigger a modalbox and which one to trigger if we do
*/
function callModalBox(vehicleString, whereFrom) {
	var url = "/upgrade_garage/QuickVehicleSaveServlet";
	if(vehicleString) { //needed if the current vehicle isn't the one to save
		url += "?" + vehicleString;
	}
	if(whereFrom) { //used in omniture
		if(url.indexOf("?") == -1) url += "?";
		url += "&whereFrom=" + whereFrom;
	}
	//used when the customer specifies what name they want to give the vehicle
	if(document.getElementById("vehicleName") != null &&
	  !document.getElementById("vehicleName").length > 0) {
		if(url.indexOf("?") == -1) url += "?";
		url += "&vehicleName=" + document.getElementById("vehicleName").value;
	}
        var ajax = new AJAXInteraction(url, modalBoxCallback);
        ajax.doGet();
}
/* processes the XML response for callModalBox...decides which modalbox to show
   if any
*/
function modalBoxCallback(responseXML) {
        if(responseXML) {
          if(responseXML.getElementsByTagName("qsStatus").length > 0) {
                var status_check = responseXML.getElementsByTagName("qsStatus")[0].firstChild.data;
		if(status_check == "error") {
			saveError();
		} else if(status_check == "needsLogin") {
			Modalbox.show("/register/modalbox_login_save.jsp", {title: "Ingrese y guarde este vehículo", width: 375}); 
		} else if(status_check == "hasDuplicates") {
			var multiURL = "/register/modalbox_save_multi.jsp";
			if(document.getElementById("vehicleName") != null &&
			   document.getElementById("vehicleName").value.length > 0) {
				multiURL += "?vehicleName=" + document.getElementById("vehicleName").value;
			}
			Modalbox.show(multiURL, {title: "Choose Vehicle", width: 375});
		} else if(status_check == "vehicleSaved") {
			if(responseXML.getElementsByTagName("omniture").length > 0) {
				logVehicleSaveEvent(responseXML.getElementsByTagName("omniture")[0].firstChild.data);
			} else {
				logVehicleSaveEvent();
			}
			if(responseXML.getElementsByTagName("nameGiven").length > 0) {
				saveSuccess(responseXML.getElementsByTagName("nameGiven")[0].firstChild.data);
			} else {
				saveSuccess('');
			}
		} else {
			saveError();
		}
          } else {
		saveError();
	  } 
	} else {
	  saveError();
	}
}
/* function used in the jsp to make an AJAX call to the server and decide
   if we need to trigger a modalbox and which one to trigger if we do.
   This is the function to use when the customer wants to specify the 
   vehicle name (Garage.jsp)
*/
function callModalBoxWithName(vehicleString) {
	var url = "/upgrade_garage/QuickVehicleSaveServlet?needsName=true" + vehicleString + "&whereFrom=GARAGE";
        var ajax = new AJAXInteraction(url, modalBoxWithNameCallback);
        ajax.doGet();
}
/* processes the XML response for callModalBoxWithName...decides which 
   modalbox to show if any
*/
function modalBoxWithNameCallback(responseXML) {
        if(responseXML) {
          if(responseXML.getElementsByTagName("qsStatus").length > 0) {
                var status_check = responseXML.getElementsByTagName("qsStatus")[0].firstChild.data;
		if(status_check == "error") {
			saveError();
		} else if(status_check == "needsLogin") {
			Modalbox.show("/register/modalbox_login_save_name.jsp", {title: "Ingrese y guardar veh&iacute;culo", width: 375}); 
		} else if(status_check == "hasDuplicates") {
			Modalbox.show("/register/modalbox_save_multi.jsp", {title: "Escoger veh&iacute;culo", width: 375});
		} else if(status_check == "needsName") {
			Modalbox.show("/register/modalbox_save_name.jsp", {title: "Guardar veh&iacute;culo", width: 375});
		} else if(status_check == "vehicleSaved") {
			logVehicleSaveEvent();
			window.location.reload(true);
		} else {
			saveError();
		}
          } else {
		saveError();
	  } 
	} else {
	  saveError();
	}
}
/* pulls data from the "saveMyVehicle" form and does a post to LoginServlet to
   attempt to login
*/
function tryLogin() {
	if(window.formSubmitted == "true") return;
	window.formSubmitted = "true";
	var url = "/register/LoginServlet";
	var ajax = new AJAXInteraction(url, loginCallback);
	var formString = "";
	var inputElements = document.getElementById("saveMyVehicle").getElementsByTagName("INPUT");
	for(var i=0; i<inputElements.length; i++) {
		if(inputElements[i].name) {
			if(i>0) formString += "&";
			formString += inputElements[i].name + "=" + inputElements[i].value;
		}
	}
	formString += "&ajaxLogin=true";
	ajax.doPost(formString);
}
/* processes the XML from tryLogin, if it fails, they are redirected to the 
   login page. If it succeeds, then we do a callModalBox to see if we have
   enough info to save the vehicle yet.
*/
function loginCallback(responseXML) {
	if(responseXML) {
		if(responseXML.getElementsByTagName("loginStatus").length > 0) {
			var status_check = responseXML.getElementsByTagName("loginStatus")[0].firstChild.data;
			if(status_check == "failed") {
				var myURL = "/register/LoginServlet?vehicleName=";
				if(document.getElementById("vehicleName") != null &&
				   document.getElementById("vehicleName").value.length > 0) {
					myURL += document.getElementById("vehicleName").value;
				}
				myURL += "&selection=password&newsletter=false&checkoutFlag=false&verifyPassword=false";	
				document.location = myURL;
			} else {
				swapLoginText();
				callModalBox();
			}
		}
	} else {
		document.loctation = "/register/LoginServlet";
	}
}
/* checks to see which "vehicleID" radio button is checked in the "selectOther"
   form.  Uses this to make an AJAX request to the server to change
   the current vehicle
*/
function setCurrentVehicle() {
	var selectedRadioValue = "0";
	var ids = document.selectOther.vehicleID;
	if(ids.length) {
		for(var i=0; i<ids.length; i++) {
			if(ids[i].checked) {
				selectedRadioValue = ids[i].value;
				break;
			}
		}
	} else if(ids.checked) {
		selectedRadioValue = ids.value;
	} else {
		if(document.getElementById("pleaseSelect")) {
			document.getElementById("pleaseSelect").style.display = "block";
		} else {
			openWarningBox('/modalPopups/genericAlert.jsp?message=Por+favor+elija+un+veh%26iacute%3Bculo.', 'Important: Haga una selecci&oacute;n', 'default', 'default');
		}
		return false;
	}
	if(selectedRadioValue == "0") {
		if(document.getElementById("pleaseSelect")) {
			document.getElementById("pleaseSelect").style.display = "block";
		} else {
			openWarningBox('/modalPopups/genericAlert.jsp?message=Por+favor+elija+un+veh%26iacute%3Bculo.', 'Important: Haga una selecci&oacute;n', 'default', 'default');
		}
		return false;
	}
	var url = "/upgrade_garage/QuickVehicleSaveServlet?changeCurrent=true&vehicleID=" + selectedRadioValue;
	var ajax = new AJAXInteraction(url, currVehicleCallback);
	ajax.doGet();
}
/* processes the XML returned from setCurrentVehicle */
function currVehicleCallback(responseXML) {
	if(responseXML) {
		if(responseXML.getElementsByTagName("qsStatus").length > 0) {
			var status_check = responseXML.getElementsByTagName("qsStatus")[0].firstChild.data;
			if(status_check == "success") {
				logVehicleSaveEvent();
				if(responseXML.getElementsByTagName("nameGiven").length > 0) {
					saveSuccess(responseXML.getElementsByTagName("nameGiven")[0].firstChild.data);
				} else {
					saveSuccess('');
				}
			} else {
				saveError();
			}
		} else {
			saveError();
		}
	} else {
		saveError();
	}
}
/* used when the customer is already logged in and has just provided a name
   for the vehicle they want to save.  Makes an AJAX request to the server
   to save the vehicle with the given name.
*/
function saveWithName() {
	if(window.formSubmitted == "true") return;
	window.formSubmitted = "true";
	var url = "/upgrade_garage/QuickVehicleSaveServlet?checkedMulti=true&vehicleName=" + document.getElementById("vehicleName").value;
	var ajax = new AJAXInteraction(url, saveWithNameCallback);
	ajax.doGet();
}
/* processes the XML returned from saveWithName */
function saveWithNameCallback(responseXML) {
	if(responseXML) {
		if(responseXML.getElementsByTagName("qsStatus").length > 0) {
			var status_check = responseXML.getElementsByTagName("qsStatus")[0].firstChild.data;
			if(status_check == "vehicleSaved") {
				logVehicleSaveEvent();
				if(responseXML.getElementsByTagName("nameGiven").length > 0) {
					saveSuccess(responseXML.getElementsByTagName("nameGiven")[0].firstChild.data);
				} else {
					saveSuccess('');
				}
			} else {
				saveError();
			}
		} else {
			saveError();
		}
	} else {
		saveError();
	}
}
/* checks to see if the customer has filled in the vehicleName field in 
   the "sv" form
*/
function checkVehName(){
   if(document.sv.vehicleName.value == "") {
	if(document.getElementById("pleaseChooseName")) {
		document.getElementById("pleaseChooseName").style.display = "block";
	} else {
      		openWarningBox('/modalPopups/genericAlert.jsp?message=Por+favor+escoja+un+nombre+para+su+veh%26iacute%3Bculo.', 'Important: Haga una selecci&oacute;n', 'default', 'default');
	}
      return false;
   }
   return true;
}
/* clears an error message */
function clearErrorMessage(errorName) {
	if(document.getElementById(errorName)) {
		document.getElementById(errorName).style.display = "none";
	}
}
/* logs the event in Omniture that indicates a vehicle was saved */
function logVehicleSaveEvent(myEVar20) {
    if(location.href && location.href.indexOf('/upgrade_garage/Garage.jsp') > -1) {
	return;
    }
    s=s_gi('tirellantas');
      if(myEVar20) {
      	s.linkTrackVars='events,eVar20';
	s.eVar20=myEVar20;
      } else {
      	s.linkTrackVars='events';
      }
      s.linkTrackEvents='event4';
      s.events='event4';
      s.tl(true, 'o', 'Quick Vehicle Save Success');
}
/* checks form fields in an Email a Friend modalbox */
function checkEAF() {
        var errors = false;
	errors = checkEmailAddress("userID");

	if(checkEmailAddress("senderEmail")) errors = true;

	if(checkGenericField("recipientName", "Please enter recipient's name.")) errors = true;

	if(checkGenericField("senderName", "Please enter your name.")) errors = true;
	return !errors;
}
/* runs through a set of checks on an email address and updates a status field
   with an error message
*/
function checkEmailAddress(idToCheck) {
	clearStatusFieldsModal(idToCheck + "Status");
	var errors = false;
        var email = document.getElementById(idToCheck);
        var messageArea = document.getElementById(idToCheck + "Status");
        var message = "";
	if(email.value == "") {
		if(idToCheck == "userID") {
			message = "Por favor, ingrese la direcci\u00F3n email del recipiente.";
		} else {
                        message = "Por favor, ingrese una direcci\u00F3n email.";
		}
        } else if(email.value.indexOf("'") > -1) {
                message = "Pedimos disculpas, no se puede utilizar ap\u00F3strofo.";
        } else if(email.value.search(/[\d\w]+@[\d\w-]+\.[\d\w]+/) < 0) {
                message = "Direcci\u00F3n email inv\u00E1lida.";
        }
        if(message != ""){
		messageArea.className = "mainsmallerred";
		var errorText = document.createTextNode(message);
		messageArea.appendChild(errorText);
		errors = true;
        } else {
		messageArea.className = "";
		removeChildren(messageArea);
	}
	return errors;
}
/* checks a generic field and displays a message in a status field */
function checkGenericField(idToCheck, emptyMessage) {
	clearStatusFieldsModal(idToCheck + "Status");
	var errors = false;
        if(document.getElementById(idToCheck).value == "") {
		document.getElementById(idToCheck + "Status").className = "mainsmallerred";
		var errorText = document.createTextNode(emptyMessage);
		document.getElementById(idToCheck + "Status").appendChild(errorText);
		errors = true;
        } else if(document.getElementById(idToCheck).value.indexOf("'") > -1){
		document.getElementById(idToCheck + "Status").className = "mainsmallerred";
		var errorText = document.createTextNode("Pedimos disculpas, no se puede utilizar ap\u00F3strofo.");
		document.getElementById(idToCheck + "Status").appendChild(errorText);
		errors = true;
	} else {
		document.getElementById(idToCheck + "Status").className = "";
		removeChildren(document.getElementById(idToCheck + "Status"));
        }
	return errors;
}

function checkForHighLowErrors(skipOverItem, itemCount){
	var url = "/cart/CartErrorsServlet";
  if(skipOverItem >= 0){
  	url += "?skipOverItem=" + skipOverItem;

    if(itemCount > 0){
    	url += "&itemCount=" + itemCount;
    }
  }

  var ajax = new AJAXInteraction(url, highLowCallback);
  ajax.doGet();
}

function highLowCallback(responseXML) {
	if(responseXML) {
  	if(responseXML.getElementsByTagName("loadRatingStatus").length > 0){
			var loadStatus = responseXML.getElementsByTagName("loadRatingStatus")[0].firstChild.data;

      if(loadStatus == "OK"){

      	if(location.href && location.href.indexOf('/cart/HoldingArea.jsp') > -1) {
					Modalbox.hide();
          //document.location.replace("/cart/TLWarning.jsp");
          document.location.href = "/cart/TLWarning.jsp";
          return;
        }
      }else{
      	var url = "/cart/modalbox_tire_load_warning.jsp?loadStatus=" + loadStatus;
        if(responseXML.getElementsByTagName("itemWithBadLoad").length > 0){
        	var item = responseXML.getElementsByTagName("itemWithBadLoad")[0].firstChild.data;
          url += "&badItem=" + item;
        }
        Modalbox.show(url, {title: "Precauci&oacute;n de carga del neum&aacute;tico", width: 400, warningStyle: true});
      }
		}
	}else{
  	Modalbox.hide();
	}
}
