//create container object
var OnTheFly = new Object();

//##########################################################################################
	
//--> Begin :: Init
	OnTheFly.Init = function(){
		if(Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNode()){
			//find all login links and add javascript
			var LoginLinks = Footprint.Page.GetNodesByDataSet("label", "login_link").GetNodes();
			for(var i = 0 ; i < LoginLinks.length ; i++) {
					LoginLinks[i].onclick = function() {
						OnTheFly.Show();
					}
			}
			
			//get form data
			OnTheFly.Email = Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("field", "email").GetNode();
			OnTheFly.Username = Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("field", "username").GetNode();
			OnTheFly.Password = Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("field", "password").GetNode();
			OnTheFly.Captcha = Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("field", "captcha").GetNode();
				
			//Set default events
			OnTheFly.Email.onblur = OnTheFly.EmailFieldEvent;
			OnTheFly.Username.onblur = OnTheFly.UsernameFieldEvent;
			OnTheFly.Password.onblur = OnTheFly.PasswordFieldEvent;
			OnTheFly.Captcha.onblur = OnTheFly.CaptchaFieldEvent;
			OnTheFly.CurrentSubmitForm = null;
			
			var ForgotPasswordLink = Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "forgot_password").GetNode();
			ForgotPasswordLink.onclick = function(){
				if(confirm("Are you sure you want to reset your password?")){
					OnTheFly.ForgotPassword();
				}
				return false;
			}
					
			//find login forms
			var LoginForms = Footprint.Page.GetNodesByAttribute("data-login-required", "true").GetNodes();
			for(var i = 0 ; i < LoginForms.length ; i++) {
				LoginForms[i].onsubmit = function(Event) {
					if(Footprint.Request.Cookies("user_id") == null){
						//get the current submit form
						OnTheFly.CurrentSubmitForm = WebLegs.BrowserWindow.GetEvent(Event).Target;
						
						//get the container
						var OnTheFlyContainer = Footprint.Page.GetNodesByDataSet("label", "on-the-fly-container").GetNode();
						
						//show the form
						OnTheFlyContainer.className = "-on-the-fly-container-show";
						
						//position in middle of window
						OnTheFly.Position();
						
						//setup onscroll event
						window.onscroll = function() {
							OnTheFly.Position();
						};
						
						//set onfocus
						OnTheFly.Email.focus();
						
						return false;
					}
					return true;
				};
			}
			
			//assign close button event
			var CloseButton = Footprint.Page.GetNodesByDataSet("label", "close_button_link").GetNode();
			if(CloseButton) {
				CloseButton.onclick = function() {
					OnTheFly.Hide();
				};
			}
		}
	}
//--> End :: Init

//##########################################################################################
	
//--> Begin :: ForgotPassword
	OnTheFly.ForgotPassword = function() {
		//create ajax object
		var XHRequest = new WebLegs.XHRDriver();
		
		//loading handler
		XHRequest.Loading = function() {
			Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "password_notice").SetInnerHTML("<img src=\"_MEDIA/ajax-loading-small.gif\" />");
		};
		
		//complete handler
		XHRequest.Complete = function(Response) {
			if(XHRequest.IsSuccess()) {
				
				//remove loading image
				Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "password_notice").SetInnerHTML("");
				
				//get response object
				Response = eval("("+ Response.responseText +")");
				
				//has errors
				if(Response.error_messages.length > 0){
					var Errors = "";
					for(var i = 0; i < Response.error_messages.length; i++){
						Errors += Response.error_messages[i] +"<br />";
					}
					Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "password_notice").SetInnerHTML(Errors);
				}
				//reset was successful
				else if(Response.successful == "true"){
					Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "password_notice").SetInnerHTML("A password reset link has been sent to the e-mail address specified.");
				}
			}
			else {
				//turn off status icon
				Footprint.Page.GetNodesByDataSet("label", "search_running").SetInnerHTML("");
				//get response and show in pop-up
				Footprint.Page.GetNodesByDataSet("label", "search_results").SetInnerHTML("*server error*");
				//open error in window
				var ErrorWindow = window.open("", "Error", "status=no,scrollbars=yes,resizable=yes,width=640,Height=480");
				ErrorWindow.document.write(Response.responseText);
			}
		};
		
		if(OnTheFly.Email.value == ""){
			Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "email_notice").SetInnerHTML("Please enter a valid e-mail address.");
		}
		else{
			//make the http request
			XHRequest.Get("on-the-fly/index.html?action=Reset Password&email="+ OnTheFly.Email.value);
		}
	}
