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: '2_wZgqkoPhvNSivmTcZvusynXnHDwcnIfcXcLDOD3dO_XtTkOtNxF7swT4MPTmWvlo',
		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: 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 + '">Per a finalitzar el registre necessitem algunes dades més sobre tu:' + 
								 '<form method="post" action="' + webroot + 'users/snRegister">' + 
								 '<label for="UserUsername">Nom d\'usuari</label><input type="text" name="data[User][username]" id="UserUsername" value="' + self.userObj.user.nickname.replace(' ','_') + '" class="text long"/>' +
								 '<label for="UserPwd">Contrasenya</label><input type="password" name="data[User][pwd]" id="UserPwd" class="text long" />' +
								 '<input type="hidden" name="data[User][name]" value="' + self.userObj.user.firstName + '" />' +
								 '<input type="hidden" name="data[User][surnames]" value="' + self.userObj.user.lastName + '" />' +
								 '<label for="UserEmail">E-mail</label><input type="text" name="data[User][email]" id="UserEmail" class="text long" />' +
								 '<label for="UserPostalcode">Codi postal</label>' +
								 '<input type="text" name="data[User][postalcode]" id="UserPostalcode" value="' + self.userObj.user.zip + '" class="text long" />' +
								 '<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" />' + 
								 '<div><img src="' + webroot + 'img/ajax-loader-40p-shadowbox.gif" alt="loading..." class="ajax-loading" style="display:none" /></div></div>',
						player: 'html',
						title: 'Finalitza el teu registre',
						height: 400,
						width: 380
					});
				}
			}
		}
	}
	
	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
		});
		// 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 after registration success...");
				firebug(data);
				if (data.success) {
					jQuery("#" + self.options.shadowDiv).html("El teu registre ha finalitzat correctament. Espera un moment mentre et redirigim...");
					Shadowbox.skin.dynamicResize(370, 95);
					setTimeout(function(){ window.location.href = webroot;}, 3500);
				} else if (data.errors) {
					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(document).ready(function() {
	
	function afterValidate(data) {
		jQuery(".error-message").remove();
		jQuery("#gigyaReg :submit").removeAttr("disabled");
	    if (data.errors) {
			// Mètode onError d'ajax_basics
	        onError(data.errors, '#' + gc.options.shadowDiv, function(){
				Shadowbox.skin.dynamicResize(jQuery("#gigyaReg").width() + 60, jQuery("#gigyaReg").height() + 60);
			});
	    } else if (data.success) {
	        gc.registrationSuccess(data.success);
	    }
		jQuery(".ajax-loading").fadeOut();
	}

	jQuery("#" + gc.options.shadowDiv + " form").live('submit', function() {
		jQuery(".ajax-loading").fadeIn();
		jQuery(".error-message").slideUp();
		jQuery('#' + gc.options.shadowDiv + " :submit").attr("disabled", "disabled");
        jQuery.post(gc.options.uri.register,
            jQuery(this).serializeArray(),
            afterValidate,
            "json"
        );
        return false;
	});
});
// 23
