// =============================================
//
// Global Settings
//
// =============================================

var apiSendRequest 		= true; // Really submit data or not...
var apiShowRequest 		= false;
var apiShowResponse 	= false;

// API Settings
var domain 				= 'https://'+location.host+'/';
var pageLogin 			= 'linker/login';
var pageSignup 			= 'signup/process';

// Promo Settings
var defaultPromo 	= 1;
var qsParam 		= 'p';
var polling 		= true;
var pollingInterval = 20000;
	

// =============================================
//
// Main Promotion Settings
//
// =============================================

	var promoId = getStartingPromo();

	function togglePromotion(i) {
 		//Reset The Promo
 		$('#promo-text div').hide();
 		$('.tabset a').removeClass('active');
 		//Active The Requested Promo
 		$('#tab0'+i+'-trigger').addClass('active').fadeIn("fast");
 		$('#tab0'+i+'-text').fadeIn("fast");
 	}
 	
 	function startPolling()	{setTimeout("cyclePromotion()", pollingInterval);}	
	function stopCycle()	{polling = false;}
 	function startCycle()	{polling = true;}
 	
 	function cyclePromotion()	{
 		if(polling)	{
 			var activeTab = $('.tabset a.active').attr("id").substring(4,5);
 			if(activeTab<=2) {var promoId = Number(activeTab)+1;} else {var promoId = 1;}
 			togglePromotion(promoId);
 		}
 		startPolling();
 	}
	
	function getParameterByName(name) {
		name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
		var regexS = "[\\?&]"+name+"=([^&#]*)";
		var regex = new RegExp(regexS);
		var results = regex.exec(window.location.href);
		if(results == null) {return "";} 
		else 				{return decodeURIComponent(results[1].replace(/\+/g, " "));}
	}

	function getStartingPromo()	{
		var passedId = getParameterByName(qsParam);
		if (passedId.length!=0 && !isNaN(passedId))	{var promo = passedId;} 
		else 										{var promo = defaultPromo;}
		return promo;
	}
	
	
	togglePromotion(promoId);
	startPolling();
 
	

// =============================================
//
// Signup Settings
//
// =============================================

 	
 	
function FormProcessor_LinkerSignUp() {
	
	// Variables
	var username 	= $("#username");
	var email 		= $("#email");
	var password 	= $("#password");
	var affiliate 	= $("#affiliate");
		
	// Messages
	var msgContainer 		= $("#status");
	var msgInvalidForm 		= 'Please correct the errors below to continue';
	var msgAccountError 	= 'There Was A Problem Creating Your Account';
	var msgAccountDuplicate = 'That Username/Email Already Exists';
	var msgInvalidEmail 	= '';
	var msgInvalidUsername 	= '';
	var msgInvalidPassword 	= '';
	var msgDuplicate 		= '';
	

	function submit() {
		new EFLAPI().Get({
			'Data':{
				'Email'		: email.val(), 
  				'Username'	: username.val(),
  				'Affiliate'	: affiliate.val(),
  				'Password'	: password.val(),
  				'Submit'	: 'true'
  			},
			'Url'			: pageSignup,
  			'Delay'			: 0,
			'OnSubmit'		: onSubmit,
			'OnSuccess'		: onSuccess,
			'OnFail'		: onFail
		});
	}
		
	// -------------------------------------------------//	
	// Callback Functions
	// -------------------------------------------------//	

	
	function onSubmit()	{
	
	
	}
	
	
	function onSuccess(status,message,request,output)	{
		$.nyroModalManual({
    		modal: true, // Esc key or click backgrdound enabling or not
  			type: 'form', // nyroModal type (form, formData, iframe, image, etc...)
  			padding:0,
  			width: 630, // default Width If null, will be calculate automatically
  			height: 460, // default Height If null, will be calculate automatically
  			closeButton: '<a href="#" class="nyroModalClose" id="closeBut" title="close">Close</a>', // Adding automaticly as the first child of #nyroModalWrapper 
  			resizable: true, // Indicate if the content is resizable. Will be set to false for swf
  			autoSizable: true, // Indicate if the content is auto sizable. If not, the min size will be used
  			padding: 20, // padding for the max modal size
  			url: domain+pageLogin+'?username='+username.val()+'&password='+password.val()
    	});
    }
	
	function onFail(status,message,request,output)	{
		
		 _gaq.push(['_trackPageview','linker/signup/error']);

		if(message=="failure_duplicate")	{
			throwMessage(msgAccountDuplicate);
			throwError(msgDuplicate,email);
			throwError(msgDuplicate,username);
		} else {
			throwMessage(message);
		}
	}
		
		
		
		
	// -------------------------------------------------//	
	// Validation
	// -------------------------------------------------//	

	
	this.validate = function() {
		
		var hasErrors = false;
		if(!isUsernameValid(username.val()))	{hasErrors=true;throwError(msgInvalidUsername,username);}
		if(!isEmailValid(email.val())) 			{hasErrors=true;throwError(msgInvalidEmail,email);}
		if(!isPasswordValid(password.val()))	{hasErrors=true;throwError(msgInvalidPassword,password);}
			
		if(hasErrors)	{_gaq.push(['_trackPageview','linker/signup/error']); return false;}
		else 			{hideErrors();submit();}
	}
		
	
	this.emailOnFocus 		= function() {}
	this.passwordOnFocus 	= function() {}
	this.usernameOnFocus 	= function() {}
	this.emailOnBlur 		= function() {if(email.val().length == 0) {hideError(email);return;} else if (!isEmailValid(email.val())) {throwError(msgInvalidEmail,email);return;} else {hideError(email);return;}}
	this.passwordOnBlur 	= function() {if(password.val().length == 0) {hideError(password);return;} else if (!isPasswordValid(password.val())) {throwError(msgInvalidPassword,password);return;} else {hideError(password);return;}}
	this.usernameOnBlur 	= function() {if(username.val().length == 0) {hideError(username);return;} else if (!isUsernameValid(username.val())) {throwError(msgInvalidUsername,username);return;} else {hideError(username);return;}}
		
	function isEmailValid(i)	{var reg = /^([A-Za-z0-9_\-\.+])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;if(reg.test(i) == true) {return true;} else {return false;}}
	function isPasswordValid(i)	{if(i.length >= 4 && i.length <= 256) {return true;} else {return false;}}
	function isUsernameValid(i)	{var reg = /^[0-9a-zA-Z\-_]{5,64}$/;if(reg.test(i) == true) 	{return true;} else {return false;}}
		
		
		
	// -------------------------------------------------//	
	// Messaging
	// -------------------------------------------------//	

	function throwError(msg,field) 	{var id=$(field).attr("id");$("div#row-"+id).addClass("error");$("div#row-"+id+" p").fadeOut("fast").fadeIn("fast").fadeOut("fast").fadeIn("fast").fadeOut("fast").fadeIn("fast");}
	function hideError(field) 		{var id=$(field).attr("id");$("div#row-"+id).removeClass("error");$("div#row-"+id+" .error-note").text('').fadeOut("fast");}
	function hideErrors() 			{$("div.row").removeClass("error");$("div.row .error-note").text('').fadeOut("fast");}
	function throwMessage(msg) 		{msgContainer.hide().html('<ul><li>'+msg+'</li></ul>').addClass("warning").slideDown("fast").fadeIn("fast");}
	function hideMessage() 			{msgContainer.fadeOut("fast").html('').removeClass("warning");}
	
	// ---------------------------------------------
	// Custom Functions
	// ---------------------------------------------
		
	function updateAccountArea(email) {$('#acctstatus',window.parent.document).html('<P><span class="user">You are logged in as <a href="/dashboard" style="text-decoration:none;" id="loggedInAs">'+email+'</a> <a href="/logout" style="text-decoration:none;">(Log Out)</a></span> <span class="account"><a href="/account" style="text-decoration:none;">Manage Your Account</a></span></P> ');}


}


