var ua = navigator.userAgent.toLowerCase();
var isGecko = (ua.indexOf('gecko') != -1 && ua.indexOf('spoofer') == -1 && 
	ua.indexOf('khtml') == -1 && ua.indexOf('netscape/7.0') == -1);

var submitted = false;
	
function initialize() {
	var forms = document.getElementsByTagName("form");
	for(var i = 0; i < forms.length; i++) {
		forms[i].onsubmit = function(e) {
			if(submitted) {
				return false;
			}
			submitted = true;
			return true;
		};
	}
	Ext.onReady(function() {
		Ext.QuickTips.init();
		setUpFormFields();
		setUpTabPanels();
	});
};

function setUpFormFields() {
	var inputs = document.getElementsByTagName("input");
	for(var i = 0; i < inputs.length; i++) {
		var e = inputs[i];
		if(e.type == "text") {
			if(Element.hasClassName(e, "x-ext-email")) {
				new Ext.form.TextField({ applyTo: e, vtype: "email" });
			}
			else if(Element.hasClassName(e, "x-ext-int")) {
				new Ext.form.NumberField({ applyTo: e, allowDecimals: false });
			}
			else if(Element.hasClassName(e, "x-ext-decimal")) {
				new Ext.form.NumberField({ applyTo: e, allowDecimals: true });
			}
/*
			else if(Element.hasClassName(e, "x-ext-time")) {
				new Ext.form.TimeField({ applyTo: e, format: "H:i:s", validationEvent: false });
			}
			else if(Element.hasClassName(e, "x-ext-datetime")) {
				new Ext.form.DateField({ applyTo: e, format: "Y/m/d H:i:s", validationEvent: false });
			}
*/
			else {
				new Ext.form.TextField({ applyTo: e });
			}
		}
		else if(e.type == "password") {
			new Ext.form.TextField({ applyTo: e });
		}
		else if(e.type == "checkbox") {
			/*
			var label = findSibling(e, "x-ext-label");
			if(label) {
				new Ext.form.Checkbox({ applyTo: e, boxLabel: label.innerText || label.textContent });
				Element.hide(label);
			}
			else {
				new Ext.form.Checkbox({ applyTo: e });
			}
			*/
		}
	}
	var textareas = document.getElementsByTagName("textarea");
	for(var i = 0; i < textareas.length; i++) {
		var e = textareas[i];
		if(e.readOnly) {
			continue;
		}
		if(Element.hasClassName(e, "x-ext-html-deferred")) {
			// do nothing
		}
		else if(Element.hasClassName(e, "x-ext-html")) {
			setUpHtmlEditor(e);
		}
		else {
			new Ext.form.TextArea({ applyTo: e });
		}
	}
};

function setUpDeferredFormFields(c) {
	var textareas = Ext.DomQuery.select("textarea[class*=x-ext-html-deferred]", c);
	for(var i = 0; i < textareas.length; i++) {
		var e = textareas[i];
		if(e.readOnly) {
			continue;
		}
		setUpHtmlEditor(e);
		Element.removeClassName(e, "x-ext-html-deferred");
	}
};

function setUpHtmlEditor(e) {
	new Ext.form.HtmlEditor({
		applyTo: e,
		fontFamilies: [
			"ＭＳ Ｐゴシック", "ＭＳ Ｐ明朝",
			"Arial", "Comic Sans MS", "Courier New", "Tahoma", "Times New Roman", "Verdana"
		]
	});
};

function setUpTabPanels() {
	var e = $("x-ext-tab");
	if (e) {
		var tabs = [];
		for (var i = 0; i < e.childNodes.length; i++) {
			var child = e.childNodes[i];
			if (Object.isElement(child) && child.tagName.toLowerCase() == 'div') {
				tabs.push({
					contentEl: child,
					title: child.getAttribute("x-ext-title") || "Tab",
					listeners: { activate: function(elem) { setUpDeferredFormFields(elem.body.dom); } }
				});
			}
		}
		new Ext.TabPanel({
			renderTo: e,
			items: tabs,
			activeTab: 0,
			plain: true,
			defaults: { autoWidth: true, autoHeight: true }
		});
	}
};

