/***********************************************************************************************************
 * com.parolemanager.javascript.main.Main
 * Location: http://www.parolemanager.com/library/com/parolemanager/javascript/main/20070327/Main.js
 * © Parole Manager (http://www.parolemanager.com/)
***********************************************************************************************************/
var account;
var accounts;
var blowfish;
var blowfishPassword;
var dom;
var debuging = false; //true;// 
var tracing = false; //true;// 
var events;
var lastPid = 0;
var lastForm = "";
var lastVote = 0;
var messageDigest;
var numeralSystem;
var passwordGenerator;
var passwordLog;
var remoteAccount;
var remoteAccountLogins;
var paroleManager = "parolemanager.com";
var str;
var uid;

var factorial = function(n) {
 var result = 1;
 for (var i = 2; i <= n; i++) {result *= i;}
 return result;
}; 

var cancelAdd = function() {
 document.getElementById("emailAdd").value = "";
 document.getElementById("accontNameAdd").value = "";
 document.getElementById("noteAdd").value = "";
 document.getElementById("serviceAdd").value = "";
 document.getElementById("passwordAdd").value = "";
 document.getElementById("uidAdd").value = "";
 document.getElementById("urlAdd").value = "";
 dom.doHidden("frameAddPassword");
 dom.doHidden("frameEditPassword");
 dom.doHidden("framePassword");
 dom.doHidden("frameViewPassword");
 dom.doVisible("framePasswordList");
 return 1;
};

var cancelEdit = function(e) {
 document.getElementById("accontNameEdit").value = "";
 document.getElementById("urlEdit").value = "";
 document.getElementById("serviceEdit").value = "";
 document.getElementById("uidEdit").value = "";
 document.getElementById("passwordEdit").value = "";
 document.getElementById("emailEdit").value = "";
 document.getElementById("noteEdit").value = "";
 dom.doHidden("frameAddPassword");
 dom.doHidden("frameEditPassword");
 dom.doHidden("framePassword");
 dom.doHidden("framePasswordList");
 dom.doVisible("frameViewPassword");
 return 1;
}

var deleteView = function() {
 //var accountName = document.getElementById("accountNameView");	
 var accountName = dom.getTextContent("accountNameView");	
 accountName = unescape(escape(accountName).replace(/%00/g, ""));
 //document.getElementById("accountNameView").appendChild(document.createTextNode(accountName));
 if(debuging) {passwordLog.println("deleteView accountName="+accountName);};
 if(debuging) {passwordLog.println("deleteView escape(accountName)="+escape(accountName));};
 var encryptedAccountName = blowfish.encrypt(accountName);
 if(debuging) {passwordLog.println("deleteView encryptedAccountName="+encryptedAccountName);};
 var account = remoteAccount.getAccounts().getAccountByEncryptedName(encryptedAccountName);
 remoteAccount.setUid(uid);
 remoteAccount.setUrl("/cgi-bin/library/com/parolemanager/perl/passwordKeeper.cgi");
 remoteAccount.deleteAccount(account, deleteViewSuccess, deleteViewError);
 return 1;
};

var deleteViewConfirm = function() {
 var answer = confirm(dom.getTextContent("confirmDelet"));
 if (answer){
  deleteView();
 } else {
  // Do nothing;
 };
};

var deleteViewError = function() {
 return -1;
}

var deleteViewSuccess = function() {
 accounts = remoteAccount.getAccounts();
 return goPasswordsList();
}

var getLogins = function() {
 if(debuging) {passwordLog.println("Main.js:getLogins is running");};
 dom.doHidden("accounttList");
 dom.doHidden("accounttList");
 dom.doHidden("getLogins");
 var website = str.trim(document.getElementById("website").value);
 website = website.replace(/^ */g,"");
 website = website.replace(/ *$/g,"");
 if(website == "") {
  document.getElementById("getLoginsEmpty").style.color = "red"; 
  return -1;
 };
 document.getElementById("getLoginsEmpty").style.color = "black";
 if(debuging) {passwordLog.println("Main.js:getLogins go to remoteAccontLogins");};
 remoteAccountLogins.getPasswords(website, getLoginsSuccess, getLoginsError);
 return 1;
};