function EFLAPI(input)	{

	this.Get = function(input)	{
			
		defaultdelay 	= 0; //Delay for showing the loading screen
			
		// User Supplied Settings
		delay	 	= isDelayValid(input['Delay'],defaultdelay);
		url 		= input['Url'];
		onSuccess 	= input['OnSuccess'];
		onFail 		= input['OnFail'];
		onSubmit 	= input['OnSubmit'];
			
		onSuccessIsValid 	= isUserFunctionValid(onSuccess);
		onFailIsValid 		= isUserFunctionValid(onFail);
		onSubmitIsValid 	= isUserFunctionValid(onSubmit);
		
		// Compile The Request
		var data = new Array;
		for (var i in input['Data']){
    		data.push(token = i+"="+encodeURIComponent(input['Data'][i]));
    	}
		
		var query = data.join("&");
		var request = domain+url+'?'+query;
			
		sendRequest(request); 
		return true;
	}
		
		
	function sendRequest(request)	{
		if(onSubmitIsValid){onSubmit();}
		if(apiShowRequest) {alert(request);}
		if(apiSendRequest) {
			$.ajax({
  				url: request,
 	 			dataType: 'html',
  				contentType: "text/javascript",
  				beforeSend: function(){},
				error: 		function(data){},
 				success: 	function(data){
  					
  					jsonData = jQuery.parseJSON(data);
  					
  					var status 		= jsonData["Response"]["Status"];
					var message 	= jsonData["Response"]["Message"];
					var request	 	= jsonData["Response"]["Request"];
					var output	 	= jsonData["Response"]["Output"];
					
					if(apiShowResponse) {alert(data);}
					setTimeout (function() {
						if(operationWasSuccessful(status)) 	{if(onSuccessIsValid){onSuccess(status,message,request,output);}} 
						else 								{if(onFailIsValid){onFail(status,message,request,output);}}
					}, delay);
			
				}
 			});   
		} 
	}
	
	
	
		
	function operationWasSuccessful(status)				{if(status.toLowerCase()=="success") {return true;} else {return false;}}	
	function isDelayValid(delay,defaultdelay)			{if(isNaN(delay)) {return defaultdelay;} else {return delay;}}
	function isUserFunctionValid(f)						{var test=''+f;if(test.length == 0 || test=='undefined') {return false;} else {return true;}}

}



