/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Component:	stlDhtmlxLogin
//
// Description:	Attaches AJAX based login functionality to an existing username and password input element and submit button.
//
// Requires:	This component requires the inclusion of the following javascript files:
//					streamline/components/stlDhtmlxCommon/stlDhtmlxCommon.js
//					dhtmlx/codebase/dhtmlxcommon.js
//	
// Version:		2010-07
//
// Copyright:	2010 Joost Brugman, Brugman Holding B.V.
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function stlDhtmlxLogin(idContainer)
{
	var that = this;

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Inheritance: stlDhtmlxCommon, stlLanguageEnabledClass
	//
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.inheritFrom_stlWebComponent = stlWebComponent;
	this.inheritFrom_stlWebComponent(idContainer);
	
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Language table
	//
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.initLanguages = function()
	{		
		this.lang.en.txtMsgWrongUsernamePassword	= "Your username or password is incorrect.";

		this.lang.nl.txtMsgWrongUsernamePassword	= "Je gebruikersnaam of wachtwoord is incorrect.";
	}
	
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	onKeyPress()
	//
	// Description:	Event handler for username and password input boxes. Submits the login form if enter is pressed.
	//
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.isLoggedIn = function()
	{
		var xmlResponse = this.postSync("Op=IsLoggedIn");

		var elLoggedIn	= xmlResponse.getElementsByTagName("loggedin")[0];
		if(elLoggedIn == null)
			return stlApp.messages.add("Application error: Invalid XML Response. Missing loggedin element.");
		if(elLoggedIn.childNodes[0] == undefined)
			return stlApp.messages.add("Application error: Invalid XML Response. Missing loggedin content.");
		
		switch(elLoggedIn.childNodes[0].nodeValue)
		{
			case "true":
				return true;

			case "false":
				return false;
			
			default:
				return stlApp.messages.add("Application error: Invalid XML Response. Invalid loggedin content.");
		}		
	}
	
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	onSubmit()
	//
	// Description:	Event handler, triggered when the user submits the form
	//
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	this.onSubmit = function()
	{
		this.onSubmitEx();
		return false;
	}
	this.onSubmitEx = function()
	{
		var username	= this.elUsername.value;
		var password	= this.elPassword.value;

		var xmlResponse = this.postSync("Op=Login&Username=" + username + "&Password=" + password);

		var elLoggedIn	= xmlResponse.getElementsByTagName("loggedin")[0];
		if(elLoggedIn == null)
			return stlApp.messages.add("Application error: Invalid XML Response. Missing loggedin element.");
		if(elLoggedIn.childNodes[0] == undefined)
			return stlApp.messages.add("Application error: Invalid XML Response. Missing loggedin content.");

		switch(elLoggedIn.childNodes[0].nodeValue)
		{
			case "true":
				if(this.onLoginSuccesful != null)
					this.onLoginSuccesful();
				return;

			case "false":
				stlApp.messages.add(this.lang.current.txtMsgWrongUsernamePassword);
				if(this.onLoginFailed != null)
					this.onLoginFailed();
				return;
			
			default:
				return stlApp.messages.add("Application error: Invalid XML Response. Invalid loggedin content.");
		}
	}

	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//
	// Function:	Constructor
	//
	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		this.subElementId				= idContainer + ".formShowProperties";
		this.cssClassRootName			= "formShowProperties";

		this.setUriServerComponent(stlApp.getStreamlineComponentsPath() + "stlDhtmlxLogin/stlDhtmlxLogin.php");

		this.initLanguages();

		this.onLoginSuccesful		= null;
		this.onLoginFailed			= null;

		if(this.elContainer.nodeName.match(/^form$/i) == null)
			return stlApp.messages.add("Application error: Element " + idContainer + " is not a form tag.");

		var inputElements = this.elContainer.getElementsByTagName("input");
		if(inputElements.length != 3)
			return stlApp.messages.add("Application error: Element " + idContainer + " does not contain exactly three input elements.");

		var index;
		for(index = 0; index < inputElements.length; index++)
		{
			switch(inputElements[index].type)
			{
				case "text":		this.elUsername = inputElements[index]; break;
				case "password":	this.elPassword = inputElements[index]; break;
				case "submit":		this.elSubmit; break;
				default:			return stlApp.messages.add("Application error: Element " + idContainer + " contains input elements that are invalid for this form.");
			}
		}

		this.elContainer.onsubmit = function(event) { return that.onSubmit(); }
}


