if (typeof( window[ 'app' ] ) == "undefined") app = {};
core.account = { dom: { SignUp: "", SignIn: "" }, lang: "" };

core.account.set_lang = function(){
	core.account.lang = "es";//sessvars.site.active_locale;
	return core.account.lang;
};

core.account.SignUp = function( form, options ){
	//Configurar idioma
	core.account.set_lang();
	core.account.welcome_email = "";
	core.account.dom.SignUp = form;
	core.ui.register('signup',"#" + form);

	$("input[id='firstname'],input[id='lastname'],input[id='email'],input[id='password']").focus(
		function()
		{
			this.select();
		}
	)

	$.get('email/welcome_'+core.account.lang+'.html', function(content){
		content = content.replace(/\[\[/g,"{{");
		content = content.replace(/\]\]/g,"}}");
		core.account.welcome_email = content;
	});
	
	var options = options || {};
	core.account.SignUp.doAfterCompleted = options.doAfterCompleted ?  options.doAfterCompleted : "";

	//Buscamos el formulario para validar los datos via ajax y solicitar respuesta de lo enviado
	$("#"+form).ajaxForm({
		beforeSubmit: core.account.SignUp.validate//, clearForm:true,success:core.account.SignUp.onComplete, timeout:   60000
	});

};

/**
 * @requires core.feedback
 * @param {Object} formData
 * @param {Object} jqForm
 * @param {Object} options
 */
core.account.SignUp.validate = function(formData, jqForm, options){
	var email_re = new RegExp(/^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$/i);
	params = {};
	vars = {};
	var msg = '';
	for (var i=0; i < formData.length; i++) {
		var value = " ";

		if (!formData[i].value ) {
 			if (formData[i].name == 'firstname') {
				msg += "* El campo Nombre no puede estar en blanco.<br />";
			}
 			if (formData[i].name == 'lastname') {
				msg += "* El campo Apellido no puede estar en blanco.<br />";
			}
 			if (formData[i].name == 'email') {
				msg += "* El campo E-mail no puede estar en blanco.<br />";
			}
 			if (formData[i].name == 'password') {
				msg += "* El campo Clave no puede estar en blanco.<br />";
			}
 			if (formData[i].name == 'repassword') {
				msg += "* El campo Repite tu Clave no puede estar en blanco.<br />";
			}
		} else if (formData[i].name == 'email' && !email_re.exec(formData[i].value)) {
			msg += "Formato de E-mail invalido.<br />";
		} else {
			vars[formData[i].name] = formData[i].value;
			params[ formData[i].name ] = formData[i].value;
		}
	}

	if (msg) {
		$("#singup_error").html(msg);
		$("#singup_error").slideDown(500).wait(3000).slideUp(500);
		return false;
	}

	params.login = params.email;

	// Asignamos un avatar aleatorio
	var min = 1;
	var max = 20;
	var number = Math.round(Math.random() * (max - min) + min);

	if (number < 10)
		number = "0" + number;

	var avatar = "http://{site_without_protocol}media/images/avatars/avatar-" + number + ".png";
	params.avatar_url = avatar;

	core.feedback({action: 'wait'});
	params['email-subject'] = 'Bienvenido';
	params["email-tpl"] = core.account.welcome_email;
	params["email-tpl-vars"] = $.toJSON(vars);
	//params["email-template"] = "<email-template><template><![CDATA["+core.account.welcome_email+"]]></template><values><site-url>"+config.properties('site')+"</site-url></values></email-template>";

	var extra_params = {service:'account_create',url:".json",verb:'POST'};
	$.post( config.api(), config.default_params(params,extra_params) , core.account.SignUp.onComplete, "json" );

	return false;
};
/**
 * @requires core.feedback
 * @param {Object} data
 */
core.account.SignUp.onComplete = function(data){
	var r = data.response; //$.evalJSON(data).response;
	var h = [];
	var html_msg = null;
	var r_email, r_passw;
	var event_values = {};
	if ( r.success ){
		r_email = $("#"+core.account.dom.SignUp).find(":input[id='email']").val();
		r_passw = $("#"+core.account.dom.SignUp).find(":input[id='password']").val();
		// antes de resetar la forma, se envia la notificacion
		if (core.account.SignUp.send_notification) {
			// invocamos al evento core.events.new_registration
			event_values['contact_firstname'] = $("#" + core.account.dom.SignUp).find(":input[id='firstname']").val();
			event_values['contact_lastname'] = $("#" + core.account.dom.SignUp).find(":input[id='lastname']").val();
			event_values['contact_email'] = r_email;
			
			core.events.call('new_registration', event_values);
		}
		
		$("#"+core.account.dom.SignUp).resetForm();
		core.account.SignUp.close();
		core.feedback({action: 'update', timeout:5, icon:'clean-icon' ,msg: app.messages ? app.messages.USERREGISTERED : 'User has been registered'});
		
		if (core.account.SignUp.doAfterCompleted != ""){
			r = {"email":r_email,"password":r_passw};
			eval(core.account.SignUp.doAfterCompleted + "(r)");
		}
		
	}else{
		var msg = core.account.getError(r,core.account.dom.SignUp);
		core.feedback({action:'error',msg:msg});
	}
};

core.account.getError = function(r, form){
	var msg = '';
	$.each( r.errors, function(){
		if (this.param) {
			if ($("#" + this.param, "#" + form)[0])
				msg = msg + $("#" + this.param, "#" + form)[0].defaultValue + ' ' + this.msg + '<br/>';
		}else if(this.msg) msg = msg + this.msg + '<br/>';
	});
	return msg;
}