var getLoginsSuccess = function() {
 dom.doHidden("accounttList");
 dom.removeChilds("passs");
 var accounts = remoteAccountLogins.getAccounts();
 for(var i = 0; i < accounts.length; i++) {
  var account = accounts[i];
  var divElementAccount = document.createElement("div");
  divElementAccount.className = "accountt";
  divElementAccount.id = "a"+account["id"];
  
  var spanElementAccountRes = document.createElement("span"); 
  var spanElementAccountGood = document.createElement("span");
  spanElementAccountGood.className = "hidden";
  spanElementAccountGood.id = "good"+account["id"];
  spanElementAccountGood.appendChild(document.createTextNode(account["good"]));
  spanElementAccountRes.appendChild(spanElementAccountGood);
  var spanElementAccountBad = document.createElement("span");
  spanElementAccountBad.className = "hidden";
  spanElementAccountBad.id = "bad"+account["id"];
  spanElementAccountBad.appendChild(document.createTextNode(account["bad"]));
  spanElementAccountRes.appendChild(spanElementAccountBad);
  var spanElementAccountVotes = document.createElement("span");
  spanElementAccountVotes.className = "hidden";
  spanElementAccountVotes.id = "votes"+account["id"];
  spanElementAccountVotes.appendChild(document.createTextNode(account["votes"]));
  spanElementAccountRes.appendChild(spanElementAccountVotes);
  spanElementAccountRes.appendChild(document.createTextNode(dom.getTextContent("authenticityTitle")));
  var spanElementAccountResRes = document.createElement("span");
  spanElementAccountResRes.id = "res"+account["id"];
  var res = account["res"];
  res = Math.floor(res*100);
  spanElementAccountResRes.appendChild(document.createTextNode(res));
  spanElementAccountRes.appendChild(spanElementAccountResRes);
  spanElementAccountRes.appendChild(document.createTextNode("% ("));
  var spanElementAccountPlus = document.createElement("span");
  spanElementAccountPlus.className = "action";
  spanElementAccountPlus.id = "pl"+account["id"];
  spanElementAccountPlus.appendChild(document.createTextNode("+"));
  spanElementAccountRes.appendChild(spanElementAccountPlus);
  spanElementAccountRes.appendChild(document.createTextNode("/"));
  var spanElementAccountMinus = document.createElement("span");
  spanElementAccountMinus.className = "action";
  spanElementAccountMinus.id = "mn"+account["id"];
  spanElementAccountMinus.appendChild(document.createTextNode("-"));
  spanElementAccountRes.appendChild(spanElementAccountMinus);  
  spanElementAccountRes.appendChild(document.createTextNode("); "));
  divElementAccount.appendChild(spanElementAccountRes); 
  
  var spanElementUidString = document.createElement("span"); 
  spanElementUidString.className = "loginTd";  
  spanElementUidString.appendChild(document.createTextNode(dom.getTextContent("loginTitle")+account["uid"]+"; "+dom.getTextContent("passTitle")+account["password"]));
  divElementAccount.appendChild(spanElementUidString); 
  
  document.getElementById("passs").appendChild(divElementAccount);
 };
 dom.doHidden("getLoginsNot");
 dom.doVisible("accounttList");
 goSearchLogins();
 return 1;
};

var getLoginsError = function() {
 dom.doHidden("accounttList");
 dom.doVisible("getLoginsNot");
 goSearchLogins();
 return 1;
};

var getPassword = function() {
 var stringForPassword = document.getElementById("moto").value+document.getElementById("domain").value+document.getElementById("email").value;
 var convertedPassword = getPasswordSimple(stringForPassword);
 var length = document.getElementById("length").value;
 var shortPassword = convertedPassword.substr(0, length);
 dom.changeTextContent("password", shortPassword);
 return 1;
};

var getPasswordSimple = function(string) {
 var longPassword = messageDigest.md5(string).toUpperCase();
 var a = longPassword.substr(0, 8);
 var b = longPassword.substr(8, 8);
 var c = longPassword.substr(16, 8);
 var d = longPassword.substr(24, 8);
 a = numeralSystem.convert(a, 16, 62);
 b = numeralSystem.convert(b, 16, 62);
 c = numeralSystem.convert(c, 16, 62);
 d = numeralSystem.convert(d, 16, 62);
 return ""+a+""+b+""+c+""+d;
};

var getPasswords = function() {
 var passwordsElement = document.getElementById("passwords");
 passwordGenerator.setLength(document.getElementById("length").value);
 passwordGenerator.setIncludeLowerCase(document.getElementById("alpha").checked);
 passwordGenerator.setIncludeUpperCase(document.getElementById("mixedcase").checked);
 passwordGenerator.setIncludeNumbers(document.getElementById("numeric").checked);
 passwordGenerator.setIncludePunctuation(document.getElementById("punctuation").checked);
 passwordGenerator.setIncludeSimilar(!document.getElementById("nosimilar").checked);
 for(var i = 0; i < document.getElementById("quantity").value; i++) {
  var pass = passwordGenerator.getWord();
  var divElement = document.createElement("div");
  divElement.appendChild(document.createTextNode(pass));
  passwordsElement.appendChild(divElement);
 };
 return 1;
};

var getPasswordsList = function() {
 remoteAccount.setUid(uid);
 remoteAccount.setUrl("/cgi-bin/library/com/parolemanager/perl/passwordKeeper.cgi");
 remoteAccount.getAccountsList(getPasswordsListSuccess, getPasswordsListError);
 return 1;
};

var getPasswordsListError = function() {	
 return -1;
};

var getPasswordsListSuccess = function() {
 return goPasswordsList();
};

