/*
Copyright (c) 2008, Security2day
Класс для шифровки/расшифровки с помощью 
симметричного алгоритма Blowfish.
Длина ключа 56
*/

if ( typeof YAHOO.security2day == "undefined" ) {
	YAHOO.namespace ("security2day");
}

if ( typeof YAHOO.security2day.Crypt == "undefined" ) {
	YAHOO.security2day.Crypt = function() {};
	
	YAHOO.security2day.Crypt.prototype.blowfish = "undefined";
	
	YAHOO.security2day.Crypt.prototype.initCrypt = function( key ) {
		this.blowfish = new com.oclib.javascript.security.encryption.Blowfish()
		this.blowfish.setLongChar(true); // для поддержки русских символов		
		this.blowfish.init(key);
		
		if (YAHOO.security2day.debugging) {
			YAHOO.log("Blowfish key: " + key, "info", "YAHOO.security2day.Crypt");	
		}
	}
	
	YAHOO.security2day.Crypt.prototype.encrypt = function( text ) {
		if (YAHOO.security2day.debugging) {
			if (this.blowfish == "undefined") { 
				YAHOO.log("Crypt не инициализирован. Вызовите функцию ini(key)", "error", "YAHOO.security2day.Crypt");	
			}
		}
		return this.blowfish.encrypt(text);		
	}	
	
	YAHOO.security2day.Crypt.prototype.decrypt = function( text ) {
		if (YAHOO.security2day.debugging) {
			if (this.blowfish == "undefined") { 
				YAHOO.log("Crypt не инициализирован. Вызовите функцию init(key)", "error", "YAHOO.security2day.Crypt");	
			}
		}
		
		var decryptedText = this.blowfish.decrypt(text)
		var resultText = "";
		
		// для FireFox
		//if ( navigator.userAgent.toLowerCase().indexOf("gecko") != -1 ) {
			for (i=0; i<decryptedText.length; i++ ) {
				if (decryptedText.charCodeAt(i) != 0) {					
					resultText += decryptedText.charAt(i);					
				}
			}
		//} else {
		//	resultText = decryptedText;
		//}
		
		return resultText;		
	}		
}