//--> End :: ForgotPassword

//##########################################################################################
	
//--> Begin :: EmailFieldEvent
	OnTheFly.EmailFieldEvent = function(){
		//create ajax object
		var XHRequest = new WebLegs.XHRDriver();
		
		//loading handler
		XHRequest.Loading = function() {
			Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "email_notice").SetInnerHTML("<img src=\"_MEDIA/ajax-loading-small.gif\" />");
		};
		
		//complete handler
		XHRequest.Complete = function(Response) {
			if(XHRequest.IsSuccess()) {
				
				//remove loading image
				Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "email_notice").SetInnerHTML("");
				
				//get response object
				Response = eval("("+ Response.responseText +")");
				
				//has errors
				if(Response.error_messages.length > 0){
					Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "email_notice").SetInnerHTML(Response.error_messages[0]);
					
					//set focus
					OnTheFly.Email.focus();
				}
				//is a login event
				else if(Response.successful == "false"){
					
					//show fields
					Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "password_label").SetInnerHTML("Your Password:");
					Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "password_field").GetNode().style.display = "";
					Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "forgot_password").GetNode().style.display = "";
					
					//hide fields
					Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "username_field").GetNode().style.display = "none";
					Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "captcha_field").GetNode().style.display = "none";
					
					//set focus
					OnTheFly.Password.focus();
				}
				//is a registration event
				else{
					//show fields
					Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "password_label").SetInnerHTML("Create a Password:");
					Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "username_field").GetNode().style.display = "";
					Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "password_field").GetNode().style.display = "";
					Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "captcha_field").GetNode().style.display = "";
					
					//hide fields
					Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "forgot_password").GetNode().style.display = "none";
					
					//set focus
					OnTheFly.Username.focus();
				}
				
				//re-position
				OnTheFly.Position();
			}
			else {
				//turn off status icon
				Footprint.Page.GetNodesByDataSet("label", "search_running").SetInnerHTML("");
				//get response and show in pop-up
				Footprint.Page.GetNodesByDataSet("label", "search_results").SetInnerHTML("*server error*");
				//open error in window
				var ErrorWindow = window.open("", "Error", "status=no,scrollbars=yes,resizable=yes,width=640,Height=480");
				ErrorWindow.document.write(Response.responseText);
			}
		};
		
		if(OnTheFly.Email.value == ""){
			Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "email_notice").SetInnerHTML("Please enter a valid e-mail address.");
			//re-position
			OnTheFly.Position();
		}
		else{
			//make the http request
			XHRequest.Get("on-the-fly/index.html?action=Email Available&email="+ OnTheFly.Email.value);
		}
	}
//--> End :: EmailFieldEvent

//##########################################################################################
	