core.account.SignIn = function( form, options ){
	var options = options || {};
	core.account.dom.SignIn = form;
	core.ui.register('signin',"#" + form);
	$("input[id='login']").focus(
		function()
		{
			this.select();
		}
	)

	$("input[id='password']","form[id='" + form + "']").focus(
		function()
		{
			var el = $(this);
			 if (this.name == 'password' && el.attr("type") != 'password') {
			 	var el2 = $('<input/>').attr("type", "password").attr("name", "password");
			 	el.after(el2);
			 	el.remove();
			 	el2.focus();
			 }
		}
	)

	core.account.SignIn.doAfterCompleted = options.doAfterCompleted ?  options.doAfterCompleted : "";

	$("#"+form).ajaxForm({
		beforeSubmit: core.account.SignIn.validate//, clearForm:true,success:core.account.SignIn.onComplete, timeout:   60000
	});

};
/**
 * @requires core.feedback
 * @param {Object} formData
 * @param {Object} jqForm
 * @param {Object} options
 */
core.account.SignIn.validate = function(formData, jqForm, options){
	var email_re = new RegExp(/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/);
	params = {};
	var msg = '';
	for (var i=0; i < formData.length; i++) {
		if (!formData[i].value ) {
 			if (formData[i].name == 'login') {
				msg += "* El campo E-mail no puede estar en blanco.<br />";
			}
 			if (formData[i].name == 'password') {
				msg += "* El campo Clave no puede estar en blanco.<br />";
			}
		} else if (formData[i].name == 'login' && !email_re.exec(formData[i].value)) {
			msg += "Formato de E-mail invalido.<br />";
		} else {
			params[ formData[i].name ] = formData[i].value;
		}
	}

	if (msg) {
		$("p#singin_error.error").html(msg);
		$("p#singin_error.error").slideDown(500).wait(3000).slideUp(500);
		return false;
	}

	//params.opt = "by-credentials";
	params['opt'] = "by-credentials";

	//core.account.feedback.toggle({x:-1, y: 1, show:true});
	core.feedback({action:'wait'});

	var extra_params = {service:'account',url:"/authenticate.json",verb:'PUT'};
	$.post( config.api(), config.default_params(params,extra_params) , core.account.SignIn.onComplete, "json" );

	return false;
};
/**
 * @requires core.feedback
 * @param {Object} data
 */
core.account.SignIn.onComplete = function(data){
	var r = data.response;
	var h = [];
	var html_msg = null;

	if ( r.success ){
		sessvars.site.userinfo = r.entry;
		core.account.SignIn.close();
		core.account.showLogout();
		core.feedback({action:'welcome'});
		
		if (core.account.SignIn.doAfterCompleted != ""){
			eval(core.account.SignIn.doAfterCompleted + "(r)");
		}
	}else{
		var msg = core.account.getError(r,core.account.dom.SignIn);
		core.feedback({action:'error',msg:msg});
	}
};

core.account.SignIn.close = function(){
	$("#" + core.account.dom.SignIn ).slideUp();

}
/**
 * @requires core.ui
 */
core.account.SignIn.localize = function(){
	window.scrollTo(0,0);
	core.ui.localize('signin',{msg:app.messages ? app.messages.LOGINTOYOURACCOUNT : 'Log in to<br/>your account', tooltip: 'leftMiddle',target: 'rightMiddle',style_name : 'dark'});
}

/**
 * @requires core.ui
 */
core.account.SignUp.localize = function(){
	window.scrollTo(0,0);
	core.ui.localize('signup',{msg:app.messages ? app.messages.REGISTERYOURACCOUNT : 'Register your <br />account', tooltip: 'leftMiddle',target: 'rightMiddle',style_name : 'dark'});
}

core.account.SignUp.close = function(){
	$("#" + core.account.dom.SignUp ).slideUp();
}

core.account.SignIn.SignInScroll = function(a_class, form){
	core.account.SignIn.SignInScroll.className = a_class;
	$("a." + a_class).hover(function(){
		$(this).attr("class",core.account.SignIn.SignInScroll.className + " active");
		if ($(".account:visible").length) {
			if ($("#" + core.account.dom.SignUp + ":visible").length) {
				$("#" + core.account.dom.SignUp).hide();
				$("a." + core.account.SignUp.SignUpScroll.className).attr("class", core.account.SignUp.SignUpScroll.className);
				$("#" + core.account.dom.SignIn).show();
			}
		}
		else {
			$("#" + core.account.dom.SignIn).show();
		}
	});
}

core.account.SignUp.SignUpScroll = function(a_class,form){
	core.account.SignUp.SignUpScroll.className = a_class;
	$("a." + a_class).hover(function(){
		$(this).attr("class",core.account.SignUp.SignUpScroll.className + " active");
		if ($(".account:visible").length) {
			if ($("#" + core.account.dom.SignIn + ":visible").length) {
				$("#" + core.account.dom.SignIn).hide();
				$("a." + core.account.SignIn.SignInScroll.className).attr("class", core.account.SignIn.SignInScroll.className);
				$("#" + core.account.dom.SignUp).show();
			}

		}
		else $("#" + core.account.dom.SignUp).show();
	});
}

core.account.showLogout = function(){
	$('a.' + core.account.SignIn.SignInScroll.className).unbind();
	$('a.' + core.account.SignIn.SignInScroll.className).html(app.labels ? app.labels.LOGOUT : 'Logout');
	$('a.' + core.account.SignIn.SignInScroll.className).bind('click', core.account.SignOut);
}

core.account.SignOut = function( options ){
	//Limpiamos la variable global del usuario
	sessvars.site.userinfo = null;
	window.location.reload();
};

