var current = "";
window.onload = function(){
	var password = document.getElementById("password");
	var npassword = document.getElementById("npassword");
	var rnpassword = document.getElementById("rnpassword");
	var remail = document.getElementById("remail");
	var terms = document.getElementById("terms");
	var login = document.getElementById("loginbtn");
	var signup = document.getElementById("signup");
	login.onclick = senddata;
	signup.onclick = senddata;
	var pwd = document.getElementsByClassName("pwd");
	for(var i=0; i<pwd.length; i++){
		pwd[i].onfocus = passfieldfocus;
	}
	password.onblur = pmodify;
	npassword.onblur = npmodify;
	rnpassword.onblur = rnpmodify;
	var sb = document.getElementsByClassName("sb");
	for(var i=0; i<sb.length; i++){
		sb[i].onfocus = fieldfocus;
		sb[i].onblur = modify;
	}
	terms.onclick = modify;
	var monthselect = document.getElementById("month");
		monthselect.style.width = "68px";
		monthselect.options.add(new Option("Jan"));
		monthselect.options.add(new Option("Feb"));
		monthselect.options.add(new Option("Mar"));
		monthselect.options.add(new Option("Apr"));
		monthselect.options.add(new Option("May"));
		monthselect.options.add(new Option("Jun"));
		monthselect.options.add(new Option("Jul"));
		monthselect.options.add(new Option("Aug"));
		monthselect.options.add(new Option("Sep"));
		monthselect.options.add(new Option("Oct"));
		monthselect.options.add(new Option("Nov"));
		monthselect.options.add(new Option("Dec"));
	var dayselect = document.getElementById("day");
	dayselect.style.width = "54px";
	for(var i=1;i<32;i++)
		dayselect.options.add(new Option(i));
	var yearselect = document.getElementById("year");
	yearselect.style.width = "58px";
	for(var i=2012;i>=1900;i--)
		yearselect.options.add(new Option(i));
}


function modify(){
	if(this.id != "terms")
		fieldblur(this);
	submitcheck(this);
}

function pmodify(){
	passfieldblur(this);
}

function npmodify(){
	passfieldblur(this);
	submitcheck(this);
}

function rnpmodify(){
	passfieldblur(this)
	submitcheck(this);
}

function fieldfocus(){
	var to_switch = this.id;
	if(to_switch == "fn")
		current = "First Name";
	else if(to_switch == "ln")
		current = "Last Name";
	else if(to_switch == "opt")
		current = "Occupation";
	else if (to_switch == "remail")
		current = "Re-enter Email";
	else
		current = "Email";
		
	if(this.value == current)
		this.value = "";
}

function fieldblur(t){
	if(t.value == "")
		t.value = current;
}

function passfieldfocus(){
	if(this.id == "rnpassword")
		current = "Re-enter Password";
	else
		current = "Password";
	if(this.type == "text"){
		this.type = "password";
		this.value = "";
	}
}

function passfieldblur(t){
	if(t.value.length == 0){
		t.type = "text";
		t.value = current;
	}
}

function emailverify(){
	var email = document.getElementById("email");
	var remail = document.getElementById("remail");
	var toappend = document.getElementById("remailarea");
	if(email.value != remail.value){
		if(!document.getElementById("emailerror")){
			var error = document.createElement("div");
			error.id = "emailerror";
			error.innerHTML = "Emails do not match";
			toappend.appendChild(error);
		}
	}
	else{
		if(document.getElementById("emailerror")){
			toappend.removeChild(document.getElementById("emailerror"));
		}
	}
}

function ultimateverify(){
	var fname = document.getElementById("fn");
	var lname = document.getElementById("ln");
	var npassword = document.getElementById("npassword");
	var rnpassword = document.getElementById("rnpassword");
	var email = document.getElementById("email");
	var remail = document.getElementById("remail");
	var gender = document.getElementById("gender");
	var month = document.getElementById("month");
	var day = document.getElementById("day");
	var year = document.getElementById("year");
	var terms = document.getElementById("terms");

	if(fname.value != "First Name" && lname.value != "Last Name" && email.value != "Email"
		&& remail.value != "Re-enter Email" && npassword.type != "text" && npassword.value.length > 4
		&& rnpassword.type != "text" && month.value != "Month:" && day.value != "Day:" && year.value != "Year:"
		&& email.value == remail.value && npassword.value == rnpassword.value && terms.checked == true)
		return true;
	else
		return false;
}

