/*
Copyright (c) 2008, Security2day
Генератор/чекер паролей.
*/

if ( typeof YAHOO.security2day == "undefined" ) {
	YAHOO.namespace ("security2day");
}

if ( typeof YAHOO.security2day.Password == "undefined" ) {
		
	YAHOO.security2day.PassTools = function() {};
	
	YAHOO.security2day.PassTools.prototype.LowerCase 	= "abcdefghjkmnpqrstuvwxyz";
	YAHOO.security2day.PassTools.prototype.UpperCase 	= "ABCDEFGHIJKLMNOPQRSTUVWXYZ";	
	YAHOO.security2day.PassTools.prototype.Numbers 		= "0123456789";		
	YAHOO.security2day.PassTools.prototype.Punctuation 	= "~`!@#$%^&*()_-+={[}]:;\"'<,>.?/|\\";				
	
	YAHOO.security2day.PassTools.prototype.Generate = function( inputID, includeLowerCase, includeUpperCase, includeNumbers, includePunctuation, len ) {
		
		var pass = "";
		var symbols = [];	
		len = Math.abs(len);
		if (len==0) {			
			len = 19;
		}
		if (includeLowerCase)  		symbols[ 0 ] = this.LowerCase;
		if (includeUpperCase)  		symbols[ symbols.length ]  = this.UpperCase;	
		if (includeNumbers)  		symbols[ symbols.length ]  = this.Numbers;
		if (includePunctuation)  	symbols[ symbols.length ]  = this.Punctuation;
		
		if (symbols.length!=0) {		
			for(i=0; i<len; i++) {
				symbolType 	 = Math.floor( Math.random() * symbols.length );
				position 	 = Math.floor( Math.random() * symbols[symbolType].length ); 
				pass 		+= symbols[symbolType].charAt( position ); 
			}	
		}
		
		YAHOO.util.Dom.get( inputID ).value = pass;
	};
	
	YAHOO.security2day.PassTools.prototype.checkPass = function( input, indicatorID, width ) {
		
		var colors = [
			"#ff0000",
			"#d82700",
			"#bd4200",
			"#9f6000",
			"#807f00",
			"#60a000",
			"#41bd00",
			"#26d900",
			"#10ee00",
			"#00ff00"			
		];
		var text = input.value;
		
		var lowerCase 	= false;
		var upperCase 	= false;
		var numbers   	= false;
		var punctuation = false;
		var other		= false;
		
		var symbolTypes = 0;
		var indicatorPersent = 0;
		var indicatorFullPersent = 0;		
		var indicatorWidth = 0;
		var indicatorColor;
		var foundFlag;
		
		for (i=0; i<text.length; i++) {
			
			foundFlag = false;
			for( k=0; k<this.LowerCase.length; k++) {
				if (text.charAt(i) == this.LowerCase[k]) {
					lowerCase = true;
					foundFlag = true;
					break;
				}
			}
			for( k=0; k<this.UpperCase.length; k++) {
				if (text.charAt(i) == this.UpperCase[k]) {
					upperCase = true;
					foundFlag = true;				
					break;
				}
			}
			for( k=0; k<this.Numbers.length; k++) {
				if (text.charAt(i) == this.Numbers[k]) {
					numbers = true;
					foundFlag = true;				
					break;
				}
			}
			for( k=0; k<this.Punctuation.length; k++) {
				if (text.charAt(i) == this.Punctuation[k]) {
					punctuation = true;
					foundFlag = true;				
					break;
				}
			}	
			if (!foundFlag) {
				other = true;
			}
			 
		}
		
		if (lowerCase) symbolTypes++;
		if (upperCase) symbolTypes++;		
		if (numbers) symbolTypes++;		
		if (punctuation) symbolTypes++;		
		if (other) symbolTypes++;
		
		switch(symbolTypes) {
			case 1: indicatorPersent = 8; break;
			case 2: indicatorPersent = 9; break;			
			case 3: indicatorPersent = 10; break;			
			case 4: indicatorPersent = 11; break;			
			case 5: indicatorPersent = 12; break;			
		}
		indicatorFullPersent = indicatorPersent * text.length;
		if ( indicatorFullPersent>100 ) {
			indicatorFullPersent = 100;
		}		
		indicatorWidth = Math.floor(width*indicatorFullPersent/100);		
		
		for( i=10; i<=100; i+=10 ) {
			if ( indicatorFullPersent<=i ) {
				indicatorColor = colors[i/10 - 1];
				break;
			}
		}
		
		if (YAHOO.security2day.debugging) {
				YAHOO.log("checkPass: indicatorFullPersent="+indicatorFullPersent+", indicatorColor="+indicatorColor, "info", "YAHOO.security2day.PassTools");
		}
		
		YAHOO.util.Dom.setStyle( indicatorID, "width",  indicatorWidth + "px" );
		YAHOO.util.Dom.setStyle( indicatorID, "border-color", indicatorColor );		
	}
			
	
}