function findSibling(e, className) {
	for(; e != null; e = e.nextSibling) {
		if(Object.isElement(e) && Element.hasClassName(e, className)) {
			return e;
		}
	}
	return null;
};
	
function release() {
	if(typeof(GUnload) == "function") { // Google Maps
		GUnload();
	}
}

var gmap_entries = [];
var g_geocoder = null;
if(typeof(GClientGeocoder) == "function") {
	g_geocoder = new GClientGeocoder();
}
var gmap_default_lat = 35.681099;
var gmap_default_lng = 139.767084;
var gmap_default_zoom = 13;

function registerAllGoogleMaps() {
	var mapSelector = new Selector(".vz-gmap");
	var initialLatLngSelector = new Selector(".vz-gmap-initial-lat-lng");
	var locationSelector = new Selector(".vz-gmap-location");
	var searchSelector = new Selector(".vz-gmap-search");
	var latLngSelector = new Selector(".vz-gmap-lat-lng");

	$$(".vz-gmap-container").each(function(e) {
		var map = mapSelector.findElements(e)[0];
		var initialLatLng = initialLatLngSelector.findElements(e)[0];
	
		var gmap = new GMap2(map);
		gmap.addControl(new GLargeMapControl());
		gmap.addControl(new GMapTypeControl());
		gmap.addControl(new GOverviewMapControl());
		gmap.addControl(new GScaleControl());
		gmap.enableDoubleClickZoom();
		if(initialLatLng.value && initialLatLng.value.length > 0) {
			var nums = initialLatLng.value.split(",");
			gmap.setCenter(new GLatLng(Number(nums[0]), Number(nums[1])), gmap_default_zoom);
		}
		else {
			gmap.setCenter(new GLatLng(gmap_default_lat, gmap_default_lng), gmap_default_zoom);
		}
		gmap.checkResize();

		if(Element.classNames(e).include("vz-geolocation-input")) {
			var entry = {
				"container" : e,
				"element" : map,
				"map" : gmap,
				"initialLatLng" : initialLatLng,
				"location" : locationSelector.findElements(e)[0],
				"search" : searchSelector.findElements(e)[0],
				"latLng" : latLngSelector.findElements(e)[0]
			};
			gmap_entries.push(entry);

			updateCenterMarker(entry);
			GEvent.addListener(gmap, "click", function(overlay, point) {
				updateCenterMarker(entry, point);
			});
		}
		else {
			gmap.addOverlay(new GMarker(gmap.getCenter()));
		}
	});
}

function updateCenterMarker(entry, pos) {
	var gmap = entry["map"];
	if(!pos) {
		pos = gmap.getCenter();
	}
	var marker = new GMarker(pos);
	gmap.clearOverlays();
	gmap.addOverlay(marker);
	entry["latLng"].value = pos.lat() + ", " + pos.lng();
}

function searchGeolocation(search) {
	for(var i = 0; i < gmap_entries.length; i++) {
		var e = gmap_entries[i];
		if(e["search"] == search) {
			var location = e["location"].value;
			if(location.length > 0) {
				g_geocoder.getLatLng(location, function(point) {
					if(point) {
						e["map"].setCenter(point);
						updateCenterMarker(e);
					}
					else {
						alert("位置情報が見つかりませんでした。");
					}
				});
			}
			break;
		}
	}
}

function toggleGeolocationInput(checkbox, className) {
	var elem = $$("." + className)[0];
	if(checkbox.checked) {
		Element.show(elem);
		for(var i = 0; i < gmap_entries.length; i++) {
			var e = gmap_entries[i];
			if(e["container"] == elem) {
				var pos = e["map"].getCenter();
				e["map"].checkResize();
				if(!e["initialLatLng"].value || e["initialLatLng"].value.length == 0) {
					e["map"].setCenter(new GLatLng(gmap_default_lat, gmap_default_lng), gmap_default_zoom);
				}
				updateCenterMarker(e, pos);
				break;
			}
		}
	}
	else {
		Element.hide(elem);
	}
}