var getNecessaryLogins = function() {
 return remoteAccountLogins.getNecessaryPasswords(getNecessaryLoginsSuccess, getNecessaryLoginsError);
};

var getNecessaryLoginsSuccess = function() {
 dom.removeChilds("passNecessary");
 var accounts = remoteAccountLogins.getAccountsNecessary();
 for(var i = 0; i < accounts.length; i++) {
  var account = accounts[i];
  var divElementAccount = document.createElement("div");
  divElementAccount.className = "accountNecessary";
  divElementAccount.id = "an"+i;//account["id"]; 
  divElementAccount.appendChild(document.createTextNode(account["url"]));  
  document.getElementById("passNecessary").appendChild(divElementAccount);
 };
 return goNecessaryLogins();
};

var getNecessaryLoginsError = function() {
 return -1;
};

var getTestLogins = function() {
 return remoteAccountLogins.getTestPasswords(getTestLoginsSuccess, getTestLoginsError);
};

var getTestLoginsSuccess = function() {
 dom.removeChilds("passTest");
 var accounts = remoteAccountLogins.getAccountsTest();
 for(var i = 0; i < accounts.length; i++) {
  var account = accounts[i];
  var divElementAccount = document.createElement("div");
  divElementAccount.className = "accountTest";
  divElementAccount.id = "at"+account["id"];
  
  var spanElementAccountRes = document.createElement("span");
  //spanElementAccountRes.className = "resTd";  
  var spanElementAccountGood = document.createElement("span");
  spanElementAccountGood.className = "hidden";
  spanElementAccountGood.id = "goodt"+account["id"];
  spanElementAccountGood.appendChild(document.createTextNode(account["good"]));
  spanElementAccountRes.appendChild(spanElementAccountGood);
  var spanElementAccountBad = document.createElement("span");
  spanElementAccountBad.className = "hidden";
  spanElementAccountBad.id = "badt"+account["id"];
  spanElementAccountBad.appendChild(document.createTextNode(account["bad"]));
  spanElementAccountRes.appendChild(spanElementAccountBad);
  var spanElementAccountVotes = document.createElement("span");
  spanElementAccountVotes.className = "hidden";
  spanElementAccountVotes.id = "votest"+account["id"];
  spanElementAccountVotes.appendChild(document.createTextNode(account["votes"]));
  spanElementAccountRes.appendChild(spanElementAccountVotes);
  spanElementAccountRes.appendChild(document.createTextNode(dom.getTextContent("authenticityTitle")));
  var spanElementAccountResRes = document.createElement("span");
  spanElementAccountResRes.id = "rest"+account["id"];
  var res = Math.floor(account["res"]*100);
  spanElementAccountResRes.appendChild(document.createTextNode(res));
  spanElementAccountRes.appendChild(spanElementAccountResRes);
  spanElementAccountRes.appendChild(document.createTextNode("% ("));
  var spanElementAccountPlus = document.createElement("span");
  spanElementAccountPlus.className = "action";
  spanElementAccountPlus.id = "plt"+account["id"];
  spanElementAccountPlus.appendChild(document.createTextNode("+"));
  spanElementAccountRes.appendChild(spanElementAccountPlus);
  spanElementAccountRes.appendChild(document.createTextNode("/"));
  var spanElementAccountMinus = document.createElement("span");
  spanElementAccountMinus.className = "action";
  spanElementAccountMinus.id = "mnt"+account["id"];
  spanElementAccountMinus.appendChild(document.createTextNode("-"));
  spanElementAccountRes.appendChild(spanElementAccountMinus);  
  spanElementAccountRes.appendChild(document.createTextNode("); "));
  divElementAccount.appendChild(spanElementAccountRes); 
  
  var spanElementUidString = document.createElement("span"); 
  spanElementUidString.className = "loginTd";  
  spanElementUidString.appendChild(document.createTextNode(dom.getTextContent("urlTitle")+account["url"]+"; "+dom.getTextContent("loginTitle")+account["uid"]+"; "+dom.getTextContent("passTitle")+account["password"]));
  divElementAccount.appendChild(spanElementUidString); 
  
  document.getElementById("passTest").appendChild(divElementAccount);
 };
 return goTestLogins();
};

var getTestLoginsError = function() {
 return -1;
};

var goAddPassword = function() {
 document.getElementById("unicAdd").style.color = "black";
 dom.doHidden("frameEditPassword");
 dom.doHidden("framePassword");
 dom.doHidden("framePasswordList");
 dom.doHidden("frameViewPassword");
 dom.doVisible("frameAddPassword");
 return 1;
};

