var geocoder;
var directions;

function is_numeric(mixed_var) {
	if(mixed_var==="") return false;
	return !isNaN(mixed_var*1);
}

function in_array(needle, haystack, argStrict) {
	var key = '', strict = !!argStrict;
	if(strict) { for (key in haystack) if (haystack[key] === needle) return true; } else { for (key in haystack) if (haystack[key] == needle) return true; }
	return false;
}

String.prototype.count=function(s1) { 
    return (this.length - this.replace(new RegExp(s1,"g"), '').length) / s1.length;
}

function checkZipMap(elem,sect,addr) {
	document.forms['transportcalc'][sect+"zip"].value = "";
	var zip = elem.value;
	if(zip.length>0) {
		if(sect=="end") { 
			document.forms['transportcalc'].exitport.selectedIndex = 0;
			document.forms['transportcalc'].usercountry.selectedIndex = 0;
			document.forms['transportcalc'].usercountry.disabled = true;
			document.forms['transportcalc'].userport.length = 1;
			document.forms['transportcalc'].userport.disabled = true;
		}
		if(sect=="start") {
			document.forms['transportcalc'].auctionhouse.selectedIndex = 0;
			document.forms['transportcalc'].shifrauc.length=1;
		}
	}
	if(is_numeric(zip.charAt(0))) { try{res(elem,numb);elem.maxLength=5;}catch(e){} } else { try{res(elem,numb+alpha);elem.maxLength=6;}catch(e){} }
	if(!zip || !((is_numeric(zip.charAt(0)) && zip.length==5) || (!is_numeric(zip.charAt(0)) && zip.length==6))) { 
		document.getElementById("oceanraterow2").style.display = "none"; 
		return;
	}

	if(!geocoder) geocoder = new google.maps.Geocoder();
	if(geocoder) {
		geocoder.geocode( { 'address': zip}, function(results, status) {
			var found = false;
			if (status == google.maps.GeocoderStatus.OK && status!=google.maps.GeocoderStatus.ZERO_RESULTS && results.length>0) {
				for (var index in results[0].address_components) {
					if(results[0].address_components[index]["types"] && in_array("country",results[0].address_components[index]["types"])) {
						if(results[0].address_components[index]["short_name"]=="US" || results[0].address_components[index]["short_name"]=="CA") {
							var arr = new Array(results[0].address_components[index]["short_name"],zip,results[0].geometry.location.lat(),results[0].geometry.location.lng());
							document.forms['transportcalc'][sect+"zip"].value = arr.join("|");
							singleajaxreqrate();
							found = true;
						}
					}
				}
			}
			if(!found){ alert("Zip/Postal Code Not Found: " + status); }
		});
    }
}

function unknownLocation(addr,lat,lng,auction) {
	if(lat&&lng) {
		var posn = new google.maps.LatLng(lat,lng);
		unknownLocationDisplay(posn,addr,auction);
	} else if(addr) {
		if(!geocoder) geocoder = new google.maps.Geocoder();
		if(geocoder) {
			geocoder.geocode( { 'address':addr}, function(results, status) {
				if (status == google.maps.GeocoderStatus.OK && status!=google.maps.GeocoderStatus.ZERO_RESULTS && results.length>0) {
					var posn = results[0].geometry.location;
					unknownLocationDisplay(posn,addr,auction);
				} else {
					alert("Location Not Found: " + status);
				}
			});
		}
	}
}

function unknownLocationDisplay(posn,addr,auction) {
	var marker = new google.maps.Marker({map:map,position:posn,map:map,title:"",icon:getIcon("error")});
	map.setCenter(posn);
	allmarkers.push(marker);
	myHtml = "<table style=''><tr>";
	if(auction) myHtml+= "<td><img src='http://www.exporttrader.com/im/auctionslogo/" + auction + ".gif' width=70 height=20 border=1></td>";
	myHtml+= "<td><b>Location:</b><br>" + addr + "</td></tr></table>";
	var infowindow = new google.maps.InfoWindow({content: myHtml});
	infowindow.open(map, marker);
}

function auctionhousePopulate(defauct) {
	var elem = document.forms['transportcalc'].auctionhouse;
	elem.length=1;
	for(namauct in auctData) { 
		if (auctData[namauct]) { 
			elem.options[elem.length] = new Option(auctData[namauct]["n"],namauct); 
			if(defauct && defauct==namauct) elem.options[elem.length-1].selected = true;
		}
	}
}

