function v_dl(f) {
// purpose: validates dealer locator search form
	if (f) {
		var prefix="dl-f-";
		var obj	=document.getElementById(prefix+"zip");
		var obj1=document.getElementById(prefix+"city");
		// zip code
		if (obj!=null) {
			if(obj.value.length==0) {
				// city
				if (obj1!=null) {
					if (obj1.value.length==0) {
						if (obj.getAttribute("title")!=null) alert (obj.getAttribute("title"));
						obj.value.length>0?obj.select():obj.focus();
						return false;
					}
				}
				// state
				obj1=document.getElementById(prefix+"state");
				if (obj1!=null) {
					if (obj1.selectedIndex<=0) {
						if (obj1.getAttribute("title")!=null) alert (obj1.getAttribute("title"));
						obj1.focus();
						return false;
					}
				}
			}else{
				check=v_zip(obj.value);
				if(check!="ok") {
					if (check!=null) alert(check);
					obj.value.length>0?obj.select():obj.focus();
					return false;
				}
			}
		}
		// trim all values and convert them to lower case
		trim_all(f);
		l_case(f);
	}else{
		return null;
	}
}

function v_dl_home(f) {
// purpose: validates dealer locator search form on the homepage
	if (f) {
		var prefix="dl-f-";
		// city
		obj=document.getElementById(prefix+"city");
		if (obj!=null) {
			if (obj.value.length==0 || (obj.value.length>0 && obj.value.toLowerCase()=="enter city")) {
				if (obj.getAttribute("title")!=null) alert (obj.getAttribute("title"));
				obj.value.length>0?obj.select():obj.focus();
				return false;
			}
		}
		// state
		obj=document.getElementById(prefix+"state");
		if (obj!=null) {
			if (obj.selectedIndex<=0) {
				if (obj.getAttribute("title")!=null) alert (obj.getAttribute("title"));
				obj.focus();
				return false;
			}
		}
		// trim all values and convert them to lower case
		trim_all(f);
		l_case(f);
		// check the address value
		obj=document.getElementById(prefix+"address");
		if (obj!=null && obj.value=="enter address (optional).") clear_value(obj);
	}else{
		return null;
	}
}

function v_dl_zip(f) {
// purpose: validates dealer locator search form on the homepage
	if (f) {
		var prefix="dl-f-";
		var obj	=document.getElementById(prefix+"zip");
		// zip code
		if (obj!=null) {
			check=v_zip(obj.value);
			if(check!="ok") {
				if (check!=null) alert(check);
				obj.value.length>0?obj.select():obj.focus();
				return false;
			}
		}
		// trim all values and convert them to lower case
		trim_all(f);
		l_case(f);
	}else{
		return null;
	}
}

function v_dir(f) {
// purpose: validates dealer driving directions request form
	if (f) {
		var prefix="dir-f-";
		// address
		var obj=document.getElementById(prefix+"address");
		if (obj!=null && (obj.value.length==0 || trim(obj.value.toLowerCase())=="*your address")) {
			if (obj.getAttribute("title")!=null) alert (obj.getAttribute("title"));
			obj.value.length>0?obj.select():obj.focus();
			return false;
		}
		// city
		obj=document.getElementById(prefix+"city");
		if (obj!=null && (obj.value.length==0 || trim(obj.value.toLowerCase())=="*your city")) {
			if (obj.getAttribute("title")!=null) alert (obj.getAttribute("title"));
			obj.value.length>0?obj.select():obj.focus();
			return false;
		}
		// state
		obj=document.getElementById(prefix+"state");
		if (obj!=null && obj.selectedIndex<=0) {
			if (obj.getAttribute("title")!=null) alert (obj.getAttribute("title"));
			obj.focus();
			return false;
		}
		// zip code
		obj	=document.getElementById(prefix+"zip");
		if (obj!=null) {
			var check=v_zip(obj.value);
			if(check!="ok") {
				alert(check);
				obj.value.length>0?obj.select():obj.focus();
				return false;
			}
		}
		// trim all values and convert them to lower case
		trim_all(f);
		l_case(f);
	}
}

function v_zip(zip) {
// purpose: validates US zip code
	var valid="0123456789-";
	var count=0;
	var check="ok";
	
	if (zip.length!=5 && zip.length!=10 && zip.length!=9) check="Ingrese su c\363digo postal de 5 d\355gitos o de 5+4 d\355gitos.";
	
	for (var i=0; i<zip.length; i++) {
		temp=""+zip.substring(i, i+1);
		if (temp=="-") count++;
		if (valid.indexOf(temp)=="-1") check="Su c\363digo postal contiene caracteres no v\341lidos. Vuelva a ingresarlo.";
		
		if ((count>1) || ((zip.length==10) && ""+zip.charAt(5)!="-")) check="El car\341cter de gui\363n se debe utilizar en el formato adecuado del c\363digo de 5+4 d\355gitos, como por ejemplo en '12345-6789'. Vuelva a ingresarlo.";
	}
	return check;
}

function l_trim(str) {
// purpose: strips away all leading white-space characters
    var s=new String(str);
    var whitespace=new String(' \t\n\r');

    if (whitespace.indexOf(s.charAt(0)) != -1) {
        var j=0, i=s.length;
        while (j<i && whitespace.indexOf(s.charAt(j))!=-1)
            j++;
        s=s.substring(j, i);
    }
    return s;
}

function r_trim(str) {
// purpose: strips away all trailing white-space characters
    var s=new String(str);
    var whitespace=new String(' \t\n\r');
	
    if (whitespace.indexOf(s.charAt(s.length-1))!=-1) {
        var i=s.length-1;
        while (i>=0 && whitespace.indexOf(s.charAt(i))!=-1)
            i--;
        s=s.substring(0, i+1);
    }
    return s;
}

function trim(str) {
// purpose: strips away all leading and trailing white-space characters
    return r_trim(l_trim(str));
}

function trim_all(f) {
// purpose: trim() text and hidden input values
	if (f) {
	    for (var x=0; x<f.elements.length; x++) {
			if (f.elements[x].type=="text" || f.elements[x].type=="hidden") {
	            f.elements[x].value = trim(f.elements[x].value);
	        }
	    }
	}
}

function l_case(f) {
// purpose: changes all text input values to lowercase
	if (f) {
	    for (var x=0; x<f.elements.length; x++) {
			if (f.elements[x].type=="text") {
	            f.elements[x].value = f.elements[x].value.toLowerCase();
	        }
	    }
	}
}

function clear_value(el) {
// purpose: removes the value of the element
	el.value="";
}