//--> Begin :: UsernameFieldEvent
	OnTheFly.UsernameFieldEvent = function (){
		//create ajax object
		var XHRequest = new WebLegs.XHRDriver();
		
		//loading handler
		XHRequest.Loading = function() {
			Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "username_notice").SetInnerHTML("<img src=\"_MEDIA/ajax-loading-small.gif\" />");
		};
		
		//complete handler
		XHRequest.Complete = function(Response) {
			if(XHRequest.IsSuccess()) {
				
				//remove loading image
				Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "username_notice").SetInnerHTML("");
				
				//get response object
				Response = eval("("+ Response.responseText +")");
				
				//username is available
				if(Response.successful == "true"){
					//OnTheFly.Password.onblur = "";
					
				}
				//username is not available
				else if(Response.successful == "false"){
					Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "username_notice").SetInnerHTML("The username you specified is not available.");
					
					//set focus
					OnTheFly.Username.focus();
				}
				
				//re-position
				OnTheFly.Position();
			}
			else {
				//turn off status icon
				Footprint.Page.GetNodesByDataSet("label", "search_running").SetInnerHTML("");
				//get response and show in pop-up
				Footprint.Page.GetNodesByDataSet("label", "search_results").SetInnerHTML("*server error*");
				//open error in window
				var ErrorWindow = window.open("", "Error", "status=no,scrollbars=yes,resizable=yes,width=640,Height=480");
				ErrorWindow.document.write(Response.responseText);
			}
		};
		
		if(OnTheFly.Username.value == ""){
			Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "username_notice").SetInnerHTML("Please specify a username.");
			//re-position
			OnTheFly.Position();
		}
		else{
			//make the http request
			XHRequest.Get("on-the-fly/index.html?action=Username Available&username="+ OnTheFly.Username.value);
		}
	}
//--> End :: UsernameFieldEvent

//##########################################################################################
	
//--> Begin :: PasswordFieldEvent
	OnTheFly.PasswordFieldEvent = function (){
		
		if(Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "username_field").GetNode().style.display == "none"){
			//create ajax object
			var XHRequest = new WebLegs.XHRDriver();
			
			//loading handler
			XHRequest.Loading = function() {
				Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "password_notice").SetInnerHTML("<img src=\"_MEDIA/ajax-loading-small.gif\" />");
			};
			
			//complete handler
			XHRequest.Complete = function(Response) {
				if(XHRequest.IsSuccess()) {
					
					//remove loading image
					Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "password_notice").SetInnerHTML("");
					
					//get response object
					Response = eval("("+ Response.responseText +")");
					
					//has errors
					if(Response.error_messages.length > 0){
						var Errors = "";
						for(var i = 0; i < Response.error_messages.length; i++){
							Errors += Response.error_messages[i] +"<br />";
						}
						Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "password_notice").SetInnerHTML(Errors);
					}
					//login successful
					else if(Response.successful == "true"){
						//hide form
						Footprint.Page.GetNodesByDataSet("label", "on-the-fly-container").GetNode().className = "-on-the-fly-container-hide";
						
						//submit form
						OnTheFly.CurrentSubmitForm.action.click();
					}
					//login failed
					else if(Response.successful == "false"){
						//set notice
						Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "password_notice").SetInnerHTML("Login failed.");
					}
					
					//re-position
					OnTheFly.Position();
				}
				else {
					//turn off status icon
					Footprint.Page.GetNodesByDataSet("label", "search_running").SetInnerHTML("");
					//get response and show in pop-up
					Footprint.Page.GetNodesByDataSet("label", "search_results").SetInnerHTML("*server error*");
					//open error in window
					var ErrorWindow = window.open("", "Error", "status=no,scrollbars=yes,resizable=yes,width=640,Height=480");
					ErrorWindow.document.write(Response.responseText);
				}
			};
			
			if(OnTheFly.Password.value == ""){
				Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "password_notice").SetInnerHTML("Please specify a password.");
			}
			else{
				//make the http request
				XHRequest.Get("on-the-fly/index.html?action=Login&email="+ OnTheFly.Email.value +"&password="+ OnTheFly.Password.value);
			}
		}
		else{
			if(OnTheFly.Password.value.length <= 8){
				Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "password_notice").SetInnerHTML("Passwords must be at least 8 characters in length.");
				//re-position
				OnTheFly.Position();
			}
			else{
				Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "password_notice").SetInnerHTML("");
			}
		}
	}
//--> End :: PasswordFieldEvent

//##########################################################################################
	