function shifraucPopulate(defauct) {
	var elem = document.forms['transportcalc'].shifrauc;
	var KodAuc = document.forms['transportcalc'].auctionhouse.value;
	elem.length = 1;
	if (KodAuc && auctData[KodAuc]["locations"]) {
		elem.disabled = false;
		for(locauct in auctData[KodAuc]["locations"]) { 
			elem.options[elem.length] = new Option(auctData[KodAuc]["locations"][locauct][0],locauct); 
			if(defauct && defauct==locauct) elem.options[elem.length-1].selected = true;
		}
	}
	document.forms['transportcalc'].startzip.value = "";
	document.getElementById("lstart_zip").value = "";
}

function exitportPopulate(ports,defport) {
	var elem = document.forms['transportcalc'].exitport;
	if(!elem || !oceanports) return;
	if(!ports) { ports = ['US','CA']; }
	elem.length=1;
	for(var namport in oceanports) {
		if (!oceanports[namport] || !in_array(namport,ports)) continue;
		for(exitport in oceanports[namport]["ports"]) {
			elem.options[elem.length] = new Option(oceanports[namport]["ports"][exitport][0],exitport);
			if(defport && defport==exitport) {	elem.options[elem.length-1].selected = true;  }
		}
	}
}

function exitportChange(val) {
	document.forms['transportcalc'].endzip.value="";
	document.getElementById("lend_zip").value = "";
	if(val) {
		document.forms['transportcalc'].usercountry.disabled = false;
		document.forms['transportcalc'].userport.disabled = false;
	}
}

function userCountryPopulate(countries,selected) {
	var elem = document.forms['transportcalc'].usercountry;
	if(!countries) { countries=['US','CA']; }
	elem.length=1;
	var listtmp = new Array();
	for(var namport in oceanports) { 
		if(!in_array(namport,countries)) { listtmp[listtmp.length] = oceanports[namport]['n'] + ':' + namport; }
	}
	if(listtmp.length>0) {
		listtmp.sort();
		for(var i=0;i<listtmp.length;i++) {
			var el = listtmp[i].split(':');
			elem.options[elem.length] = new Option(el[0],el[1]);
			if(selected && selected==el[1]) elem.options[elem.length-1].selected = true;
		}
	}
}


function userPortPopulate(selected) {
	var elem = document.forms['transportcalc'].userport;
	var KodCou = document.forms['transportcalc'].usercountry.value;
	if(!elem || !oceanports) return;
	elem.length = 1;
	if (KodCou && oceanports[KodCou]["ports"]) {
		for(namport in oceanports[KodCou]["ports"]) {
			elem.options[elem.length] = new Option(oceanports[KodCou]["ports"][namport][0],namport);
			if(selected && selected==namport) elem.options[elem.length-1].selected = true;
		}
	}
}

function switchAuctionAndZipCode(mode) {
	if(mode) {
		document.getElementById("zzvtabauctions").style.display = "block";
		document.getElementById("zzvtabpostalfrom").style.display = "none";
	} else {
		document.getElementById("zzvtabauctions").style.display = "none";
		document.getElementById("zzvtabpostalfrom").style.display = "block";
	}
}

function switchExitPortAndZipCode(mode) {
	if(mode) {
		document.getElementById("zzvtabexitport").style.display = "block";
		document.getElementById("zzvtabpostalto").style.display = "none";
	} else {
		document.getElementById("zzvtabexitport").style.display = "none";
		document.getElementById("zzvtabpostalto").style.display = "block";
	}
}

function switchYearMakeModelCBM(mode) {
	if(mode) {
		document.getElementById("zzvtabyearmakemodel").style.display = "block";
		document.getElementById("zzvtabcubicmeters").style.display = "none";
	} else {
		document.getElementById("zzvtabyearmakemodel").style.display = "none";
		document.getElementById("zzvtabcubicmeters").style.display = "block";
	}
}

function radioButtonChange(firsttime) {
	var tmptmp = getRadioChecked(document.forms['transportcalc'].oceanratessel);
	if(tmptmp!="orororatehtml") {
		document.getElementById("yearmakemodelidsds").style.display = "none";
	} else {
		document.getElementById("yearmakemodelidsds").style.display = document.getElementById("staticrow").style.display;
	}
	calcTotalRate();
	if(!firsttime) mapquickrefresh();
}

