// LOAD SCRIPT
function loadScript(url) {
   var head= document.getElementsByTagName('head')[0];
   var script= document.createElement('script');
   script.type= 'text/javascript';
   script.src= url;
   head.appendChild(script);
}

function objPropertiesAsQuerystring(ourObject, encode)
{
	var data = '';
	for (var propertyName in ourObject) 
	{
		if ( ourObject[propertyName] === '' )
		{
			continue;
		};
		
		if ( ! (ourObject[propertyName] instanceof Function) && (typeof ourObject[propertyName] !== 'object') ) 
		{
			data += encodeURIComponent(propertyName) + '=' + encodeURIComponent(ourObject[propertyName]) + '&';
		}
	};
	
	if (encode)
	{
		data = encodeURIComponent(data);
	};

	return data;
};

function reloadCurrentPage()
{
//console.log('reloadCurrentPage');

	if ( window.location.pathname == '/register' )
	{
		top.location.href = '/welcome';
	}
	else
	{
		top.location.href = top.location.href;
	};
};

function randomPassword(length, makeUnique)
{
	if ( makeUnique === undefined )
	{
		var makeUnique = true;
	};
	
	var newDate = new Date;
	var guid = newDate.getTime();
	
	chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
	pass = "";

	for(var x=0; x<length; x++)
	{
		var i = Math.floor(Math.random() * 62);
		pass += chars.charAt(i);
	};

	if ( makeUnique )
	{
		pass = guid + pass;
	};
   
	pass = pass.substring(0, length);

	return pass;
};




// gigya namespace
var GS = {};

GS.localReg = false;

GS.conf = {
	connectWithoutLoginBehavior: 'loginExistingUser'
	,enabledProviders: 'facebook,twitter,google,linkedin,myspace,foursquare,yahoo,messenger,blogger,wordpress,typepad,aol,livejournal,vkontakte,renren,qq,sina,kaixin,orkut,hyves,verisign,openid,vznet'
	// set session length
};



GS.onLoginHandler = function (eventObj) 
{
//console.log('GS.onLoginHandler');
	// make sure the user object exists
	if ( undefined == eventObj.user )
	{
		alert('There was an error connecting your account');
		return false;
	};
	
	// verify signature
//	if ( !GS.verifySignature() )
//	{
//		alert('There was an error verifying your account');
//		return false;
//	};
	
	// cancel if bronson registration
	if ( GS.localReg )
	{
		return false;
	};
	
	
	GS.setBronsonUserObject(eventObj.user);
	
	// see if they have an account already
	GS.bronsonLogin(true);
};




GS.verifySignature = function()
{
	return true;
};



GS.getSignature = function(siteUID, callback)
{
//console.log('GS.getSignature');

	$.ajax({
		url: '/common/gigya/getsignature.php',
		type: 'POST',
		data: 'siteUID=' + siteUID,
		dataType: 'json',
		async: false,
		success: function(json)
		{
			callback(json);
		}
	});
};



// detect if we're signed into gigya, and sign out
GS.logout = function() 
{  
	gigya.services.socialize.logout(); // logout from Gigya platform
	
	return false;
};



GS.setBronsonUserObject = function (gigyaUserObj)
{
//console.log('GS.setBronsonUserObject');
	// http://developers.gigya.com/020_Client_API/010_Objects/User_object

	// format nickname - no spaces, all lowercase
	var nickname = gigyaUserObj.nickname;
	nickname = nickname.toLowerCase();
	nickname = nickname.replace(/ /gi, "");

	
	
	// if siteUID is gigya's, create a new, random one
	var siteUID = gigyaUserObj.UID;
	if ( siteUID.substring(0,5) == '_gid_' )
	{
		siteUID = randomPassword(64);
	};
	
	
	
	var sex = '';

	if ( gigyaUserObj.gender == 'm' )
	{
		var sex = 'male';
	};
	if ( gigyaUserObj.gender == 'f' )
	{
		var sex = 'female';
	};

	

	var bronsonUserObj = {
		email:				gigyaUserObj.email
		,gigyaid:			siteUID
		,title:				nickname // username
		,firstname:			gigyaUserObj.firstName
		,lastname:			gigyaUserObj.lastName
		,avatarurl:			gigyaUserObj.photoURL
		,sex:				sex
		,zipcode:			gigyaUserObj.zip
		,remote:			true // necessary for fake password to be set
	};

	// don't include birthday if full of zeros
	if ( gigyaUserObj.birthYear != 0 && gigyaUserObj.birthMonth != 0 && gigyaUserObj.birthDay != 0 )
	{
		bronsonUserObj.birthday = gigyaUserObj.birthYear + '-' + gigyaUserObj.birthMonth + '-' + gigyaUserObj.birthDay;
	};
//console.log(bronsonUserObj);
	GS.bronsonUserObj = bronsonUserObj;
};