function submitcheck(t){
	var message = "";
	var fname = document.getElementById("fn");
	var lname = document.getElementById("ln");
	var npassword = document.getElementById("npassword");
	var rnpassword = document.getElementById("rnpassword");
	var email = document.getElementById("email");
	var remail = document.getElementById("remail");
	var gender = document.getElementById("gender");
	var month = document.getElementById("month");
	var day = document.getElementById("day");
	var year = document.getElementById("year");
	var terms = document.getElementById("terms");
	
	if(fname.value == "First Name" && (t.id == "fn" || t.id == "terms"))
		message += "Please enter your first name.<br />";
	else if(lname.value == "Last Name" && (t.id == "ln" || t.id == "terms"))
		message += "Please enter your last name.<br />";
	else if(email.value == "Email" && (t.id == "email" || t.id == "terms"))
		message += "Please enter your email address.<br />";
	else if(remail.value == "Re-enter Email" && (t.id == "remail" || t.id == "terms"))
		message += "Please re-enter your email address.<br />";
	else if(email.value != remail.value && (t.id == "remail" || t.id == "terms"))
		message += "Email addresses do not match.<br />";
	else if(npassword.type == "text" && (t.id == "npassword" || t.id == "terms"))
		message += "Please enter a password.<br />";
	else if(npassword.value.length < 5 && (t.id == "npassword" || t.id == "terms"))
		message += "Password must be 5 or more characters and numbers.<br />";
	else if(rnpassword.type == "text" && (t.id == "rnpassword" || t.id == "terms"))
		message += "Please re-enter your password.<br />";
	else if(npassword.value != rnpassword.value && (t.id == "rnpassword" || t.id == "terms"))
		message += "Passwords do not match.<br />";
	else if(gender.value == "Select Sex:" && (t.id == "gender" || t.id == "terms"))
		message += "Please select your gender<br />";
	else if(month.value == "Month:" && (t.id == "month" || t.id == "terms"))
		message += "Please enter your Birthday.<br />";
	else if(day.value == "Day:" && (t.id == "day" || t.id == "terms"))
		message += "Please enter your Birthday.<br />";
	else if(year.value == "Year:" && (t.id == "year" || t.id == "terms"))
		message += "Please enter your Birthday.<br />";
	else if(terms.checked != true && t.id == "signup")
		message += "Please agree to our terms & conditions<br />";

	if(message != "")
		terms.checked = false;
	var form = document.getElementById("form");
	if(ultimateverify()){
		form.action = "newuser.php";
	}
	else{
		form.action = "#";
		var toappend = document.getElementById("invalid_form");
		if(document.getElementById("stopsubmission")){
			var error = document.getElementById("stopsubmission");
			error.innerHTML = message;
		}
		else{
			var error = document.createElement("div");
			error.id = "stopsubmission";
			error.innerHTML = message;
			toappend.appendChild(error);
		}
	}
}

function senddata(){
	var password = document.getElementById("password");
	var npassword = document.getElementById("npassword");
	var rnpassword = document.getElementById("rnpassword");
	if(password.type == "password"){
		password.value = lox(password.value);
	}
	else if(npassword.type == "password"){
		npassword.value = lox(npassword.value);
		rnpassword.value = lox(rnpassword.value);
	}
}

function lox(toenc){
	return senc.hash(menc(senc.hash(menc(toenc))));
}
 
