$(document).ready(function() {
	
	var name;
	var word;
	var month;
	var day;
	var year;
  

	String.prototype.trim = function() {
		return this.replace(/^\s+/, "").replace(/\s+$/, "");
	};

	String.prototype.escape_html = function() {
		return this.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
	};
	
	$("input.hover").focus(function() {
		$(this).addClass("focus");
	}).blur(function() {
		$(this).removeClass("focus");
	});

	$("select").focus(function() {
		$(this).addClass("focus");
	}).blur(function() {
		$(this).removeClass("focus");
	});

	$("#copy").click(function() {
		if (window.clipboardData) {
			window.clipboardData.setData("Text", $("#result h3 span").text());
		}
		else {
			var flashcopier = "flashcopier";
			
			if (!document.getElementById(flashcopier)) {
			  	var divholder = document.createElement("div");
			  	divholder.id = flashcopier;
			  	document.body.appendChild(divholder);
			}
			
			var divinfo = '<embed src="flash/clipboard.swf" FlashVars="clipboard='+escape($("#result h3 span").text())+'" width="0" height="0" type="application/x-shockwave-flash"></embed>';
			
			document.getElementById(flashcopier).innerHTML = "";
			document.getElementById(flashcopier).innerHTML = divinfo;
		}
		
		return false;
	});
	
	$("#create").click(function() {
		name  = $("#name").val().toLowerCase().trim().escape_html();
		word  = $("#word").val().toLowerCase().trim().escape_html();
		month = $("#month").val();
		day   = $("#day").val();
		year  = $("#year").val();
		
		if (name == "" || word == "" || month == "" || day == "" || year == "") {
			alert("Please complete all of the fields. Thanks ");
			$("#name").focus();
			
			return false;
		}
		
		$("#result h3 span").text(createPassword());
		$("#result").show("normal");
		$("form").hide("normal");
		
		return false;
	});
	
	$("#new").click(function() {
                var sht;
                sht=createPassword();
		$("#result h3 span").hide();
		$("#result h3 span").text(sht).fadeIn("slow");
		
		return false;
	});

	$("#again").click(function() {
		$("form").show("normal");
		$("#result").hide("normal");	
		
		return false;
	});
	
	$("#sha1").click(function(sht) {
		
                var shr;
                shr = $("#name").val().toLowerCase().trim().escape_html()
                shr = SHA1(shr).toUpperCase();
		$("#result h3 span").text(shr).show("slow").fadeIn("slow");
		return false;
	});

	function createPassword()
	{
		switch (Math.floor(Math.random() * 26)) {
			case 0:
				return getWord(1) + randomDate() + getWord(2);
				break;
				
			case 1:
				return getWord(1) + randomDate() + getName(1);
				break;
				
			case 2:
				return getWord(1) + randomDate() + getName(2);
				break;
				
			case 3:
				return getWord(2) + randomDate() + getName(1);
				break;
				
			case 4:
				return getWord(2) + randomDate() + getName(2);
				break;
			
			case 5:
				return getName(1) + randomDate() + getName(2);
				break;
				
			case 6:
				return getName(1) + randomDate() + getWord(1);
				break;
				
			case 7:
				return getName(1) + randomDate() + getWord(2);
				break;
				
			case 8:
				return getName(2) + randomDate() + getWord(1);
				break;
				
			case 9:
				return getName(2) + randomDate() + getWord(2);
				break;
			
			case 10:
				return getName(1) + getWord(1) + randomDate();
				break;
				
			case 11:
				return getName(1) + getWord(2) + randomDate();
				break;
				
			case 12:
				return getName(2) + getWord(1) + randomDate();
				break;
			
			case 13:
				return getName(2) + getWord(2) + randomDate();
				break;
				
			case 14:
				return getWord(1) + getName(1) + randomDate();
				break;
				
			case 15:
				return getWord(1) + getName(2) + randomDate();
				break;
				
			case 16:
				return getWord(2) + getName(1) + randomDate();
				break;
			
			case 17:
				return getWord(2) + getName(2) + randomDate();
				break;
			
			case 18:
				return randomDate() + getName(1) + getWord(1);
				break;
				
			case 19:
				return randomDate() + getName(1) + getWord(2);
				break;
				
			case 20:
				return randomDate() + getName(2) + getWord(1);
				break;
			
			case 21:
				return randomDate() + getName(2) + getWord(2);
				break;
				
			case 22:
				return randomDate() + getWord(1) + getName(1);
				break;
				
			case 23:
				return randomDate() + getWord(1) + getName(2);
				break;
				
			case 24:
				return randomDate() + getWord(2) + getName(1);
				break;
			
			case 25:
				return randomDate() + getWord(2) + getName(2);
				break;
		}
	}
	
	function randomDate()
	{
		var dates = [];
		
		dates[0] = month;
		dates[1] = day;
		dates[2] = year;
		dates[3] = year.substr(0, 2);
		dates[4] = year.substr(2, 2);
		
		return dates[Math.floor(Math.random() * 5)];
	}
	
	function getName(i)
	{
		if (name.length > 3) {
			return (i == 1) ? name.substr(0, 3) : name.substr(-3, 3);
		}
		else {
			return name;
		}
	}
	
	function getWord(i)
	{
		if (word.length > 3) {
			return (i == 1) ? word.substr(0, 3) : word.substr(-3, 3);
		}
		else {
			return word;
		}
	}

});