/*********************************************************
**
**   Plugin by Small Hadron Collider
**   http://www.smallhadroncollider.com
**
**   Distributed under a Creative Commons by-sa License
**   http://creativecommons.org/licenses/by-sa/3.0/
**
**   For usage see:
**   http://plugins.jquery.com/project/chronoStrength
**
*********************************************************/

jQuery.fn.chronoStrength = function(options)
{
	var defaults =
	{  
		calculationsPerSecond: 10000000,
		placeInto: 'none'
	};  
	
	var options = jQuery.extend(defaults, options); 
	
	if (options.placeInto == 'none')
	{
		jQuery(this).after('<div class="chronostrength-box"></div>');
		var placeInto = 'div.chronostrength-box';
	}
	else
	{
		var placeInto = options.placeInto;
	}
	
	jQuery(this).keyup(function(event)
	{
		if (event.keyCode == 27 || event.charCode == 27)
		{
			$(this).val("");
		}
		
		var password = $(this).val();
		
		if (password != "")
		{			
			var calculationsPerSecond = options.calculationsPerSecond;
			strength = chronoStrengthPasswordStrength(password, calculationsPerSecond);
			
			jQuery(placeInto).html(strength);
		}
		else
		{
			jQuery(placeInto).html('');
		}
	});
};

jQuery.chronoStrength = function(password)
{
	return chronoStrengthPasswordStrength(password, 10000000);
}

jQuery.chronoStrengthWithCustomSpeed = function(password, calculationsPerSecond)
{
	return chronoStrengthPasswordStrength(password, calculationsPerSecond);
}

