var logging = true;

var firebug = function(text){
	if (!logging) return;
	if (window.console && window.console.firebug)
	{
		return console.log(text);
	}
}

// Disable shadowbox auto-setup
jQuery(document).ready(function(){
	Shadowbox.init({skipSetup: true, enableKeys: false});
});

function Connect() {
	var self = this;
	self.options = {
		// Capa on es troba el widget d'inici de sessió
		loginDiv: 'gigyaConnect',
		// Capa generada dinàmicament amb ShadowBox (durant el procés de registre)
		shadowDiv: 'gigyaReg',
		uri: {
			login: webroot + 'users/socialize/login',
			signature: webroot + 'users/socialize/signature',
			register: webroot + 'users/socialize/register'
		}
	};
	self.userObj = null;
	self.signature = null;
	
	self.login_params = {
		useHTML: 'true',
		showTermsLink: 'false',
		height: 30,
		width: 55,
		hideGigyaLink: 'true',
		containerID: self.options.loginDiv,
		useFacebookConnect: 'true',
		lastLoginIndication: 'none',
		UIConfig: '<config><body><controls><snbuttons buttonsize="20"></snbuttons></controls></body></config>'
	};
	self.conf = {
		APIKey: gigya_api_key,
		enabledProviders: 'facebook,twitter'
	};
	
	self.connect = function(provider, callback) {
		firebug("connect");
		gigya.services.socialize.connect(gc.conf, {
			provider: provider, invite: true, callback: callback
		});
	}
	
	self.login = function(provider, callback) {
		firebug("login..");
		gigya.services.socialize.login(gc.conf, {
			provider: provider,
			callback: callback || self.onLogin
		});
	}
	
	self.logout = function() {
		loggedIn = false;
		return gigya.services.socialize.logout(self.conf, {callback: function(){
			return true;
		}});
	}
	
	self.kill = function() {
		gigya.services.socialize.disconnect(gc.conf,{callback: firebug});
		gigya.services.socialize.unlinkAccounts(gc.conf, {callback: firebug});
		self.logout();
	}
	
	self.getUserInfo = function() {
		gigya.services.socialize.getUserInfo(self.conf, { callback: firebug});
	}
	
	self.onLogin = function(response) {
		firebug("onLogin...");
		firebug(response);
		if ( response.user && !loggedIn) {
			self.userObj = response;
			firebug(self.userObj);
			if ( self.checkSignature() ) {
				if ( self.userObj.user.isSiteUID == true ) {
					firebug("és siteUID");
					// Si l'usuari està registrat iniciem sessió al sistema
					jQuery.ajax({
						type: "POST",
						async: false,
						url: self.options.uri.login,
						data: {"data[uid]": self.userObj.UID},
						success: function(data) {
							firebug("Login success..");
							if (data.success) {
								window.location.href = webroot;
							} else if (data.error) {
								alert(data.error);
								self.kill();
							}
						},
						dataType: "json"
					});
				} else {
					firebug("NO és siteUID");
					Shadowbox.open({
						content:'<div id="' + self.options.shadowDiv + '"><p>Per a finalitzar el registre necessitem alguna dada més:</p>' + 
								'<form method="post" action="' + webroot + 'users/snRegister">' + 
								'<div class="inputs"><div class="text input required">' +
									'<label for="UserUsername">Nom d\'usuari</label>' +
									'<div class="extraborder">' +
										'<input type="text" name="data[User][username]" id="UserUsername" value="' + self.userObj.user.nickname.replace(' ','_') + '" class="text long"/>' +
									'</div>' +
								'</div>' +
								'<div class="text input required">' +
									'<label for="UserPwd">Contrasenya</label>' +
									'<div class="extraborder">' +
										'<input type="password" name="data[User][pwd]" id="UserPwd" class="text long" />' +
									'</div>' +
								'</div>' +
								'<div class="text input required">' +
									'<label for="UserEmail">E-mail</label>' +
									'<div class="extraborder">' +
										'<input type="text" name="data[User][email]" id="UserEmail" class="text long" />' +
									'</div>' + 
								'</div>' + 
								'<div class="text input required">' +
									'<label for="UserPostalcode">Codi postal</label>' +
									'<div class="extraborder">' +
										'<input type="text" name="data[User][postalcode]" id="UserPostalcode" value="' + self.userObj.user.zip + '" class="text long" />' +
									'</div>' +
								'</div>' +
								'<div class="text input required">' +
									'<label for="UserDni">DNI</label>' +
									'<div class="extraborder">' +
										'<input type="text" name="data[User][dni]" id="UserDni" class="text long" />' +
									'</div>' + 
								'</div></div>' + 
								'<input type="hidden" name="data[User][name]" value="' + self.userObj.user.firstName + '" />' +
								'<input type="hidden" name="data[User][surnames]" value="' + self.userObj.user.lastName + '" />' +
								'<input type="hidden" name="data[User][gigya_uid]" id="g_uid" value="'+ self.userObj.UID +'" />' +
								'<div class="submit">' +
									'<input type="submit" value="Envia" class="submit" /><img src="' + webroot + 'img/loaders/gray_20_shadowbox.gif" alt="loading..." /><div class="mandatory-field-disclamer" style="">Camps obligatoris</div></div>' +
								'</div><div class="extra"></form>',
						player: 'html',
						title: 'Finalitza el teu registre',
						height: 300,
						width: 430
					});
				}
			}
		}
	}
	
	self.notifyLogin = function(uid, callback) {
		loggedIn = true;
		gc.createSignature(uid);
		firebug("notifyLogin");
		var params = {
			timestamp: gc.timestamp,
			signature: gc.signature,
			siteUID: uid,
			callback: function(response) {
				self.userObj = response;
				if (typeof callback == 'function') callback();
			}
		};
		return gigya.services.socialize.notifyLogin(gc.conf, params);
	}
	
	self.disconnect = function(provider, callback) {
		gigya.services.socialize.disconnect(gc.conf, {provider:provider, callback: callback});
	}
	
	self.onConnect = function(userObj) {
		self.userObj = userObj;
		firebug("onConnect");
		if (userObj.user.isSiteUID == false) {
			gigya.services.socialize.linkAccounts(gc.conf, {
				siteUID: self.uid,
				timestamp: self.timestamp,
				signature: self.signature,
				callback: function(res) {
					firebug("onConnect response...");
					firebug(res);
				}
			});
		}
	}
	
	self.createSignature = function(uid) {
		firebug("createSignature");
		var timestamp = Math.round( new Date().getTime() / 1000.0 );
		jQuery.ajax({
			type: "POST",
			url: self.options.uri.signature,
			async: false,
			data: 
				{
					"data[uid]": uid ? uid : self.userObj.user.UID,
					"data[time]": self.userObj == null ? timestamp : self.userObj.timestamp
				},
			success: function(data){
				self.signature = data.signature;
				self.timestamp = data.timestamp;
			},
			dataType: "json"
		});
	}
	
	self.checkSignature = function() {
		firebug("checkSignature");
		self.createSignature();
		return self.signature == self.userObj.signature;
	}
	
	self.registrationSuccess = function(data) {
		firebug("registrationSuccess...");
		firebug(data);
		gigya.services.socialize.linkAccounts(self.conf, {
			siteUID : self.userObj.UID,
			timestamp: self.userObj.timestamp,
			signature: self.signature
		});
		var message = data.message;
		// Iniciem sessió al sistema
		jQuery.ajax({
			type: "POST",
			async: false,
			url: self.options.uri.login,
			data: {"data[uid]": self.userObj.UID},
			success: function(data) {
				if (!data.errors) {
					jQuery("#" + self.options.shadowDiv).html("<p>" + message + "</p>");
					Shadowbox.skin.dynamicResize(370, 95);
					setTimeout(function(){ window.location.href = webroot;}, 3500);
				} else {
					alert(data.errors);
					self.kill();
				}
			},
			dataType: "json"
		});
	}
}

