var LABEL_FROM = "荷受先";
var LABEL_TO = "荷届先";
var LABEL_ADD = "経由地";
var LABEL_ROOT = "配送";
var BROWSER_IE = 0;
var BROWSER_OTHER = 1;
var MODE = "1";
var globalFrom = "";
var globalTo = "";
var globalFromGeo = "";
var globalToGeo = "";
var globalAdd = "";
var globalAddGeo = "";
var globalDoubleFlg = "0";
var globalDist = "0";
var globalRate = "0";
var globalKugaiRate = "0";
var globalAreaRate = "0";
var path = "/rs/";
var geocoder = new GClientGeocoder();

function browser() {
	var result = 0;
	if(navigator.appName=="Microsoft Internet Explorer"){
		result = BROWSER_IE;
    } else {
    	result = BROWSER_OTHER;
    }
    return result;
}

function createXmlHttpRequest() {
	if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		try {
			return new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			return new ActiveXObject("Microsoft.XMLHTTP");
		}
	} else {
		return null;
	}
}

function getGeo(v) {
	var geocoder = new GClientGeocoder();
	if (geocoder) {
		geocoder.getLatLng(v, function(point) {
				if (!point) {
					alert(v + " not found");
				} else {
					return point;
				}
			}
		);
	}
}

function radioDouble0_onclick() {
	document.getElementById("button_add").disabled = false;
}

function radioDouble1_onclick() {
	document.getElementById("button_add").disabled = true;
	var addedAddress = document.getElementById("added_address");
	while(addedAddress.childNodes.length > 0) {
		addedAddress.removeChild(addedAddress.childNodes[0]);
	}
}

function buttonCal_onclick() {
	cal();
}

function buttonAdd_onclick() {
	addAddress();
}

function addAddress() {
	wait();
	var tbody = document.getElementById("added_address");
	var l = tbody.getElementsByTagName("tr").length;
	var n = l + 1;
	if(l > 4) {
		alert("経由地は、5箇所までしか追加できません。\n5箇所以上必要な場合は電話でお問い合わせください。");
		endWait();
		return;
	}
	
	if(l == 0) {
		l = 1;
	} else {
		var temp = tbody.getElementsByTagName("tr")[l - 1];
		temp = temp.getElementsByTagName("td")[1];
		temp = temp.id;
		temp = temp.substring(3, temp.indexOf("_"));
		l = parseInt(temp) + 1;
	}
	var tr = document.createElement("tr");
	tr.setAttribute("id", "add" + l + "_tr");
	var td1 = document.createElement("td");
	td1.className = "label_add";
	td1.innerHTML = LABEL_ADD + n;
	var td2 = document.createElement("td"); 
	td2.setAttribute("id", "add" + l + "_todofuken");
	var td3 = document.createElement("td"); 
	td3.setAttribute("id", "add" + l + "_shikuchoson");
	var td4 = document.createElement("td"); 
	td4.setAttribute("id", "add" + l + "_choiki");
	var td5 = document.createElement("td"); 
	var buttonDelete = document.createElement("input"); 
	buttonDelete.setAttribute("id", "button_delete" + l);
	buttonDelete.setAttribute("type", "button");
	buttonDelete.setAttribute("value", "削除");
	buttonDelete.className = "button_delete";
	buttonDelete.onclick = function() {
		deleteAddress(this.id);
	}
		
	tr.appendChild(td1);
	tr.appendChild(td2);
	tr.appendChild(td3);
	tr.appendChild(td4);
	tr.appendChild(td5);
	td5.appendChild(buttonDelete);
	tbody.appendChild(tr);
	
	getTodofuken("add" + l);
	
	endWait();
	
}

