UserPage = function(){}; 
UserPage.DataBridgeObj = null; 
UserPage.PostRegisterAction = null; 

UserPage.Init = function()
{
}

UserPage.Load = function(subpage, subpage2, arg1, arg2)
{
	UserPage.Init(); 
	
	switch(subpage)
	{
		case "loginorregister":
		{
			UserPage.LoginOrRegister(arg1, arg2); 
		}
		case "add":
		case "register":
		{			
			UserPage.LoadUserRegistration(subpage2); 
			break; 
		}
		case "account":
		{
			UserPage.LoadUserAccount(false); 
			break; 
		}
		case "accountedit":
		{
			UserPage.LoadUserAccount(true); 
			break; 
		}		
		case "datalist":
		default:
		{
			UserPage.LoadDataList(); 
			break; 
		}
	}
}

UserPage.LoadDataList = function()
{
	$("SubNavMenu").innerHTML = "";
	Globals.UI.Navigation.ResetCrumbTrail(); 
	Globals.UI.Navigation.AddToCrumbTrail("Home","javascript:GoToPage(Page.Home)"); 
	Globals.UI.Navigation.AddToCrumbTrail("User","javascript:GoToPage(Page.User, 'datalist')"); 
	Globals.UI.Navigation.AddToCrumbTrail("Data List","javascript:GoToPage(Page.User, 'datalist')"); 

	Globals.UI.Navigation.LoadPage("User", "User Data"); 
	Globals.MainMenu.SelectMenuItem(Page.Admin, true);
	Globals.UI.Navigation.SetBodyMiddle("<div id=\"UserDataList\" style=\"padding-top:20px;width:70%\" ></div>"); 
    Globals.ShowSpinner("UserDataList", "Loading User data...", true)        
    var serverData = new ServerData.SenderObject("select", null, Globals.Location.ASHX.User);             
    
    serverData.SendData(function(results)
    {  	    	
    	//If by the time tha this returns the app has "moved on", then don't do anything.
    	if($("UserDataList") == null) return; 
    	
		var dataList = new UIControls.DataList("_userDataList",$("UserDataList"), UserPage.LoadEditForm, UserPage.LoadAddForm, UserPage.DeleteEntity);	
		dataList.SetAutoForms(Globals.Location.ASHX.User, "GoToPage(Page.User,'datalist')"); 		
		dataList.ServerObject = serverData.ReturnObject; 	
		UserPage.DataBridgeObj = serverData.ReturnObject.DataBridge; 		
		dataList.Render();
		Globals.MainMenu.SelectMenuItem(Page.Admin, true); 		
	}); 
};

UserPage.LoadUserAccount = function(edit)
{
	Globals.UI.Navigation.LoadPage("User Account", "User Profile"); 	
	Globals.UI.Navigation.SetBodyMiddle("<div id=\"UserDataList\" style=\"width:70%\" ></div>"); 
    Globals.ShowSpinner("UserDataList", "Loading " + UserPage.GetFullName() + " Account Data...", true)        
	
	var serverData = new ServerData.SenderObject("select", null, Globals.Location.ASHX.User, "Id=" + Globals.UserData.Id);             

	serverData.SendData(function(results)
	{                
		var userForm = new HtmlForm.Control("UserRegistration"); 
		userForm._saveTxt = " Save ";
		userForm._onFormSaveComplete = UserPage.LoadUserAccount; 
		userForm.SetDataBridgeObject(serverData.ReturnObject.DataBridge); 
		userForm.ServerObject = serverData.ReturnObject; 
		userForm.ViewOnly = !edit; 
		userForm.AllowEdit = true; 
		userForm.ViewTemplate = UserPage.GetViewTemplate(); 
		userForm.Render($("UserDataList"), "", "GoToPage(Page.User,'account');"); 

		//settings = 
		//{
		//	tl: { radius: 7 },
		//	tr: { radius: 7 },
		//	bl: { radius: 7 },
		//	br: { radius: 7 },
		//	antiAlias: true,
		//	autoPad: true,
		//	validTags: ["div"]
		//}
		
		//var myBoxObject = new curvyCorners(settings, "InfoCard");
		//myBoxObject.applyCornersToAll();
		
		if(!edit)
		{
			$("UserDataList").innerHTML = $("UserDataList").innerHTML + 
			"<div style=\"padding:10px;\">" + 
				"<img src='imgs/edit.png' /> " + 
				"<button style=\"margin-left:5px;\" onclick=\"GoToPage(Page.User,'accountedit');\">" + 
				"Edit My Profile</button>" + 
			"</div>";  
			//$("UserDataList").innerHTML; 
		}
	});


	/*
	var userForm = new HtmlForm.Control("UserRegistration"); 
    userForm._saveTxt = " Save ";
    userForm._onFormSaveComplete = UserPage.LoadUserAccount; 
	userForm.SetDataBridgeObject(ServerData.DataBridgeObjects.Get("user")); 
	userForm.Render($(Globals.UI.Navigation.MiddleBodyId), "", "GoToPage(Page.User,'account');", UserPage.GetUserEditArray()); 

	ServerData.DataBridgeObjects.Get("user")
	*/
};