var hex_chr = "0123456789abcdef";
function rhex(num){
  str = "";
  for(j = 0; j <= 3; j++)
    str += hex_chr.charAt((num >> (j * 8 + 4)) & 0x0F) +
           hex_chr.charAt((num >> (j * 8)) & 0x0F);
  return str;
}
function str2blks_encm(str){
  nblk = ((str.length + 8) >> 6) + 1;
  blks = new Array(nblk * 16);
  for(i = 0; i < nblk * 16; i++) blks[i] = 0;
  for(i = 0; i < str.length; i++)
    blks[i >> 2] |= str.charCodeAt(i) << ((i % 4) * 8);
  blks[i >> 2] |= 0x80 << ((i % 4) * 8);
  blks[nblk * 16 - 2] = str.length * 8;
  return blks;
}
function add(x, y){
  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  return (msw << 16) | (lsw & 0xFFFF);
}
function rol(num, cnt){
  return (num << cnt) | (num >>> (32 - cnt));
}
function cmn(q, a, b, x, s, t){
  return add(rol(add(add(a, q), add(x, t)), s), b);
}
function ff(a, b, c, d, x, s, t){
  return cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function gg(a, b, c, d, x, s, t){
  return cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function hh(a, b, c, d, x, s, t){
  return cmn(b ^ c ^ d, a, b, x, s, t);
}
function ii(a, b, c, d, x, s, t){
  return cmn(c ^ (b | (~d)), a, b, x, s, t);
}
function menc(str){
  x = str2blks_encm(str);
  a =  1732584193;
  b = -271733879;
  c = -1732584194;
  d =  271733878;
  for(i = 0; i < x.length; i += 16){
    olda = a;
    oldb = b;
    oldc = c;
    oldd = d;
    a = ff(a, b, c, d, x[i+ 0], 7 , -680876936);
    d = ff(d, a, b, c, x[i+ 1], 12, -389564586);
    c = ff(c, d, a, b, x[i+ 2], 17,  606105819);
    b = ff(b, c, d, a, x[i+ 3], 22, -1044525330);
    a = ff(a, b, c, d, x[i+ 4], 7 , -176418897);
    d = ff(d, a, b, c, x[i+ 5], 12,  1200080426);
    c = ff(c, d, a, b, x[i+ 6], 17, -1473231341);
    b = ff(b, c, d, a, x[i+ 7], 22, -45705983);
    a = ff(a, b, c, d, x[i+ 8], 7 ,  1770035416);
    d = ff(d, a, b, c, x[i+ 9], 12, -1958414417);
    c = ff(c, d, a, b, x[i+10], 17, -42063);
    b = ff(b, c, d, a, x[i+11], 22, -1990404162);
    a = ff(a, b, c, d, x[i+12], 7 ,  1804603682);
    d = ff(d, a, b, c, x[i+13], 12, -40341101);
    c = ff(c, d, a, b, x[i+14], 17, -1502002290);
    b = ff(b, c, d, a, x[i+15], 22,  1236535329);    
    a = gg(a, b, c, d, x[i+ 1], 5 , -165796510);
    d = gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
    c = gg(c, d, a, b, x[i+11], 14,  643717713);
    b = gg(b, c, d, a, x[i+ 0], 20, -373897302);
    a = gg(a, b, c, d, x[i+ 5], 5 , -701558691);
    d = gg(d, a, b, c, x[i+10], 9 ,  38016083);
    c = gg(c, d, a, b, x[i+15], 14, -660478335);
    b = gg(b, c, d, a, x[i+ 4], 20, -405537848);
    a = gg(a, b, c, d, x[i+ 9], 5 ,  568446438);
    d = gg(d, a, b, c, x[i+14], 9 , -1019803690);
    c = gg(c, d, a, b, x[i+ 3], 14, -187363961);
    b = gg(b, c, d, a, x[i+ 8], 20,  1163531501);
    a = gg(a, b, c, d, x[i+13], 5 , -1444681467);
    d = gg(d, a, b, c, x[i+ 2], 9 , -51403784);
    c = gg(c, d, a, b, x[i+ 7], 14,  1735328473);
    b = gg(b, c, d, a, x[i+12], 20, -1926607734);
    a = hh(a, b, c, d, x[i+ 5], 4 , -378558);
    d = hh(d, a, b, c, x[i+ 8], 11, -2022574463);
    c = hh(c, d, a, b, x[i+11], 16,  1839030562);
    b = hh(b, c, d, a, x[i+14], 23, -35309556);
    a = hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
    d = hh(d, a, b, c, x[i+ 4], 11,  1272893353);
    c = hh(c, d, a, b, x[i+ 7], 16, -155497632);
    b = hh(b, c, d, a, x[i+10], 23, -1094730640);
    a = hh(a, b, c, d, x[i+13], 4 ,  681279174);
    d = hh(d, a, b, c, x[i+ 0], 11, -358537222);
    c = hh(c, d, a, b, x[i+ 3], 16, -722521979);
    b = hh(b, c, d, a, x[i+ 6], 23,  76029189);
    a = hh(a, b, c, d, x[i+ 9], 4 , -640364487);
    d = hh(d, a, b, c, x[i+12], 11, -421815835);
    c = hh(c, d, a, b, x[i+15], 16,  530742520);
    b = hh(b, c, d, a, x[i+ 2], 23, -995338651);
    a = ii(a, b, c, d, x[i+ 0], 6 , -198630844);
    d = ii(d, a, b, c, x[i+ 7], 10,  1126891415);
    c = ii(c, d, a, b, x[i+14], 15, -1416354905);
    b = ii(b, c, d, a, x[i+ 5], 21, -57434055);
    a = ii(a, b, c, d, x[i+12], 6 ,  1700485571);
    d = ii(d, a, b, c, x[i+ 3], 10, -1894986606);
    c = ii(c, d, a, b, x[i+10], 15, -1051523);
    b = ii(b, c, d, a, x[i+ 1], 21, -2054922799);
    a = ii(a, b, c, d, x[i+ 8], 6 ,  1873313359);
    d = ii(d, a, b, c, x[i+15], 10, -30611744);
    c = ii(c, d, a, b, x[i+ 6], 15, -1560198380);
    b = ii(b, c, d, a, x[i+13], 21,  1309151649);
    a = ii(a, b, c, d, x[i+ 4], 6 , -145523070);
    d = ii(d, a, b, c, x[i+11], 10, -1120210379);
    c = ii(c, d, a, b, x[i+ 2], 15,  718787259);
    b = ii(b, c, d, a, x[i+ 9], 21, -343485551);
    a = add(a, olda);
    b = add(b, oldb);
    c = add(c, oldc);
    d = add(d, oldd);
  }
  return rhex(a) + rhex(b) + rhex(c) + rhex(d);
}
var senc = {};  // senc namespace
senc.hash = function(msg, utf8encode) {
  utf8encode =  (typeof utf8encode == 'undefined') ? true : utf8encode;
  if (utf8encode) msg = Utf8.encode(msg);
  var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];
  msg += String.fromCharCode(0x80);  
  var l = msg.length/4 + 2;  
  var N = Math.ceil(l/16);  
  var M = new Array(N);
  for (var i=0; i<N; i++){
    M[i] = new Array(16);
    for (var j=0; j<16; j++) {  
      M[i][j] = (msg.charCodeAt(i*64+j*4)<<24) | (msg.charCodeAt(i*64+j*4+1)<<16) | 
        (msg.charCodeAt(i*64+j*4+2)<<8) | (msg.charCodeAt(i*64+j*4+3));
    } 
  }
  M[N-1][14] = ((msg.length-1)*8) / Math.pow(2, 32); M[N-1][14] = Math.floor(M[N-1][14])
  M[N-1][15] = ((msg.length-1)*8) & 0xffffffff;
  var H0 = 0x67452301;
  var H1 = 0xefcdab89;
  var H2 = 0x98badcfe;
  var H3 = 0x10325476;
  var H4 = 0xc3d2e1f0;
  var W = new Array(80); var a, b, c, d, e;
  for (var i=0; i<N; i++) {
    for (var t=0;  t<16; t++) W[t] = M[i][t];
    for (var t=16; t<80; t++) W[t] = senc.ROTL(W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16], 1);
    a = H0; b = H1; c = H2; d = H3; e = H4;
    for (var t=0; t<80; t++){
      var s = Math.floor(t/20); 
      var T = (senc.ROTL(a,5) + senc.f(s,b,c,d) + e + K[s] + W[t]) & 0xffffffff;
      e = d;
      d = c;
      c = senc.ROTL(b, 30);
      b = a;
      a = T;
    }
    H0 = (H0+a) & 0xffffffff; 
    H1 = (H1+b) & 0xffffffff; 
    H2 = (H2+c) & 0xffffffff; 
    H3 = (H3+d) & 0xffffffff; 
    H4 = (H4+e) & 0xffffffff;
  }
  return senc.toHexStr(H0) + senc.toHexStr(H1) + 
    senc.toHexStr(H2) + senc.toHexStr(H3) + senc.toHexStr(H4);
}
senc.f = function(s, x, y, z){
  switch (s) {
  case 0: return (x & y) ^ (~x & z);           
  case 1: return x ^ y ^ z;                   
  case 2: return (x & y) ^ (x & z) ^ (y & z);  
  case 3: return x ^ y ^ z;                  
  }
}
senc.ROTL = function(x, n){
  return (x<<n) | (x>>>(32-n));
}
senc.toHexStr = function(n){
  var s="", v;
  for (var i=7; i>=0; i--) { v = (n>>>(i*4)) & 0xf; s += v.toString(16); }
  return s;
}
var Utf8 = {};  
Utf8.encode = function(strUni){
  var strUtf = strUni.replace(
      /[\u0080-\u07ff]/g,  
      function(c) { 
        var cc = c.charCodeAt(0);
        return String.fromCharCode(0xc0 | cc>>6, 0x80 | cc&0x3f); }
    );
  strUtf = strUtf.replace(
      /[\u0800-\uffff]/g,  
      function(c) { 
        var cc = c.charCodeAt(0); 
        return String.fromCharCode(0xe0 | cc>>12, 0x80 | cc>>6&0x3F, 0x80 | cc&0x3f); }
    );
  return strUtf;
}
Utf8.decode = function(strUtf){
  var strUni = strUtf.replace(
      /[\u00e0-\u00ef][\u0080-\u00bf][\u0080-\u00bf]/g,  
      function(c) {  
        var cc = ((c.charCodeAt(0)&0x0f)<<12) | ((c.charCodeAt(1)&0x3f)<<6) | ( c.charCodeAt(2)&0x3f); 
        return String.fromCharCode(cc); }
    );
  strUni = strUni.replace(
      /[\u00c0-\u00df][\u0080-\u00bf]/g,             
      function(c) {  
        var cc = (c.charCodeAt(0)&0x1f)<<6 | c.charCodeAt(1)&0x3f;
        return String.fromCharCode(cc); }
    );
  return strUni;
}