// Gigya configuration
var gc = new Connect();
gigya.services.socialize.addEventHandlers(
	gc.conf,
	{   
		onLogin: gc.onLogin,
		onConnect: gc.onConnect
	}
);

// Ajax validation for registration form
jQuery(function($) {
	
	function afterValidate(data) {
		jQuery("#gigyaReg :submit").removeAttr("disabled");
		firebug(data);
	    if (data.errors) {
			// Mètode onError d'ajax_basics
	        onError(data.errors, '#' + gc.options.shadowDiv);
			$("div.text input").tipTip({"display":".error-message","delay":0,"defaultPosition":"top","maxWidth":"180px","edgeOffset":0});
			$("div.error input.text").change(function(){
				$(this).unbind("mouseenter");
				$("#tiptip_holder").hide();			
			})
			.click(function(){
				$(this).unbind("mouseenter");
				$("#tiptip_holder").hide();	
			});
			jQuery(".error-message").remove();
	    } else if (data.success) {
	        gc.registrationSuccess(data.success);
	    }
		jQuery("#gigyaReg div.submit img").fadeOut();
	}

	jQuery("#" + gc.options.shadowDiv + " form").live('submit', function() {
		jQuery("#gigyaReg div.submit img").fadeIn();
		jQuery("div.error").removeClass("error");
		
		jQuery('#' + gc.options.shadowDiv + " :submit").attr("disabled", "disabled");
        jQuery.ajax({
			type: "POST",
			url: gc.options.uri.register,
			data: jQuery(this).serializeArray(),
			success: afterValidate,
			dataType: "json"
		});
        return false;
	});
	
	$('#UserLoginForm').live("submit", function(){
		var $this = $(this);
		$this.find(".submit").addClass("loading");
		
		$.post(
			$this.attr("action"),
			{
				'data[User][username]' : $('#LoginUserUsername').val(), 
				'data[User][password]' : $('#LoginUserPassword').val(),
				'data[User][remember]' : $('#LoginUserRemember').val()
			},
			function(data){
				$this.find(".required").removeClass("error");

				if ( data.code == 0 ) {
					gc.notifyLogin(data.uid, function(){
						// Redirect
						window.location = data.redirect;
					});
				} else {
					$this.find(".submit").removeClass("loading").end().find(".required").addClass("error");
				}
			},
			"json"
		);
		// skip default targetting
		return false;
	});
	
	$(".foot a[href^='#connect']").live("click", function() {
		var provider = $(this).attr("href").replace("#connect-", "");
		if ( /facebook|twitter/.test(provider) ) {
			gc.login(provider);
			return false;
		}
	});
});
// 23
