

// make sure that the required includes are there
 if (typeof NC == 'undefined') {
       alert("authenticationdialog.js requires the NC JavaScript framework");
 }
 
 if (typeof NC.widget == 'undefined') {
       alert("validatedmodaldialog.js requires the NC JavaScript framework");
 }



    NC.widget.AuthenticationDialog = function(sourceUrl, parameters, targetDiv, targetFormName, 
 						 updateFunc, updateUrl, updateTarget, validateFunc, errorDiv, showAsPopup) {
 		var fnSuperClass = NC.widget.AuthenticationDialog.superclass.constructor;
		fnSuperClass.call( this, sourceUrl, parameters, targetDiv, targetFormName, showAsPopup);
 		this.updateFunc = updateFunc;
 		this.updateUrl = updateUrl;
 		this.updateTarget = updateTarget;
 		this.validateFunc = validateFunc;
 		this.errorDiv = errorDiv;
 	}
 
  NC.lang.extend(NC.widget.AuthenticationDialog, NC.widget.ModalDialog, 
  {
  	
  	getErrorDiv: function() {
  		return this.errorDiv;
  	},
 	
 	doSubmit: function() {
 		var element = document.getElementById(this.target);
 		var descendants = NC.util.Dom.descendants(element);
 		for (var i = 0; i < descendants.length; ++i) {   
 			var item = descendants[i];   
			if (item.name == this.targetFormName) {
				if (this.validateFunc != null && this.validateFunc( item, this.errorDiv)) {
					var parms = NC.util.Dom.serializeForm(item);
					if (this.updateFunc != null && this.updateUrl != null) {
						this.updateFunc( this.updateUrl, parms, this.updateTarget);
					}
//					this.hide();
				}
			}
 		}
  	}
 
 }
 );
 
 (function () {

 NC.widget.LoginManager = function() {
	/* private variables and methods */
	var loginDialog = null;
	var signupDialog = null;
	var passwordDialog = null;
	var top = false;
	var loginFormVisible = false;
  	
 	 	return {
 	 		makeLoginUrl: function( employer, top) {
 	 			var loginUrl;
				if (employer == 1 ) {
					loginUrl = "./alerts/validate_employer_ajax.php4";
					if (top == false) {
						loginUrl = "./validate_employer_ajax.php4";
					}
				}
				else {
					var loginUrl = "./alerts/validate_user_ajax.php4";
					if (top == false) {
						loginUrl = "./validate_user_ajax.php4";
					}
		    	}
		    	return loginUrl;
 	 		},

 	 		makeSignupUrl: function( top) {
 	 			var signupUrl;
				signupUrl = "./alerts/js_dosignup_ajax.php";
				if (top == false) {
					signupUrl = "./js_dosignup_ajax.php";
				}
		    	return signupUrl;
 	 		},
 	 		
 	 		clearLoginFormVisibleFlag: function() {
 	 			loginFormVisible = false;
 	 		},
 	 		
 	 		makeAutoLoginUrl: function( baseLoginUrl, loginParms) {
 	 			var autoLoginUrl = baseLoginUrl;
				var first = true;
 				for (var parm in loginParms) {
					if (first) {
						first = false;
					}
					else {
						autoLoginUrl += '&';
					}
					autoLoginUrl += parm + '=' + loginParms[parm];
				}
				return autoLoginUrl;
 	 		},
 	 		
 	 		retryLogin: function( formUrl, baseLoginUrl, loginParms, resultsDivName) {
				var loginUrl = this.makeAutoLoginUrl( baseLoginUrl, loginParms);
				if (formUrl != null) {
					signupDialog = new NC.widget.AuthenticationDialog(
						formUrl, 
						'', // already encoded into formUrl
						resultsDivName, 
						'JsSignup',
				 		function( updateUrl, updateParms, updateTarget) // submission function
				 		{
				 			var email = document.getElementById('Email');
				 			var emailValue = NC.util.Dom.getValue(email);
				 			var name = document.getElementById( 'Name');
				 			var nameValue = NC.util.Dom.getValue( name);
							loginParms['Name'] = nameValue;
							loginParms['Email'] = emailValue;
							loginUrl = NC.widget.LoginManager.makeAutoLoginUrl( baseLoginUrl, loginParms);
							var callback =
							{
				  				success:function( o) {
				  					loginSuccessful = true;
								    var xmlDocument = o.responseXML;
									var success = '';
									var errorMessage = '';
									var redirectUrl = '';
									try {
										var success = xmlDocument.getElementsByTagName('success').item(0).firstChild.data;
									} catch (e) {
									}
									try {
										var message = xmlDocument.getElementsByTagName('message').item(0).firstChild.data;
									} catch (e) {
									}
									try {
										var formUrl = xmlDocument.getElementsByTagName('formurl').item(0).firstChild.data;
									} catch (e) {
									}
									if (success == 1) {
										var redirectUrl = null;
										try {
											redirectUrl = xmlDocument.getElementsByTagName('url').item(0).firstChild.data;
										} catch (e) {
											; // not found
										}
										if (redirectUrl != null) {
											window.location = redirectUrl;
										}
										else {
											NC.widget.LoginManager.retryLogin( formUrl, baseLoginUrl, loginParms, resultsDivName);
										}
									}
									else {
										var errorMessage = xmlDocument.getElementsByTagName('message').item(0).firstChild.data;
										/*
										alert( "Login failed: " + errorMessage);
										var errorDivName = NC.widget.LoginManager.getSignupDialog().getErrorDiv();
										var errorDiv = document.getElementById( errorDivName);
										errorDiv.innerHTML = message;
										errorDiv.style.display = "block";
										* */
									}
				  				},
				  				failure:function( o) {
				  				},
							scope: this    				
							};
							var connection = new NC.util.AjaxConnection( 'GET', loginUrl, null);
							connection.executeMethod( callback);
				 		}, 
				 		'',  // update url determined later
				 		'', // not used
				 		function( form, errorDiv) // validation function
				 		{
				 			var email = document.getElementById('Email');
				 			var emailValue = NC.util.Dom.getValue(email);
				 			var name = document.getElementById( 'Name');
				 			var nameValue = NC.util.Dom.getValue( name);
				 			var errorMessage = '';
				 			if (emailValue.length == 0) {
				 				errorMessage = 'Please enter an email address';
				 			}
				 			if (nameValue.length == 0) {
				 				if (errorMessage.length > 0) {
				 					errorMessage += '<br>';
				 				}
				 				errorMessage += 'Please enter your name';
				 			}
				 			if (errorMessage.length == 0) {
				 				return true;
				 			}
				 			else {
								var errorDiv = document.getElementById( NC.widget.LoginManager.getSignupDialog().getErrorDiv());
								errorDiv.innerHTML = errorMessage;
								errorDiv.style.display = "block";
								return false;
				 			}	
				 		},
				 		'SignupError',
				 		false
					);	
					signupDialog.show( 425, 450, 500);
				}
				else {
					alert( "form url was null");
				}
 	 		},
 	 		
 	 		doAutoLogin: function( baseLoginUrl, loginParms, resultsDivName) {
				var loginUrl = this.makeAutoLoginUrl( baseLoginUrl, loginParms);
				var callback =
				{
	  				success:function( o) {
					    var xmlDocument = o.responseXML;
						var success = '';
						var errorMessage = '';
						var redirectUrl = '';
						try {
							var success = -1;
							try {
								success = xmlDocument.getElementsByTagName('success').item(0).firstChild.data;
							} catch (e) {
								; // not found
							}
							if (success == 1) {
								var redirectUrl = null;
								var formUrl = null;
								var errorMessage = '';
								try {
									redirectUrl = xmlDocument.getElementsByTagName('url').item(0).firstChild.data;
								} catch (e) {
									; // not found
								}
								try {
									formUrl = xmlDocument.getElementsByTagName('formurl').item(0).firstChild.data;
								} catch (e) {
									; // not found
								}
								try {
									errorMessage = xmlDocument.getElementsByTagName('message').item(0).firstChild.data;
								} catch (e) {
									; // not found
								}
								if (redirectUrl != null) {
									window.location = redirectUrl;
								}
								else { // show a login form and get the information required
										/** end of retry login **/
									this.retryLogin( formUrl, baseLoginUrl, loginParms, resultsDivName);
								}
							}
							else {
								var errorMessage = xmlDocument.getElementsByTagName('message').item(0).firstChild.data;
								var errorDiv = document.getElementById( resultsDivName);
								errorDiv.innerHTML = errorMessage;
								errorDiv.style.display = "block";
							}
						} catch (e) {
						}
	  				},
	  				failure:function( o) {
//	  					alert( "Auto login failed");
	  				},
				scope: this    				
				};
				var connection = new NC.util.AjaxConnection( 'GET', loginUrl, null);
				connection.executeMethod( callback);
 	 		},
 	 		
			showLoginDialog: function ( loginUrl,  _top, topY)
			{
				top = _top;
				var parameters = '';
				loginDialog = new NC.widget.AuthenticationDialog(
					loginUrl, 
					parameters, 
					NC.util.AjaxDialogDisplay.DialogWrapper, 
					'JsLogin',
			 		function( updateUrl, updateParms, updateTarget) // submission function
			 		{
			 			var employer = 0;
			 			var parms = updateParms.split('&');
			 			for ( var i = 0; i < parms.length; i++) {
			 				var avpair = parms[i].split('=');
			 				if (avpair[0] == 'Employer'){
			 					employer = avpair[1];
			 				}
			 			}
			 			updateUrl = NC.widget.LoginManager.makeLoginUrl( employer, top);
						var callback =
						{
			  				success:function( o) {
							    var xmlDocument = o.responseXML;
								var success = '';
								var errorMessage = '';
								var redirectUrl = '';
								try {
									var success = xmlDocument.getElementsByTagName('success').item(0).firstChild.data;
									if (success == 1) {
										var redirectUrl = xmlDocument.getElementsByTagName('url').item(0).firstChild.data;
										window.location = redirectUrl;
									}
									else {
										var errorMessage = xmlDocument.getElementsByTagName('message').item(0).firstChild.data;
										var errorDivName = NC.widget.LoginManager.getLoginDialog().getErrorDiv();
										var errorDiv = document.getElementById( errorDivName);
										errorDiv.innerHTML = errorMessage;
										errorDiv.style.display = "block";
									}
								} catch (e) {
								}
			  				},
			  				failure:function( o) {
			  				},
						scope: this    				
						};
						updateUrl += '?' + updateParms;
						var connection = new NC.util.AjaxConnection( 'GET', updateUrl, null);
						connection.executeMethod( callback);
			 		}, 
			 		'',  // update url determined later
			 		'', // not used
			 		function( form, errorDiv) // validation function
			 		{
						return true;	
			 		},
			 		'LoginError',
			 		true
				);	
				// position
				var heightY = 400;
				var widthX = 350;
				var leftX = (NC.util.Dom.getViewportWidth() - widthX)/2 ;
//				var topY = 300;
				loginDialog.show( leftX, topY, widthX);		
				
			},
			
			doLogin: function( containerName, formName) { // submission function
			    var errorDiv = document.getElementById( "NCError");
	 			var employer = 0;
				var elLoginForm = NC.util.Dom.getFormDescendant( containerName, formName);
				var updateParms = NC.util.Dom.serializeForm( elLoginForm);
				var updateUrl = '';
	 			var parms = updateParms.split('&');
	 			for ( var i = 0; i < parms.length; i++) {
	 				var avpair = parms[i].split('=');
	 				if (avpair[0] == 'Employer'){
	 					employer = avpair[1];
	 				}
	 			}
	 			updateUrl = NC.widget.LoginManager.makeLoginUrl( employer, top);
				var callback =
				{
	  				success:function( o) {
					    var xmlDocument = o.responseXML;
						var success = '';
						var errorMessage = '';
						var redirectUrl = '';
						try {
							var success = xmlDocument.getElementsByTagName('success').item(0).firstChild.data;
							if (success == 1) {
								var redirectUrl = xmlDocument.getElementsByTagName('url').item(0).firstChild.data;
								window.location = redirectUrl;
							}
							else {
								var errorMessage = xmlDocument.getElementsByTagName('message').item(0).firstChild.data;
//								alert( errorMessage);
//								alert( errorDiv);
								errorDiv.innerHTML = errorMessage;
								errorDiv.style.display = "block";
							}
						} catch (e) {
						}
	  				},
	  				failure:function( o) {
	  				},
				scope: this    				
				};
				updateUrl += '?' + updateParms;
				var connection = new NC.util.AjaxConnection( 'GET', updateUrl, null);
				connection.executeMethod( callback);
	 		},
			
			
			
			showPasswordDialog: function ( passwordUrl,  _top, topY)
			{
				top = _top;
				var parameters = '';
				passwordDialog = new NC.widget.AuthenticationDialog(
					passwordUrl, 
					parameters, 
					NC.util.AjaxDialogDisplay.DialogWrapper, 
					'RecoverPassword',
			 		function( updateUrl, updateParms, updateTarget) // submission function
			 		{
			 			var employer = 0;
			 			var parms = updateParms.split('&');
			 			for ( var i = 0; i < parms.length; i++) {
			 				var avpair = parms[i].split('=');
			 				if (avpair[0] == 'Employer'){
			 					employer = avpair[1];
			 				}
			 			}
						var callback =
						{
			  				success:function( o) {
							    var xmlDocument = o.responseXML;
								var success = '';
								var errorMessage = '';
								var redirectUrl = '';
								try {
									var success = xmlDocument.getElementsByTagName('success').item(0).firstChild.data;
									if (success == 1) { // should not happen
									}
									else {
										var errorMessage = xmlDocument.getElementsByTagName('message').item(0).firstChild.data;
										var errorDivName = NC.widget.LoginManager.getPasswordDialog().getErrorDiv();
										var errorDiv = document.getElementById( errorDivName);
										errorDiv.innerHTML = errorMessage;
										errorDiv.style.display = "block";
									}
								} catch (e) {
								}
			  				},
			  				failure:function( o) {
			  				},
						scope: this    				
						};
						updateUrl += '?' + updateParms;
						var connection = new NC.util.AjaxConnection( 'GET', updateUrl, null);
						connection.executeMethod( callback);
			 		}, 
			 		'./emailpassword.php',  
			 		'', // not used
			 		function( form, errorDiv) // validation function
			 		{
						return true;	
			 		},
			 		'PasswordError',
			 		true
				);	
				// position
				var heightY = 400;
				var widthX = 350;
				var leftX = (NC.util.Dom.getViewportWidth() - widthX)/2 ;
//				var topY = 300;
				passwordDialog.show( leftX, topY, widthX);		
				
			},
			
			showSignupDialog: function ( signupUrl, _top, topY)
			{
				var parameters = '';
				top = _top;
				signupDialog = new NC.widget.AuthenticationDialog(
					signupUrl, 
					parameters, 
					NC.util.AjaxDialogDisplay.DialogWrapper, 
					'JsSignup',
			 		function( updateUrl, updateParms, updateTarget) // submission function
			 		{
						updateUrl = NC.widget.LoginManager.makeSignupUrl( top);
						var callback =
						{
			  				success:function( o) {
							    var xmlDocument = o.responseXML;
								var success = '';
								var errorMessage = '';
								var redirectUrl = '';
								try {
									var success = xmlDocument.getElementsByTagName('success').item(0).firstChild.data;
									var message = xmlDocument.getElementsByTagName('message').item(0).firstChild.data;
									if (success == 1) {
										var targetDiv = document.getElementById( this.target);
										message = NC.util.StringUtil.convertSpecialCharacters( message);
										message += NC.util.AjaxDialogDisplay.addDialogWrapper( this.target);
										targetDiv.innerHTML = message;
									}
									else {
										var message = xmlDocument.getElementsByTagName('message').item(0).firstChild.data;
										var errorDivName = NC.widget.LoginManager.getSignupDialog().getErrorDiv();
										var errorDiv = document.getElementById( errorDivName);
										errorDiv.innerHTML = message;
										errorDiv.style.display = "block";
									}
								} catch (e) {
//									alert(e.name + ", " + e.message);
//									alert(o.responseText);
								}
			  				},
			  				failure:function( o) {
			  				},
						scope: this    				
						};
						updateUrl += '?' + updateParms;
						var connection = new NC.util.AjaxConnection( 'GET', updateUrl, null);
						connection.executeMethod( callback);
			 		}, 
			 		'',  // update url determined later
			 		'', // not used
			 		function( form, errorDiv) // validation function
			 		{
						return true;	
			 		},
			 		'SignupError',
			 		true
				);	
				// position
				var heightY = 400;
				var widthX = 400;
				var leftX = (NC.util.Dom.getViewportWidth() - widthX)/2 ;
				signupDialog.show( leftX, topY, widthX);		
				
			},
			
	  	 	getLoginDialog: function() {
	  	 		return loginDialog;
	  	 	},
	  	 	
	  	 	getPasswordDialog: function() {
	  	 		return passwordDialog;
	  	 	},
	  	 	
	  	 	getSignupDialog: function() {
	  	 		return signupDialog;
	  	 	},
	  	 	
	  	 	signupEmployer: function(resultDivId, errorDivId) {
	 			var email = document.getElementById('Email');
	 			var emailValue = NC.util.Dom.getValue(email);
	 			var name = document.getElementById( 'Name');
	 			var nameValue = NC.util.Dom.getValue( name);
	 			var errorMessage = '';
	 			if (emailValue.length == 0) {
	 				errorMessage = 'Please enter an email address';
	 			}
	 			if (nameValue.length == 0) {
	 				if (errorMessage.length > 0) {
	 					errorMessage += '<br>';
	 				}
	 				errorMessage += 'Please enter your name';
	 			}
	 			if (errorMessage.length == 0) {
						var updateUrl = './enrollEmployer.php';
						updateUrl += '?' + 'Email=' + emailValue + '&Name=' + nameValue;
						var updater = new NC.util.AjaxUpdate( 'POST', updateUrl, resultDivId,  resultDivId, null);
						updater.doUpdate();
	 			}
	 			else {
					var errorDiv = document.getElementById( errorDivId);
					errorDiv.innerHTML = errorMessage;
					errorDiv.style.display = "block";
	 			}	
	  	 	},

	  	 	receiveEmployerInfo: function(resultDivId, errorDivId) {
	 			var email = document.getElementById('Email');
	 			var emailValue = NC.util.Dom.getValue(email);
	 			var name = document.getElementById( 'Name');
	 			var nameValue = NC.util.Dom.getValue( name);
	 			var errorMessage = '';
	 			if (emailValue.length == 0) {
	 				errorMessage = 'Please enter an email address';
	 			}
	 			if (nameValue.length == 0) {
	 				if (errorMessage.length > 0) {
	 					errorMessage += '<br>';
	 				}
	 				errorMessage += 'Please enter your name';
	 			}
	 			if (errorMessage.length == 0) {
						var updateUrl = './receiveEmployerInfo.php';
						updateUrl += '?' + 'Email=' + emailValue + '&Name=' + nameValue;
						var updater = new NC.util.AjaxUpdate( 'POST', updateUrl, resultDivId,  resultDivId, null);
						updater.doUpdate();
	 			}
	 			else {
					var errorDiv = document.getElementById( errorDivId);
					errorDiv.innerHTML = errorMessage;
					errorDiv.style.display = "block";
	 			}	
	  	 	}

  	 	}
  }	
();

})(); 	
 