function calcTotalRate() {
	function addCommas(someNum) {
		while(someNum.match(/^(.*\d)(\d{3}(\.|,|$).*$)/)){ someNum = someNum.replace(/^(.*\d)(\d{3}(\.|,|$).*$)/, '$1,$2'); }
		return someNum;
	}
	var total = 0;
	var tmptmp = document.getElementById("groundrateidhtml").innerHTML;
	tmptmp = tmptmp.replace("$","").replace(",","");
	if(is_numeric(tmptmp)) total+= parseInt(tmptmp);
	tmptmp = getRadioChecked(document.forms['transportcalc'].oceanratessel);
	if(!tmptmp) setRadioChecked(document.forms['transportcalc'].oceanratessel,"ocont40ft3carsconsol");
	if(tmptmp) {
		tmptmp = document.getElementById(tmptmp).innerHTML;
		tmptmp = tmptmp.replace("$","").replace(",","");
		if(is_numeric(tmptmp)) total+= parseInt(tmptmp);
	}
	if(total) {
		document.getElementById("totalratehtml").innerHTML = "$" + addCommas(total.toFixed(2));
	} else {
		document.getElementById("totalratehtml").innerHTML = "Please CALL";
	}
	document.getElementById("oceanraterow2").style.display = document.getElementById("staticrow").style.display;
}

function getRadioChecked(radioObj) {
	if(!radioObj) return "";
	for(var i=0;i<radioObj.length;i++) { if(radioObj[i].checked && !radioObj[i].disabled) return radioObj[i].value; }
	return "";
}

function setRadioChecked(radioObj, newValue) {
	if(!radioObj) return;
	for(var i = 0; i < radioObj.length; i++) {
		radioObj[i].checked = false;
		if(radioObj[i].value == newValue.toString()) radioObj[i].checked = true;
	}
}

function cubicMetersChanged() {
	document.forms['transportcalc'].vehicleyear.value = "";
	document.forms['transportcalc'].vehiclemake.length = 1;
	document.forms['transportcalc'].vehiclemodel.length = 1;
	singleajaxreqrate();
}

function showHideOceanElems(showocean) {
	var hid = ["ocont40ft3carsconsol","ocont40ft2cars","ocont40ft3cars","ocont40ft4cars","orororatehtml"];
	if(!showocean) {
		for(var i in hid) {
			document.getElementById(hid[i]).innerHTML = "";
			document.getElementById(hid[i]+"radio").style.visibility = "hidden";
			document.getElementById(hid[i]+"desc").style.visibility = "hidden";
		}
		document.getElementById("yearmakemodelidsds").style.display = "none";
	} else {
		for(var i in hid) {
			document.getElementById(hid[i]+"radio").style.visibility = "visible";
			document.getElementById(hid[i]+"desc").style.visibility = "visible";
		}
		if(getRadioChecked(document.forms['transportcalc'].oceanratessel)=="orororatehtml") document.getElementById("yearmakemodelidsds").style.display = document.getElementById("staticrow").style.display;
	}
}

// --AJAX-- Rates
function singleajaxreqrate() {
	showHideOceanElems();
	var hid = ["groundrateidhtml","totalratehtml"];
	for(var i in hid) document.getElementById(hid[i]).innerHTML = "";
	document.getElementById("oceanraterow2").style.display = "none";
	try { mapquickrefresh(); } catch(e) {}

	var p1 = document.forms['transportcalc'].shifrauc.value || document.forms['transportcalc'].startzip.value;
	var p2 = document.forms['transportcalc'].exitport.value || document.forms['transportcalc'].endzip.value;
	var p3 = document.forms['transportcalc'].userport.value;
	if((p1&&p2)||(p2&&p3)) {
		var req = new Subsys_JsHttpRequest_Js();
		req.onreadystatechange = function() {
			if (req.readyState == 4) {
				if (req.responseJS) {
					var jsfordoitnow = (req.responseJS.jscodeforeval||'');
					if (jsfordoitnow) eval(jsfordoitnow);
					calcTotalRate();
					try { mapquickrefresh(); } catch(e) {}
					if(document.getElementById("totalratehtml").innerHTML) {
						document.getElementById("oceanraterow2").style.display = document.getElementById("staticrow").style.display;
					}
				}
			}
		}
		//req.caching = true;
		req.open('POST', basescripturl + "ajaxloadopen.php3", true);
		req.send({ requested: "getrates", auctionhouse: document.forms['transportcalc'].auctionhouse.value, shifrauc: document.forms['transportcalc'].shifrauc.value, startzip: document.forms['transportcalc'].startzip.value.replace(/\|/g,"^"), exitport: document.forms['transportcalc'].exitport.value, endzip: document.forms['transportcalc'].endzip.value.replace(/\|/g,"^"), userport: document.forms['transportcalc'].userport.value, rorocubicmeters: document.forms['transportcalc'].rorocubicmeters.value });
	}
}