function deleteAddress(id) {
	id = id.replace("button_delete", "");
	var tbody = document.getElementById("added_address");
	var childs = tbody.childNodes;
	var elem;
	for(i=0;i<childs.length;i++) {
		var temp = childs[i].id;
		if(temp == "add" + id + "_tr") {
			elem = childs[i];
		}
	}
	tbody.removeChild(elem);
	l = tbody.getElementsByTagName("tr").length;
	for(i = 1; i <= l; i++) {
		var temp = tbody.getElementsByTagName("tr")[i - 1];
		temp = temp.getElementsByTagName("td")[0];
		temp.innerHTML = LABEL_ADD + i
	}
}

function getTodofuken(objName) {
	setTodofuken("", objName);
}
function setTodofuken(data, objName) {
	document.getElementById(objName + "_shikuchoson").innerHTML = "<select id=\"" + objName + "_shikuchoson_kanji\" class=\"shikuchoson\" class=\"shikuchoson\"><option>----------</option></select>";
	document.getElementById(objName + "_choiki").innerHTML = "<select id=\"" + objName + "_choiki_kanji\" class=\"choiki\" class=\"choiki\"><option>----------</option></select>";
	getShikuchoson(objName);
	
}
function getShikuchoson(objName) {
	if(document.getElementById(objName + "_todofuken_kanji") && document.getElementById(objName + "_todofuken_kanji").selectedIndex == 0) {
		document.getElementById(objName + "_shikuchoson_kanji").selectedIndex = 0;
		document.getElementById(objName + "_choiki_kanji").selectedIndex = 0;
		return;
	}
	var d = "data_flg=" + encodeURIComponent("1");
	d = d + "&todofuken_kanji=" + encodeURIComponent(document.getElementById(objName + "_todofuken_kanji").options[document.getElementById(objName + "_todofuken_kanji").selectedIndex].text);
	aSyncRequest(setShikuchoson, objName, d);
}
function setShikuchoson(data, objName) {
	document.getElementById(objName + "_shikuchoson").innerHTML = "<select id=\"" + objName + "_shikuchoson_kanji\" class=\"shikuchoson\" onchange=\"getChoiki(\'" + objName + "\')\"><option style=\"background-color:aqua;\">市区町村を選択してください↓</option>" + data + "</select>";
	//document.getElementById(objName + "_shikuchoson").innerHTML = "<select id=\"" + objName + "_shikuchoson_kanji\" class=\"shikuchoson\" onchange=\"getChoiki(\'" + objName + "\')\">" + data + "</select>";
	document.getElementById(objName + "_choiki").innerHTML = "<select id=\"" + objName + "_choiki_kanji\" class=\"choiki\" class=\"choiki\"><option>----------</option></select>";
}
function getChoiki(objName) {
	if(document.getElementById(objName + "_shikuchoson_kanji") && document.getElementById(objName + "_shikuchoson_kanji").selectedIndex == 0) {
		document.getElementById(objName + "_choiki_kanji").selectedIndex = 0;
		return;
	}
	var d = "data_flg=" + encodeURIComponent("2");
	d = d + "&todofuken_kanji=" + encodeURIComponent(document.getElementById(objName + "_todofuken_kanji").options[document.getElementById(objName + "_todofuken_kanji").selectedIndex].text);
	d = d + "&shikuchoson_kanji=" + encodeURIComponent(document.getElementById(objName + "_shikuchoson_kanji").options[document.getElementById(objName + "_shikuchoson_kanji").selectedIndex].text);
	aSyncRequest(setChoiki, objName, d);
}

function setChoiki(data, objName) {
	document.getElementById(objName + "_choiki").innerHTML = "<select id=\"" + objName + "_choiki_kanji\" class=\"choiki\"><option style=\"background-color:pink;\">町域を選択してください↓</option>" + data + "</select>";
	//document.getElementById(objName + "_choiki").innerHTML = "<select id=\"" + objName + "_choiki_kanji\" class=\"choiki\">" + data + "</select>";
}

