if(!jsFrontend) { var jsFrontend = new Object(); }

jsFrontend = {
	init: function() {
		$('input:checkbox').change(jsFrontend.changeCheckbox);
		$('input:checkbox').each(jsFrontend.changeCheckbox);
		$('input.inputSubmit').click(jsFrontend.calculate);
	},
	
	calculate: function(evt) {
		evt.preventDefault();

		// remove previous errors
		$('.errorElement').removeClass('errorElement');
		$('#formError:visible').fadeOut();

		// get values
		var length = parseInt($('#length').val());
		var lowercase = $('#lowercase').is(':checked');
		var uppercase = $('#uppercase').is(':checked');
		var numbers = $('#numbers').is(':checked');
		var specialCharacters = $('#specialCharacters').is(':checked');
		var count = parseInt($('#count').val());
		
		// validate
		var errors = false;
		if(length <= 0) { $('#length').addClass('errorElement'); errors = true; }
		if(count <= 0) { $('#count').addClass('errorElement'); errors = true; }
		
		// errors?
		if(errors) {
			$('#formError:hidden').fadeIn();
			$('#results:visible').fadeOut();
		}
		
		// no errors
		else {
			var results = '';
			
			// generate passes
			for(var i=0; i<count; i++) results += jsFrontend.generatePass(length, uppercase, lowercase, numbers, specialCharacters) + "\n";
			
			// set
			$('#textarea').val(results);
			
			// show
			$('#results:hidden').fadeIn();
		}
	},

	changeCheckbox: function(evt) {
		var id = $(this).attr('id');
		if($(this).is(':checked')) { $('#'+ id + 'Message').css('text-decoration', 'none'); }
		else { $('#'+ id + 'Message').css('text-decoration', 'line-through'); }
	},
	
	generatePass: function(length, uppercase, lowercase, numbers, specialchars) {
		var v = new Array('a', 'e','u', 'ae', 'ea');
		var c = new Array('b', 'c', 'd', 'g', 'h', 'j', 'k', 'm', 'n', 'p', 'r', 's', 't', 'u', 'v', 'w', 'tr', 'cr', 'fr', 'dr', 'wr', 'pr', 'th', 'ch', 'ph', 'st');
		var n = new Array();
		n['a'] = 4; n['b'] = 8; n['e'] = 3; n['g'] = 6; n['l'] = 1; n['o'] = 0; n['s'] = 5; n['t'] = 7; n['z'] = 2;
		var s = new Array();
		s['a'] = '@'; s['i'] = '!'; s['c'] = 'ç'; s['s'] = '$'; s['g'] = '&'; s['h'] = '#'; s['l'] = '|'; s['x'] = '%';
		var pass = '';
		var tmp = '';
		for (i = 0; i < length; i++) tmp += c[Math.floor(Math.random() * c.length)]+v[Math.floor(Math.random() * v.length)];
		for (i = 0; i < length; i++) {
			if(Math.floor(Math.random()*2)) pass += tmp.substr(i,1).toUpperCase();
			else pass += tmp.substr(i,1);
		}	
		if(numbers) {
			tmp = '';
			for(var i in pass) {
				if(typeof n[pass[i].toLowerCase()] != 'undefined' && (Math.floor(Math.random()*4)%3)==1) tmp += n[pass[i].toLowerCase()];
				else tmp += pass[i];
			}
			pass = tmp;
		}
		// replace some chars with special characters
		if(specialchars) {
			tmp = '';
			for(var i in pass) {
				if(typeof s[pass[i].toLowerCase()] != 'undefined' && (Math.floor(Math.random()*4)%2)) tmp += s[pass[i].toLowerCase()];
				else tmp += pass[i];
			}
			pass = tmp;
		}
		if(!uppercase) pass = pass.toLowerCase();
		if(!lowercase) pass = pass.toUpperCase();
		return pass;
	},
	
	// end
	eoo: true
}

$(document).ready(function() { jsFrontend.init(); });
