var requestScript = function(url) {
	var head = document.getElementsByTagName("head")[0];
	var script = document.createElement("script");
	script.src = url;
	head.appendChild(script);
}

var Login = function() {
	var d = document;
	var isPrecached = false;
	var gE = function(e) {
		return d.getElementById(e);
	};

	/* Apple iPhone and iPod Touch detection script */
	var WebKitDetect = {
		isWebKit : function() {
			return new RegExp(" AppleWebKit/").test(navigator.userAgent);
		},
		isMobile : function() {
			return WebKitDetect.isWebKit() && new RegExp("Mobile/").test(navigator.userAgent);
		},
		mobileDevice : function() {
			if (!WebKitDetect.isMobile()) {
				return null;
			}
			var fields = new RegExp("(Mozilla/5.0 \\()([^;]+)").exec(navigator.userAgent);
			if (!fields || fields.length < 3) {
				return null;
			}
			return fields[2];
		}
	};

	return {
		/* Global boolean to prevent multiple login tries */
		bLogin : true,

		// 
		/* Purpose: enables javaScript to display chinese, japanese and russian character sets
		 * Updated:			also now converts spanish, swedish & french character sets
		 * Usage: convertCode([String]);
		 * Arguments: Input hexadecimal string
		 * Returns: octodecimal string
		 */
		convertCode : function(s) {
			var str = s.replace(/&#(\d{5});/g,function(r,r1) {return String.fromCharCode(r1);});
			str = str.replace(/&#(\d{4});/g,function(r,r1) {return String.fromCharCode(r1);});
			return str.replace(/&#(\d{3});/g,function(r,r1) {return String.fromCharCode(r1);});
		},

		/* Purpose: Check to see if a form field value has been changed from default
		 * Usage: fieldHasValue([Object]);
		 * Arguments: Input object
		 * Returns: Boolean
		 */
		fieldHasValue : function(o) {
			return (o.getAttribute("type") == "hidden" || (o.value !== "" && o.value.toLowerCase() !== "demo-"));
		},

		validate : function(f) {
			var s1, s2;
			var sLocale = gE("locale").getAttribute("content") || "en_GB";
			switch(sLocale) {
				case 'en_GB':
					s1 = 'Please enter your Account Number or Username.';
					s2 = 'Please enter your Password.';
					break;
				case 'en_US':
					s1 = 'Please enter your Account Number or Username.';
					s2 = 'Please enter your Password.';
					break;
				case 'de_DE':
					s1 = Login.convertCode('Bitte geben Sie Ihren Benutzernamen und Ihr Passwort an.');
					s2 = Login.convertCode('Bitte geben Sie Ihr Passwort an.');
					break;
				case 'es_ES':
					s1 = Login.convertCode('Por favor, introduzca su N&#186; de Cuenta o su Nombre de Usuario.');
					s2 = Login.convertCode('Por favor, introduzca su contrase&#241;a.');
					break;
				case 'fr_FR':
					s1 = Login.convertCode('Veuillez saisir votre n&#186; de compte ou identifiant.');
					s2 = Login.convertCode('Veuillez saisir votre mot de passe.');
					break;
				case 'fr_LU':
					s1 = Login.convertCode('Veuillez saisir votre n&#186; de compte ou identifiant.');
					s2 = Login.convertCode('Veuillez saisir votre mot de passe.');
					break;
				case 'it_IT':
					s1 = Login.convertCode('Inserisca il suo Numero di Conto o Username.');
					s2 = Login.convertCode('Inserisca la sua Password.');
					break;
				case 'nl_NL':
					s1 = Login.convertCode('Gelieve uw Rekening Nummer in te geven.');
					s2 = Login.convertCode('Gelieve uw wachtwoord in te geven.');
					break;
				case 'sv_SE':
					s1 = Login.convertCode('Fyll i ditt kontonummer eller anv&#228;ndarnamn.');
					s2 = Login.convertCode('Fyll i ditt l&#246;senord.');
					break;
				case 'zh_CN':
					s1 = Login.convertCode('&#35831;&#36755;&#20837;&#24744;&#30340;&#24080;&#21495;&#25110;&#29992;&#25143;&#21517;');
					s2 = Login.convertCode('&#35831;&#36755;&#20837;&#24744;&#30340;&#23494;&#30721;');
					break;
				case 'zh_TW':
					s1 = Login.convertCode('&#35531;&#36664;&#20837;&#24744;&#30340;&#24115;&#34399;&#25110;&#29992;&#25142;&#21517;');
					s2 = Login.convertCode('&#35531;&#36664;&#20837;&#24744;&#30340;&#23494;&#30908;');
					break;
				case 'ru_RU':
					s1 = Login.convertCode('&#1055;&#1086;&#1078;&#1072;&#1083;&#1091;&#1081;&#1089;&#1090;&#1072;, &#1074;&#1074;&#1077;&#1076;&#1080;&#1090;&#1077; &#1085;&#1086;&#1084;&#1077;&#1088; &#1074;&#1072;&#1096;&#1077;&#1075;&#1086; &#1089;&#1095;&#1077;&#1090;&#1072; &#1080;&#1083;&#1080; &#1080;&#1084;&#1103; &#1087;&#1086;&#1083;&#1100;&#1079;&#1086;&#1074;&#1072;&#1090;&#1077;&#1083;&#1103;.');
					s2 = Login.convertCode('&#1055;&#1086;&#1078;&#1072;&#1083;&#1091;&#1081;&#1089;&#1090;&#1072;, &#1074;&#1074;&#1077;&#1076;&#1080;&#1090;&#1077; &#1074;&#1072;&#1096; &#1087;&#1072;&#1088;&#1086;&#1083;&#1100;.');
					break;
				case 'ja_JP':
					s1 = Login.convertCode('&#12362;&#23458;&#27096;&#12398;&#21475;&#24231;&#30058;&#21495;&#21448;&#12399;&#12518;&#12540;&#12470;&#12540;&#21517;&#12434;&#12372;&#20837;&#21147;&#19979;&#12373;&#12356;&#12290;');
					s2 = Login.convertCode('&#12362;&#23458;&#27096;&#12398;&#12497;&#12473;&#12527;&#12540;&#12489;&#12434;&#12372;&#20837;&#21147;&#19979;&#12373;&#12356;&#12290;');
					break;
			}

			if(Login.bLogin) {
				var id = f.account_id;
				var pass = f.password;
				if(!Login.fieldHasValue(id)) {
					alert(s1);
					id.focus(); id.select();
				} else if(!Login.fieldHasValue(pass)) {
					alert(s2);
					pass.focus(); pass.select();
				} else {
					id.value = id.value.toUpperCase();
					pass.value = pass.value.toUpperCase();
					var actor = f.actor.value;
					var domain = d.location.hostname;
					var subdomain = domain.substring(0, domain.indexOf("."));
					if (!(/^https/.test(actor))) {
					   actor = "https://"+ domain + actor.replace(d.location.protocol +"//"+ domain, "");
					} else if (!(/www./.test(domain))) {
						actor = actor.replace("www", subdomain);
					}
					if (/^DEMO-/.test(id.value)) {
						actor += "&skin=limegreen";
						actor = actor.replace(subdomain, "demo");
					} else if (/demo./.test(actor)) {
						actor = actor.replace("demo", "www");
					}
					
					f.action = actor;
					Login.bLogin = false;
					return true;
				}
			}
			return false;
		},

		init: function() {
			var fLogin = gE('login');
			if (fLogin) {
				var iPhoneLogin = gE('iPhoneLogin');
				var mobileLogin = gE('mobileLogin');
				if (WebKitDetect.mobileDevice() && iPhoneLogin) {
					fLogin.innerHTML = iPhoneLogin.innerHTML;
				} else if (window.screen.width < 640 && mobileLogin) {
					fLogin.innerHTML = mobileLogin.innerHTML;
				}

				var elAccount = gE('account_id');
				var iDemoToggle = gE('demo-toggle');
				if (iDemoToggle) {
					iDemoToggle.onclick = function() {
						if(this.checked && elAccount.value.toLowerCase() !== 'demo-') {
							elAccount.value = 'demo-' + elAccount.value;
						} else if(!this.checked) {
							elAccount.value = elAccount.value.replace(/demo-/i,'');
						}
					};

					elAccount.onkeyup = function() {
						if(this.value.substr(0,5).toLowerCase() == 'demo-') {
							iDemoToggle.checked=true;
						} else {
							iDemoToggle.checked=false;
						}
					};					
					var domain = document.location.hostname;
					var subdomain = domain.substring(0, domain.indexOf("."));
					if(subdomain == "demo")	{					
						iDemoToggle.checked=true;
						elAccount.value = 'demo-';
					}
				}
				elAccount.onfocus = function() {
					if(!isPrecached){
						var domain = document.location.hostname;
						var subdomain = domain.substring(0, domain.indexOf("."));
						if(subdomain == "demo" && iDemoToggle)	{					
							iDemoToggle.checked=true;
							elAccount.value = 'demo-';
						}
						var liblocation = domain.replace(subdomain+".","");
						switch(liblocation) {
							case "igmarkets.co.uk":
								liblocation = "igmarkets.com";
								break;
							case "igmarkets.de":
								liblocation = "igmarkets.com";
								break;
							case "igmarkets.es":
								liblocation = "igmarkets.com";
								break;
							case "igmarkets.fr":
								liblocation = "igmarkets.com";
								break;
							case "igmarkets.it":
								liblocation = "igmarkets.com";
								break;
							case "igmarkets.lu":
								liblocation = "igmarkets.com";
								break;
							case "igmarkets.pt":
								liblocation = "igmarkets.com";
								break;
							case "igmarkets.se":
								liblocation = "igmarkets.com";
								break;
						}
						liblocation = "http:\/\/" + subdomain + "." + liblocation;
					   requestScript(liblocation + "\/lib\/yui\/260_1321\/yahoo-dom-event\/yahoo-dom-event.js");
					   requestScript(liblocation + "\/lib\/yui\/260_1321\/logger\/logger-min.js");
					   requestScript(liblocation + "\/lib\/yui\/260_1321\/container\/container_core-min.js");
					   requestScript(liblocation + "\/lib\/yui\/260_1321\/menu\/menu-min.js");
					   requestScript(liblocation + "\/lib\/yui\/260_1321\/json/json-min.js");
					   requestScript(liblocation + "\/lib\/yui\/260_1321\/connection/connection-min.js");
					   requestScript(liblocation + "\/lib\/yui\/260_1321\/dragdrop/dragdrop-min.js");
					   requestScript(liblocation + "\/lib\/yui\/260_1321\/element/element-beta-min.js");
					   requestScript(liblocation + "\/lib\/yui\/260_1321\/datasource/datasource-min.js");
					   requestScript(liblocation + "\/lib\/yui\/260_1321\/datatable/datatable-min.js");
					   requestScript(liblocation + "\/lib\/yui\/260_1321\/resize/resize-min.js");
					   requestScript(liblocation + "\/lib\/yui\/260_1321\/paginator/paginator-min.js");
					   requestScript(liblocation + "\/lib\/yui\/260_1321\/treeview/treeview-min.js");
					   requestScript(liblocation + "\/lib\/yui\/260_1321\/autocomplete/autocomplete-min.js");
						isPrecached = true;
					}
				};

				fLogin.onsubmit = function() {
					return Login.validate(fLogin);
				};

				//elAccount.focus();
			}
		}
	};
}();
Login.init();