var goEditPassword = function() {
 document.getElementById("unicEdit").style.color = "black";
 var accountName = dom.getTextContent("accountNameView");	
 accountName = unescape(escape(accountName).replace(/%00/g, ""));
 document.getElementById("accontNameEdit").value = accountName;
 if(debuging) {passwordLog.println("goEditPassword accountName="+accountName);};
 if(debuging) {passwordLog.println("goEditPassword escape(accountName)="+escape(accountName));};
 var encryptedAccountName = blowfish.encrypt(accountName);
 if(debuging) {passwordLog.println("goEditPassword encryptedAccountName="+encryptedAccountName);};
 var account = remoteAccount.getAccounts().getAccountByEncryptedName(encryptedAccountName);
 dom.changeTextContent("accountEncriptedNameEdit", account.getEncryptedAccountName());
 document.getElementById("urlEdit").value = account.getUrl();
 document.getElementById("serviceEdit").value = account.getService();
 document.getElementById("uidEdit").value = account.getUid();
 document.getElementById("passwordEdit").value = account.getPassword();
 document.getElementById("emailEdit").value = account.getEmail();
 document.getElementById("noteEdit").value = account.getNote();
 dom.doHidden("frameAddPassword");
 dom.doHidden("framePassword");
 dom.doHidden("framePasswordList");
 dom.doHidden("frameViewPassword");
 dom.doVisible("frameEditPassword");
 return 1;
};

var goNecessaryLogins = function() {
 dom.doHidden("frameSearchLogins");
 dom.doHidden("frameSubmitLogin");
 dom.doHidden("frameSubmitLoginNecessary");
 dom.doHidden("frameTestLogins");
 dom.doVisible("frameNecessaryLogins");
};

var goPasswordsListInit = function() {
 var masterPassword = document.getElementById("moto").value;
 var masterEmail = document.getElementById("email").value;
 if(!masterPassword || masterPassword == "" || masterPassword.length < 8 || !masterEmail || masterEmail == "" || masterEmail.length < 8) {
  document.getElementById("framePasswordNote").style.color = "red";
  return -1;
 };
 goWait();
 blowfish.init(masterPassword+masterEmail);
 remoteAccount.setBlowfish(blowfish);
 uid = blowfish.encrypt(masterEmail)+getPasswordSimple(paroleManager+masterPassword+masterEmail);
 if(uid.length > 255) {
  uid = uid.substr(0, 255);
 };
 if(debuging) {
  passwordLog.println("masterPassword+masterEmail="+masterPassword+masterEmail);
  passwordLog.println("uid="+uid);
 };
 return getPasswordsList();
};


var goPasswordsList = function() {
 if(tracing) {passwordLog.println("goPasswordsList is runing...");};
 dom.removeChilds("pass");
 if(remoteAccount.getAccounts().getCount() > 0) {
  for(var i=0; i<remoteAccount.getAccounts().getCount(); i++) {
   var accountName = remoteAccount.getAccounts().getAccountByIndex(i).getAccountName();
   var accountElement = document.createElement("div");
   accountElement.className = "account";
   accountElement.appendChild(document.createTextNode(accountName));
   document.getElementById("pass").appendChild(accountElement);
  };
  dom.doHidden("emptyPassList");
  dom.doVisible("editPassListRulez");
  dom.doVisible("passList");
 } else {
  dom.doHidden("passList");
  dom.doHidden("editPassListRulez");
  dom.doVisible("emptyPassList");
 };
 dom.doHidden("frameAddPassword");
 dom.doHidden("frameEditPassword");
 dom.doHidden("framePassword");
 dom.doHidden("frameViewPassword");
 dom.doHidden("frameWait");
 dom.doVisible("framePasswordList");
 return 1;
};

var goPasswordView = function(e) {
 var targetElement;
 if (e.target) {
  targetElement = e.target;
 } else if (e.srcElement) {
  targetElement = e.srcElement;
 };
 if (targetElement.nodeType == 3) {targetElement = targetElement.parentNode;}; // defeat Safari bug
 var accountName = dom.getTextContent(targetElement);	
 accountName = unescape(escape(accountName).replace(/%00/g, ""));
 dom.changeTextContent("accountNameView", accountName);
 if(debuging) {passwordLog.println("accountName="+accountName);};
 if(debuging) {passwordLog.println("escape(accountName)="+escape(accountName));};
 var encryptedAccountName = blowfish.encrypt(accountName);
 if(debuging) {passwordLog.println("encryptedAccountName="+encryptedAccountName);};
 var account = remoteAccount.getAccounts().getAccountByEncryptedName(encryptedAccountName);
 dom.changeTextContent("urlView", account.getUrl());
 dom.changeTextContent("serviceView", account.getService());
 dom.changeTextContent("uidView", account.getUid());
 dom.changeTextContent("passwordView", account.getPassword());
 dom.changeTextContent("emailView", account.getEmail());
 document.getElementById("noteView").value = account.getNote();
 dom.doHidden("frameAddPassword");
 dom.doHidden("frameEditPassword");
 dom.doHidden("framePassword");
 dom.doHidden("framePasswordList");
 dom.doVisible("frameViewPassword");
 return 1;
}