// --AJAX-- year/make/model
function singleajaxreqyearmake(type) {
	if(type=="getmakes") {
		document.forms['transportcalc'].rorocubicmeters.value = "";
		document.forms['transportcalc'].vehiclemake.length=1;
		document.forms['transportcalc'].vehiclemodel.length=1;
		if(!document.forms['transportcalc'].vehicleyear.value) return;
	}
	if(type=="getmodels") {
		document.forms['transportcalc'].rorocubicmeters.value = "";
		document.forms['transportcalc'].vehiclemodel.length=1;
		if(!document.forms['transportcalc'].vehiclemake.value) return;
	}
	if(type=="getcbm") {
		document.forms['transportcalc'].rorocubicmeters.value = "";
		if(!document.forms['transportcalc'].vehiclemodel.value) return;
	}
	
	var req = new Subsys_JsHttpRequest_Js();
	req.onreadystatechange = function() {
		if (req.readyState == 4) {
			if (req.responseJS) {
				var jsfordoitnow = (req.responseJS.jscodeforeval||'');
				if (jsfordoitnow) eval(jsfordoitnow);
				mapquickrefresh();
			}
		}
	}
	//req.caching = true;
	req.open('POST', basescripturl + "ajaxloadopen.php3", true);
	req.send({ requested:type, vehicleyear:document.forms['transportcalc'].vehicleyear.value, vehiclemake:document.forms['transportcalc'].vehiclemake.value, vehiclemodel:document.forms['transportcalc'].vehiclemodel.value });
}

function populateYearMakeModel(year,make,model){
	document.forms['transportcalc'].vehiclemake.length=1;
	document.forms['transportcalc'].vehiclemodel.length=1;
	if(year) {
		document.forms['transportcalc'].vehicleyear.value = year;
		var req = new Subsys_JsHttpRequest_Js();
		req.onreadystatechange = function() {
			if (req.readyState == 4 && req.responseJS) {
				var jsfordoitnow = (req.responseJS.jscodeforeval||'');
				if (jsfordoitnow) eval(jsfordoitnow);
				if(make) {
					document.forms['transportcalc'].vehiclemake.value = make;
					var req1 = new Subsys_JsHttpRequest_Js();
					req1.onreadystatechange = function() {
						if (req1.readyState == 4 && req1.responseJS) {
							var jsfordoitnow = (req1.responseJS.jscodeforeval||'');
							if (jsfordoitnow) eval(jsfordoitnow);
							if(model) {
								document.forms['transportcalc'].vehiclemodel.value = model;
								var req2 = new Subsys_JsHttpRequest_Js();
								req2.onreadystatechange = function() {
									if (req2.readyState == 4 && req2.responseJS) {
										var jsfordoitnow = (req2.responseJS.jscodeforeval||'');
										if (jsfordoitnow) eval(jsfordoitnow);
									}
								}
								req2.open('POST', basescripturl + "ajaxloadopen.php3", true);
								req2.send({ requested:"getcbm", vehicleyear:document.forms['transportcalc'].vehicleyear.value, vehiclemake:document.forms['transportcalc'].vehiclemake.value, vehiclemodel:document.forms['transportcalc'].vehiclemodel.value });
							}
						}
					}
					req1.open('POST', basescripturl + "ajaxloadopen.php3", true);
					req1.send({ requested:"getmodels", vehicleyear:document.forms['transportcalc'].vehicleyear.value, vehiclemake:document.forms['transportcalc'].vehiclemake.value, vehiclemodel:document.forms['transportcalc'].vehiclemodel.value });
				}
			}
		}
		req.open('POST', basescripturl + "ajaxloadopen.php3", true);
		req.send({ requested:"getmakes", vehicleyear:document.forms['transportcalc'].vehicleyear.value, vehiclemake:document.forms['transportcalc'].vehiclemake.value, vehiclemodel:document.forms['transportcalc'].vehiclemodel.value });
	}
}