UserPage.GetFullName = function()
{
	return Globals.UserData.FirstName + " " + Globals.UserData.LastName; 
};

UserPage.LoadAddForm = function()
{
	//Becuase the DataList object has auto forms creation, no form creation need happen here!
	Globals.UI.Navigation.ResetCrumbTrail(); 
	Globals.UI.Navigation.AddToCrumbTrail("Home","javascript:GoToPage(Page.Home)"); 
	Globals.UI.Navigation.AddToCrumbTrail("Entity","javascript:GoToPage(Page.User, 'datalist')"); 
	Globals.UI.Navigation.AddToCrumbTrail("Add User","javascript:GoToPage(Page.User)"); 
	Globals.UI.Navigation.LoadPage("User", "+Add new User"); 	
	Globals.MainMenu.SelectMenuItem(Page.Admin, true); 
};

UserPage.LoadEditForm = function(name)
{
	Globals.UI.Navigation.ResetCrumbTrail(); 
	Globals.UI.Navigation.AddToCrumbTrail("Home","javascript:GoToPage(Page.Home)"); 
	Globals.UI.Navigation.AddToCrumbTrail("User","javascript:GoToPage(Page.User, 'datalist')"); 
	Globals.UI.Navigation.AddToCrumbTrail("Edit User <i>" + name + "</i>","javascript:GoToPage(Page.User)"); 

	Globals.UI.Navigation.LoadPage("Entity", "~Edit User <i>" + name + "</i>"); 
	Globals.MainMenu.SelectMenuItem(Page.Admin, true); 
};

UserPage.DeleteEntity = function(id)
{
	//Delete Here
	//UserPage.LoadDataList(); 
};

UserPage.LoginOrRegister = function(msg, returnFunctionCall)
{
	UserLoginPage.PostLoginAction = returnFunctionCall; 
	UserPage.PostRegisterAction = returnFunctionCall; 
	
	GoToPage(Page.UserLogin, null, null, null, null, null, msg, "GoToPage(Page.User,'register','subregistration');"); //Pass message and show register new user option 
};

