// JavaScript Document

var seed;
var login;
var doSave;
var hash1;

function checkEnter(e){ //e is event object passed from function invocation
	var characterCode //literal character code will be stored in this variable
	
	if(e && e.which){ //if which property of event object is supported (NN4)
		e = e;
		characterCode = e.which ;//character code is contained in NN4's which property
	}
	else{
		e = event;
		characterCode = e.keyCode; //character code is contained in IE's keyCode property
	}
	
	if(characterCode == 13){ //if generated character code is equal to ascii 13 (if enter key)
		checkLoginForm(); //submit the form
		return false;
	}
	else{
		return true;
	}
}

function checkLoginForm(){
  hideError();
  // get 'userid' field
  var usrid=$('userid');
  if(!usrid){return false};
  if(!usrid.value){
    showError('Enter your login name');
    return false;
  };
  login = usrid.value;
  //checkbox
  var chk=$('save');
  if(!chk){return false;};
  if(chk.checked){
    doSave='true';
  }
  else {
    doSave='false';
  }
  // get 'password' field
  var psw=$('passwd');
  if(!psw){return false};
  if(!psw.value){
    showError('Enter your password');
    return false;
  };
  // make MD5 hash of password and concatenate challenge value
  // next calculate MD5 hash of combined values
  hash1=hex_md5(trim(psw.value));
  //alert (hash1);
  // clear password field
  psw.value='';
  //now start authentication
  sendLogin();
  return true;
}

function sendLogin() { 
  //first get seed
  new Ajax.Request('login/loginForm.php', 
			{
			method:'post',
			parameters: {action: 'getseed', myid: Math.ceil(10000*Math.random())},
			onSuccess: function(transport){
				seed =transport.responseText;
				if(seed != null && seed != ''){
				  var hash2 = hex_md5(hash1+seed);
				  sendLogin2(hash2)
				}
			},     
			onFailure: function(){}
			}); 
}

function sendLogin2(hash2){
	new Ajax.Request('login/loginForm.php', 
			{
			method:'post',
			parameters: {action: 'login', user: login, hash: hash2, save: doSave, myid: Math.ceil(10000*Math.random())},
			onSuccess: function(transport){//alert(transport.responseText);
				if(transport.responseText=='authenticated') {
					loginPassedCallback();
				}
				else if(transport.responseText == 'log-in failed'){
					seed = null;
					showError('Login failed');
				}
				else if(transport.responseText == 'expired'){
					seed = null;
					showError('Your online account has expired');
				}
				else if(!transport.responseText.match(" ")){
					  createCookie("saved", transport.responseText, 30);
					  loginPassedCallback();
				}
			},     
			onFailure: function(){}
			}); 
}
/*
 * display error messages
 */
function showError(message){
  var p=document.createElement('p');
  p.id='logerror';
  p.appendChild(document.createTextNode(message));
  $('logmsg').appendChild(p);
}
/*
 * hide error messages
 */
function hideError(){
  var err =$('logerror');
  if(err != null && $('logmsg') != null) {$('logmsg').removeChild(err);}
}

//OVERLOAD THIS!!!
function loginPassedCallback() {
	var date = new Date();
	date.setTime(date.getTime()-(24*60*60*1000));
	document.cookie = "bookmarks=; expires="+date.toGMTString()+"; path=/";
	new Ajax.Request('login/loginForm.php', 
			{
			method:'post',
			parameters: {action: 'hello', myid: Math.ceil(10000*Math.random())},
			onSuccess: function(transport){
				$("logon").innerHTML = transport.responseText;
  				location.reload(true);
			},     
			onFailure: function(){}
			}); 
}

function logOff(){ 
	var date = new Date();
	date.setTime(date.getTime()-(24*60*60*1000));
	document.cookie = "bookmarks=; expires="+date.toGMTString()+"; path=/";

	new Ajax.Request('login/loginForm.php', 
			{
			method:'post',
			parameters: {action: 'logoff', myid: Math.ceil(10000*Math.random())},
			onSuccess: function(transport){
				eraseCookie("saved");
  				location.reload(true);
			},     
			onFailure: function(){}
			}); 
}

function changePassword(){
	$('cpasswd').style.backgroundColor='#ffffff';
	if(emptyField($('userid'))){alert("Please enter your email."); return;}
	if($('userid').value=='azure@yale.edu'){alert("Password change is not permitted."); return;}
	if(!validateEmail($('userid').value)){alert("Please enter valid email."); return;}
	if(emptyField($('passwd'))){alert("Please enter old password."); return;}
	if(emptyField($('npasswd'))){alert("Please enter new password."); return;}
	if(emptyField($('cpasswd')) || $('cpasswd').value!=$('npasswd').value){$('cpasswd').style.backgroundColor='#ffe7eb'; alert("Please confirm new password."); return; }
	hash1=hex_md5(trim($('passwd').value));
	
	new Ajax.Request('login/changePassword.php', 
	{
		method:'post',
		parameters: {action: 'getseed', myid: Math.ceil(10000*Math.random())},
		onSuccess: function(transport){
			seed = transport.responseText;
			if(seed != null && seed != ''){
			  var hash2 = hex_md5(hash1+seed);
			  sendLogin3(hash2)
			}
		},     
		onFailure: function(){}
	}); 
}