function aSyncRequest(callBackMethod, objName, data){
	var xmlreq = createXmlHttpRequest();
	if (xmlreq == null) {
		window.alert("xmlreq is null");
	} else if(xmlreq.readyState != 0) {
		xmlreq.abort();
		window.alert("abort!!");
	}
	xmlreq.onreadystatechange = handle;  
	xmlreq.open("POST", path + "KenAllServlet?" + data, true);
	xmlreq.setRequestHeader("Content-Type", "x-www-form-urlencoded");
	xmlreq.send(data);
	function handle() {
		if(xmlreq.readyState == 4) {
			if(xmlreq.responseText) {
				callBackMethod(xmlreq.responseText, objName);
			}
		}
	}
}

function cal(){
	
	wait();
	
	if(document.getElementById("from_choiki_kanji").selectedIndex == 0) {
		alert(LABEL_FROM + "を指定してください");
		endWait();
		return;
	}
	
	if(document.getElementById("to_choiki_kanji").selectedIndex == 0) {
		alert(LABEL_TO + "を指定してください");
		endWait();
		return;
	}

	var from = document.getElementById("from_todofuken_kanji").options[document.getElementById("from_todofuken_kanji").selectedIndex].text;
	from += document.getElementById("from_shikuchoson_kanji").options[document.getElementById("from_shikuchoson_kanji").selectedIndex].text;
	from += document.getElementById("from_choiki_kanji").options[document.getElementById("from_choiki_kanji").selectedIndex].text;
	globalFrom = from;
	var to = document.getElementById("to_todofuken_kanji").options[document.getElementById("to_todofuken_kanji").selectedIndex].text;
	to += document.getElementById("to_shikuchoson_kanji").options[document.getElementById("to_shikuchoson_kanji").selectedIndex].text;
	to += document.getElementById("to_choiki_kanji").options[document.getElementById("to_choiki_kanji").selectedIndex].text;
	globalTo = to;
	
	if(document.getElementById("added_address")) {
		var tbody = document.getElementById("added_address");
		var trs = tbody.getElementsByTagName("tr");
		var add = "";
			
		for(i=0;i<trs.length;i++) {
			var tds = trs[i].getElementsByTagName("td");
			var addTodofuken = tds[1].getElementsByTagName("select")[0];
			var addShikuchoson = tds[2].getElementsByTagName("select")[0];
			var addChoiki = tds[3].getElementsByTagName("select")[0];
	
			if(addChoiki.selectedIndex == 0) {
				alert((i + 1) + "番目の" + LABEL_ADD + "を指定してください");
				endWait();
				return;
			}
			
			add += addTodofuken.options[addTodofuken.selectedIndex].text;
			add += addShikuchoson.options[addShikuchoson.selectedIndex].text;
			add += addChoiki.options[addChoiki.selectedIndex].text;
			if(i != trs.length - 1) add += ",";
		}
		if(add.length > 0 && add.substring(add.length - 1, add.length) == ",") {
			add = add.substring(0, add.length - 1);
		}
		globalAdd = add;
	}	
	
	clearValue();

	getGeoFrom();
}

function getGeoFrom() {
	
	if (geocoder) {
		geocoder.getLatLng(trim(globalFrom), function(point) {
				if (!point) {
					alert(globalFrom + " not found");
				} else {
					globalFromGeo = point;
					getGeoTo();
				}
			}
		);
	}
}

function getGeoTo() {
	if (geocoder) {
		geocoder.getLatLng(trim(globalTo), function(point) {
				if (!point) {
					alert(globalTo + " not found");
				} else {
					globalToGeo = point;
					getGeoAdd();
				}
			}
		);
	}
}

var tempAdds = null;
var tempAddsNo = 0;

function getGeoAdd() {
	if(globalAdd.length > 0) {
		if (geocoder) {
			var adds = globalAdd.split(",");
			tempAdds = adds;
			tempAddsNo = 0;
			getAdd();
		}
	} else {
		aSyncCalRequest();
	}

}