/**
 * Log the user into bronson based on a gigyaid
 */
GS.bronsonLogin = function (isNewUser)
{
//console.log('GS.bronsonLogin');

	if ( '' == isNewUser || undefined == isNewUser )
	{
		isNewUser = false;
	};

	$.ajax({
		type: "GET",
		url: "/?service=login&output_format=json&bypasscheck=1&gigyaid=" + GS.bronsonUserObj.gigyaid,
		dataType: 'json',
		success: function(json)
		{
			// sign them in
			if ( undefined == json.err )
			{
				var params = GS.getSignature(GS.bronsonUserObj.gigyaid, function(params) {
					params.callback = doRedirect;

					// notify gigya we logged in
					gigya.services.socialize.notifyLogin(GS.conf, params);

					function doRedirect(response)
					{
						reloadCurrentPage();
					};
				});	
				
				return false;
			}
			else
			{
				GS.startRegistration();
			};
		} // success
	});
}; // bronsonLogin



/**
 * get an account from the email address, and link the account to a siteUID
 * 
 */
GS.linkAccounts = function ()
{
//console.log('GS.linkAccounts');

	$.ajax({
		type: "GET",
		url: "/?service=search&type=account&searchtext=" + GS.bronsonUserObj.email + "&output_format=json",
		dataType: 'json',
		async: false,
		success: function(json)
		{
//console.log('313 json from bronson', json);

			if (undefined != json.results)
			{
				if ( json.results.length > 0 )
				{
					// get bronson guid
					GS.bronsonUserObj.gigyaid = json.results[0].gigyaid;
					var guid = json.results[0].guid;
					
					if ( guid === '' )
					{
						GS.bronsonUserObj.email = '';
						GS.continueRegistration();
						
						return false;
					};
					
					function setUID(gigyaid)
					{
						var params = GS.getSignature(GS.bronsonUserObj.gigyaid, function(params) {
							params.callback = doLogin;

							// notify gigya we logged in
							gigya.services.socialize.setUID(GS.conf, params);

							function doLogin(response)
							{
								GS.bronsonLogin();
							}; // doLogin
						});	
					};
					
					// if existing account but no gigya id (or null, yana's bug)
					if ( GS.bronsonUserObj.gigyaid === undefined || GS.bronsonUserObj.gigyaid === '' || GS.bronsonUserObj.gigyaid == 'null' )
					{
						GS.bronsonUserObj.gigyaid = randomPassword(64);
						
						$.ajax({
							type: "GET",
							url: "/?service=updateasset&guid=" + guid + "&type=account&verified=1&gigyaid=" + GS.bronsonUserObj.gigyaid + "&output_format=json",
							dataType: 'json',
							success: function(json)
							{
								setUID(GS.bronsonUserObj.gigyaid);
							}
						});
					}
					else
					{
						$.ajax({
							type: "GET",
							url: "/?service=updateasset&guid=" + guid + "&type=account&verified=1&output_format=json",
							dataType: 'json',
							success: function(json)
							{
								setUID(GS.bronsonUserObj.gigyaid);
							}
						});
					};
						
					return false;
				};
			};
			
			// if user not found, send them on to registration
			GS.bronsonUserObj.email = '';
			
			GS.continueRegistration();
		} // success
	});
}; // linkAccounts



GS.startRegistration = function ()
{
//console.log('GS.startRegistration');

	// start validation
	GS.isEmailUnique();
}; // startRegistration



GS.isEmailUnique = function ()
{
//console.log('GS.isEmailUnique');
	// if their email address exists, assume it's them, and log them in 
	$.ajax({
		type: "GET",
		url: "/?service=isunique&type=account&output_format=json&field=email&value=" + GS.bronsonUserObj.email,
		dataType: 'json',
		async: false,
		success: function(json)
		{
			/* 
			 * if email is empty, make them register
			 * if success = true = email is unique
			 */ 
			if ( !json.success && GS.bronsonUserObj.email !== '' )
			{
				GS.linkAccounts();
			}
			else
			{
				GS.isTitleUnique();
			};
		}
	});
}; // isEmailUnique



GS.isTitleUnique = function ()
{
//console.log('GS.isTitleUnique');

	/*
	 * check for dupe title. if it exists, remove it from the reg form data, so they'll be presented with an input
	 * NOTE async: false, so it won't reg until the checks have run
	 */
	$.ajax({
		type: "GET",
		url: "/?service=isunique&type=account&output_format=json&field=title&value=" + GS.bronsonUserObj.title,
		dataType: 'json',
		async: false,
		success: function(json)
		{
			if ( !json.success )
			{
				GS.bronsonUserObj.title = '';
			};
			
			GS.continueRegistration();
		}
	});
}; // isTitleUnique