function sendLogin3(hash2){
	new Ajax.Request('login/changePassword.php', 
			{
			method:'post',
			parameters: {action: 'change', user: $('userid').value, npasswd: $('npasswd').value, hash: hash2},
			onSuccess: function(transport){
				if(transport.responseText=='authenticated') {
					$('act_respond').innerHTML = '<div style="text-align:center"><br />Password has been changed successfully.<br /><br /><button type="button" onclick="closeItem()" class="login">Close</button></div>'; 
				  }
				  else {
					seed = null;
					$('err_respond').innerHTML = "Action failed.";
				  }
			},     
			onFailure: function(){}
			}); 
}

function restorePassword(){
	if(emptyField($('email'))){alert("Please enter your email."); return}
	if($('email').value=='azure@yale.edu'){alert("Password restore is not permitted."); return;}
	if(!validateEmail($('email').value)){alert("Please enter valid email."); return}
	if(emptyField($('security_code'))){alert("Please enter security code."); return}
	new Ajax.Request('login/restorePassword.php', 
		{
		method:'post',
		parameters: $('act_form').serialize(true),
		onSuccess: function(transport){
			//alert(transport.responseText);
			switch(transport.responseText){
				case '0': 
				case '1': 
					$('act_respond').innerHTML = '<div style="text-align:center"><br />Password has been sent to your email.<br /><br /><button type="button" onclick="closeItem()" class="login">Close</button></div>'; break;				
				case '2': 
					$('err_respond').innerHTML = 'Wrong security code. Please, try again.'; break;
				case '3':
					$('err_respond').innerHTML = 'The error has occured. Please, try again later.'; break;
				case '4':
					$('err_respond').innerHTML = 'The email is wrong.'; break;
				case '5':
					$('err_respond').innerHTML = 'Password restore is not permitted.'; break;
				case '6':
					$('err_respond').innerHTML = 'Your online account has expired.'; break;
				default: 
					break;
			}
			
		},     
		onFailure: function(){}
		}); 
}

function openItem(act){
	
	if(!$('passview')){
		var domwindow=document.createElement("div"); //create dhtml window div
		domwindow.id='passview';
		domwindow.className=(act=='restore') ? "dhtmlwindow" : "dhtmlwindow2";
		$("dhtmlwindowholder").appendChild(domwindow);
		$('passview').innerHTML = (act=='restore') ? '<div id="act_respond" style="padding:20px;"><form id="act_form"><input type="hidden" name="origin" id="origin" value="azure" /><table><tr><td><span style="color:#FF0000;">*</span>E-mail: </td><td><input type="text" id="email" name="email" /></td></tr><tr><td valign="middle"><span style="color:#FF0000;">*</span>Security code: </td><td valign="middle" style="padding-bottom:9px"><input id="security_code" name="security_code" type="text" style="margin-bottom:3px" /> &nbsp;&nbsp; <img src="include/CaptchaSecurityImages.php?width=100&height=30&characters=5&rel='+Math.random()+'" /></td></tr><tr><td></td><td><button type="button" onclick="restorePassword()" class="login">Submit</button>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<button type="button" onclick="closeItem()" class="login">Cancel</button></td></tr></table></form><br /><div id="err_respond" style="text-align:center; color:#FF0000;"></div><br /></div>' : 
		'<div id="act_respond" style="padding:20px;"><form id="act_form"><input type="hidden" name="origin" id="origin" value="azure" /><table cellpadding="5"><tr><td width="100px"><span style="color:#FF0000;">*</span>E-mail: </td><td><input type="text" style="width:160px" id="userid" name="userid" /></td></tr>'+
		'<tr><td><span style="color:#FF0000;">*</span>Old password: </td><td><input type="password" style="width:160px" id="passwd" name="passwd" /></td></tr>'+
		'<tr><td><span style="color:#FF0000;">*</span>New password: </td><td><input type="password" style="width:160px" id="npasswd" name="npasswd" /></td></tr>'+
		'<tr><td><span style="color:#FF0000;">*</span>Confirm password: </td><td><input type="password" style="width:160px" id="cpasswd" name="cpasswd" /></td></tr>'+
		'<tr><td></td><td><button type="button" onclick="changePassword()" class="login">Submit</button>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<button type="button" onclick="closeItem()" class="login">Cancel</button></td></tr></table></form><br /><div id="err_respond" style="text-align:center; color:#FF0000;"></div><br /></div>';
	}
}

function closeItem(){
	$("passview").innerHTML = '';
	$("dhtmlwindowholder").removeChild($("passview"));
}

function validateEmail(email) {
	var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	if(reg.test(email) == false) return false;
	return true;
}

function emptyField(textObj){
	if (textObj.value.length == 0) return true;
	for (var i=0; i<textObj.value.length; i++) {
		var ch = textObj.value.charAt(i); if (ch != ' ' && ch != '\t') return false;	
	}
	return true;	
}

function createCookie(name,value,days) {
	if (days && days != 0) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	//alert("Cookie:"+name+"="+value+expires+"; path=/");
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}
/*
function testMD5() {
  hideError();
  var psw=document.getElementById('passwd');
  if(!psw){alert("no passwd");return};
  if(!psw.value){
    alert("no input");
    showError('Enter your password', psw);
  };
  
  var m=hex_md5(psw.value);
  var p=document.createElement('p');
  p.id='error';
  p.appendChild(document.createTextNode(m));
  document.getElementById('msg').appendChild(p);
    
  var parameters = "action=testmd5&pwd="+psw.value;
  var url = 'login/loginForm.php'; 
  var loader=new net.ContentLoader(url , parameters, getMD5CallBack);
  
}

function getMD5CallBack() {
  alert(this.req.responseText);
}
*/
function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}


