function GenObj() {}
GenObj.prototype.setProp = function(prop,value) { this[prop] = value; }
GenObj.prototype.getProp = function(prop) { return this[prop]; }

/* Country Object */
function Country(display,country_code, supported_languages, header_3c, more_3c, region_code) {
	this.oProps = new GenObj();
	this.setProp("display", display);
	this.setProp("country_code", country_code);
	this.setProp("supported_languages", supported_languages);
	this.setProp("header_3c", header_3c);
	this.setProp("more_3c",more_3c);
	this.setProp("region_code",region_code);
}
Country.prototype.setProp = function(prop,value) { this.oProps.setProp(prop,value); }
Country.prototype.getProp = function(prop) { var rtn = this.oProps.getProp(prop); if(rtn==undefined) {} return rtn; }
Country.prototype.toString = function() { return this.oProps.getProp("display"); }
/* Language Object */
function Language(display, language_code, default_country) {
	this.oProps = new GenObj();
	this.setProp("display", display);
	this.setProp("language_code", language_code);
	this.setProp("default_country", default_country);
}
Language.prototype.setProp = function(prop,value) { this.oProps.setProp(prop,value); }
Language.prototype.getProp = function(prop) { var rtn = this.oProps.getProp(prop); if(rtn==undefined) {} return rtn; }
Language.prototype.toString = function() { return this.oProps.getProp("display"); }

function isEnglishURL(str) {
	var re = new RegExp(/www\d*|delta|draft\d*|si\d*|st\d*|qa\d*|ddwa\d*|dswa\d*|dtwa\d*|dpwa\d*|\d*|.*as\d*|localhost/);
	return str.match(re)[0] != "";
}

function getCountry(code) {
	code = code.toLowerCase();
	for (var i=0; i<CountryOptions.length; i++) {
		if (CountryOptions[i].getProp("country_code") == code) {
			return CountryOptions[i].toString();
		}
	}
}
function getLanguage(code) {
	var rtnString;
	for (var i=0; i<LanguageOptions.length; i++) {
		if (LanguageOptions[i].getProp("language_code") == code) {
			return LanguageOptions[i].toString();
		}
	}
}
function getCountryLanguages(code) {
	for (var i=0; i<CountryOptions.length; i++) {
		if (CountryOptions[i].getProp("country_code") == code) {
			return CountryOptions[i].getProp("supported_languages");
		}
	}
}
function getProxy() {
	var rtn = window.location.href.split(";");
	if(rtn.length >1) { rtn = rtn[0] + ";" }
	else { rtn = rtn[0]; }
	return rtn;
}

/* function for creating country select */
function writeAvailableCountries() {
	var rtnString = '<select id="loc" name="loc" onChange="writeAvailableLanguages(this.value);" style="width:100%;">';
	rtnString += '<option value="none" selected="true">Select One</option>';
	for(var i=0;i<CountryOptions.length;i++) {
		rtnString += '<option value="'+ CountryOptions[i].getProp("country_code");
		rtnString +='">' + CountryOptions[i].toString()+'</option>';
	}
	rtnString += '</select>';
	return rtnString;
}
/* function for creating language select */
function writeAvailableLanguages(code) {
	var rtnString;
	if (code != "none" && code!="") {
		var supported = getCountryLanguages(code);
		rtnString = '<select id="lang" name="lang" style="width:100%;">';
		rtnString += '<option value="none">Select One</option>';
		for(var i=0;i<supported.length;i++) {
			rtnString += '<option value="'+ supported[i];
			if(supported.length==1) { rtnString += '" selected="selected' }
			rtnString +='">' + getLanguage(supported[i])+'</option>';
		}
		document.getElementById("lang_select").innerHTML = rtnString;
	} else {
		rtnString = '<select id="lang" name="lang" style="width:100%;" disabled>';
		rtnString += '<option value="none" selected="selected">Select One</option>';
	}
	rtnString += '</select>';
	return rtnString;
}

