if (typeof Manodo == 'undefined' || !Manodo)
	Manodo = {};
	
if (typeof Manodo.Server == 'undefined' || !Manodo.Server)
	Manodo.Server = {};
	
if (typeof Manodo.Server.Portal == 'undefined' || !Manodo.Server.Portal)
	Manodo.Server.Portal = {};
	
if (typeof Manodo.Server.Portal.Login == 'undefined' || !Manodo.Server.Portal.Login)
	Manodo.Server.Portal.Login = {};
	
Manodo.Server.Portal.Login.Login = function(	txtCustomerId,
												txtLoginId,
												txtPasswordId,
												chkChangePasswordId,
												chkSaveUserCredentialsId,
												btnLoginId,
												btnLoginUniqueId,
												lblStatusId,
												signingInStatusMessage,
												browserXtraInfoMsg) {
	var _me = this;
	var _txtCustomerId = txtCustomerId;
	var _txtLoginId = txtLoginId;
	var _txtPasswordId = txtPasswordId;
	var _chkChangePasswordId = chkChangePasswordId;
	var _chkSaveUserCredentialsId = chkSaveUserCredentialsId;
	var _btnLoginId = btnLoginId;
	var _btnLoginUniqueId = btnLoginUniqueId;
	var _lblStatusId = lblStatusId;
	var _signingInStatusMessage = signingInStatusMessage;
	var _browserXtraInfoMsg = browserXtraInfoMsg;
	
	this.onDOMReady = function() {
		ChangePassword.init();
		CookieInfo.init();
		MessageBox.init();
		YesNoBox.init();
		BrowserDetect.init();

		var txtCustomer = document.getElementById(_txtCustomerId);
		var txtLogin = document.getElementById(_txtLoginId);
		var txtPassword = document.getElementById(_txtPasswordId);
		
		if (txtCustomer && txtLogin && txtPassword) {
			if (txtCustomer.value != '')
				txtPassword.focus();
			else
				txtCustomer.focus();
		}
	};
	
	this.onKeyDown = function(e, click) {
		_me.set_statusMessage('&nbsp;'); // clear any errors
		
		if (e.keyCode == 13) { // enter
			if (click) {
				var btnLogin = document.getElementById(_btnLoginId);
				btnLogin.click();
				return false;
			}
			else
				e.keyCode = 9; // tab
		}
		return true;
	};
	
	this.login = function(postBack) {
	
		_set_enabled(true);
		_me.set_statusMessage(_signingInStatusMessage);
	
		if (postBack == true) {
			__doPostBack(_btnLoginUniqueId, '');
		} else {
			var txtCustomer = document.getElementById(_txtCustomerId);
			var txtLogin = document.getElementById(_txtLoginId);
			var txtPassword = document.getElementById(_txtPasswordId);

			Manodo.Server.Portal.Login.ScriptService.LoginService.Login(
				txtCustomer.value,
				txtLogin.value,
				txtPassword.value,
				_me.onLoginComplete,
				_me.onLoginError);
		}
			
		return false;
	};
	
	this.onLoginComplete = function(arg) {
		if (arg.Success)
			_handleLoginSuccess(arg);
		else if (arg.ChangePassword)
			_handleChangePassword(arg);
		else
			_handleLoginError(arg);
	};
	
	function _handleLoginSuccess(arg) {
		if (arg.PasswordExpires != '') {
			_me.set_statusMessage('&nbsp;');
			_set_enabled(false);
			var fn = function(type, result) {
				YesNoBox.yesNoBoxClosedEvent.unsubscribe(fn);
				if (result == 'YES') {
					var fn2 = function(type, result) {
						ChangePassword.changePasswordClosedEvent.unsubscribe(fn2);
						_set_enabled(true);
						if (result != 'OK')
							_me.login(true);
					};
					ChangePassword.changePasswordClosedEvent.subscribe(fn2);
					ChangePassword.show('ChangePassword.msg_changePwd');
				}
				else {
					_set_enabled(true);
					_me.login(true);
				}
			};
			YesNoBox.yesNoBoxClosedEvent.subscribe(fn);
			var messageParams = new Array();
			messageParams[0] = arg.PasswordExpires;
			YesNoBox.show('', 'YesNoBox.msg_changePwdQuestion', '', '', messageParams);
		}
		else {
			var chkChangePassword = document.getElementById(_chkChangePasswordId);
			if (typeof chkChangePassword == 'object' && chkChangePassword && chkChangePassword.checked == true) {
				var fn = function(type, result) {
					ChangePassword.changePasswordClosedEvent.unsubscribe(fn);
					_set_enabled(true);
					if (result != 'OK')
						_me.login(true);
				};
				ChangePassword.changePasswordClosedEvent.subscribe(fn);
				ChangePassword.show('ChangePassword.msg_changePwd');
			}
			else
				_me.login(true);
		}
	};

	function _handleChangePassword(arg) {
		_me.set_statusMessage('&nbsp;');
		_set_enabled(false);
		var fn = function() {
			ChangePassword.changePasswordClosedEvent.unsubscribe(fn);
			_set_enabled(true);
		};
		ChangePassword.changePasswordClosedEvent.subscribe(fn);
		ChangePassword.show('ChangePassword.msg_mustChangePwd');
	};
	
	function _handleLoginError(arg) {
		_me.set_statusMessage(arg.Message);
	};
	
	this.onLoginError = function(arg) {
		var fn = function() {
			MessageBox.messageBoxClosedEvent.unsubscribe(fn);
			_set_enabled(true);
		};
		MessageBox.messageBoxClosedEvent.subscribe(fn);
		MessageBox.show('', 'MessageBox.msg_loginError');
	};
	
	this.get_customerName = function() {
		var txtCustomer = document.getElementById(_txtCustomerId);
		if (txtCustomer)
			return txtCustomer.value;
		else
			return '';
	};
	
	this.get_login = function() {
		var txtLogin = document.getElementById(_txtLoginId);
		if (txtLogin)
			return txtLogin.value;
		else
			return '';
	};
	
	this.get_Password = function() {
		var txtPassword = document.getElementById(_txtPasswordId);
		if (txtPassword)
			return txtPassword.value;
		else
			return '';
	};
	
	this.set_Password = function(password) {
		var txtPassword = document.getElementById(_txtPasswordId);
		if (txtPassword)
			txtPassword.value = password;
	};
	
	this.set_statusMessage = function(error) {
		var lblStatus = document.getElementById(_lblStatusId);
		if (lblStatus)
			lblStatus.innerHTML = error;
	};
	
	function _set_enabled(enabled) {
		var txtCustomer = document.getElementById(_txtCustomerId);
		var txtLogin = document.getElementById(_txtLoginId);
		var txtPassword = document.getElementById(_txtPasswordId);
		var chkSaveUserCredentials = document.getElementById(_chkSaveUserCredentialsId);
		var btnLogin = document.getElementById(_btnLoginId);
		
		if (txtCustomer)
			txtCustomer.disabled = !enabled;
		if (txtLogin)
			txtLogin.disabled = !enabled;
		if (txtPassword)
			txtPassword.disabled = !enabled;
		if (chkSaveUserCredentials)
			chkSaveUserCredentials.disabled = !enabled;
		if (btnLogin)
			btnLogin.disabled = !enabled;
	};
	
	
	
	//
	// Browser detect
	//
	var BrowserDetect = {
		init: function () {
			this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
			this.version = this.searchVersion(navigator.userAgent)
				|| this.searchVersion(navigator.appVersion)
				|| "an unknown version";
			this.OS = this.searchString(this.dataOS) || "an unknown OS";
			
			// Display browser information
			if(document.getElementById("spbrowsernfo") != undefined && document.getElementById("spbrowsernfo") != null) {
				if(String(this.browser) == "Explorer" && (this.version == 8 || this.version == 7 || this.version == 6)) {
					document.getElementById("spbrowsernfo").innerHTML = "<span class='greenfont'>"+ this.browser +" "+ this.version +" ("+ this.OS +")</span>"; }
				else {
					document.getElementById(_browserXtraInfoMsg).style.visibility = 'visible';
					document.getElementById("spbrowsernfo").innerHTML = "<span class='redfont'>"+ this.browser +" "+ this.version +" ("+ this.OS +")</span>"; }
			}
		},
		searchString: function (data) {
			for (var i=0;i<data.length;i++)	{
				var dataString = data[i].string;
				var dataProp = data[i].prop;
				this.versionSearchString = data[i].versionSearch || data[i].identity;
				if (dataString) {
					if (dataString.indexOf(data[i].subString) != -1)
						return data[i].identity;
				}
				else if (dataProp)
					return data[i].identity;
			}
		},
		searchVersion: function (dataString) {
			var index = dataString.indexOf(this.versionSearchString);
			if (index == -1) return;
			return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
		},
		dataBrowser: [
			{ 	string: navigator.userAgent,
				subString: "OmniWeb",
				versionSearch: "OmniWeb/",
				identity: "OmniWeb"
			},
			{
				string: navigator.vendor,
				subString: "Apple",
				identity: "Safari"
			},
			{
				prop: window.opera,
				identity: "Opera"
			},
			{
				string: navigator.vendor,
				subString: "iCab",
				identity: "iCab"
			},
			{
				string: navigator.vendor,
				subString: "KDE",
				identity: "Konqueror"
			},
			{
				string: navigator.userAgent,
				subString: "Firefox",
				identity: "Firefox"
			},
			{
				string: navigator.vendor,
				subString: "Camino",
				identity: "Camino"
			},
			{		// for newer Netscapes (6+)
				string: navigator.userAgent,
				subString: "Netscape",
				identity: "Netscape"
			},
			{
				string: navigator.userAgent,
				subString: "MSIE",
				identity: "Explorer",
				versionSearch: "MSIE"
			},
			{
				string: navigator.userAgent,
				subString: "Gecko",
				identity: "Mozilla",
				versionSearch: "rv"
			},
			{ 		// for older Netscapes (4-)
				string: navigator.userAgent,
				subString: "Mozilla",
				identity: "Netscape",
				versionSearch: "Mozilla"
			}
		],
		dataOS : [
			{
				string: navigator.platform,
				subString: "Win",
				identity: "Windows"
			},
			{
				string: navigator.platform,
				subString: "Mac",
				identity: "Mac"
			},
			{
				string: navigator.platform,
				subString: "Linux",
				identity: "Linux"
			}
		]

	};
	
	YAHOO.util.Event.DOMReadyEvent.subscribe(this.onDOMReady, this, true);
};