function setElementVisible(e, visible) {
	if(visible) {
		Element.show(e);
	}
	else {
		Element.hide(e);
	}
}

function findBackward(elem, tagName) {
	while(elem != null) {
		if(elem.tagName && elem.tagName.toLowerCase() == tagName.toLowerCase()) {
			return elem;
		}
		elem = elem.previousSibling
	}
	return null;
}

function findSiblingElementId(event, tagName) {
	var parent = Event.element(event).parentNode;
	for(var i = 0; i < parent.childNodes.length; i++) {
		var elem = parent.childNodes[i];
		var name = elem.tagName;
		if(name) {
			if(name.toLowerCase() == tagName.toLowerCase()) {
				return elem.id;
			}
		}
	}
	return null;
}

function getElement(tagName, attributeName, attributeValue, opener) {
	var elems;
	if(opener)
		elems = window.opener.document.getElementsByTagName(tagName);
	else
		elems = document.getElementsByTagName(tagName);
	for(var i = 0; i < elems.length; i++) {
		var elem = elems[i];
		if(elem.getAttribute(attributeName) == attributeValue) {
			return elem;
		}
	}
	return null;
}

function getElements(tagName, attributeName, attributeValue) {
	var result = new Array();
	var elems = document.getElementsByTagName(tagName);
	for(var i = 0; i < elems.length; i++) {
		var elem = elems[i];
		if(elem.getAttribute(attributeName) == attributeValue) {
			result.push(elem);
		}
	}
	return result;
}

function selectAllCheckboxes() {
	var elems = document.getElementsByTagName("input");
	for(var i = 0; i < elems.length; i++) {
		var elem = elems[i];
		if(elem.type == "checkbox") {
			elem.checked = true;
		}
	}
}

function deselectAllCheckboxes() {
	var elems = document.getElementsByTagName("input");
	for(var i = 0; i < elems.length; i++) {
		var elem = elems[i];
		if(elem.type == "checkbox") {
			elem.checked = false;
		}
	}
}

function selectAllCheckboxesWith(title) {
	var elems = document.getElementsByTagName("input");
	for(var i = 0; i < elems.length; i++) {
		var elem = elems[i];
		if(elem.type == "checkbox") {
			if(elem.nextSibling && elem.nextSibling.title && elem.nextSibling.title == title) {
				elem.checked = true;
			}
		}
	}
}

function deselectAllCheckboxesWith(title) {
	var elems = document.getElementsByTagName("input");
	for(var i = 0; i < elems.length; i++) {
		var elem = elems[i];
		if(elem.type == "checkbox") {
			if(elem.nextSibling && elem.nextSibling.title && elem.nextSibling.title == title) {
				elem.checked = false;
			}
		}
	}
}

function setSiblingEnabled(title, enabled) {
	var elems = getElements("span", "title", title);
	for(var i = 0; i < elems.length; i++) {
		var elem = elems[i];
		setChildrenEnabled(elem.parentNode, enabled);
	}
}

function setChildrenEnabled(elem, enabled) {
	if(elem.childNodes && elem.childNodes.length > 0) {
		for(var i = 0; i < elem.childNodes.length; i++) {
			var child = elem.childNodes[i];
			if(child.type == "text" || child.type == "checkbox" || child.type == "select-one" || child.type == "select-multiple") {
				child.disabled = !enabled;
			}
			setChildrenEnabled(child, enabled);
		}
	}
}

function getInputValue(inputNearestSpanTitle) {
	var span = getElement("span", "title", inputNearestSpanTitle, false);
	var sibling = span.nextSibling;
	while(sibling != null) {
		if(sibling.tagName == "INPUT") {
			return sibling.value;
		}
		sibling = sibling.nextSibling;
	}
	return null;
}

function toggleTextareaExpansion(imgClickEvent, textareaNearestSpanTitle) {
	var img = Event.element(imgClickEvent);
	var span = getElement("span", "title", textareaNearestSpanTitle, false);
	var sibling = span.nextSibling;
	while(sibling != null) {
		if(sibling.tagName == "TEXTAREA") {
			var textarea = sibling;
			if(textarea.rows == 4) {
				img.src = img.src.replace("expand", "collapse");
				textarea.rows = 20;
			}
			else {
				img.src = img.src.replace("collapse", "expand");
				textarea.rows = 4;
			}
		}
		sibling = sibling.nextSibling;
	}
}

