/** JavaScript 1.2 code for the Parish Directory project

Copyright 2008 Aleksandr Andreev. All Rights Reserved.

No portion of this code may be modified, reproduced, or distributed
without the express consent and written permission of the author.

This code is provided in AS-IS condition, with ABSOLUTELY NO WARRANTY,
not even the implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
***/

/// NOTE TO FUTURE EDITORS: How to add more countries to the directory:
/**
	Say we want to add Gondwanaland. Then on line 30, insert "Gondwanaland" between Germany and Haiti
	so that it reads ... "Germany", "Gondwanaland", "Haiti" ...

	On line 47, insert "Гондваналенд" between "Германия" and "Дания"
	Then, on line 55, add "Gondwanaland" between "Germany" and "Denmark".
	Note: YOU MUST DO THIS!! THE RUSSIAN LIST RELIES ON THE ADJOINED ENGLISH LIST TO WORK!
**/

// Globals
var map = null;
var geocoder = null;

var mths = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
var mthsru = new Array("январь", "февраль", "март", "апрель", "май", "июнь", "июль", "август", "сентябрь", "октябрь", "ноябрь", "декабрь");
var trackClergy = 0;

var countries = new Array("Argentina", "Australia", "Austria", "Belgium", "Brazil",
	"Canada", "Chile", "Costa Rica", "Denmark", "Dominican Republic", "France", "Germany", "Haiti", "Indonesia",
	"Ireland", "Israel", "Italy", "Jamaica", "Luxembourg", "Mexico", 
	"Morocco",  "Netherlands", "New Zealand", "Nicaragua", "Paraguay", "Portugal", "Russia", "South Korea", "Spain", "Switzerland",
	"Tonga", "Turkey", "Uganda", "United Kingdom", "United States", "Uruguay", "Vanuatu", "Venezuela");

var states = new Array();
states['Canada'] = new Array("Alberta", "British Columbia", "Manitoba", "New Brunswick", "Newfoundland", "Northwest Territories", "Nova Scotia", "Nunavut", "Ontario", "Prince Edward Island", "Quebec", "Saskatchewan", "Yukon Territory");
states['United States'] = new Array("Alabama", "Alaska", "Arizona", "Arkansas", "California", "Colorado", "Connecticut", "Delaware", "District of Columbia", "Florida", "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Puerto Rico", "Rhode Island", "South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming", "Armed Forces Pacific");
states['Australia'] = new Array("Capital Territory", "New South Wales", "Northern Territory", "Queensland", "South Australia", "Tasmania", "Victoria", "Western Australia");
states['Argentina'] = new Array("Capital Federal", "Buenos Aires", "Cordoba", "Misiones", "Neuquen");
states['Brazil']  = new Array("Rio de Janeiro", "Sao Paulo");
states['Venezuela'] = new Array("Carabobo", "Distrito Federal", "Lara");

