<!--
/*
DHTML Positive Forward Login
Orig Written: Sept, 06 by: Luke Pedley
------------------------
Requires: 		index.php
				Ajax.js, 
				formData2QueryString.js
				logIn.js
				login.css
				chk_memberb.php, 
				chkNemailCred.php, 
				chkNewPass.php,
*/

//Create new login class
var Login = new function() {  
	this.ajax = null;
	this.form = null;
	this.promptDiv = null;
	this.noteDiv = null;
	this.fieldDiv = null;
	this.uiDiv = null;
	this.dotSpan = null;
	this.button = null;
	this.enabled = true;
	this.dots = '';
	this.promptInterval = null;
	this.defaultPrompt = 'Enter a login ID and password, and click the Log In button.';
  
	
  
	this.init = function() {
		var self = Login;
		self.ajax = new Ajax();
		self.form = document.getElementById('loginForm');
		self.promptDiv = document.getElementById('promptDiv');
		self.uiDiv = document.getElementById('uiDiv');
		self.noteDiv = document.getElementById('noteDiv');
		self.capSpan = document.getElementById('capSpan');
		self.fieldDiv = document.getElementById('fieldDiv');
		self.buttonDiv = document.getElementById('buttonDiv');
		self.dotSpan = document.getElementById('dotSpan');
		self.button = document.getElementById('submitButton');
		self.setPrompt('base', self.defaultPrompt);
		self.form.LoginId.focus();
		self.toggleEnabled(false);
		self.form.onsubmit = function() { return false; }
		self.showHelpOptions();
		
		if(!document.all && typeof window.opera == 'undefined')
			self.uiDiv.style.overflow="hidden";
		//alert(self.form.innerHTML);
	};
	
	this.setPrompt = function(stat, msg) {
		var self = Login;
		var promptDiv = self.promptDiv;
		var msgSpan = document.getElementById('msgSpan');
		var statusClass = '';
		promptDiv.className = stat + 'Prompt'; // 'base', 'proc' or 'err'
		if (msgSpan.firstChild) {
			msgSpan.removeChild(msgSpan.firstChild);
		}
		msgSpan.appendChild(document.createTextNode(msg));
	};
	
	this.toggleEnabled = function(able) {
		var self = Login;	
		if (able) {
			//check form state id: loginForm, passHelpForm, loginHelpForm, resetPassForm
			if(self.form.id == 'loginForm')
				self.button.onclick = self.submitData;
			if(self.form.id == 'loginHelpForm')
				self.button.onclick = self.loginHelp;
			if(self.form.id == 'passHelpForm')
				self.button.onclick = self.passHelp;
			if(self.form.id == 'resetPassForm')
				self.button.onclick = self.submitPassReset;
			
			self.button.disabled = false;
			self.button.className = 'inputButtonActive';
			self.enabled = true;
		}
		else {
			self.button.onclick = null;
			self.button.disabled = true;
			self.button.className = 'inputButtonDisabled';
			self.enabled = false;
		}
	};
	
	this.keyup = function(e) {
		var self = Login;
		if (!e) {
			e = window.event;
		}
		//self.evalCapsLockState(e);
		if (e.keyCode != 13) {	//enter
			self.evalFormFieldState();
		}
		else {
			if (self.enabled) {
				//check form state id: loginForm, aliasForm, passHelpForm
				if(self.form.id == 'loginForm')
					self.submitData;
				if(self.form.id == 'loginHelpForm')
					self.loginHelp;
				if(self.form.id == 'passHelpForm')
					self.passHelp();
				if(self.form.id == 'resetPassForm')
					self.submitPassReset();
			}
		}
	};
	
	this.evalFormFieldState = function() {
		var self = Login;
		if(self.form.id == 'loginForm'){
			if (self.form.LoginId.value.length > 0 && self.form.pass.value.length > 0) 
				self.toggleEnabled(true);
		}
		else if(self.form.id == 'loginHelpForm'){
			if (self.form.email.value.length > 0) 
				self.toggleEnabled(true);
		}
		else if(self.form.id == 'passHelpForm'){
			if(self.form.userid && self.form.email){
				if (self.form.userid.value.length > 0 && self.form.email.value.length > 0) 
					self.toggleEnabled(true);
			}
		}
		else if(self.form.id == 'resetPassForm'){
			if (self.form.newPass1.value.length > 0 && self.form.newPass2.value.length > 0) 
				self.toggleEnabled(true);
		}
	};
	
	this.evalCapsLockState = function(e) {
		var self = Login;
		var myKeyCode=0;
		var myShiftKey=false;
		var capsMsg ='Caps Lock is ON!';
		
		// Internet Explorer 4+
		if ( document.all && typeof window.opera == 'undefined') {
			myKeyCode=e.keyCode;
			myShiftKey=e.shiftKey;

		// Netscape 4
		} else if ( document.layers ) {
			myKeyCode=e.which;
			myShiftKey=( myKeyCode == 16 ) ? true : false;

		// Netscape 6
		} else if ( document.getElementById ) {
			myKeyCode=e.which;
			myShiftKey=( myKeyCode == 16 ) ? true : false;
		}

		//alert('keyCode: '+myKeyCode+'\nshift: '+myShiftKey);
		// Upper case letters are seen without depressing the Shift key, therefore Caps Lock is on
		if (( myKeyCode >= 65 && myKeyCode <= 90 ) && !myShiftKey) {
			if(self.capSpan.firstChild){
				self.capSpan.removeChild(self.capSpan.firstChild);
			}
			self.capSpan.appendChild(document.createTextNode(capsMsg));
		} 
		else{
			if(self.capSpan.firstChild) {
				self.capSpan.removeChild(self.capSpan.firstChild);
			}
		}
	};
	
	this.submitData = function() {
		var self = Login;
		var postData = '';
		postData = formData2QueryString(self.form);
		self.ajax.doPost('ajax_login.php', postData, self.handleLoginResp);
		self.showStatusPrompt();
		self.toggleEnabled(false);
	};
	
	this.handleLoginResp = function(str) {
		var self = Login;
		//make sure string is clean
		str = str.replace(/^\s*|\s*$/g,"");
		//Example Response:
		//response|message
		var respArr = str.split('|');
		var respType = respArr[0].toLowerCase();	//sucess | error | newPass
		var respMsg = respArr[1];					//message to User
		var uid = respArr[2];						//user id
		var pass = respArr[3];						//password
		var secQ = respArr[4];						//question

		//alert(str);
		switch(respType){
			case 'success':	
				//alert('inside sucess');
				self.showSuccessPrompt(respMsg);
				self.form.submit();
				break;
			case 'error':
				//alert('type: ' +respType+' \nmsg: ' +respMsg+'  \nalias: ' +respAlias);
				self.showErrorPrompt(respMsg);
				break;
			case 'newpass':
				//alert('loading new pass form passing: uid: '+uid+', pass: '+pass+', question: '+seQ);
				self.showSuccessPrompt(respMsg);
				self.loadResetPassForm(uid,pass,secQ);
				break;
			default:
				self.showErrorPrompt('Unrecognized Input.');
				break;
		}
		
	};
	
	this.showStatusPrompt = function() {
		var self = Login;
		self.dots = '';
		self.setPrompt('proc', 'Processing');
		self.promptInterval = setInterval(self.showStatusDots, 200);
	};
	
	this.showStatusDots = function() {
		var self = Login;
		var dotSpan = self.dotSpan;
		self.dots += '.';
		if (self.dots.length > 4) {
			self.dots = '';
		}
		if (dotSpan.firstChild) {
			dotSpan.removeChild(dotSpan.firstChild);
		}
		dotSpan.appendChild(document.createTextNode(' ' + self.dots));
	};
	
	this.showSuccessPrompt = function(str) {
		var self = Login;
		var dotSpan = self.dotSpan;
		clearInterval(self.promptInterval);
		if (dotSpan.firstChild) {
			dotSpan.removeChild(dotSpan.firstChild);
		}
		self.setPrompt('base', str);
	};
	
	this.showErrorPrompt = function(str) {
		var self = Login;
		var dotSpan = self.dotSpan;
		clearInterval(self.promptInterval);
		if (dotSpan.firstChild) {
			dotSpan.removeChild(dotSpan.firstChild);
		}
		self.setPrompt('err', str);
		if(self.form.pass){
			self.form.pass.value = '';
			self.form.pass.focus();
		}
	};
		
	this.showHelpOptions = function(){
		var self = Login;
		//cleanup div before createing
		while(self.noteDiv.firstChild) {
			self.noteDiv.removeChild(self.noteDiv.firstChild);
		}
		
		//remember check
		self.noteDiv.innerHTML='Remember Me: <input type="checkbox" name="autologin" />&nbsp;(<a href="#" onclick="return overlay(this,\'remText\',\'left\')">?</a>)<br />';
//alert(document.getElementById("uiDiv").innerHTML);		
		//login help
		self.noteDiv.appendChild(document.createTextNode('I forgot my '));
		//create span to hold link
		var userSpan = document.createElement("span");
		userSpan.setAttribute("id","userid");
		//create anchors
		var userAnchor = document.createElement("a");
		userAnchor.setAttribute("href","javascript:{Login.loadLoginHelpForm(\'login\')}");
		//userAnchor.setAttribute("onclick","Login.loadHelpForm('login');return false;");
		userAnchor.appendChild(document.createTextNode("Login ID"));
		self.noteDiv.appendChild(userAnchor);
		//br
		var br = document.createElement("br");
		self.noteDiv.appendChild(br);
		
		//password help
		self.noteDiv.appendChild(document.createTextNode('I Forgot my '));
		//create span to hold link
		var passSpan = document.createElement("span");
		passSpan.setAttribute("id","password");
		//create anchor
		var passAnchor = document.createElement("a");
		passAnchor.setAttribute("href","javascript:{Login.loadPassHelpForm(\'password\')}");
		passAnchor.appendChild(document.createTextNode("Password"));
		self.noteDiv.appendChild(passAnchor);	
		
		self.form.LoginId.focus();
	};
	
	this.loadPassHelpForm = function(key){
		var self = Login;
		var respMsg = '';
		var fieldname = '';
		
		//update form id flag:loginForm, aliasForm, passHelpForm
		self.form.id = 'passHelpForm';
		
		respMsg = 'Please enter your Login ID and your saved profile email address. ';
		respMsg += 'If the provided information can be confirmed, you will receive a ';
		respMsg += 'new temporary password in your email inbox.';
		
		
		self.setPrompt('base', respMsg);
		
		//remove form options
		while(self.fieldDiv.firstChild) {
			self.fieldDiv.removeChild(self.fieldDiv.firstChild);
		}
		while(self.noteDiv.firstChild) {
			self.noteDiv.removeChild(self.noteDiv.firstChild);
		}
		
		//create new elements for login/pass field
		if(key != 'login'){
			var fieldTitleDiv = document.createElement('div');
			fieldTitleDiv.className = 'fieldTitle';
			self.fieldDiv.appendChild(fieldTitleDiv);
			fieldTitleDiv.appendChild(document.createTextNode('Login ID:'));
				
			var fieldEntryDiv = document.createElement('div');
			fieldEntryDiv.className = 'fieldEntry';
			self.fieldDiv.appendChild(fieldEntryDiv);
		
			var userField = document.createElement('input');
			userField.setAttribute("type","text");
			userField.setAttribute("name","userid");
			userField.setAttribute("id","userid");
			userField.className = 'inputField';
			fieldEntryDiv.appendChild(userField);
		}
	
		//create new elements for email address
		var fieldTitleDiv = document.createElement('div');
		fieldTitleDiv.className = 'fieldTitle';
		self.fieldDiv.appendChild(fieldTitleDiv);
		fieldTitleDiv.appendChild(document.createTextNode('Email Address:'));
		
		var fieldEntryDiv = document.createElement('div');
		fieldEntryDiv.className = 'fieldEntry';
		self.fieldDiv.appendChild(fieldEntryDiv);
		
		var emailField = document.createElement('input');
		emailField.setAttribute("name","email");
		emailField.className = 'inputField';
		emailField.setAttribute("type","text");
/*		//emailField.setAttribute("onblur","ckEmail(this)");
		if(document.all && typeof window.opera == 'undefined'){ //IE
			emailField.onclick =new Function("ckEmail(this)");
			emailField.onKeyPress = new Function("Login.evalCapsLockState(event)");
		}
		else{	//others
			emailField.setAttribute("onclick","ckEmail(this)");
			emailField.setAttribute("onKeyPress","Login.evalCapsLockState(event)");
		}
*/		emailField.setAttribute("id","email");
		fieldEntryDiv.appendChild(emailField);
		
		//add a form back button
		var resetButton = createNamedElement('input','resetForm');
		resetButton.setAttribute("type","button");
		resetButton.setAttribute("id","resetForm");
		resetButton.onclick = function () {location.reload(true)};
		resetButton.setAttribute("value","Reset");
		self.buttonDiv.appendChild(resetButton);
		
		self.button.value = 'Email My Password';
		
		//for testing, so I can see what got created
		//alert(document.getElementById("uiDiv").innerHTML);
	};
	
	this.loadLoginHelpForm = function(){
		var self = Login;
		var respMsg = '';
		var fieldname = '';
		
		//update form id flag:loginForm, aliasForm, passHelpForm
		self.form.id = 'loginHelpForm';
		
		respMsg = 'Please enter your Email Address. ';
		respMsg += 'If the provided information can be confirmed, you will receive your Login ID in your email inbox.';
		
		self.setPrompt('base', respMsg);
		
		//remove form options
		while(self.fieldDiv.firstChild) {
			self.fieldDiv.removeChild(self.fieldDiv.firstChild);
		}
		while(self.noteDiv.firstChild) {
			self.noteDiv.removeChild(self.noteDiv.firstChild);
		}
	
		//create new elements for email address
		var fieldTitleDiv = document.createElement('div');
		fieldTitleDiv.className = 'fieldTitle';
		self.fieldDiv.appendChild(fieldTitleDiv);
		fieldTitleDiv.appendChild(document.createTextNode('Email Address:'));
		
		var fieldEntryDiv = document.createElement('div');
		fieldEntryDiv.className = 'fieldEntry';
		self.fieldDiv.appendChild(fieldEntryDiv);
		
		var emailField = document.createElement('input');
		emailField.setAttribute("name","email");
		emailField.className = 'inputField';
		emailField.setAttribute("type","text");
/*		//emailField.setAttribute("onblur","ckEmail(this)");
		if(document.all && typeof window.opera == 'undefined'){ //IE
			emailField.onclick =new Function("ckEmail(this)");
			emailField.onKeyPress = new Function("Login.evalCapsLockState(event)");
		}
		else{	//others
			emailField.setAttribute("onclick","ckEmail(this)");
			emailField.setAttribute("onKeyPress","Login.evalCapsLockState(event)");
		}
*/		emailField.setAttribute("id","email");
		fieldEntryDiv.appendChild(emailField);
		
		//add a form back button
		var resetButton = createNamedElement('input','resetForm');
		resetButton.setAttribute("type","button");
		resetButton.setAttribute("id","resetForm");
		resetButton.onclick = function () {location.reload(true)};
		resetButton.setAttribute("value","Reset");
		self.buttonDiv.appendChild(resetButton);
		
		self.button.value = 'Email My Login ID';
		
		//for testing, so I can see what got created
		//alert(document.getElementById("uiDiv").innerHTML);
	};
	
	this.loginHelp = function() {
		var self = Login;
		var postData = '';
		postData = formData2QueryString(self.form);
		self.ajax.doPost('ajax_loginHelp.php', postData, self.handleHelpResp);
		self.showStatusPrompt();
		self.toggleEnabled(false);
	}
	
	this.passHelp = function() {
		var self = Login;
		var postData = '';
		postData = formData2QueryString(self.form);
		self.ajax.doPost('ajax_passHelp.php', postData, self.handleHelpResp);
		self.showStatusPrompt();
		self.toggleEnabled(false);
	};
	
	this.handleHelpResp = function(str) {
		var self = Login;
		//alert(str);
		str = str.replace(/^\s*|\s*$/g,"");
		var respArr = str.split('|');
		var respType = respArr[0].toLowerCase();
		var respMsg = respArr[1];
		
		//clear processing message
		var dotSpan = self.dotSpan;
		clearInterval(self.promptInterval);
		if (dotSpan.firstChild) {
			dotSpan.removeChild(dotSpan.firstChild);
		}
		
		if(respType == 'error'){
			self.setPrompt('err', respMsg);
			self.showErrorPrompt(respMsg);
		}
		else {
			self.setPrompt('base', respMsg);
			self.showSuccessPrompt(respMsg);
		}
				
	};
	this.loadResetPassForm = function(login,pass,secQ) {
		var self = Login;
		//set form flag
		self.form.id = 'resetPassForm';
		//remove form options
		while(self.fieldDiv.firstChild) {
			self.fieldDiv.removeChild(self.fieldDiv.firstChild);
		}
		while(self.noteDiv.firstChild) {
			self.noteDiv.removeChild(self.noteDiv.firstChild);
		}
		
		//create hidden approved credientals with special function for IE 'name' bug
		var hiddenLogin = createNamedElement('input','userid');
		hiddenLogin.id = "userid";
		hiddenLogin.type = "hidden";
		hiddenLogin.value = login;
		self.fieldDiv.appendChild(hiddenLogin);
		
		var hiddenPass = createNamedElement('input','password');
		hiddenPass.id = "password";
		hiddenPass.type = "hidden";
		hiddenPass.value = pass;
		self.fieldDiv.appendChild(hiddenPass);
		
		//alert('building form');
		//create security question
		var fieldTitleDiv = document.createElement('div');
		fieldTitleDiv.className = 'fieldTitleB';
		self.fieldDiv.appendChild(fieldTitleDiv);
		fieldTitleDiv.appendChild(document.createTextNode(secQ));
		
		var fieldEntryDiv = document.createElement('div');
		fieldEntryDiv.className = 'fieldEntryB';
		self.fieldDiv.appendChild(fieldEntryDiv);
		
		var secAnswer = document.createElement('input');
		secAnswer.className = 'inputField';
		secAnswer.setAttribute("name","secAnswer");
		secAnswer.setAttribute("id","secAnswer");
		secAnswer.setAttribute("type","text");
		fieldEntryDiv.appendChild(secAnswer);
		
		//create new elements for pass fields
		var fieldTitleDiv = document.createElement('div');
		fieldTitleDiv.className = 'fieldTitleB';
		self.fieldDiv.appendChild(fieldTitleDiv);
		fieldTitleDiv.appendChild(document.createTextNode('New Password:'));
		
		var fieldEntryDiv = document.createElement('div');
		fieldEntryDiv.className = 'fieldEntryB';
		self.fieldDiv.appendChild(fieldEntryDiv);
		
		var passField = document.createElement('input');
		passField.className = 'inputField';
		passField.setAttribute("name","newPass1");
		passField.setAttribute("id","newPass1");
		passField.setAttribute("type","password");
		fieldEntryDiv.appendChild(passField);
		
		
		//create new elements for second pass filed
		var fieldTitleDiv = document.createElement('div');
		fieldTitleDiv.className = 'fieldTitleB';
		self.fieldDiv.appendChild(fieldTitleDiv);
		fieldTitleDiv.appendChild(document.createTextNode('Repeat:'));
		
		var fieldEntryDiv = document.createElement('div');
		fieldEntryDiv.className = 'fieldEntryB';
		self.fieldDiv.appendChild(fieldEntryDiv);
		
		var passField2 = document.createElement('input');
		passField2.setAttribute("name","newPass2");
		passField2.className = 'inputField';
		passField2.setAttribute("type","password");
		passField2.setAttribute("id","newPass2");
		fieldEntryDiv.appendChild(passField2);
		
		//add a form back button
		var resetButton = createNamedElement('input','resetForm');
		resetButton.setAttribute("type","button");
		resetButton.setAttribute("id","resetForm");
		resetButton.onclick = function () {location.reload(true)};
		resetButton.setAttribute("value","Back");
		self.buttonDiv.appendChild(resetButton);
		
		//relable button
		this.button.value = 'Update and Log in';
		self.form.secAnswer.focus();
		
		//for testing, so I can see what got created
		//alert(document.getElementById("uiDiv").innerHTML);
	};
	this.submitPassReset = function() {
		var self = Login;
		var postData = '';
		postData = formData2QueryString(self.form);
		self.ajax.doPost('ajax_newPass.php', postData, self.handleNewPasswdResp);
		self.showStatusPrompt();
		self.toggleEnabled(false);
	};
	
		this.handleNewPasswdResp = function(str) {
		var self = Login;
		//alert(str);
		//make sure string is clean
		str = str.replace(/^\s*|\s*$/g,"");
		//response|message|newpasswd
		var respArr = str.split('|');
		var respType = respArr[0].toLowerCase();
		var respMsg = respArr[1];
		var newPass = respArr[2];
		
		if(respType == 'error'){
			self.showErrorPrompt(respMsg);
			self.form.newPass1.value = '';
			self.form.newPass2.value = '';
			self.toggleEnabled(true);
			self.form.newPass1.focus();
		}
		else if(respType == 'success'){
			//set new password
			//alert('all appears good');
			//self.form.password.value = newPass;
			//alert(document.getElementById("uiDiv").innerHTML);
			self.form.submit();
		}
		else{
			self.showErrorPrompt('Oops, An Unknown error occured.');
		}
	};

	this.cleanup = function() {
		var self = Login;
		//IE is very messy with memory
		self.form = null;
		self.promptDiv = null;
		self.noteDiv = null;
		self.fieldDiv = null;
		self.dotSpan = null;
		self.button = null;
		self.selectAlias = null;
		self.hiddenPass = null;
		self.infoHolder = null;
		self.agtNameF = null;
		self.agtnameL = null;
//		self.aliasList = null;
		self.origLogin = null;
		self.resetButton = null;
		self.emailField = null;
		self.userField = null;
		self.passField = null;
		self.passField2 = null;
	};
}


document.onkeyup = Login.keyup;
window.onunload = Login.cleanup;

//make sure page is de-framed!
if (parent.frames.length > 0)
{
     parent.location.href = location.href;
}
	


	//needed for IE DOM bug fix when createing names for elements
	function createNamedElement(type, name) {
		var self = Login;
		var element;
		try {
			element = document.createElement('<'+type+' name="'+name+'">');
		} 
		catch (e) { }
		
		if (!element || !element.name) { // Not in IE, then
			element = document.createElement(type)
			element.name = name;
		}
		return element;
	}
//-->	