var goSearchLogins = function() {
 document.getElementById("submitLoginErrorEmpty").style.color = "black";
 dom.doHidden("submitLoginError"); 
 
 dom.doHidden("frameNecessaryLogins");
 dom.doHidden("frameSubmitLogin");
 dom.doHidden("frameSubmitLoginNecessary");
 dom.doHidden("frameTestLogins");
 dom.doVisible("getLogins");
 dom.doVisible("frameSearchLogins");
};

var goSubmitLogin = function() {
 dom.doHidden("frameNecessaryLogins");
 dom.doHidden("frameSearchLogins");
 dom.doHidden("frameTestLogins");
 dom.doHidden("frameSubmitLoginNecessary");
 dom.doVisible("submitLogin");
 dom.doVisible("frameSubmitLogin");
};

var goSubmitLoginNecessary  = function(e) {
 var targetElement;
 if (e.target) {
  targetElement = e.target;
 } else if (e.srcElement) {
  targetElement = e.srcElement;
 };
 if (targetElement.nodeType == 3) {targetElement = targetElement.parentNode;}; // defeat Safari bug
 
 document.getElementById("submitLoginNecessarySite").value = dom.getTextContent(targetElement.id);
 dom.doHidden("frameNecessaryLogins");
 dom.doHidden("frameSearchLogins");
 dom.doHidden("frameTestLogins");
 dom.doHidden("frameSubmitLogin");
 dom.doVisible("submitLoginNecessary");
 dom.doVisible("frameSubmitLoginNecessary");
};

var goTestLogins = function() {
 dom.doHidden("frameNecessaryLogins");
 dom.doHidden("frameSearchLogins");
 dom.doHidden("frameSubmitLogin");
 dom.doHidden("frameSubmitLoginNecessary");
 dom.doVisible("frameTestLogins");
};

var goWait = function() {
 dom.doHidden("frameAddPassword");
 dom.doHidden("frameEditPassword");
 dom.doHidden("framePassword");
 dom.doHidden("framePasswordList");
 dom.doHidden("frameViewPassword");
 dom.doVisible("frameWait");
};

var includeSet = function(testSet, fullSet) {
 for(var i = 0; i < testSet.length; i++) {
  if(fullSet.indexOf(testSet.charAt(i)) > -1) {return true;};
 };
 return false;
};

var init = function() {
 if(com.oclib.javascript.util.Dom 
	&& com.oclib.javascript.util.Log
	&& com.oclib.javascript.util.Str
	&& com.oclib.javascript.math.NumeralSystem
	&& com.oclib.javascript.security.MessageDigest 
	&& com.oclib.javascript.security.encryption.Blowfish 
	&& ntld.wordgenerator.javascript.PasswordGenerator
	&& com.parolemanager.javascript.Account
	&& com.parolemanager.javascript.Accounts
	&& com.parolemanager.javascript.RemoteAccount
	&& com.parolemanager.javascript.RemoteAccountLogins) {
  accounts = new com.parolemanager.javascript.Accounts();
  blowfish = new com.oclib.javascript.security.encryption.Blowfish();
  blowfish.setLongChar(true);
  dom = new com.oclib.javascript.util.Dom();
  str = new com.oclib.javascript.util.Str();
  messageDigest = new com.oclib.javascript.security.MessageDigest();
  numeralSystem = new com.oclib.javascript.math.NumeralSystem();
  passwordGenerator = new ntld.wordgenerator.javascript.PasswordGenerator();
  remoteAccount = new com.parolemanager.javascript.RemoteAccount();
  remoteAccountLogins = new com.parolemanager.javascript.RemoteAccountLogins();
  remoteAccountLogins.setUrl("/cgi-bin/library/com/parolemanager/perl/freePassword.cgi");
  if(debuging || tracing) {
   passwordLog = new com.oclib.javascript.util.Log("logElement", com.oclib.javascript.util.Log.SYMPLE_TEXT_LOG_TYPE, com.oclib.javascript.util.Log.BOTTOM_DOCUMENT_LOG_PLACE);
   passwordLog.println("Log is loaded");
   remoteAccount.setDebugging(debuging);remoteAccount.setTracing(tracing);remoteAccount.setLog(passwordLog);
   remoteAccount.accounts.setDebugging(debuging);remoteAccount.accounts.setTracing(tracing);remoteAccount.accounts.setLog(passwordLog);
   remoteAccountLogins.setDebugging(debuging);remoteAccountLogins.setTracing(tracing);remoteAccountLogins.setLog(passwordLog);
  };
 } else {
  return -1;
 };
 events.addEventListener("cancelAdd", "click", cancelAdd, false);
 events.addEventListener("cancelEdit", "click", cancelEdit, false);
 events.addEventListener("cancelView", "click", goPasswordsList, false);
 events.addEventListener("deleteView", "click", deleteViewConfirm, false);
 events.addEventListener("editView", "click", goEditPassword, false);
 events.addEventListener("getLogins", "click", getLogins, false);
 events.addEventListener("getPassword", "click", getPassword, false);
 events.addEventListener("getPasswords", "click", getPasswords, false);
 events.addEventListener("goAddPassword", "click", goAddPassword, false);
 events.addEventListener("goPasswordsList", "click", goPasswordsListInit, false);
 events.addEventListener("necessaryLoginCancel", "click", goSearchLogins, false);
 events.addEventListener("necessaryLogins", "click", getNecessaryLogins, false);
 events.addEventListener("pass", "click", goPasswordView, false);
 events.addEventListener("passs", "click", votePassword, false);
 events.addEventListener("passNecessary", "click", goSubmitLoginNecessary, false);
 events.addEventListener("passTest", "click", votePasswordTest, false);
 events.addEventListener("resetPasswords", "click", resetPasswords, false);
 events.addEventListener("saveAdd", "click", saveAdd, false);
 events.addEventListener("saveEdit", "click", saveEdit, false);
 events.addEventListener("submitALogin", "click", goSubmitLogin, false);
 events.addEventListener("submitLogin", "click", submitLogin, false);
 events.addEventListener("submitLoginCancel", "click", goSearchLogins, false);
 events.addEventListener("submitLoginNecessary", "click", submitLoginNecessary, false);
 events.addEventListener("submitLoginNecessaryCancel", "click", goNecessaryLogins, false);
 events.addEventListener("testLogins", "click", getTestLogins, false);
 //events.addEventListener("testLogins", "click", goTestLogins, false);
 events.addEventListener("testLoginCancel", "click", goSearchLogins, false);
 events.addEventListener("testPassword", "click", testPassword, false);
 events.addEventListener("website", "keypress", function(e) {if(e.keyCode != 13 && e.which != 13) {return -1;}; getLogins(e);}, false);
 dom.doVisible("getLogins");
 dom.doVisible("goPasswordsListDiv");
 dom.doVisible("getPasswordDiv");
 dom.doVisible("getPasswordsDiv");
 dom.doVisible("searchLoginsButtonsPanel");
 dom.doVisible("testPasswordDiv");
 return 1;
};