function toggleMenuBoxExpansion(imgClickEvent, backContainerId) {
	var img = Event.element(imgClickEvent);
	var visible = (img.src.indexOf("collapse") != -1);
	var headerTr = img.parentNode.parentNode;
	var backContainer = $(backContainerId);
	if(visible) {
		var elems = headerTr.parentNode.getElementsByTagName("tr");
		var lastTr = null;
		for(var i = elems.length - 1; i >= 1; i--) {
			var tr = elems[i];
			backContainer.insertBefore(tr, lastTr);
			lastTr = tr;
		}
		img.src = img.src.replace("collapse", "expand");
	}
	else {
		var elems = backContainer.getElementsByTagName("tr");
		var lastTr = null;
		for(var i = elems.length - 1; i >= 0; i--) {
			var tr = elems[i];
			headerTr.parentNode.insertBefore(tr, lastTr);
			lastTr = tr;
		}
		img.src = img.src.replace("expand", "collapse");
	}
}

function setToOpenerInput(value, inputName) {
	var input = getElement("input", "name", inputName, true);
	input.value = value;
	window.close();
}

function doAppendToTextarea(textarea, value) {
	if(value == null || value.length == 0) {
		return;
	}
	if(textarea.value.match(/[\r\n]+$/) || textarea.value.length == 0) {
		textarea.value += value;
	}
	else {
		textarea.value += "\r\n" + value;
	}
}

function appendToTextareaByName(textareaName, value) {
	var textarea = getElement("textarea", "name", textareaName, false);
	doAppendToTextarea(textarea, value);
}

function appendToOpenerTextareaByName(textareaName, value) {
	var textarea = getElement("textarea", "name", textareaName, true);
	doAppendToTextarea(textarea, value);
}

function insertIntoTextarea(textHead, textTail, textDefaultContent, textareaNearestSpanTitle, opener) {
	var doc = opener ? window.opener.document : document;
	var span = getElement("span", "title", textareaNearestSpanTitle, opener);
	var sibling = span.nextSibling;
	while(sibling != null && sibling.tagName != "TEXTAREA") {
		sibling = sibling.nextSibling;
	}
	if(sibling == null) {
		return;
	}
	var textarea = sibling;
	// IE
	if(doc.selection && !isGecko) {
		textarea.focus();
		var sel = doc.selection.createRange().text;
		if(!sel) {
			sel = textDefaultContent;
		}
		doc.selection.createRange().text = textHead + sel + textTail;
	}
	// Mozilla
	else if(textarea.selectionStart || textarea.selectionStart == '0') {
		var startPos = textarea.selectionStart;
		var endPos = textarea.selectionEnd;
		var scrollTop = textarea.scrollTop;
		var sel = (textarea.value).substring(startPos, endPos);
		if(!sel) {
			sel = textDefaultContent;
		}
		buf = textHead + sel + textTail;
		textarea.value = textarea.value.substring(0, startPos) + buf +
			textarea.value.substring(endPos, textarea.value.length);
		textarea.focus();
		textarea.selectionStart = startPos + buf.length;
		textarea.selectionEnd = startPos + buf.length;
		textarea.scrollTop = scrollTop;
	}
	if(textarea.createTextRange) {
		textarea.caretPos = doc.selection.createRange().duplicate();
	}
}

function openClose(divId, imgId, path, hasChild){
	img = document.all(imgId);
	div = document.all(divId);
	display = div.style.display;
	
	if (div.style.display != "none" || div.style.display == "") {
		div.style.display = "none";
		// new Effect.SlideUp(div, { duration: 0.1 });
	}
	else {
		div.style.display = "block";
		// new Effect.SlideDown(div, { duration: 0.1 });
	}
	
	if (div.style.display != "none" || div.style.display == "") {
		img.src = path + "collapse.gif";
	}
	else {
		img.src = path + "expand.gif";
	}
}