
$(document).ready(function(){		
	/*Menu first level*/
	$("#header dd:last").css("padding","0");
	
	$(".login_link a").click(function(){
		$("#login").show();
	});
	$("#login .open a").click(function(){
		$("#login").hide();
	});
});

/*findElementById*/
function findElementById( elementId )
{
	var theElement = null;
	try
	{
		if( document.getElementById )
			theElement = document.getElementById( elementId );
		else
			theElement = document.all[ elementId ];
	}
	catch( e )
	{
		theElement = null;
	}
	return theElement;
}

/* fake console
if (!window.console)
{
	window.console = { 
		log: function(){},
		dir:function(){}
	}
}*/

// user profile management
var UserManager = new function()
{
	var m_settings = { "domain":"staging.timeo.biz",
					"baseUri": "/",
					"language": "en" }
					
	var m_messages = {"it": {"loading":"Attendere...",
					"genericError": "<b>Si &egrave; verificato un errore.</b><br><br>Si prega di riprovare pi&ugrave; tardi",
					"wrongCredentials":"<b>Attenzione!</b><br><br>Utente non riconosciuto",
					"validationError":"<b>Attenzione!</b><br><br>Controlla i dati inseriti",
					"forgotPasswordSuccess":"<b>Password inviata correttamente</b>.<br><br>Controlla la tua casella email",
					"newsletterSubscribeSuccess":"<b>Regsitrazione conclusa con successo</b>"},
				"en": {"loading":"Wait...",
					"genericError": "<b>An error occured.</b><br><br>Please try again later",
					"wrongCredentials":"<b>Error!</b><br><br>Unknown user",
					"validationError":"<b>Warning!</b><br><br>Please check form data",
					"forgotPasswordSuccess":"<b>Password successfully sent</b>.<br><br>Check your email",
					"newsletterSubscribeSuccess":"<b>Subscription successfully completed</b>"}}
					
	function doPost(options, modalDisabled)
	{
		/*if (document.location.hostname=="")
		{
			try 
			{
				netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
				netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
			} 
			catch (err){}
		}*/
		if (!modalDisabled)
			showModal();
		$.ajax({type: "POST",
					url: options.url,
					dataType: options.dataType,
					data:options.data,
					success:function(data){hideModal();options.success(data);},
					error:function()
					{
						hideModal();
						showModal(m_messages[m_settings.language]['genericError'], true);
					}})

	}
	
	function showModal(message, hideOnClick)
	{
		var modalHtml = "<div id=modalDialog style=\"position:absolute;left:0;top:0;display:none;background-color:#000;z-index:100;\">aaaaaa</div>" +
					"<div id=modalDialogMessage style=\"position:absolute;padding:15px 25px 15px 25px;background-color:#fff;color:#000;z-index:101;border:1px solid #000;-moz-border-radius:10px;-webkit-border-radius:10px\"></div>";					

		if ($("#modalDialog").length==0)
		{
			$(document.body).append(modalHtml);
			$(window).resize(sizeAndPosition);
			$(window).scroll(sizeAndPosition);
		}
			
		var dlg = $("#modalDialog");
		var msg = $("#modalDialogMessage");
		
		if (hideOnClick)
		{
			$("#modalDialog").click(hideModal);
			$("#modalDialogMessage").click(hideModal);
		}
		else
		{
			$("#modalDialog").unbind("click");
			$("#modalDialogMessage").unbind("click");
		}
		
		msg.html(message?message:m_messages[m_settings.language]['loading']);
		dlg.css("opacity",0.5);
		dlg.css("filter", "alpha(opacity='50')");
		
		sizeAndPosition();
		
		dlg.show();
		msg.show();
		
		function sizeAndPosition()
		{
			var dlg = $("#modalDialog");
			var msg = $("#modalDialogMessage");
			dlg.width($(window).width());
			dlg.height($(window).height()+$(document).scrollTop());
			msg.css("left",($(window).width()-msg.outerWidth())/2);
			msg.css("top",($(window).height()-msg.outerHeight())/2+$(document).scrollTop());
		}
	}
	
	function hideModal()
	{
		var dlg = $("#modalDialog");
		var msg = $("#modalDialogMessage");
		dlg.hide();
		msg.hide();
	}
	
	function toggleInput(el)
	{
		el.data("originalVal", el.val());
		el.data("originalColor", el.css("color"));
		el.focus(function(){
			if($(this).val() == $(this).data("originalVal"))
			{
				$(this).val("");
				$(this).css("color","#000000");
			}
		})
		el.blur(function(){
			if($(this).val() == "")
			{
				$(this).val($(this).data("originalVal"));
				$(this).css("color",$(this).data("originalColor"));
			}
		});
	}
					
	var proxy =
	{
		"isUserLogged": function(callback)
		{
			doPost({url: "http://" + m_settings.domain + m_settings.baseUri + "userislogged.aspx",
					dataType: "json",
					data:{},
					success:function(data)
					{
						if (data.logged=="1")
							callback(true);
						else
							callback(false);
					}}, true)
		},
		
		"login": function(username, password, callback)
		{
			doPost({url: "http://" + m_settings.domain + m_settings.baseUri + "LoginExecute.aspx",
					dataType: "json",
					data:{"email":username, "pwd": password},
					success:function(data)
					{
						if (data.UserId)
							callback(true);
						else
							callback(false);
					}})
		},
		
		"logout": function(callback)
		{
			doPost({url: "http://" + m_settings.domain + m_settings.baseUri + "LogoutExecute.aspx",
					dataType: "json",
					data:{},
					success:function(data)
					{
						if (data.code=="0")
							callback(true);
						else
							callback(false);
					}})
		},
		
		"forgotPassword": function(email, callback)
		{
			doPost({url: "http://" + m_settings.domain + m_settings.baseUri + "ForgotPassword.aspx",
					dataType: "json",
					data:{"email":email, "lang":m_settings.language},
					success:function(data)
					{
						if (data.code=="0")
							callback(true);
						else
							callback(false);
					}})
		},
		
		"newsletterSubscribe": function(email, firstName, lastName, callback)
		{
			doPost({url: "http://" + m_settings.domain + m_settings.baseUri + "MailSaveNew.aspx",
					dataType: "json",
					data: {"name":firstName, "lastname":lastName, "email":email},
					success: function(data)
					{
						if (data.result == "ok")
							callback(true);
						else
							callback(false);
					}})
		},
		
		"register": function(userData, callback)
		{
			doPost({url: "http://" + m_settings.domain + m_settings.baseUri + "RegisterSave.aspx",
					dataType: "json",
					data: userData,
					success: function(data)
					{
						if (data.code == "0")
							callback(true);
						else
							callback(false);
					}})
		},
		
		"profileUpdate": function(userData, callback)
		{
			doPost({url: "http://" + m_settings.domain + m_settings.baseUri + "ProfileSave.aspx",
					dataType: "json",
					data: userData,
					success: function(data)
					{
						if (data.code == "0")
							callback(true);
						else
							callback(false);
					}})
		},
		
		"getUserData": function(callback)
		{
			doPost({url: "http://" + m_settings.domain + m_settings.baseUri + "getUserData.aspx",
					dataType: "json",
					data: {},
					success: function(data)
					{
						callback(data);
					}})
		}
	}				
					
	// sets base uri and language
	this.init = function()
	{
		// setup settings
		if (document.location.href.indexOf("/it/")!=-1)
				m_settings.language = "it";
		if (document.location.hostname!="")
		{
			m_settings.domain = document.location.hostname;
			if (document.location.href.indexOf("/mitchellhedges/")!=-1)
				m_settings.baseUri = "/mitchellhedges/";
		}
		else
		{
			m_settings.domain = "staging.timeo.biz";
			m_settings.baseUri = "/mitchellhedges/";
		}
			
		//console.log("User manager settings");
		//console.dir(m_settings);
		
		// prepare login box
		toggleInput($("#log_username"));
		toggleInput($("#log_password"));
		toggleInput($("#forgot_email"));
				
		$(".loginAction").click(UserManager.login);
		$(".logoutAction").click(UserManager.logout);
		$(".forgotPasswordAction").click(UserManager.forgotPassword);
		
		// prepare email box
		toggleInput($("#newsletterSubscribe #email"));
		toggleInput($("#newsletterSubscribe #firstname"));
		toggleInput($("#newsletterSubscribe #lastname"));
		$("#newsletterSubscribe a").click(UserManager.newsletterSubscribe);
		//$("#newsletterSubscribe").submit(UserManager.newsletterSubscribe);
		
		// display login/logout
		proxy.isUserLogged(function(success){
			if (success)
			{
				$(".logout_link").show();
			}
			else
				$(".login_link").show();
		});
	}
	
	this.showModal = function(message, hideOnClick)
	{
		showModal(message, hideOnClick);
	}

	this.login = function()
	{
		var username = $("#log_username").val();
		var password = $("#log_password").val();
		proxy.login(username, password, function(success){
			if (success)
			{
				document.location.replace(document.location.href.split("#").join(""));
			}
			else
			{
				showModal(m_messages[m_settings.language]['wrongCredentials'], true);
			}
		})
	}
	
	this.logout = function()
	{
		proxy.logout(function(success){
			if (success)
			{
				document.location.replace(document.location.href.split("#").join(""));
			}
		})
	}
	
	this.forgotPassword = function()
	{
		var email = $("#forgot_email").val();
		proxy.forgotPassword(email, function(success){
			if (success)
				showModal(m_messages[m_settings.language]['forgotPasswordSuccess'], true);
			else
				showModal(m_messages[m_settings.language]['wrongCredentials'], true);
		})
	}
	
	this.newsletterSubscribe = function()
	{
		var email = $("#newsletterSubscribe #email").val();
		var firstName = $("#newsletterSubscribe #firstname").val();
		var lastName = $("#newsletterSubscribe #lastname").val();
		
		chkmail = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(email);
		if(!chkmail){
			showModal(m_messages[m_settings.language]['validationError'], true);
			return false;
		}
		
		proxy.newsletterSubscribe(email, firstName, lastName, function(success){
			if (!success)
				showModal(m_messages[m_settings.language]['validationError'], true);
			else
				showModal(m_messages[m_settings.language]['newsletterSubscribeSuccess'], true);
		})
	}
	
	this.register = function(userData, callback)
	{
		proxy.register(userData, callback)
	}
	
	this.profileUpdate = function(userData, callback)
	{
		proxy.profileUpdate(userData, callback)
	}
	
	this.getUserData = function(callback)
	{
		proxy.getUserData(callback)
	}
}

$(document).ready(function()
{
	UserManager.init();
})