//--> Begin :: CaptchaFieldEvent
	OnTheFly.CaptchaFieldEvent = function (){
		//create ajax object
		var XHRequest = new WebLegs.XHRDriver();
		
		//loading handler
		XHRequest.Loading = function() {
			Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "username_notice").SetInnerHTML("<img src=\"_MEDIA/ajax-loading-small.gif\" />");
		};
		
		//complete handler
		XHRequest.Complete = function(Response) {
			if(XHRequest.IsSuccess()) {
				
				//remove loading image
				Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "username_notice").SetInnerHTML("");
				
				//get response object
				Response = eval("("+ Response.responseText +")");
				
				//username is available
				if(Response.successful == "true"){
					//hide form
					Footprint.Page.GetNodesByDataSet("label", "on-the-fly-container").GetNode().className = "-on-the-fly-container-hide";
					
					//submit form
					OnTheFly.CurrentSubmitForm.action.click();
					
				}
				//username is not available
				else if(Response.successful == "false"){
					Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "captcha_notice").SetInnerHTML("The text you entered does not match the text in the image.");
				}
				
				//re-position
				OnTheFly.Position();
			}
			else {
				//turn off status icon
				Footprint.Page.GetNodesByDataSet("label", "search_running").SetInnerHTML("");
				//get response and show in pop-up
				Footprint.Page.GetNodesByDataSet("label", "search_results").SetInnerHTML("*server error*");
				//open error in window
				var ErrorWindow = window.open("", "Error", "status=no,scrollbars=yes,resizable=yes,width=640,Height=480");
				ErrorWindow.document.write(Response.responseText);
			}
		};
		
		if(OnTheFly.Captcha.value == ""){
			Footprint.Page.GetNodesByDataSet("label", "on-the-fly-form").GetNodesByDataSet("label", "captcha_notice").SetInnerHTML("Please specify validation text.");
			//re-position
			OnTheFly.Position();
		}
		else{
			//compile post data
			var PostData = "action=Register";
			PostData += "&captcha="+ OnTheFly.Captcha.value;
			PostData += "&email="+ OnTheFly.Email.value;
			PostData += "&username="+ OnTheFly.Username.value;
			PostData += "&password="+ OnTheFly.Password.value;
			
			//make the http request
			XHRequest.Post("on-the-fly/index.html", PostData);
		}
	}
//--> End :: CaptchaFieldEvent

//##########################################################################################
	
//--> Begin :: Position
	OnTheFly.Position = function (){
		var OnTheFlyContainer = Footprint.Page.GetNodesByDataSet("label", "on-the-fly-container").GetNode();
		OnTheFlyContainer.style.top = (((WebLegs.BrowserWindow.GetWindowHeight() - WebLegs.BrowserWindow.GetElementHeight(OnTheFlyContainer)) / 2) + WebLegs.BrowserWindow.GetScrolledY()) +"px";
		OnTheFlyContainer.style.left = ((WebLegs.BrowserWindow.GetWindowWidth() - WebLegs.BrowserWindow.GetElementWidth(OnTheFlyContainer)) / 2) +"px";
	}
//--> End :: Position

//##########################################################################################
	
//--> Begin :: Hide
	OnTheFly.Hide = function (){
		var OnTheFlyContainer = Footprint.Page.GetNodesByDataSet("label", "on-the-fly-container").GetNode();
		OnTheFlyContainer.className = "-on-the-fly-container-hide";
	}
//--> End :: Hide

//##########################################################################################
	
//--> Begin :: Show
	OnTheFly.Show = function (){
		if(Footprint.Request.Cookies("user_id") == null){
			//setup onscroll event
			window.onscroll = function() {
				OnTheFly.Position();
			};
			
			var OnTheFlyContainer = Footprint.Page.GetNodesByDataSet("label", "on-the-fly-container").GetNode();
			OnTheFlyContainer.className = "-on-the-fly-container-show";
			OnTheFly.Position();
		}
		else {
			alert("You're already logged in.");
		}
	}
//--> End :: Show

//##########################################################################################

OnTheFly.Init();