var _domain = 'cvclavoz.com'; //'cvcwebserver.com'
var _root = ''; //'/0O3'
var gUtil = {
	debug: false
	,autoModal: false
	,domain: _domain 
	,root: _root
	,minLevel: 1
	,consolelog: function(o) {
		//log to console if exists
		if(true === this.debug && typeof console != "undefined") {
			console.log(o);
		}
	}
	,log: function(o) {
		//log to console
		this.consolelog(o);
		
		var d = o;
		if("string" == typeof o) {
			d = {
				event: "anon"
				,message: o
			};
		}
		
		//log to server if jquery exists
		jQuery.ajax("http://"+this.domain+this.root+"/api/log.php", {
			type:"POST"
			,data:d
			,dataType:"json"
			,error:function(jqXHR,textStatus,errorThrown){
				gUtil.consolelog(textStatus+": "+errorThrown);
			}
			,success:function(data,textStatus,jqXHR) {
				gUtil.consolelog(data);
			}
		});
	}
	,idCookieName: 'cvclavoz_vipclub_id'
	,userCookieName: 'cvclavoz_vipclub_user'
	,auth: null
	,user: null
	,conf: {
		lang: 'es'
	}
	,shareParams: {
		userAction: null
		,userMessagePlaceholder: "Write your message..."
		,showEmailButton: true
		,showMoreButton: true
		,cid: 'share'
		,context: null
		,operationMode: 'multiSelect'
		,enabledProviders: 'facebook,twitter,google,yahoo,messenger'
		,showSuccessMessage: true
		,grayedOutScreenOpacity: 20 //0-(20)-100
		,initialView: 'share' //share, more, email
		,shortURLs: 'always' //always, whenRequired, never
//		,shareTimeout: 30 //seconds (integer)
		,showTooltips: true
		,emailProviders: 'google,yahoo,aol'
		,emailBody: "" //TODO: set this value
		,onLoad: function(response) {
//			this.consolelog(response);
		}
		,onError: function(response) {
			gUtil.log({
				userID:gUtil.getUserID()
				,event:'error'
				,message:'error during gigya share'
				,tags:[
					'share'
				]
				,data: {
					errorCode: response.errorCode
					,errorMessage: response.errorMessage
				}
			});
		}
		,onClose: function(response) {
			this.consolelog(response);
		}
		,onSendDone: function(response) {
			gUtil.log({
				userID:gUtil.getUserID()
				,event: 'share'
				,message: "gigya share completed"
				,tags: [
					'share'
				]
				,data: {
					eventName:r.eventName
					,source:r.source
					,providers:r.providers
				}
			});
		}
	}
	,sharebarParams: { 
		containerID: 'shareBar'
		,operationMode: 'multiSelect' //'autoDetect'
		,shareButtons: [
			{provider:'facebook-like'}
			,{provider:'google-plusone'}
			,{provider:'facebook'}
			,{provider:'twitter'}
			,{provider:'share'}
			,{provider:'email'}
			,{
				provider:'comments'
				,categoryID:'Comentarios RDS'
				,streamID:'cvclavoz.com'
			}
		]
		,layout: 'vertical'
		,iconsOnly: 'true'
		,showCounts: 'right'
		,initialView: 'share'
		,userAction: null
		,cid:'shareBar'
		,emailProviders: 'google,yahoo,aol'
		,emailBody: "" //TODO: set this value
		,onLoad:function(r) {
			//after UI is drawn
		}
		,onSendDone:function(r) {
			//log share when complete
			gUtil.log({
				userID:gUtil.getUserID()
				,event: 'share'
				,message: "gigya share completed"
				,tags: [
					'share'
				]
				,data: {
					eventName:r.eventName
					,source:r.source
					,providers:r.providers
				}
			});
		}
		,onError:function(r) {
			//log share error
			gUtil.log({
				userID:gUtil.getUserID()
				,event: 'error'
				,message: "error during gigya share (bar)"
				,tags: [
					'share'
					,'shareBar'
				]
				,data: {
					eventName:r.eventName
					,source:r.source
					,errorCode:r.errorCode
					,errorMessage:r.errorMessage
					,errorDetails:r.errorDetails
				}
			});
		}
	}
	,reactionParams: {
		reactions:[
			{
				text: ''
				,ID: 'like'
				,iconImgUp:'http://'+_domain+_root+'/css/images/thumbsup_icon.png'
				,iconImgOver:'http://'+_domain+_root+'/css/images/thumbsup_icon.png'
				,tooltip:'Me Gusta'
				,feedMessage: 'Me Gusta!'
			}
			,{
				text: ''
				,ID: 'dislike'
				,iconImgUp:'http://'+_domain+_root+'/css/images/thumbsdown_icon.png'
				,iconImgOver:'http://'+_domain+_root+'/css/images/thumbsdown_icon.png'
				,tooltip:'No Tanto'
				,feedMessage: 'No Tanto!'
			}
		]
		,containerID: 'reactionBar'
		,userAction: null
		,barID: ''
		,multipleReactions: false
		,cancelReactions: true
		,countType: 'number' //or 'percentage'
		,showCounts: 'right'
		,promptShare: true
		,noButtonBorders: true
		,layout: 'horizontal'
		,cid: 'reaction'
		,onReactionClicked: function(r) {
			//log reaction clicked
			gUtil.log({
				userID:gUtil.getUserID()
				,event: 'reaction.click'
				,message: "gigya reaction clicked"
				,tags: [
					'reaction'
					,'click'
				]
				,data: {
					eventName:r.eventName
					,source:r.source
					,reaction:r.reaction
				}				
			});
		}
		,onReactionUnclicked: function(r) {
			//log reaction unclicked
			gUtil.log({
				userID:gUtil.getUserID()
				,event: 'reaction.unclick'
				,message: "gigya reaction unclicked"
				,tags: [
					'reaction'
					,'unclick'
				]
				,data: {
					eventName:r.eventName
					,source:r.source
					,reaction:r.reaction
				}				
			});
		}
		,onSendDone: function(r) {
			//log share when complete
			gUtil.log({
				userID:gUtil.getUserID()
				,event: 'share'
				,message: "gigya share completed"
				,tags: [
					'share'
					,'reaction'
				]
				,data: {
					eventName:r.eventName
					,source:r.source
					,providers:r.providers
				}
			});
		}
		,onError: function(r) {
			//log reaction error
			gUtil.log({
				userID:gUtil.getUserID()
				,event: 'error'
				,message: "error during gigya reaction"
				,tags: [
					'reaction'
				]
				,data: {
					eventName:r.eventName
					,source:r.source
					,errorCode:r.errorCode
					,errorMessage:r.errorMessage
					,errorDetails:r.errorDetails
				}
			});
		}
	}
	,commentParams: {
		categoryID: 'Comentarios RDS'
		,streamID: '' //be sure to set this, e.g. <?php single_post_title(); ?>
		,containerID: 'commentsDiv'
		,userAction: null
		,cid:'comments'
		,templates: {
			loginCanvas_loggedIn: '$photoDiv <div style="font-weight:bold; padding-top:5px;">$username</div>'
		}
		,useSiteLogin:true
		,onSiteLoginClicked:function(r) {
			gUtil.consolelog("gigya comment plugin site login clicked");
			jQuery.lightbox(
				"#modalRegistration"
				,{
					'modal': true
					,'autoresize': true
				}
				,function() {
					gUtil.ui();
				}
			);
		}
		,onCommentSubmitted:function(r) {
			gUtil.consolelog("gigya comment submitted");

			//log comment when complete
			gUtil.log({
				userID:gUtil.getUserID()
				,event: 'comment'
				,message: "gigya comment submitted"
				,tags: [
					'comment'
				]
				,data: {
					eventName:r.eventName
					,source:r.source
					,providerPostIDs:r.providerPostIDs
				}
			});
		}
		,onLoad:function(r) {
			jQuery("#commentsDiv-commentTextarea").focus(function() {
				gUtil.consolelog("gigya comment textarea in focus");
				if(0 == gUtil.getUserID()) {
					jQuery.lightbox(
						"#modalRegistration"
						,{
							'modal': true
							,'autoresize': true
						}
						,function() {
							gUtil.ui();
						}
					);
				}
			});
		}
		,onError:function(r) {
			//log comment error
			gUtil.log({
				userID:gUtil.getUserID()
				,event: 'error'
				,message: "error during gigya comment"
				,tags: [
					'comment'
				]
				,data: {
					eventName:r.eventName
					,source:r.source
					,errorCode:r.errorCode
					,errorMessage:r.errorMessage
					,errorDetails:r.errorDetails
				}
			});
		}
	}
	,registrationParams: {
		enabledProviders: 'facebook,twitter,google,yahoo,linkedin,messenger,myspace,aol'
		,showTermsLink: 'false' //hide Gigya terms link
		,hideGigya: 'true' //hide Gigya logo
		,showTooltips: 'false' //hide tool tips
//		,sessionExpiration: 60*60*24*30 //session expiration in 30 days (in seconds)
		,lastLoginIndication:'star' //none = do not display last login border
		,width: 535 //login plugin width
		,height: 110 //login plugin height
		,containerID: 'registrationPluginDiv' //div id in which to show login plugin
		,UIConfig: '<config><body><controls><snbuttons buttonsize="50"></snbuttons></controls><background background-color="Transparent"></background></body></config>' //ui settings
		,buttonsStyle: 'fullLogo'
		,autoDetectUserProviders: '' //empty = do not detect Facebook Connect
		,facepilePosition: 'none' //none = hide Facebook facepile
		,cid: 'authentication'
		,pendingRegistration: 'true' //flag to timeout gigya profile creation is user cancels registration process
		,extraFields: 'interests,activities'
		,facebookExtraPermissions: 'user_religion_politics,user_relationships'
	}
	,getUserID: function() {
		var cookieId = jQuery.cookie(this.idCookieName);
		if( !jQuery.isEmptyObject(cookieId) ){
			return cookieId;
		} else {
			return 0;
		}
	}
	,getUser: function() {
		return jQuery.parseJSON(jQuery.cookie(this.userCookieName));
	}
	,ui: function() {
		var state = "default"
		
		if( this.getUserID() ){
//			this.consolelog("userid: "+cookieId);
			state = "authenticated";
			this.user=this.getUser();
			this.consolelog(this.user);

			//check user access level
			if(this.user.access < this.minLevel) {
				state = "unauthorized";
			}
		}

		switch(state) {
			case 'authenticated':
				jQuery(".default").hide();
				
				if(null != this.user) {
					this.showAuthenticated();
					jQuery(".authenticated").show();
				} else {
					gigya.services.socialize.getUserInfo({},{
						callback:function(response){
							gUtil.user = response.user;
							gUtil.showAuthenticated();
							jQuery(".authenticated").show();
						}
					});
				}
				break;
				
			case 'unauthorized':
				this.log({
					userID:gUtil.getUserID()
					,event: 'warning'
					,message: "unauthorized user"
					,tags: [
						'access'
						,'unauthorized'
					]
				});
				jQuery(".authenticated").hide();
				jQuery(".default").show();
				jQuery.lightbox(
					"#modalUnauthorized"
					,{
						'modal': true
						,'autoresize': true
					}
				);

				this.logout();				
				break;
				
			default:
				jQuery(".authenticated").hide();
				jQuery(".default").show();
				break;
		}
		return state;
	}
	,showAuthenticated: function() {
		//display thumbnail image
		if("" != this.user.thumbnailURL) {
			jQuery(".imgThumbnail").attr("src",this.user.thumbnailURL);
			jQuery(".imgThumbnail").show();
		} else {
			jQuery(".imgThumbnail").hide();
		}
		//display profile image
		if("" != this.user.photoURL) {
			jQuery(".imgProfile").attr("src",this.user.photoURL);
			jQuery(".imgProfile").show();
		} else {
			jQuery(".imgProfile").hide();
		}

		//show existing user
		jQuery(".firstName").html(this.user.firstName);
		jQuery(".lastName").html(this.user.lastName);
		jQuery(".email").html(this.user.email);
		jQuery(".provider").html(this.user.loginProvider);
		jQuery(".city").html(this.user.city);
		jQuery(".country").html(this.user.country);
		//show existing user input fields
		jQuery(".inFirstName").val(this.user.firstName);
		jQuery(".inLastName").val(this.user.lastName);
		jQuery(".inCity").val(this.user.city);					
		jQuery(".inCountry").val(this.user.country);
		jQuery(".inEmail").val(this.user.email);

	}
	,showShare: function() {
		var act = new gigya.services.socialize.UserAction();
//		act.setUserMessage("This is the default user message");   // Setting the default user message
		act.setTitle("This is the title");  // Setting the Title
		act.setLinkBack("http://cvclavoz.com");  // Setting the Link Back
		act.setDescription("This is the share description text");   // Setting Description
		act.addActionLink("cvclavoz.com", "http://cvclavoz.com");  // Adding Action Link
		// Adding a Media (image)
		act.addMediaItem( { type: 'image', src: "http://cvclavoz.com/images/Logo-CVC-opaque.png", href: "http://cvclavoz.com" });

		this.shareParams.userAction = act;
		gigya.services.socialize.showShareUI(this.conf,this.shareParams);
	}
	,authenticate: function(o) {
		if(null != o) { //login user
			this.auth = o;
								
			jQuery.ajax("http://"+this.domain+this.root+"/api/auth.php",{
				type:"POST"
				,data:this.auth
				,dataType:'json'
				,error:function(jqXHR,textStatus,errorThrown){
					gUtil.log({
						userID:gUtil.auth.user.UID
						,event:'error'
						,message:"authenticate ajax.error(): "+textStatus
						,tags:[
							'authentication'
						]
						,data:{
							textStatus:textStatus
							,errorThrown:errorThrown
						}
					});
				}
				,success:function(data,textStatus,jqHXR){
					gUtil.consolelog(data);
					if(data.complete) {
						gUtil.log({
							userID:gUtil.getUserID()
							,event:'login'
							,message:"user logged in"
							,tags:[
								'authentication'
							]
						});
						gUtil.postAuthenticate();
					} else {
						gUtil.log({
							userID:gUtil.auth.user.UID
							,event:'error'
							,message:"authenticate not completed on server side"
							,tags:[
								'authentication'
							]
							,data:{
								error:data.error
								,message:data.message
							}
						});

						gUtil.auth = null;
						gUtil.user = null;
					}
				}
			});
		} else {
			var id = 0;
			if(null != this.user) {
				id = this.user.UID;
			}
			this.log({
				userID:id
				,event:'error'
				,message:'auth response from gigya is null'
				,tags:[
					'authentication'
				]
			});
		}
	}
	,postAuthenticate: function() {
		jQuery.lightbox().close();
	}
	,update: function() {
		//update user object
		
		var d = {};
		
		if(null != this.auth) {
			this.auth.user.firstName = jQuery("#inFirstName").val();
			this.auth.user.lastName = jQuery("#inLastName").val();
			this.auth.user.city = jQuery("#inCity").val();
			this.auth.user.country = jQuery("#inCountry").val();
			this.auth.user.email = jQuery("#inEmail").val();
			d = this.auth.user;
			d.userID = this.getUserID();
		} else {
			this.user.firstName = jQuery("#inFirstName").val();
			this.user.lastName = jQuery("#inLastName").val();
			this.user.city = jQuery("#inCity").val();
			this.user.country = jQuery("#inCountry").val();
			this.user.email = jQuery("#inEmail").val();
			d = this.user;
			d.userID = this.getUserID();
		}
		
		this.consolelog(d);
		
		jQuery.ajax("http://"+this.domain+this.root+"/api/update.php",{
			type:"POST"
			,data:d
			,dataType:'json'
			,error:function(jqXHR,textStatus,errorThrown){
				gUtil.log({
					userID:gUtil.getUserID()
					,event:'error'
					,message:"update ajax.error(): "+textStatus
					,tags:[
						'update'
					]
					,data:{
						textStatus:textStatus
						,errorThrown:errorThrown
					}
				});
			}
			,success:function(data,textStatus,jqHXR){
				gUtil.consolelog(data);
				if(data.complete) {
					gUtil.user=gUtil.getUser();
					gUtil.consolelog(gUtil.user);
					gUtil.log({
						userID:gUtil.getUserID()
						,event:'update'
						,message:"user updated"
						,tags:[
							'update'
						]
					});
					jQuery.lightbox(
						"#modalUpdated"
						,{
							'modal': true
							,'autoresize': true
						}
					);


				} else {
					gUtil.log({
						userID:gUtil.getUserID()
						,event:'error'
						,message:"update not completed on server side"
						,tags:[
							'update'
						]
						,data:{
							error:data.error
							,message:data.message
						}
					});
				}				
			}
			,complete:function(jqXHR, textStatus) {
				gUtil.getFacebookData();
			}
		});
	}
	,getFacebookData: function() {
		this.user = this.getUser();
		if(-1 < jQuery.inArray('facebook',this.user.providers)) {
			gigya.services.socialize.getRawData({},{
				provider:'facebook'
				,fields:'languages,relationship_status,religion,political,inspirational_people,music,books,movies,tv,games,sports,favorite_teams,favorite_athletes'
				,dataFormat:'json'
				,callback:function(r){
					gUtil.consolelog(r);
					if("0" == r.errorCode) {
						
						var d = {};
						if(null != r.data) {
							d = jQuery.parseJSON(r.data)[0];
						}
						d.userID = gUtil.getUserID();
						
						//languages
						if(null != d.languages) {
							var str = "";
							var lang = d.languages;
							for(var i=0; i<lang.length; i++) {
								if(i>0) {
									str += ',';
								}
								str += lang[i].name;
							}
							d.languages = str;
						}
	
						//inspirational_people
						if(null != d.inspirational_people) {
							var ary = d.inspirational_people;
							var str = "";
							for(var i=0; i<ary.length; i++) {
								if(i>0) {
									str += ',';
								}
								str += ary[i].name;
							}
							d.inspirational_people = str;
						}
	
						//sports
						if(null != d.sports) {
							var ary = d.sports;
							var str = "";
							for(var i=0; i<ary.length; i++) {
								if(i>0) {
									str += ',';
								}
								str += ary[i].name;
							}
							d.sports = str;
						}
	
						//favorite_teams
						if(null != d.favorite_teams) {
							var ary = d.favorite_teams;
							var str = "";
							for(var i=0; i<ary.length; i++) {
								if(i>0) {
									str += ',';
								}
								str += ary[i].name;
							}
							d.favorite_teams = str;
						}
	
						//favorite_athletes
						if(null != d.favorite_athletes) {
							var ary = d.favorite_athletes;
							var str = "";
							for(var i=0; i<ary.length; i++) {
								if(i>0) {
									str += ',';
								}
								str += ary[i].name;
							}
							d.favorite_athletes = str;
						}
						
						gUtil.consolelog(d);
		
						jQuery.ajax("http://"+gUtil.domain+gUtil.root+"/api/update.php",{
							type:"POST"
							,data:d
							,dataType:'json'
							,error:function(jqXHR,textStatus,errorThrown){
								gUtil.log({
									userID:gUtil.getUserID()
									,event:'error'
									,message:"update ajax.error(): "+textStatus
									,tags:[
										'update'
									]
									,data:{
										textStatus:textStatus
										,errorThrown:errorThrown
									}
								});
							}
							,success:function(data,textStatus,jqHXR){
								gUtil.consolelog(data);
								if(data.complete) {
									gUtil.user=gUtil.getUser();
									gUtil.consolelog(gUtil.user);
									gUtil.log({
										userID:gUtil.getUserID()
										,event:'update'
										,message:"user updated"
										,tags:[
											'update'
											,'facebook'
										]
									});
								} else {
									gUtil.log({
										userID:gUtil.getUserID()
										,event:'error'
										,message:"update not completed on server side"
										,tags:[
											'update'
										]
										,data:{
											error:data.error
											,message:data.message
										}
									});
								}
							}
						}); //ajax
					} else { //error code check if
						//log
						gUtil.log({
							userID:gUtil.getUserID()
							,event:'error'
							,message:"getRawData returned error: "+r.errorMessage
							,tags:[
								'update'
								,'gigya'
							]
							,data:{
								errorCode:r.errorCode
								,errorMessage:r.errorMessage
								,providerData:r.data
							}
						});
					}
				} //callback
			}); //getRawData
		} //if
	}
	,logout: function() {
		var o = {
			userID: this.getUserID()
			,event: 'logout'
			,message: "user logged out"
			,tags: [
				'logout'
			]
		};
		
		//clear cookies
		jQuery.cookie(gUtil.idCookieName,null,{
			path:'/'
			,domain:'.'+gUtil.domain
		});
		jQuery.cookie(gUtil.userCookieName,null,{
			path:'/'
			,domain:'.'+gUtil.domain
		});
		
		//clear out vars
		gUtil.auth = null;
		gUtil.user = null;

		//update ui
		gUtil.ui();
		
		gUtil.log(o);

		gigya.services.socialize.logout({},{
			context:o
			,callback:function(response){
				if (0 != response.errorCode) { //user not logged out of gigya
					var e = {
						userID: response.context.userID
						,event: 'error'
						,message: "error on gigya user logout: ["+response.errorCode+"] "+response.errorMessage
						,tags: [
							'logout'
						]
					};
	
					//log
					gUtil.log(e);					
				}	
			}
		});

	}
	,cancelRegistration: function(){
		//cancel registration process

		//clear ui
		jQuery.lightbox().close();

		//logout of gigya
		gigya.services.socialize.logout({},{
			callback:function(response){
				gUtil.consolelog(response);
				
				if(0 == response.errorCode){ //success
					gUtil.log({
						event: 'info'
						,userID: gUtil.auth.user.UID
						,message: "user canceled registration"
						,tags: [
							'registration'
						]
					});
				} else { //fail
					gUtil.log({
						event: 'error'
						,message: "gigya logout failed: "+response.errorMessage
						,tags: [
							'registration'
						]
						,data: {
							errorCode:response.errorCode
							,errorMessage:response.errorMessage
						}
					});
				}
				gUtil.auth = null;
				gUtil.user = null;
				gUtil.ui();
			}
		});
	}
	,continueRegistration: function(){
		//update user object
		this.user.firstName = jQuery(".inFirstName").val();
		this.user.lastName = jQuery(".inLastName").val();
		this.user.city = jQuery(".inCity").val();
		this.user.country = jQuery(".inCountry").val();
		this.user.email = jQuery(".inEmail").val();
		this.auth.user = this.user;
		
		//register via api
		this.authenticate(this.auth);
	}
	,init: function(){ //Execute when page done loading
		
		//add gigya event handlers
		gigya.services.socialize.addEventHandlers({},{
			onLogin:function(response) {
				gUtil.consolelog(response);
				gUtil.user = response.user;
				
				if(gUtil.user.isSiteUID) {//existing user
					//login
					gUtil.authenticate(response);
				} else {//prompt to register user
	
					//store auth response
					gUtil.auth = response;
					
					//display profile image
					if("" != gUtil.user.photoURL) {
						jQuery(".imgProfile").attr("src",gUtil.user.photoURL);
						jQuery(".imgProfile").show();
					} else {
						jQuery(".imgProfile").hide();
					}
											
					//display user values in confirmation modal
					jQuery(".inFirstName").val(gUtil.user.firstName);
					jQuery(".inLastName").val(gUtil.user.lastName);
					jQuery(".inCity").val(gUtil.user.city);					
					jQuery(".inCountry").val(gUtil.user.country);
					jQuery(".inEmail").val(gUtil.user.email);
	
					//display confirmation modal
					jQuery.lightbox(
						"#modalConfirmRegistration"
						,{
							'modal': true
							,'autoresize': true
						}
						,function() {
							gUtil.ui();
						}
					);
				}
			}
		});

		//load login ui
		var regParams = jQuery.extend(true, {}, gUtil.registrationParams);
		regParams.onLoad = function(e) {
			//update ui
			if( "default" == gUtil.ui() ){		
				if(gUtil.autoModal) {
					//show registration/login modal if not logged in
					jQuery.lightbox(
						"#modalRegistration"
						,{
							'modal': true
							,'autoresize': true
						}
						,function() {
							gUtil.ui();
						}
					);
				}
			}		
		}
		gigya.services.socialize.showLoginUI(gUtil.conf,regParams);
		
		//setup registration links
		jQuery(".linkRegistration").click( function(ev){
			jQuery.lightbox(
				"#modalRegistration"
				,{
					'modal': true
					,'autoresize': true
				}
				,function() {
					gUtil.ui();
				}
			);
		});
		
	}
};