var notIncludeSet = function(testSet, fullSet) {
 for(var i = 0; i < testSet.length; i++) {
  if(fullSet.indexOf(testSet.charAt(i)) == -1) {return true;};
 };
 return false;
};

var resetPasswords = function() {
 dom.clearTextContent("passwords");
 return 1;
};

var saveAdd = function() {
 var accountName = str.normalize(document.getElementById("accontNameAdd").value);
 accountName = accountName.replace(/^ */g,"");
 accountName = accountName.replace(/ *$/g,"");
 if(debuging) {passwordLog.println("saveAdd accountName="+accountName);};
 var account = new com.parolemanager.javascript.Account();
 account.setBlowfish(blowfish);
 account.setEmail(document.getElementById("emailAdd").value); 
 if(debuging) {passwordLog.println("saveAdd account.getEmail="+account.getEncryptedEmail());};
 account.setAccountName(accountName); 
 var encryptedAccountName = account.getEncryptedAccountName();
 if(debuging) {passwordLog.println("saveAdd account.getEncryptedAccountName="+account.getEncryptedAccountName());};
 if(debuging) {passwordLog.println("saveAdd accounts.containAccountEncryptedName(encryptedAccountName)="+accounts.containAccountEncryptedName(encryptedAccountName));};
 //if(debuging) {passwordLog.println("accounts.getAccountByEncryptedName(accountEncryptedName)="+accounts.getAccountByEncryptedName(accountEncryptedName));};
 if(accountName == "" || accounts.containAccountEncryptedName(encryptedAccountName) > 0) {
  document.getElementById("unicAdd").style.color = "red";	 
  return -1;
 }; 
 account.setNote(document.getElementById("noteAdd").value);  
 account.setService(document.getElementById("serviceAdd").value); 
 account.setPassword(document.getElementById("passwordAdd").value); 
 account.setUid(document.getElementById("uidAdd").value); 
 account.setUrl(document.getElementById("urlAdd").value); 
 remoteAccount.setUid(uid);
 remoteAccount.setUrl("/cgi-bin/library/com/parolemanager/perl/passwordKeeper.cgi");
 remoteAccount.addAccount(account, saveAddSuccess, saveAddError);
 return 1;
};

var saveAddSuccess = function() {
 document.getElementById("emailAdd").value = "";
 document.getElementById("accontNameAdd").value = "";
 document.getElementById("noteAdd").value = "";
 document.getElementById("serviceAdd").value = "";
 document.getElementById("passwordAdd").value = "";
 document.getElementById("uidAdd").value = "";
 document.getElementById("urlAdd").value = "";
 return goPasswordsList();
};

var saveAddError = function() {
};