function refreshPage(oForm, lang, loc) {
	var curURL = window.location.toString();
	var name = curURL.match("//[^.]*").toString().split("//")[1];
	var locatn;
	if(isEnglishURL(name)) {
		curURL = curURL.replace(name, "www");
		name = "www"; 
	}
	if ( ((lang=="en")&&(name=="www"))||(lang==name) ) {
			if(curURL.indexOf("#")!=-1) { window.location.href=curURL.replace(/#/,""); }
			else { window.location.href=curURL+"#"; }
	} else {
		if (lang == "en") {
			if(curURL.indexOf("https")!=-1) { locatn = curURL.match("[^:]*") + curURL.split(";")[1].replace(/https/,""); }
			else { locatn = curURL.match("[^:]*") + curURL.split(";")[1].replace(/http/,""); }
		} else {
			if(isEnglishURL(name)) { locatn = curURL.match("[^:]*") + "://"+lang+".delta.com/delta/en"+lang+"/?24;"+curURL; }
			else { locatn = curURL.match("[^:]*") + "://"+lang+".delta.com/delta/en"+lang+"/?24;"+curURL.split(";")[1]; }
		}
		window.location = locatn;
	}
}
/* form handler */
function doLanguageChoice(language, location) {
	var pref = language + "-" + location;
	setPref(pref);
	refreshPage(null, language, location);
}
function submitPreferences(oForm) {
	var lang = document.getElementById(oForm).lang.value;
	var loc = (document.getElementById(oForm).loc.value!="none") ? document.getElementById(oForm).loc.value : "us";
	var oForm = document.getElementById(oForm);
	if (lang == "none") {
		var curLang = window.location.toString().match("//[^.]*").toString().split("//")[1];
		lang = (isEnglishURL(curLang)) ? "en" : curLang;
	}
	doLanguageChoice(lang, loc);
}

// language and location cookie stuff
function createCookie(name, value, days) {
	var expires = "";
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		expires = "; expires=" + date.toGMTString();
	}
	document.cookie = name+"="+value+expires+"; path=/" + "; domain=delta.com";
}
function deleteCookie(name, path) {
	var value = getCookie(name);
	if (exists(value)) {
		document.cookie = name + "=;path=/;domain=delta.com;expires=Thu, 01-Jan-1970 00:00:01 GMT";
	}
}
function getCookie(name) {
	var nameEQ = name + "=";
	var cookieArray = document.cookie.split(';');
	for (var i=0;i < cookieArray.length; i++) {
		var c = cookieArray[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}
function setPref(value) { createCookie('pref',value,30); }
function checkPrefTab() { if(prefTabActive) { togglePrefTab("hide"); prefTabActive=false; } }
function togglePrefTab(state) {
	if (state == "hide") { document.getElementById("lang_loc").className = 'pref_inactive'; }
	else if( state == "show") { document.getElementById("lang_loc").className = 'pref_active';prefTabActive=true; }
	return true;
}
function getDefault(lang) {
	var rtnString = "en-us";
	if (isEnglishURL(lang)) { return rtnString; }
	for (var i=0; i<LanguageOptions.length; i++) {
		if (LanguageOptions[i].getProp("language_code") == lang) {
			rtnString = LanguageOptions[i].getProp("language_code") + "-" + LanguageOptions[i].getProp("default_country");
			return rtnString;
		}
	}
	return rtnString;
}
function getLangLoc() {
	var prefString = getPrefs();
	var rtnString = '<span style="display:block;">';
	if (prefString == "null" || prefString == null) {
		prefString=getDefault(window.location.toString().match("//[^.]*").toString().split("//")[1]);
		rtnString += getCountry(prefString.split("-")[1]);
		rtnString += "<br />" + getLanguage(prefString.split("-")[0]);
	} else {
		rtnString += getCountry(prefString.split("|")[0].split("-")[1]);
		rtnString += "<br />" + getLanguage(prefString.split("|")[0].split("-")[0]);
	}
	rtnString += "</span>";
	return rtnString;
}
function autoRedirect() {
	var prefLang=getPrefs().split("|")[0].split("-")[0];
	var browserLang = window.location.toString().match("//[^.]*").toString().split("//")[1];
	var curLang;
	if (prefLang != null && prefLang != "null") {
		for (var i=0; i<LanguageOptions.length; i++) {
			curLang = LanguageOptions[i].getProp("language_code");
			if (prefLang==curLang && browserLang!=curLang) {
				if( strCompare(curLang,"en") ) { break; }
				else {window.location.href = "http://" + curLang + ".delta.com/delta/en" + curLang + "/?24;http://www.delta.com/"; }
			}
		}
	}
}

var prefTabActive = false;
var CountryOptions = [
	/****** Country, code, [ary lang codes], 3c region code ******/
	new Country("Antigua &amp; Barbuda", "ag", ["en"], "CAR"),
	new Country("Argentina", "ar", ["en", "es"], "SAM"),
	new Country("Aruba & Antilles","aw", ["en"], "CAR"),
	new Country("Austria", "at", ["en", "de"], "EN"),
	new Country("Australia", "au", ["en"], "PS"),
	new Country("Bahamas", "bs", ["en"], "CAR"),
	new Country("Barbados", "bb", ["en"], "CAR"),
	new Country("Belgium", "be", ["en", "fr"], "EN"),
	new Country("Belize",  "bz", ["en", "es"], "CAM"),
	new Country("Bermuda",  "bm", ["en"], "CAR"),
	new Country("Brazil",  "br", ["en", "pt"], "BR"),
	new Country("Canada",  "ca", ["en", "fr"], "CA"),
	new Country("Cayman Islands",  "ky", ["en"], "CAR"),
	new Country("Chile",  "cl", ["en", "es"], "SAM"),
	new Country("China",  "cn", ["en", "zh"], "GC"),
	new Country("Colombia",  "co", ["en", "es"], "SAM"),
	new Country("Costa Rica",  "cr", ["en", "es"], "CAM"),
	new Country("Croatia", "hr", ["en"], "HRV"),
	new Country("Cyprus", "cy", ["en"], "CYP"),
	new Country("Czech Republic", "cz", ["en"], "EE"),
	new Country("Denmark", "dk", ["en"], "EN"),
	new Country("Dominican Republic", "do", ["en", "es"], "CAR"),
	new Country("Ecuador", "ec", ["en", "es"], "SAM"),
	new Country("Egypt", "eg", ["en"], "ME"),
	new Country("El Salvador", "sv", ["en", "es"], "CAM"),
	new Country("Finland", "fi", ["en"], "EN"),
	new Country("France", "fr", ["en", "fr"], "FR"),
	new Country("Germany", "de", ["en", "de"], "DE"),
	new Country("Greece", "gr", ["en"], "EZ"),
	new Country("Guadeloupe", "gp", ["en", "fr"], "CAR"),
	new Country("Guam", "gu", ["en"], "MI"),
	new Country("Guatemala", "gt", ["en", "es"], "CAM"),
	new Country("Honduras", "hn", ["en", "es"], "CAM"),
	new Country("Hong Kong", "hk", ["en", "zt"], "GC"),
	new Country("Hungary", "hu", ["en"], "EE"),
	new Country("India", "in", ["en"], "IN"),
	new Country("Indonesia", "id", ["en"], "AS"),
	new Country("Ireland", "ie", ["en"], "IE"),
	new Country("Israel", "il", ["en"], "EE"),
	new Country("Italy", "it", ["en", "it"], "IT"),
	/* new Country("Jamaica", "jm", ["en"], "CAR"), */
	new Country("Japan", "jp", ["en",  "ja"], "JP"),
	new Country("Kuwait", "kw", ["en"], "ME"),
	new Country("Luxembourg", "lu", ["en"], "LUX"),
	new Country("Malaysia", "my", ["en"], "AS"),
	new Country("Martinique", "mq", ["en", "fr"], "CAR"),
	new Country("Mexico", "mx", ["en", "es"], "MX"),
	new Country("Netherlands", "nl", ["en"], "EN"),
	new Country("Netherlands Antilles", "an", ["en"], "ANT"),
	new Country("New Zealand", "nz", ["en"], "PS"),
	new Country("Nicaragua", "ni", ["en", "es"], "CAM"),
	new Country("N. Mariana Islands", "mp", ["en"], "MI"),
	new Country("Norway", "no", ["en"], "EN"),
	new Country("Panama", "pa", ["en", "es"], "CAM"),
	new Country("Peru", "pe", ["en", "es"], "SAM"),
	new Country("Philippines", "ph", ["en"], "AS"),
	new Country("Poland", "pl", ["en"], "POL"),
	new Country("Portugal", "pt", ["en"], "PRT"),
	new Country("Puerto Rico", "pr", ["en", "es"], "US"),
	new Country("Qatar", "qa", ["en"], "ME"),
	new Country("Romania", "ro", ["en"], "EE"),
	new Country("Russia", "ru", ["en", "ru"], "EE"),
	new Country("Saudi Arabia", "sa", ["en"], "ME"),
	new Country("Singapore", "sg", ["en"], "AS"),
	new Country("South Africa", "za", ["en"], "AF"),
	new Country("South Korea", "kr", ["en", "ko"], "AN"),
	new Country("Spain", "es", ["en", "es"], "ES"),
	new Country("St. Croix", "vi", ["en"], "CAR"),
	new Country("St. Lucia", "lc", ["en"], "CAR"),
	new Country("St. Maarten", "an", ["en"], "CAR"),
	new Country("St. Thomas", "vi", ["en"], "CAR"),
	new Country("Sweden", "se", ["en"], "EN"),
	new Country("Switzerland", "ch", ["en", "fr", "de", "it"], "EN"),
	new Country("Taiwan", "tw", ["en", "zt"], "GC"),
	new Country("Thailand", "th", ["en"], "AS"),
	new Country("Trinidad &amp Tobago", "tt", ["en"], "CAR"),
	new Country("Turkey", "tr", ["en"], "EZ"),
	new Country("Turks &amp; Caicos", "tc", ["en"], "CAR"),
	new Country("Ukraine", "ua", ["en", "ru"], "EE"),
	new Country("United Arab Emirates", "ae", ["en"], "ME"),
	new Country("United Kingdom", "gb", ["en"], "GB"),
	new Country("United States", "us", ["en", "es"], "US"),
	new Country("Uruguay", "uy", ["en", "es"], "SAM"),
	new Country("Venezuela", "ve", ["en", "es"], "SAM"),
	new Country("Viet Nam", "vn", ["en"], "AS")	
];

var LanguageOptions = [
	/* Language, code, default_country */
	new Language("English", "en", "us"),
	new Language("Chinese", "zh", "cn"),
	new Language("French", "fr", "fr"),
	new Language("German", "de", "de"),
	new Language("Italian", "it", "it"),
	new Language("Portuguese", "pt", "br"),
	new Language("Russian", "ru", "ru"),
	new Language("Spanish", "es", "us"),
	new Language("Japanese", "ja", "jp"),
	new Language("Korean", "ko", "kr"),
	new Language("Traditional Chinese", "zt", "hk")
];
CountryOptions.sort();
//autoRedirect();