UserPage.LoadUserRegistration = function(subpage2)
{
	if(subpage2 == "subcontractor_step1")
	{
		if(Globals.UserData)
		{
			UserPage.LoadSubContractorForm(); 
		}
		else
		{
			UserPage.LoginOrRegister(
				'<b>Add New Company</b><br /><p style="width:270px;">Before you can add your ' + 
				'company to our system, it is required you either ' + 
				'login or register as a new user.</span>', 
				function()
				{
					UserPage.LoadUserRegistration("subcontractor_step1"); 
				}
			); 
		}
		
		return; 
	}
	
    Globals.ShowSpinner("MiddleBody", "Loading User data...", true)        
	
	Globals.UI.Navigation.LoadPage("User", "User Registration");
    Globals.ShowSpinner("MiddleBody", "Loading User data...", true)        
	
	var userRegistrationForm = new HtmlForm.Control("UserRegistration"); 
    	userRegistrationForm._saveTxt = " Register";
    
    userRegistrationForm.ValidateFunction = function()
    {
		var emailControl = this.GetFormControl("Contact").GetDataSet().Email; 
        Globals.ShowSpinner("formStatusContainer", "Verifying that email \"" + emailControl.GetValue() + "\" is unique...", true)        
		var serverData = new ServerData.SenderObject(
			"checkemailexists", 
			null, 
			Globals.Location.ASHX.User + "?email=" + emailControl.GetValue()
		);                 
		
		serverData.SendData(function(emailExists)
		{  	
			$("formStatusContainer").innerHTML = ""; 
			var error = ""; 
			if(emailExists)
			{
				var emailControl = userRegistrationForm.GetFormControl("Contact").GetDataSet().Email; 
				error = "The email address '" + emailControl.GetValue() + "' already exists in our system. Becuase your email is used as your unique login, please choose another email address."; 				
				emailControl.Focus(); 
				emailControl.Select(); 
				emailControl.SetInvalid();
			}
			
    		userRegistrationForm.Save(userRegistrationForm, error); 			
		}); 		
    };
    
	var serverData = new ServerData.SenderObject("select", null, Globals.Location.ASHX.User);             
	var stepTxt = ""; 
	
	/*
		
		var serverData = new ServerData.SenderObject("select", null, "./ServerData/EntityHandler.ashx");                 
		serverData.SendData(function(results)
		{  	
			if($("subcombo") == null) return; 

			SearchPage.subCombo = UIControls.GetControlFromDataBridgeObj(serverData.ReturnObject.DataBridge.DataObjects[5], $("subcombo")); 
			SearchPage.subCombo.Label = ""; 
			SearchPage.subCombo.Render(); 
			$("subcombo").innerHTML += "<button onclick='SearchPage.Search();'>Search</button>"; 
		}); 		
	
	*/
	
	switch(subpage2)
	{
		case "subregistration":
		{			
			userRegistrationForm._onFormSaveComplete = UserPage.LoadSubContractorForm;
			break; 
		}
		case "homebuilder_step1":
		{
			Globals.UI.Navigation.ResetCrumbTrail(); 
			Globals.UI.Navigation.AddToCrumbTrail("Home","javascript:GoToPage(Page.Home)"); 
			Globals.UI.Navigation.AddToCrumbTrail("Home Builder Registration","javascript:GoToPage(Page.User,'register','homebuilder_step1');"); 
			$(Globals.UI.Navigation.SubNavTitleId).innerHTML = "Home Builder Registration";
			stepTxt = "<p><h4>Provide us with your information</h4><p>Why register? Keep up to date with our latest features, products, and services. We do not share your personal information. <a href='javascript:GoToPage(Page.ContentPage, \"privacypolicy\");'>(Privacy Policy)</a></p>";
			break; 
		}
		default:
		{
			Globals.UI.Navigation.ResetCrumbTrail(); 
			Globals.UI.Navigation.AddToCrumbTrail("Home","javascript:GoToPage(Page.Home)"); 
			Globals.UI.Navigation.AddToCrumbTrail("User Registration","javascript:GoToPage(Page.User,'register');"); 
			$(Globals.UI.Navigation.SubNavTitleId).innerHTML = "User Registration";
			stepTxt = "<p>Please provide us with your personal user information below:</p>";
			break; 
		}
	}
    
	if(ServerData.DataBridgeObjects.Get("user") == null)
	{
		serverData.SendData(function(results)
		{  	    	
			userRegistrationForm.SetDataBridgeObject(ServerData.DataBridgeObjects.Get("user")); 
			userRegistrationForm.Render($(Globals.UI.Navigation.MiddleBodyId), "", "GoToPage(Page.Home);"); 
			$(Globals.UI.Navigation.SubNavTitleId).className = "SubNavTitle_UserReg"; 

			$(Globals.UI.Navigation.MiddleBodyId).innerHTML = "<div  style='width:400px;padding:10px;'>" + stepTxt + "</div>" + 
			$(Globals.UI.Navigation.MiddleBodyId).innerHTML; 		
		}); 	
	}
	else
	{
		userRegistrationForm.SetDataBridgeObject(ServerData.DataBridgeObjects.Get("user")); 
		userRegistrationForm.Render($(Globals.UI.Navigation.MiddleBodyId), "", "GoToPage(Page.Home);"); 
		$(Globals.UI.Navigation.SubNavTitleId).className = "SubNavTitle_UserReg"; 

		$(Globals.UI.Navigation.MiddleBodyId).innerHTML = "<div  style='width:400px;padding:10px;'>" + stepTxt + "</div>" + 
		$(Globals.UI.Navigation.MiddleBodyId).innerHTML; 		
	}
	
	Globals.MainMenu.SelectMenuItem(Page.Admin, true); 			
};

UserPage.LoadSubContractorForm = function(serverObject)
{
	if(serverObject && serverObject.Data)
	{
		Globals.UserData = serverObject.Data;	
	}
	
	Globals.UI.Navigation.LoadPage("Contractor", "Sub Contractor");
    Globals.ShowSpinner("MiddleBody", "Loading Contractor data...", true)        
	
	var formObj = new HtmlForm.Control("UserRegistration"); 
    	formObj._saveTxt = "Save";
    	
	var serverData = new ServerData.SenderObject("select", null, "./ServerData/EntityHandler.ashx");             
	$(Globals.UI.Navigation.SubNavTitleId).innerHTML = "Contractor Registration";

	if(ServerData.DataBridgeObjects.Get("entity") == null)
	{
		zserverData.SendData(function(results)
		{  	    	
			PostGetBridgeData(); 
		}); 	
	}
	else
	{
		PostGetBridgeData();
	}
	
	function PostGetBridgeData()
	{
		var fullName = UserPage.GetFullName(); 

		formObj.SetPrefaceText("<p style='padding:10px'><span style='font-size:10pt'>Welcome, <b>" + fullName + "</b></span> <a href='javascript:GoToPage(Page.UserLogin, \"logout\");'>(click here if this is not you).</a> Please take a few moments to tell us about your contracting company. Note, this company will be added to your account.</p>"); 
		formObj.SetDataBridgeObject(ServerData.DataBridgeObjects.Get("entity")); 
		formObj.Render($(Globals.UI.Navigation.MiddleBodyId), "", "GoToPage(Page.Home);"); 
		$(Globals.UI.Navigation.SubNavTitleId).className = "SubNavTitle_UserReg"; 
	};
};


UserPage.GetViewTemplate = function()
{
	var templateObj = $("UserViewTemplate"); 
	return templateObj; 
}