function getAdd() {
	geocoder.getLatLng(trim(tempAdds[tempAddsNo]), function(point) {
			if (!point) {
				alert(globalTo + " not found");
			} else {
				globalAddGeo = globalAddGeo + point;
				tempAddsNo++;
				if(tempAddsNo < tempAdds.length) {
					globalAddGeo = globalAddGeo + ";";
					getAdd();
				} else {
					aSyncCalRequest();
				}
			}
		}
	);
}

function aSyncCalRequest(){
	
	var data = "from=" + encodeURIComponent(globalFrom);
	data += "&to=" + encodeURIComponent(globalTo);
	data += "&add=" + encodeURIComponent(globalAdd);
	data += "&from_geo=" + globalFromGeo;
	data += "&to_geo=" + globalToGeo;
	data += "&add_geo=" + globalAddGeo;
	var xmlreq = createXmlHttpRequest();
	if (xmlreq == null) {
		window.alert("xmlreq is null");
	} else if(xmlreq.readyState != 0) {
		xmlreq.abort();
		window.alert("abort!!");
	}
	
	xmlreq.onreadystatechange = handle;  
	xmlreq.open("POST", path + "CalculateServlet?" + data , true);
	xmlreq.setRequestHeader("Content-Type", "x-www-form-urlencoded");
	xmlreq.send("");
	function handle() {
		if(xmlreq.readyState == 4) {
			if(xmlreq.responseText) {
				endCal(xmlreq.responseText);
			}
		}
	}
}

function endCal(result) {
	
	var temp = result.split(",");
	var dist = temp[0];
	var rate = parseInt(temp[1]);
	var tachiyoriRate = parseInt(temp[2]);
	var area = trim(temp[3]);
	var kugaiDist = 0;
	var kugaiRate = 0;
	var kugaiPoint = "";
	var areaDist = 0;
	var areaRate = 0;
	var areaPoint = "";
	if(area.indexOf(":") > 0) {
		tempArea = area.split(":");
		kugaiDist = tempArea[0];
		kugaiRate = parseInt(tempArea[1]);
		kugaiPoint = tempArea[2];
		areaDist = tempArea[3];
		areaRate = parseInt(tempArea[4]);
		areaPoint = tempArea[5];
	}
	
	var sum = rate + kugaiRate + areaRate;
	if(kugaiPoint.length > 1) {
		//document.getElementById("kugai_point").innerHTML = kugaiPoint;
	}
	if(areaPoint.length > 1) {
		//document.getElementById("area_point").innerHTML = areaPoint;
	}
	document.getElementById("dist").innerHTML = dist + "&nbsp;km";
	document.getElementById("rate").innerHTML = "&yen;" + numberFormat(rate);
	document.getElementById("kugai_rate").innerHTML = "&yen;" + numberFormat(kugaiRate);
	document.getElementById("area_rate").innerHTML = "&yen;" + numberFormat(areaRate);
	document.getElementById("sum").innerHTML = "&yen;" + numberFormat(sum);
	
	if(document.getElementById("history")) {
		history();
	}
	
	endWait();
}