function chronoStrengthPasswordStrength(password, calculationsPerSecond)
{
	var length = password.length;
	
	if (length > 2 && length < 9)
	{
		for (var i=0; i<chronoStrengthArrayOfPasswords[length].length; i++)
		{
			if (password.toLowerCase() == chronoStrengthArrayOfPasswords[length][i])
			{
				return 'Uno de los 500 passwords mas comunes';
			}
		}
	}
	
	var possibleCharacters = 0;
	if (password.match(/[a-z]/)) { possibleCharacters += 26; }
	if (password.match(/[A-Z]/)) { possibleCharacters += 26; }
	if (password.match(/\d+/)) { possibleCharacters += 10; }
	if (password.match(/[!,@,#,$,%,^,&,*,?,_,~,-,(,)]/) ) {possibleCharacters += 13};
	
	var possibleCombinations = Math.pow(possibleCharacters, password.length);
	var computerTimeInSecs = possibleCombinations / calculationsPerSecond;
	
	var arrayOfPeriods = new Array();
	arrayOfPeriods['minuto'] = 60;
	arrayOfPeriods['hora'] = arrayOfPeriods['minuto'] * 60;
	arrayOfPeriods['dia'] = arrayOfPeriods['hora'] * 24;
	arrayOfPeriods['año'] = arrayOfPeriods['dia'] * 365.25;
	arrayOfPeriods['mil año'] = arrayOfPeriods['año'] * 1000;
	arrayOfPeriods['millones de año'] = arrayOfPeriods['mil año'] * 1000;
	arrayOfPeriods['miles de millones de año'] = arrayOfPeriods['millones de año'] * 1000;
	arrayOfPeriods['billones de año'] = arrayOfPeriods['miles de millones de año'] * 1000;
	arrayOfPeriods['trillones de año'] = arrayOfPeriods['billones de año'] * 1000;
	arrayOfPeriods['cuatrillones de año'] = arrayOfPeriods['trillones de año'] * 1000;
	arrayOfPeriods['quintillones de año'] = arrayOfPeriods['cuatrillones de año'] * 1000;
	arrayOfPeriods['sextillones de año'] = arrayOfPeriods['quintillones de año'] * 1000;
	arrayOfPeriods['septillones de año'] = arrayOfPeriods['sextillones de año'] * 1000;
	arrayOfPeriods['octillones de año'] = arrayOfPeriods['septillones de año'] * 1000;
	
	var periodType = 'segundo';
	var strength = '';
	
	if (computerTimeInSecs < 1) { strength = computerTimeInSecs+" segundos";}
	else
	{
		var intoThousands = 's';
		var intoMinutes = '';
		var newTime = Math.floor(computerTimeInSecs);
		
		for (var i in arrayOfPeriods)
		{
			if (computerTimeInSecs < arrayOfPeriods[i]) { break; }
			else
			{
				if (i == "miles de año") { intoThousands = ''; }
				if (i == "hora") { intoMinutes = 'Unas '; }
				if (i == "dia") { intoMinutes = 'Unos '; }
				if (i == "año") { intoMinutes = 'Unos '; }
				if (i == "minuto") { intoMinutes = 'Unos '; }
				
				newTime = Math.floor(computerTimeInSecs / arrayOfPeriods[i]);
				periodType = i;
			}
		}
		
		if (newTime == 1)
		{
						
			var aType = 'a ';
			
			if (periodType == 'hora' || periodType == 'septillon de año')
			{
				aType = 'un ';
			}
			
			strength = "Un "+periodType;
			strength = strength.replace("Un mil", "mil");
      strength = strength.replace("Un trillones", "Un trillon");
      strength = strength.replace("Un cuatrillones", "Un cuatrillon");
      strength = strength.replace("Un quintillones", "Un quintillon");
      strength = strength.replace("Un sextillones", "Un sextillon");
      strength = strength.replace("Un septillones", "Un septillon");
      strength = strength.replace("Un octillones", "Un octillon");

			//strength = "Unos2 "+aType+periodType;
		}
		else
		{
			newTime += '';
			
			var regex = /(\d+)(\d{3})/;
			
			while (regex.test(newTime))
			{
				newTime = newTime.replace(regex, '$1' + ',' + '$2');
			}
			
			strength = intoMinutes+newTime+" "+periodType+intoThousands;

		}
	}
	
	return strength;
};

var chronoStrengthArrayOfPasswords = new Array();

chronoStrengthArrayOfPasswords[3] = ['dios','sexo'];

chronoStrengthArrayOfPasswords[4] = ['1234','jesus','1313','star','golf','bear','dave','pass','aaaa','6969','jake','matt','1212','fish','fuck','porn','4321','2000','4128','test','shit','love','baby','cunt','mark','3333','john','sexy','5150','4444','2112','fred','mike','1111','tits','paul','mine','king','fire','5555','slut','girl','2222','asdf','time','7777','rock','xxxx','ford','dick','bill','wolf','blue','alex','cock','beer','eric','6666','jack'];

chronoStrengthArrayOfPasswords[5] = ['playa','great','black','pussy','12345','frank','tiger','japan','money','naked','11111','angel','stars','apple','porno','steve','viper','horny','ou812','kevin','buddy','teens','young','jason','lucky','girls','lover','brian','kitty','bubba','happy','cream','james','xxxxx','booty','kelly','boobs','penis','eagle','white','enter','chevy','smith','chris','green','sammy','super','magic','power','enjoy','scott','david','video','qwert','paris','women','juice','dirty','music','peter','bitch','house','hello','billy','movie'];

chronoStrengthArrayOfPasswords[6] = ['123456','vacanciones','guitar','butter','jaguar','united','turtle','muffin','cooper','nascar','redsox','dragon','zxcvbn','qwerty','tomcat','696969','654321','murphy','987654','amanda','brazil','wizard','hannah','lauren','master','doctor','eagle1','gators','squirt','shadow','mickey','mother','monkey','bailey','junior','nathan','abc123','knight','alexis','iceman','fuckme','tigers','badboy','bonnie','purple','debbie','angela','jordan','andrea','spider','harley','ranger','dakota','booger','iwantu','aaaaaa','lovers','player','flyers','suckit','hunter','beaver','morgan','matrix','boomer','runner','batman','scooby','edward','thomas','walter','helpme','gordon','tigger','jackie','casper','robert','booboo','boston','monica','stupid','access','coffee','braves','xxxxxx','yankee','saturn','buster','gemini','barney','apples','soccer','rabbit','victor','august','hockey','peanut','tucker','killer','canada','george','johnny','sierra','blazer','andrew','spanky','doggie','232323','winter','zzzzzz','brandy','gunner','beavis','compaq','horney','112233','carlos','arthur','dallas','tennis','sophie','ladies','calvin','shaved','pepper','giants','surfer','fender','samson','austin','member','blonde','blowme','fucked','daniel','donald','golden','golfer','cookie','summer','bronco','racing','sandra','hammer','pookie','joseph','hentai','joshua','diablo','birdie','maggie','sexsex','little','biteme','666666','topgun','ashley','willie','sticky','cowboy','animal','silver','yamaha','qazwsx','fucker','justin','skippy','orange','banana','lakers','marvin','merlin','driver','rachel','marine','slayer','angels','asdfgh','bigdog','vagina','apollo','cheese','toyota','parker','maddog','travis','121212','london','hotdog','wilson','sydney','martin','dennis','voodoo','ginger','magnum','action','nicole','carter','erotic','sparky','jasper','777777','yellow','smokey','dreams','camaro','xavier','teresa','freddy','secret','steven','jeremy','viking','falcon','snoopy','russia','taylor','nipple','111111','eagles','131313','winner','tester','123123','miller','rocket','legend','flower','theman','please','oliver','albert'];

chronoStrengthArrayOfPasswords[7] = ['carmen','rosebud','chelsea','amateur','7777777','diamond','tiffany','jackson','scorpio','cameron','testing','shannon','madison','mustang','bond007','letmein','michael','gateway','phoenix','thx1138','raiders','forever','peaches','jasmine','melissa','gregory','cowboys','dolphin','charles','cumshot','college','bulldog','1234567','ncc1701','gandalf','leather','cumming','hunting','charlie','rainbow','asshole','bigcock','fuckyou','jessica','panties','johnson','naughty','brandon','anthony','william','ferrari','chicken','heather','chicago','voyager','yankees','rangers','packers','newyork','trouble','bigtits','winston','thunder','welcome','bitches','warrior','panther','broncos','richard','8675309','private','zxcvbnm','nipples','blondes','fishing','matthew','hooters','patrick','freedom','fucking','extreme','blowjob','captain','bigdick','abgrtyu','chester','monster','maxwell','arsenal','crystal','rebecca','pussies','florida','phantom','scooter','success'];

chronoStrengthArrayOfPasswords[8] = ['firebird','password','12345678','steelers','mountain','computer','baseball','xxxxxxxx','football','qwertyui','jennifer','danielle','sunshine','starwars','whatever','nicholas','swimming','trustno1','midnight','princess','startrek','mercedes','superman','bigdaddy','maverick','einstein','dolphins','hardcore','redwings','cocacola','michelle','victoria','corvette','butthead','marlboro','srinivas','internet','redskins','11111111','access14','rush2112','scorpion','iloveyou','samantha','mistress'];