var saveEdit = function() {
 var accountName = str.normalize(document.getElementById("accontNameEdit").value);
 accountName = accountName.replace(/^ */g,"");
 accountName = accountName.replace(/ *$/g,"");
 var accountEncriptedNameEdit = dom.getTextContent("accountEncriptedNameEdit");
 var account = new com.parolemanager.javascript.Account();
 account.setBlowfish(blowfish);
 account.setEmail(document.getElementById("emailEdit").value); 
 if(debuging) {passwordLog.println("account.getEmail="+account.getEncryptedEmail());};
 account.setAccountName(accountName); 
 // if(debuging) {passwordLog.println("account.getEncryptedAccountName="+account.getEncryptedAccountName());};
 var encryptedAccountName = account.getEncryptedAccountName();
 if(accountEncriptedNameEdit != encryptedAccountName && (accountName == "" || accounts.containAccountEncryptedName(encryptedAccountName) > 0)) {
  document.getElementById("unicEdit").style.color = "red";	 
  return -1;
 }; 
 account.setNote(document.getElementById("noteEdit").value);  
 account.setService(document.getElementById("serviceEdit").value); 
 account.setPassword(document.getElementById("passwordEdit").value); 
 account.setUid(document.getElementById("uidEdit").value); 
 account.setUrl(document.getElementById("urlEdit").value); 
 remoteAccount.setUid(uid);
 remoteAccount.setUrl("/cgi-bin/library/com/parolemanager/perl/passwordKeeper.cgi");
 remoteAccount.editAccount(accountEncriptedNameEdit, account, saveEditSuccess, saveEditError);
 return 1;
};

var saveEditSuccess = function() {
 accounts = remoteAccount.getAccounts();
 dom.changeTextContent("accountEncriptedNameEdit", "");
 document.getElementById("emailEdit").value = "";
 document.getElementById("accontNameEdit").value = "";
 document.getElementById("noteEdit").value = "";
 document.getElementById("serviceEdit").value = "";
 document.getElementById("passwordEdit").value = "";
 document.getElementById("uidEdit").value = "";
 document.getElementById("urlEdit").value = "";
 return goPasswordsList();
};

var saveEditError = function() {
};

var submitLoginNecessary = function(e) {
 submitLogin(e, "n");
};

var submitLogin = function(e, n) {
 dom.doHidden("submitLoginError");  
 dom.doHidden("submitLoginNecessaryError");
 dom.doHidden("submitLogin");
 dom.doHidden("submitLoginNecessary");
 var submitLoginSite;
 var submitLoginUsername;
 var submitLoginPassword;
 if(debuging) {passwordLog.println("Main.js:votePasswordSuccess submitLoginSite:"+"n"+n);};
 if(n == "n") {
  lastForm = "submitLoginNecessary";
  submitLoginSite = str.trim(document.getElementById("submitLoginNecessarySite").value);
  submitLoginUsername = str.trim(document.getElementById("submitLoginNecessaryUsername").value);
  submitLoginPassword = str.trim(document.getElementById("submitLoginNecessaryPassword").value);
 } else {
  lastForm = "submitLogin";
  n = "";
  submitLoginSite = str.trim(document.getElementById("submitLoginSite").value);
  submitLoginUsername = str.trim(document.getElementById("submitLoginUsername").value);
  submitLoginPassword = str.trim(document.getElementById("submitLoginPassword").value);
 };
 submitLoginSite = submitLoginSite.replace(/^ */g,"");
 submitLoginSite = submitLoginSite.replace(/ *$/g,"");
 submitLoginUsername = submitLoginUsername.replace(/^ */g,"");
 submitLoginUsername = submitLoginUsername.replace(/ *$/g,"");
 submitLoginPassword = submitLoginPassword.replace(/^ */g,"");
 submitLoginPassword = submitLoginPassword.replace(/ *$/g,"");
 if(debuging) {passwordLog.println("Main.js:votePasswordSuccess submitLoginSite:"+"lastForm: "+lastForm);};
 if(debuging) {passwordLog.println("Main.js:votePasswordSuccess submitLoginSite:"+"submitLoginSite"+submitLoginSite+"submitLoginUsername"+submitLoginUsername+"; submitLoginPassword="+submitLoginPassword);};
 if(submitLoginSite == "" || submitLoginUsername == "" || submitLoginPassword == "") {
  document.getElementById("submitLoginErrorEmpty").style.color = "red"; 
  document.getElementById("submitLoginNecessaryErrorEmpty").style.color = "red"; 
  return -1;
 };
 document.getElementById("submitLoginErrorEmpty").style.color = "black";
 document.getElementById("submitLoginNecessaryErrorEmpty").style.color = "black";
 var successF = "";
 var errorF = "";
 var website = document.getElementById("website").value;
 website = website.replace(/^ */g,"");
 website = website.replace(/ *$/g,"");
 if(debuging) {passwordLog.println("Main.js:votePasswordSuccess submitLoginSite:"+"submitLoginSite"+submitLoginSite+"; website="+website);};
 if(lastForm == "submitLogin") {
  errorF = submitLoginError;
  if(submitLoginSite != website) {
   successF = goSearchLogins;
  } else {
   successF = getLogins;
  };
 } else {
  successF = goNecessaryLogins;
  errorF = submitLoginNecessaryError;
 };
 remoteAccountLogins.addPassword(submitLoginSite, submitLoginUsername, submitLoginPassword, successF, errorF);
};