function history() {
	var tbody = document.getElementById("history");
	var l = tbody.getElementsByTagName("tr").length;
	var tr = document.createElement("tr");
	tr.setAttribute("id", "history_tr_" + l);
	var td1 = document.createElement("td");
	var td2 = document.createElement("td");
	var td3 = document.createElement("td");
	var td4 = document.createElement("td");
	var deleteButton = "<input id=\"history_button_" + l + "\" class=\"history_button\" type=\"button\" value=\"削\" onclick=\"historyDelete(this.id)\">";
	
	var from = "";
	var from_t = document.getElementById("from_todofuken_kanji").options[document.getElementById("from_todofuken_kanji").selectedIndex].text;
	var from_s = document.getElementById("from_shikuchoson_kanji").options[document.getElementById("from_shikuchoson_kanji").selectedIndex].text;
	var from_c = document.getElementById("from_choiki_kanji").options[document.getElementById("from_choiki_kanji").selectedIndex].text;
	from = from_t + from_s;
	if((from + from_c).length > 13) from += "<br>";
	from = from + from_c
	
	var to = "";
	var to_t = document.getElementById("to_todofuken_kanji").options[document.getElementById("to_todofuken_kanji").selectedIndex].text;
	var to_s = document.getElementById("to_shikuchoson_kanji").options[document.getElementById("to_shikuchoson_kanji").selectedIndex].text;
	var to_c = document.getElementById("to_choiki_kanji").options[document.getElementById("to_choiki_kanji").selectedIndex].text;
	to = to_t + to_s;
	if((from + to_c).length > 13) from += "<br>";
	to = to + to_c
	
	
	td1.innerHTML = from;
	td1.className = "history_from";
	td2.innerHTML = to;
	td2.className = "history_to";
	td3.innerHTML = document.getElementById("sum").innerHTML;
	td3.className = "history_sum";
	td4.innerHTML = deleteButton;
	tr.appendChild(td1);
	tr.appendChild(td2);
	tr.appendChild(td3);
	tr.appendChild(td4);
	
	tbody.appendChild(tr);
	
}

function historyDelete(v) {
	var n = v.replace("history_button_", ""); 
	document.getElementById("history").removeChild(document.getElementById("history_tr_" + n));
}

function error() {

}

function wait() {
	document.getElementById("button_cal").disabled = true;
	document.getElementById("message").className = "message_visible";
	document.getElementById("message").innerHTML = "通信中...";
}

function endWait() {
	document.getElementById("button_cal").disabled = false;
	document.getElementById("message").className = "message_hidden";
	document.getElementById("message").innerHTML = "&nbsp;";
}

function clearValue() {
	//document.getElementById("kugai_point").innerHTML = "&nbsp;";	
	//document.getElementById("area_point").innerHTML = "&nbsp;";	
	document.getElementById("dist").innerHTML = "&nbsp;";	
	document.getElementById("rate").innerHTML = "&nbsp;";	
	document.getElementById("kugai_rate").innerHTML = "&nbsp;";	
	document.getElementById("area_rate").innerHTML = "&nbsp;";	
	document.getElementById("sum").innerHTML = "&nbsp;";	
}

function numberFormat(n) {
    var s = "" + n;
    s = parseInt(s);
    s = "" + s;
    var p = s.indexOf(".");
    if (p < 0) {
        p = s.length;
    }
    var r = s.substring(p, s.length);
    for (var i = 0; i < p; i++) {
        var c = s.substring(p - 1 - i, p - 1 - i + 1);
        if (c < "0" || c > "9") {
            alert(c);
            r = s.substring(0, p - i) + r;
            break;
        }
        if (i > 0 && i % 3 == 0) {
            r = "," + r;
        }
        r = c + r;
    }
    return r;
}

function trim(s) {
	var result = s;
	result = s.replace(" ","");
	result = result.replace("　","");
	return result;
}

function numberCheck(s) {
	
	var result = false;
	if(isNaN(s)) {
		result = true;
	}
	
	return result;
}

function mailaddressCheck(mailaddress){

	var xmlreq = createXmlHttpRequest();
	if (xmlreq == null) {
		window.alert("xmlreq is null");
	} else if(xmlreq.readyState != 0) {
		xmlreq.abort();
		window.alert("abort!!");
	}
	xmlreq.onreadystatechange = handle;  
	xmlreq.open("POST", path + "CheckMailaddressServlet?mailaddress=" + mailaddress , true);
	xmlreq.setRequestHeader("Content-Type", "x-www-form-urlencoded");
	xmlreq.send("");
	function handle() {
		if(xmlreq.readyState == 4) {
			if(xmlreq.responseText) {
				var result = xmlreq.responseText;
				return result;
			}
		}
	}
}