var abbrs = new Array();
abbrs['Canada'] = new Array("AB", "BC", "MB", "NB", "NL", "NT", "NS", "NU", "ON", "PE", "QC", "SK", "YT");
abbrs['United States'] = new Array("AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", "DC", "FL", "GA", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "OH", "OK", "OR", "PA", "PR", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VA", "WA", "WV", "WI", "WY", "AP");
abbrs['Australia'] = new Array("ACT", "NSW", "NT", "QLD", "SA", "TAS", "VIC", "WA");

var countriesru = new Array("Австралия", "Австрия", "Аргентина", "Бельгия", "Бразилия", 
			"Вануату", "Великобритания", "Венесуэла", "Гаити", "Германия",
			"Дания", "Доминиканская Респ.", "Израиль", "Индонезия", "Ирландия", "Испания",
			"Италия", "Канада", "Коста-Рика", "Люксембург",
			"Марокко", "Мексика", "Нидерланды", "Никарагуа", "Новая Зеландия", "Парагвай",
			"Португалия", "Россия", "США", "Тонга", "Турция", "Уганда", "Уругвай", "Франция", "Чили",
			"Швейцария", "Южная Корея", "Ямайка");

var valuesru = new Array("Australia", "Austria", "Argentina", "Belgium", "Brazil",
		"Vanuatu", "United Kingdom", "Venezuela", "Haiti", "Germany",
		"Denmark", "Dominican Republic", "Israel", "Indonesia", "Ireland", "Spain",
		"Italy", "Canada", "Costa Rica", "Luxembourg",
		"Morocco", "Mexico", "Netherlands", "Nicaragua", "New Zealand", "Paraguay",
		"Portugal", "Russia", "United States", "Tonga", "Turkey", "Uganda", "Uruguay", "France", "Chile",
		"Switzerland", "South Korea", "Jamaica");

var statesru = new Array();
statesru['Canada'] = new Array("Альберта", "Британ. Колумбия", "Манитоба", "Нью-Брансуик", "Ньюфаундленд", "Северо-зап. Тер.", "Новая Шотландия", "Нунавут", "Онтарио", "Ов Принца Эдуарда", "Квебек", "Саскачеван", "Юкон");
statesru['United States'] = new Array("Алабама", "Аляска", "Аризона", "Арканзас", "Калифорния", "Колорадо", "Коннектикут", "Делавэр", "Округ Колумбия", "Флорида", "Джорджия", "Гавайи", "Айдахо", "Иллиноис", "Индиана", "Айова", "Канзас", "Кентуки", "Луизиана", "Мэн", "Мэриленд", "Массачусетс", "Мичиган", "Миннесота", "Миссисипи", "Миссури", "Монтана", "Небраска", "Невада", "Нью-Гэмпшир", "Нью-Джерси", "Нью-Мексико", "Нью-Йорк", "Сев. Каролина", "Сев. Дакота", "Огайо", "Оклахома", "Орегон", "Пенсильвания", "Пуэрто-Рико", "Род-Айленд", "Юж. Каролина", "Юж. Дакота", "Теннесси", "Техас", "Юта", "Вермонт", "Вирджиния", "Вашингтон", "Зап. Вирджиния", "Висконсин", "Вайоминг", "Полевая почта AP");
statesru['Australia'] = new Array("Столичная Тер.", "Новый Южный Уэльс", "Северная Тер.", "Квинсленд", "Южная Австралия", "Тасмания", "Виктория", "Западная Австралия");

var textold = " ";

// functions
function loadCountries(countryListID, syncID) {
	countryList = document.getElementById(countryListID);
	sync	= document.getElementById(syncID);
	var k = 0 - countryList.length;
	for (i = countryList.length; i < countries.length - k; i++) {
		countryList.options[countryList.length] = new Option(countries[i + k], countries[i + k]);
		if (countries[i + k] == sync.value) {
			countryList.selectedIndex = i;
			stateListID = countryListID + "s";
			stateSyncID = syncID + "s";
			loadStatesNew(countryListID, stateListID, stateSyncID);
		}
	}
}

function loadCountriesRu(countryListID, syncID) {
	countryList = document.getElementById(countryListID);
	sync	    = document.getElementById(syncID);

	for (i = countryList.length; i < countriesru.length; i++) {
		countryList.options[countryList.length] = new Option(countriesru[i], valuesru[i]);
		if (valuesru[i] == sync.value) {
			countryList.selectedIndex = i;
			stateListID = countryListID + "s";
			stateSyncID = syncID + "s";
			loadStatesRu(countryListID, stateListID, stateSyncID);
		}
	}
}

function loadStatesNew(countryListID, stateListID, stateSyncID) {
	countryList = document.getElementById(countryListID);
	stateList   = document.getElementById(stateListID);
	stateSync   = document.getElementById(stateSyncID);
	namesList   = states[countryList.value];
	abbrsList   = abbrs[countryList.value];

	stateList.options.length = 0;

	if ( namesList == null ) {
		// No subdivisions in this country (e.g. San Marino)
		stateList.style.display  = "none";
		stateList.options[stateList.length] = new Option(" ", " ");
	} else {
		stateList.style.display = "";
		if ( !abbrsList ) {
			abbrsList = namesList;
		}

		for (j = 0; j < namesList.length; j++) {
			stateList.options[stateList.length] = new Option(namesList[j], abbrsList[j]);
			if (namesList[j] == stateSync.value || abbrsList[j] == stateSync.value) {
				stateList.selectedIndex = j;
			}
		}
	}
	return 1;
}

function loadStatesRu(countryListID, stateListID, stateSyncID) {
	countryList = document.getElementById(countryListID);
	stateList   = document.getElementById(stateListID);
	stateSync   = document.getElementById(stateSyncID);
	namesList   = statesru[countryList.value];
	abbrsList   = abbrs[countryList.value];

	stateList.options.length = 0;
	if (namesList == null) {
		// if no Russian, use English
		namesList = states[countryList.value];
	}

	if ( namesList == null ) {
		// No subdivisions in this country (e.g. San Marino)
		stateList.style.display  = "none";
		stateList.options[stateList.length] = new Option(" ", " ");
	} else {
		stateList.style.display = "";
		if ( !abbrsList ) {
			abbrsList = namesList;
		}

		for (j = 0; j < namesList.length; j++) {
			stateList.options[stateList.length] = new Option(namesList[j], abbrsList[j]);
			if (namesList[j] == stateSync.value || abbrsList[j] == stateSync.value) {
				stateList.selectedIndex = j;
			}
		}
	}
	return 1;
}

function load() {
	if (GBrowserIsCompatible()) {
	  
	map = new GMap2(document.getElementById("map"));
	map.addControl(new GLargeMapControl());
	map.addControl(new GMapTypeControl());
	map.setCenter(new GLatLng(0, 0), 1);
	geocoder = new GClientGeocoder();
    	GEvent.addListener(map, "click", function(overlay, latlng) {
			document.getElementById("lat").value = latlng.y;
			document.getElementById("lon").value = latlng.x;
			map.setCenter(latlng, 13);
			document.wujood.submit();
		});
	} else {
		alert("Your browser does not support Ajax");
	}
}

function process() {
	var street = document.getElementById("street").value;
	var city   = document.getElementById("city").value;
	var state  = document.getElementById("bCountry2s").value;
	var country = document.getElementById("bCountry2").value;
	var zip    = document.getElementById("zip").value;

	var address = street + ', ' + city + ', ' + state + ', ' + country + ', ' + zip;

	if (geocoder) {
		geocoder.getLatLng(
		address,
        	function(point) {
			if (!point) {
				alert("I could not understand the address you entered.");
			} else {
				document.getElementById("lat").value = point.y;
				document.getElementById("lon").value = point.x;
				map.setCenter(point, 13);
				document.wujood.submit();
			}
		}
	        );
	} else {
		alert("Unable to load the GeoCoder. This feature appears to be temporarily not available.");
	}
}

/** Parish directory functions **/
// Removes a clergyman from a parish
function doKill(i) {
	eval("parishForm.Clergy" + i + ".value=\"\"");
	eval("parishForm.name" + i + ".value=\"\"");
}

// Select a new clergyman for the parish
function doChoose(i) {
	var obj = window.open("chooseclergy.cgi?obj=" + i, "chooser", "alwaysRaised=1, dependent=1, directory=0, height=500, left=150, location=0, menubar=0, resizable=0, status=0, toolbar=0, top=150, width=500, scrollbars=1");
	if (obj.opener == null) childWindow.opener = self;
}

function loadClergyInfo(i) {
	var loc = new String(document.location);
	var lang = "en";
	try {
		lang = document.getElementById('lang').value;
	} catch (e) {
		// ok, we'll stick with english ...
	}
	var loc = new String(document.location);
	var prefix = loc.indexOf("manage.cgi") != -1 ? "../" : "";
	var obj = window.open(prefix + "viewclergy.cgi?Uid=" + i + "&lang=" + lang, "chooser", "alwaysRaised=1, dependent=1, directory=0, height=600, left=150, location=0, menubar=0, resizable=0, status=0, toolbar=0, top=150, width=450, scrollbars=1");
}

function okDelete() {
	try {
		if (document.getElementById("EditorName1").value == "") {
			alert ("You must enter your name.");
			return false;
		}
		if (document.getElementById("EditorEmail1").value == "") {
			alert ("You must enter your e-mail address.");
			return false;
		}
		document.getElementById("EditorName2").value = document.getElementById("EditorName1").value;
		document.getElementById("EditorEmail2").value = document.getElementById("EditorEmail1").value;
	} catch (e) {
		window.status = "ERROR trying to process editor name / email";
	}
	return true;
}

function addLoadEvent(f) {
	var old = window.onload;

	if (typeof window.onload != 'function') {
		window.onload = f;
	} else {
		window.onload = function() {
			if (old) {
				old();
			}
			f();
		}
	}
}

// Opens a new window for general purposes
function openWindow (url) {
	window.open(url, "mailer", "alwaysRaised=1, dependent=1, directory=0, height=600, left=150, location=0, menubar=0, resizable=0, status=0, toolbar=0, top=150, width=500");
}

function navigate2Parish (uid, lang) {
	// exact opposite of above
	self.opener.location = "viewparish.cgi?Uid=" + uid + "&lang=" + lang;
	self.close();
}

function checkNumWords(obj, n, count) {
	// checks that the maximum number of words (n) allowed has been reached
	// NOTE TO HACKERS:
	// Of course, you can change this in your reverse-engineered form
	// But, there's a server-side check that trunks at n
	// So don't bother
	var text = obj.value + " ";

	var iwhitespace = /^[^A-Za-z0-9]+/gi; // remove initial whitespace
	var left_trimmedStr = text.replace(iwhitespace, "");
	var splitString = left_trimmedStr.split(" ");
	var word_count = splitString.length -1;
	var k = n - word_count;
	if (k >= 0) {
	//	count.value = n - word_count;
		textold = text;
	} else {
		obj.value = textold; // no cigar.
	}
}

function zoomTo() {
	var centers = new Array(new Array(0, 0), new Array(-98.0859, 39.0960),
		new Array(-97.1191, 51.2344), new Array(136.1426, -30.1451),
		new Array(-55.7226, -13.4110), new Array(10.1953, 48.6329),
		new Array(35.1782, 31.9894));
	var zooms = new Array(1, 4, 4, 4, 3, 4, 6);

	var dest = document.getElementById('zoomer').value;
	map.setCenter(new GLatLng(centers[dest][1], centers[dest][0]));
	map.setZoom(zooms[dest]);
	return true;
}

function doAddMoreClergyBoxes(initialint) {
	// initialint is id of last element of @clergy in viewparish.cgi
	// if @clergy is zero, intialint is -1
	if (trackClergy == 0) {
		if (initialint == -1) {
			initialint++;
		}
		trackClergy = initialint + 1;
	}

	var newElem = document.createElement("span");
	newElem.innerHTML = "<INPUT Type=\"Hidden\" Name=\"Clergy" +
	 trackClergy + "\" Value=\"\" Size=15><INPUT Type=\"Text\" Value=\"\" Name=\"name" +
	 trackClergy + "\" Disabled>&nbsp;<INPUT Type=\"Button\" Value=\"Find ...\" OnClick=\"JavaScript:doChoose(" +
	 trackClergy + ")\">&nbsp;<INPUT Type=\"Button\" Value=\"Remove\" OnClick=\"JavaScript:doKill(" +
	 trackClergy + ")\">&nbsp;<SELECT Name=\"Position" +
	 trackClergy + "\"><OPTION Value=\"0\" Selected></OPTION><OPTION Value=\"1\">Rector</OPTION><OPTION Value=\"2\">Acting Rector</OPTION><OPTION Value=\"3\">Attached</OPTION><OPTION Value=\"4\">Retired</OPTION><OPTION Value=\"5\">Senior priest</OPTION></SELECT><BR>";
	document.getElementById('clergycontainer').appendChild(newElem);
	
	trackClergy++;
}

function doSwitchLang(lang) {
	//WARNING: LANG CODE MUST BE TWO CHARACTERS
	curloc = new String(document.URL);
	if (curloc.indexOf('lang=') != -1) {
		regex = /lang=[a-z]{2}/i;
		curloc = curloc.replace(regex, 'lang=' + lang);
		self.location = curloc;
	} else {
		if (curloc.indexOf('?') == -1) {
			curloc += '?';
		}
		self.location = curloc + '&lang=' + lang;
	}
}

function managerMapOpen(lat, lng, target) {
	// OPENS A NEW WINDOW WITH A GOOGLE MAP OF THE LOCATION
	if (target == 'new') {
		var targetObj = window.open("mapper.cgi?lat=" + lat + "&lng=" + lng, target, "alwaysRaised=1, dependent=1, directory=0, height=300, left=555, location=0, menubar=0, resizable=0, status=0, toolbar=0, top=150, width=402");
	} else {
		var targetObj = window.open("mapper.cgi?lat=" + lat + "&lng=" + lng, target, "alwaysRaised=1, dependent=1, directory=0, height=300, left=150, location=0, menubar=0, resizable=0, status=0, toolbar=0, top=150, width=402");
	}
}


