/*
Copyright (c) 2008, Security2day
Усиленный алгоритм MD5
*/

if ( typeof YAHOO.security2day == "undefined" ) {
	YAHOO.namespace ("security2day");
}

if ( typeof YAHOO.security2day.MyMD5 == "undefined" ) {
	YAHOO.security2day.MyMD5 = function() {};
	
	YAHOO.security2day.MyMD5.prototype.getMyMD5 = function( text ) {
		
		// создание объекта MessageDigest для вычисления MD5-хэша
		var simpleMD5 = new com.oclib.javascript.security.MessageDigest();
		
		// соль
		var salt		= "123!#&%asgfHTA";
		
		// массив спецсимволов
		var specSymbols = ["~", "!", "@", "#", "$", "%", "^", "&", "*", "?"];	
		
		// "солёный" хэш: md5( md5(salt) + md5(text) )
		var saltHash    = simpleMD5.getMD5( simpleMD5.getMD5(salt) + simpleMD5.getMD5(text) );	
		//YAHOO.log("saltHash: " + saltHash, "info", "YAHOO.security2day.MyMD5");
		
		// md5-хэш от строки text
		var plainHash   = simpleMD5.getMD5( text );		
		
		// сюда будет записан усиленный MD5-хэш
		var resultHash = "";		
		
		// вычисление усиленного MD5-хэша
		for( i=0; i<saltHash.length; i++) {
			if (parseInt(plainHash.charAt(i)) >= 0 && parseInt(plainHash.charAt(i)) <= 9) {
				// если очередной символ в plainHash - цифра
				resultHash += specSymbols[ parseInt(plainHash.charAt(i)) ];
			} else {			
				if ( plainHash.charCodeAt(i) >= 97 && plainHash.charCodeAt(i) <= 100) {
					// если очередной символ в plainHash от a до d
					resultHash += plainHash.charAt(i).toUpperCase();
				} else {
					resultHash += saltHash.charAt(i);
				}
			}
		}
		
		resultHash = simpleMD5.getMD5( resultHash );
		// запись в лог
		if (YAHOO.security2day.debugging) {
			YAHOO.log("MyMD5: " + resultHash, "info", "YAHOO.security2day.MyMD5");	
		}
		
		return resultHash;
	}
}