GS.continueRegistration = function ()
{
//console.log('GS.continueRegistration');

	var data = objPropertiesAsQuerystring(GS.bronsonUserObj);

    // post user data to bronson
	$.ajax({
		type: "POST",
		url: "/?service=registration&output_format=json",
		data: data,
		async: false,
		dataType: 'json',
		success: function(json)
		{
			// if "errors" then data is missing
			if ( undefined != json.errors )
			{
				if ( $('body').is('.fancybox') )
				{
					window.top.close_fancybox();	
				}
				
				window.top.GS.openAlmostFancybox();
				
				return false;
			};

			// if "err" then there was a bronson error
			if ( undefined != json.err )
			{
				alert('There was an error registering your account. Maybe you already have an account?');
				return false;
			};
				
			// otherwise, assume there's an account and let them try to log in
			open_login();

		} // success
	});	
}; // continueRegistration



GS.finishRegistration = function (data)
{
//console.log('GS.finishRegistration');
	$.ajax({
		type: "POST",
		url: "/?service=registration&output_format=json",
		data: data,
		dataType: 'json',
		success: function(json)
		{
			var newUserEmail = json.email;

			if ( undefined == json.errors || json.errors.length == 0 )
			{
				// send avatar request
				$.ajax({
					type: 'GET',
					url: "/?service=addavatar&output_format=json&nocache=1&owner=" + $('#title').val() + "&avatarurl=" + escape( $('#avatarurl').val() ),
					dataType: 'json',
					complete: function(json)
		   			{
						// link reg to gigya
						$.ajax({
							type: "GET",
							url: "/?service=search&type=account&searchtext=" + newUserEmail + "&output_format=json",
							dataType: 'json',
							async: false,
							success: function(json)
							{
								var siteUID = $('#gigyaid').val();
							
								var params = GS.getSignature(siteUID, function(params) {
									params.callback = doRedirect;

									// notify gigya we logged in
									gigya.services.socialize.notifyRegistration(GS.conf, params);

									function doRedirect(response)
									{
										reloadCurrentPage();

										return false;
									};
							
								});
							} // success
						}); // ajax: ?service=search
						
	   					return false;
		   			} // complete
				}); // ajax: ?service=addavatar
			}
			else
			{
				alert('Sorry, there was an error registering your account.');
			};
		}, // success
		error: function(jqXHR, textStatus, errorThrown)
		{
			alert('sorry, there was an error registering your account.');
		}
	});
};



GS.openAlmostFancybox = function (data)
{
//console.log('GS.openAlmostFancybox');
	if ( undefined == data || '' == data )
	{
		var data = objPropertiesAsQuerystring(GS.bronsonUserObj);
	};
	
	open_fancybox('/fancybox/almost.php?' + data,'Almost finished',915,522,'greybox');
	
	return false;
}; // openAlmostFancybox



GS.openLoginFancybox = function ()
{
//console.log('GS.openLoginFancybox');
	window.top.close_fancybox();	
	
	open_fancybox('/fancybox/login.php','Login',915,522,'greybox');
	
	return false;
}; // openAlmostFancybox



GS.showHeaderLoginUI = function ()
{
//console.log('GS.showHeaderLoginUI');
	var params = { 
		containerID: 'gigyaTopWrapper'
		,width: 120
		,height: 20
		,showTermsLink:false // remove 'Terms' link  
		,hideGigyaLink:true // remove 'Gigya' link  
		,lastLoginIndication: 'none'
//		,enabledProviders: 'facebook,twitter,google,linkedin,myspace,foursquare'
	};


	gigya.services.socialize.showLoginUI(GS.conf,params);
};



/*
 * Adds addconnection widget to header
 */
GS.showAddConnectionsUI = function (containerID, params)
{
//console.log('GS.showAddConnectionsUI');
	var defaults = { 
		containerID: containerID
		,width: 120
		,height: 20
		,showTermsLink:false // remove 'Terms' link  
		,hideGigyaLink:true // remove 'Gigya' link
		,showEditLink: false
	};
	
	var params = $.extend(defaults, params);


	gigya.services.socialize.showAddConnectionsUI(GS.conf,params);
};