var submitLoginError = function() {
 dom.doVisible("submitLoginError");  
};

var submitLoginNecessaryError = function() {
 dom.doVisible("submitLoginNecessaryError");  
};

var testPassword = function() {
 var samplePassword = document.getElementById("samplePassword").value;
 var maxCrack = 1;
 var variants = 0;
 var notIt = false;
 if(includeSet(samplePassword, passwordGenerator.getNumbers())) {variants += passwordGenerator.getNumbers().length;};
 if(includeSet(samplePassword, passwordGenerator.getLowerCaseCharacters())) {variants += passwordGenerator.getLowerCaseCharacters().length;};
 if(includeSet(samplePassword, passwordGenerator.getUpperCaseCharacters())) {variants += passwordGenerator.getUpperCaseCharacters().length;};
 if(includeSet(samplePassword, passwordGenerator.getPunctuation())) {variants += passwordGenerator.getPunctuation().length;};
 var allSet = passwordGenerator.getNumbers()+passwordGenerator.getLowerCaseCharacters()+passwordGenerator.getUpperCaseCharacters()+passwordGenerator.getPunctuation();
 if(notIncludeSet(samplePassword, allSet)) {variants = 256*256;};
 maxCrack = Math.pow(variants, samplePassword.length);
 dom.changeTextContent("maxCrack", maxCrack);
 dom.changeTextContent("quality", Math.floor(Math.log(maxCrack)));
 dom.changeTextContent("daysLocale", Math.floor(maxCrack/1024/1024/1024/60/60/24)+1);
 dom.changeTextContent("daysRemote", Math.floor(maxCrack/1024/1024/60/60/24)+1);
 return 1;
};

var votePasswordTest = function(e) {
 votePassword(e, "t");
};

var votePassword = function(e, t) {
 var targetElement;
 if (e.target) {
  targetElement = e.target;
 } else if (e.srcElement) {
  targetElement = e.srcElement;
 };
 if (targetElement.nodeType == 3) {targetElement = targetElement.parentNode;}; // defeat Safari bug
 if(debuging) {passwordLog.println("Main.js:votePassword targetElement.id="+targetElement.id);};
 var tid = targetElement.id;
 var pid;
 if(t == "t") {
  lastForm = "passTest";
  pid = tid.slice(3);
 } else {
  lastForm = "SearchLogins";
  pid = tid.slice(2);
 };
 if(debuging) {passwordLog.println("Main.js:votePassword lastForm="+lastForm);};
 if(debuging) {passwordLog.println("Main.js:votePassword pid="+pid);};
 var preVote = tid.slice(0, 2);
 if(debuging) {passwordLog.println("Main.js:votePassword preVote="+preVote);};
 var vote = 0;
 if(preVote == "pl") {
  vote = 1;
 } else {
  vote = 0;
 };
 if(lastPid == pid && lastVote == vote) {return -1;};
 lastPid = pid;
 lastVote = vote;
 remoteAccountLogins.votePassword(pid, vote, votePasswordSuccess, votePasswordError);
};

var votePasswordSuccess = function() {
 var t = "";
 if(lastForm == "passTest") {
  t = "t";
  dom.doHidden("a"+t+lastPid);
  return -1;
 };
 var good = dom.getTextContent("good"+t+lastPid);
 if(debuging) {passwordLog.println("Main.js:votePasswordSuccess good element id:"+"good"+t+lastPid+"; good="+good);};
 var bad = dom.getTextContent("bad"+t+lastPid);
 if(debuging) {passwordLog.println("Main.js:votePasswordSuccess bad element id:"+"bad"+t+lastPid+"; bad="+bad);};
 var votes = dom.getTextContent("votes"+t+lastPid);
 if(debuging) {passwordLog.println("Main.js:votePasswordSuccess bad element id:"+"votes"+t+lastPid+"; votes="+votes);};
 votes++;
 dom.changeTextContent("votes"+t+lastPid, votes);
 if(lastVote == 1) {
  good++;
  dom.changeTextContent("good"+t+lastPid, good);
 } else {
  bad++;
  dom.changeTextContent("bad"+t+lastPid, bad);
 };
 var res = (good-bad)/votes;
 res = Math.floor(res*100);
 if(debuging) {passwordLog.println("Main.js:votePasswordSuccess res element id:"+"res"+lastPid+"; res="+res);};
 dom.changeTextContent("res"+t+lastPid, res);
 return 1;
};

var votePasswordError = function() { 
};

if(com.oclib.javascript.lang.Root && com.oclib.javascript.util.Events) {
 events = new com.oclib.javascript.util.Events();
 events.addEventListener(window, "load", init, false);
};
