//----------------------------------------------------------------------------
//METHODS FOR DECRYPTION
//----------------------------------------------------------------------------
var blogcrypt_decryption = {
	deCrypt: function(doc) 
	{
			// a crypt tag keresésére szolgáló regexp
			var crypttagregex=/\[crypt keyid=[0-9,a-z,A-Z]+ algo=[0-9,a-z,A-Z]+\-[0-9,a-z,A-Z]+\-[0-9,a-z,A-Z]+ length=[0-9]+\]/;
			var items = doc.body.getElementsByTagName("*"); // a DOM elemei
			while(doc.body.innerHTML.search(crypttagregex)!=-1) // addíg amíg van a DOMban [crypt]
			{
			for(var i=items.length-1; i>-1; i--) //iteráció a DOM elemeken
			{
				var item=items[i];
				if(item.innerHTML.search(crypttagregex)!=-1) //ha az elemben van [crypt] tag
				{
					var tmpbody=item.innerHTML;
					while(tmpbody.search(crypttagregex)!=-1) //amíg az összes [crypt taget fel nem oldottuk
					{
						var start= tmpbody.search(crypttagregex); // a [crypt] tag kezdete
						
						var crypting_parameters=new Array();
						var crypttag=tmpbody.match(crypttagregex)[0]; // a crypt tag
						
						//a titkosítási paraméterek kinyerése a crypting parametersbe
						crypting_parameters[0]=crypttag.match(/keyid=[0-9,a-z,A-Z]+/)[0].substr(6);
						crypting_parameters[1]=crypttag.match(/algo=[0-9,a-z,A-Z,-]+/)[0].substr(5);
						crypting_parameters[2]=crypttag.match(/length=[0-9]+/)[0].substr(7);
						
						// A titkosított blokk elvárt végpozíciója (a crypt kezdete+a crypt hossza+a titkos blokk hossza
						var num=start + crypttag.length + parseInt(crypting_parameters[2]);
						
						var currentToEdit=tmpbody.slice(start, num); //a kikeresett módosítandó szakasz
						var currentEdited=currentToEdit.replace(crypttagregex,"");//[crypt] tag törlése
						var passwd="";
						var errormsg="Blogcrypt decode error"; //alapértelmezett hibaüzenet
						
						// jelszó elkérése
						var passwd=blogcrypt_FileIO.get_passwd_from_db(doc.domain,crypting_parameters[0]);
						
						// ha nincs az adatbázisban a jelszó
						if(passwd==false)
						{
								errormsg="Blogcrypt password error"; // akkor a hibaüezenet átállítása
						}
						
						var i=0;
						var tmp=new Array();
						// a titkosított blokk feldarabolása a szóközök mentén
						tmp=currentEdited.split(" ");
						currentEdited="";
						for(i=0;i<tmp.length;i++)
						{
							currentEdited+=tmp[i]; //a szóközök nélküli szakasz összefűzése
						}
						
						//visszafejtés
						currentEdited=blogcrypt_crypting_functions.decrypt(currentEdited,passwd,crypting_parameters[1]);
						
						// ha az üzenet eleje az elvárt módon kezdődik
						if(currentEdited.slice(0,9)=="blogcrypt")
						{
							currentEdited=currentEdited.slice(9); // az előtag törlése
							tmpbody=
								tmpbody.replace(currentToEdit,currentEdited); //a módosítandó szakasz cseréje
						}
						else // ha nem találtuk, akkor a hibaüzenettel a hibát jelző struktúra összeállítása
						{
							tmpbody=
								tmpbody.replace
									(crypttag,"\["+errormsg+" keyID:"+crypting_parameters[0]+"\]"); 
						}
					}
					
					// A DOM elem módosítása és visszahelyezése
					var parent=item.parentNode;
					var newitem=item.cloneNode(true);
					newitem.innerHTML=tmpbody;
					parent.removeChild(item);
					var previtem=item.previousSibling;
					var nextitem=item.nextSibling;
					
					if(previtem!=null)
					{
						parent.insertBefore(newitem, previtem.nextSibling);
					}
					else if(nextitem!=null)
					{
						parent.insertBefore(newitem, nextitem);
					}
					else
					{
						parent.appendChild(newitem);
					}
				
				}
			}
			}
	},
}