GS.onConnectionAddedHandler = function (eventObj)
{
//console.log('GS.onConnectionAddedHandler');
	// if they have no gigyaid, give them one, and update gigya's siteid 
	if ( session_user['gigyaid'].length == 0 )
	{
		gigyaid = randomPassword(64);
		
		$.ajax({
			type: "GET",
			url: "/?service=updateasset&guid=" + session_user['guid'] + "&type=account&gigyaid=" + gigyaid + "&verified=1&output_format=json",
			dataType: 'json',
			success: function(json)
			{
				var params = GS.getSignature(gigyaid, function(params) {
					params.callback = doRedirect;
					
					// notify gigya we logged in
					gigya.services.socialize.setUID(GS.conf, params);

					function doRedirect(response)
					{
						reloadCurrentPage();
					};
				});	
			}
		});
	}
	else
	{
		// mark account as verified
		$.ajax({
			type: "GET",
			url: "/?service=updateasset&guid=" + session_user['guid'] + "&type=account&verified=1&output_format=json",
			dataType: 'json',
			success: function(json)
			{
				reloadCurrentPage();
			}
		});
	};
};



GS.gigyaOnLoad = function() 
{
//console.log('GS.gigyaOnLoad');
	// if signed in
	if ( session_user )
	{
	
		if ( session_user['guid'].length > 0)
		{
			// register for login event  
			gigya.services.socialize.addEventHandlers(GS.conf, 
			{  
				onLogout: function()
				{
					var url = top.location.href;
					
					// if there are no paramters, we need a question mark 
					url += url.indexOf('?') == -1 ? '?' : '&';

					top.location.href = url + 'service=logout';
				},
				onConnectionAdded: GS.onConnectionAddedHandler,
				onConnectionRemoved: reloadCurrentPage
			});
			
			return false;
		};
	};

	
	// register for login event  
	gigya.services.socialize.addEventHandlers(GS.conf, 
	{  
		onLogin: GS.onLoginHandler
	});
};



//This method is activated when the page is loaded
$(document).ready(function(){
	$(window).load(GS.gigyaOnLoad);
	
});





// FIX MAC/PC FONT WEIGHTS
var os = '123456789'+window.navigator.platform.toLowerCase();
if (os.search('mac')<0) { document.write('<style>.FilmHeaderNav, .FilmHeaderNav a {font-weight:bold;}</style>'); }

// FANCYBOX OPEN
function open_fancybox(url, title, width, height, style, type) {
	if (style!=undefined && style!='') {
		$.fancybox({
		  'href'			: url,
		  'width'			: width,
		  'height'			: height,
		  'type'			: 'iframe',
		  'autoScale'		: 'false',
		  onClosed			: function() {
			$('#fancybox-wrap, #fancybox-overlay').attr('class','');
		  }
		});
		$('.page_heading h2').html(title);
		$('#fancybox-wrap, #fancybox-overlay').attr('class',style);
	} else if (type == 'iframe') {
		$.fancybox({
		  'autoScale'		: 'true',
		  'title'			: title,
		  'href'			: url,
		  'width'			: width,
		  'height'			: height,
		  'type'			: 'iframe'
		});
	} else {
		$.fancybox({
		  'autoScale'		: 'true',
		  'title'			: title,
		  'href'			: url,
		  'width'			: width,
		  'height'			: height,
		  'type'			: type
		});
	}
}
// FANCYBOX CLOSE
function close_fancybox() {
	$.fancybox.close;
}
// FANCYBOX RESIZE
function autoscale_fancybox(maxheight) {
	var height = $('#fancybox-wrap iframe').contents().find("body").height();
	$('#fancybox-wrap').height(height);
}
// OPEN REGISTER
function open_register(uri) {
	if (uri==undefined) { uri = ''; }
	open_fancybox('/fancybox/register.php'+uri,'Member Registration',615,699,'greybox');
}
// OPEN LOGIN
function open_login(uri) {
	if ((typeof uri)!='string') { uri = ''; }
	open_fancybox('/fancybox/login.php'+uri,'Member Registration',915,382,'greybox');
}
// OPEN REGISTERED
function open_registered(uri) {
	if (uri==undefined) { uri = ''; }
	open_fancybox('/fancybox/registered.php'+uri,'Member Registration',615,699,'greybox');
}
// OPEN FORGOT
function open_forgot(uri) {
	if (uri==undefined) { uri = ''; }
	open_fancybox('/fancybox/forgot.php'+uri,'Member Registration',615,699,'greybox');
}

// DETECT IE
var ie6 = $.browser.msie && parseFloat($.browser.version) < 7;
var ie7 = $.browser.msie && parseFloat($.browser.version) == 7;
var ie8 = $.browser.msie && parseFloat($.browser.version) == 8;
var ie9 = $.browser.msie && parseFloat($.browser.version) == 9;

