/***********************************************************************
*              Author: Klaus Hentschel [ All rights reserved ].                        				   *
************************************************************************
* Copyright (C) by Klaus Hentschel, http//javarea.de
*
* www: http://javaera.de.de
*
* Dieses Script ist Bestandteil des JavBB 2.0.0
*
* - TopicEdit.class.js
*
* - TopicEdit() 						- init class
* - LoadPostComment() 			- Description: Laden der geaenderten Daten
* - SavePostComment() 			- Speichern der Daten 
* - StringUtil() 					- spezielle Zeichen umwandeln
***********************************************************************/

/**
* Description: Klasse die zum initialisieren der event benoertigt wird
* Autor: Klaus Hentschel <javarea.de>
* category: CLASS
*
* TopicEditList()	 			
**/
TopicEditList = function()
{
	// Initialisierung
	this.init = function() 
	{	
		var docImg = document.getElementsByTagName("div"); 
		var s, topicID, topicIDName;
			
		for (var i=0; i<docImg.length; i++)
		{   
			// EditThreadTitle && EditPrfix
			if (docImg[i].id.replace("ThreadTopic_","") || docImg[i].id.replace("ThreadPrefix_","")) 
			{     
				// text von Nummer trennen und als Bereich weitergeben
				topicID = docImg[i].id;				
				s = topicID.search("_");    
				topicIDName = topicID.substr(0, s);		
				
				// ID extrahieren
				id = topicID.substr(s+1, topicID.length);
				docImg[i].topic = topic[id]; // Object 
				
				if (topicIDName == "ThreadTopic")
				{
					// ID von Text befreien
					docImg[i].topicID = docImg[i].id.replace("ThreadTopic_","");						
					docImg[i].ondblclick = function()	{				
					if (this.topic != undefined && this.topic['isEdit'] == 1)				
						TopicEdit(this.topicID,'ThreadTopic')			
					};					
				}
				
				if (topicIDName == "ThreadPrefix")				
				{
					docImg[i].topicID = docImg[i].id.replace("ThreadPrefix_","");							
					docImg[i].ondblclick = function()	{				
					if (this.topic != undefined && this.topic['isEdit'] == 1)									
						TopicEdit(this.topicID,'EditPrefix')				
					};					
				}	
			}			
		}		// end for
	}
}	

var prefixes = 0;
var ok;

/**
* Description: Bearbeiten der Themen und Beitraege
* Autor: Klaus Hentschel <javarea.de>
* category: EDIT TOPIC
*
* TopicEdit()
* @param: <int> topicID					ID
* @param: <string> DivClassName		Aktion
* @param: <string> what 					Post or Thread			 			
**/
TopicEdit = function(id, divIDName, what)
{
	// forumID
  //var fID = jbb['boardID'];
	if (topic[id]['isForumID'] != undefined || topic[id]['isForumID'] != "undefined")
		var fID = topic[id]['isForumID'];
	
	// ------------------------------------------ //
	// rename thread title
	// ------------------------------------------ //	
  if ((divIDName == "ThreadTopic" || divIDName == "PostTopic") && perm['canrenameThread'] == true && topic[id]['isEdit'] == true)
	{	
		var TopicTitleDiv = document.getElementById(divIDName+'_'+id);
		if (TopicTitleDiv)
		{
			// Wenn Feld vorhanden, dann nicht beachten
			var inputs = TopicTitleDiv.getElementsByTagName('input');         
      
      // doppelte Eingabefelder verhindern
      if (inputs.length > 0)
        return
        
			// Link entfernen  und Wert an Feld übergeben
			var value = '';
			if (TopicTitleDiv.firstChild)
			{
				TopicTitleDiv.firstChild.style.display = 'none';	 		        

        // IE, Opera, Safari, Konqueror \\ else FF    	
				if (TopicTitleDiv.firstChild.innerText) 
					value = TopicTitleDiv.firstChild.innerText;
				else
      		value = StringUtil(TopicTitleDiv.firstChild.innerHTML);   
      }	     						
			
			// inputfeld erzeugen
			var new_inputField = document.createElement('input');
			new_inputField.setAttribute("type","text");
			new_inputField.setAttribute("value",value);
			new_inputField.setAttribute("size",50);
			TopicTitleDiv.appendChild(new_inputField);

			// Event - Ereignis ausfuehren
			new_inputField.onkeydown = function(e)
			{
				if (!e)
      		e = window.event;
      	
      	// Hole Tastencode
      	var keyCode = 0;
      	if (e.which)
      		keyCode = e.which;
				
      	else if (e.keyCode)
      					keyCode = e.keyCode;
      	
      	if (e.target)
      		var new_inputField = e.target;
      	else if (e.srcElement)
      				var new_inputField = e.srcElement;
      	
      	// Nur wenn Enter und Feld gefuellt, dann Wert zurückschreiben
      	if (keyCode == '13' && (new_inputField.value.trim() != ''))
      	{
	// Neuen Wert in Feld schreiben
      		if (TopicTitleDiv.firstChild)
      		{
      			if (TopicTitleDiv.firstChild.firstChild)
      				TopicTitleDiv.firstChild.removeChild(TopicTitleDiv.firstChild.firstChild);

      			TopicTitleDiv.firstChild.appendChild(document.createTextNode(new_inputField.value));			
      		} 
          
      		// Aenderung an Request uebergeben
      		if (divIDName == "ThreadTopic")
						ajaxRequest.openPostRequest(BOARD_AJAXPATH + '?action=ThreadTopicTitle&forumid='+fID+'&threadid='+id+'&cat=renamethread', 'topictitle='+encodeURIComponent(new_inputField.value.trim()), id);

					// abort editing
      		new_inputField.blur();
      		return false;
      	}
      	else if (keyCode == '27') // Abbruch mit ESC
      	{
      		new_inputField.blur();
      		return false;
      	}	       
			}
			
			// EVENT - Feld wird verlassen
			new_inputField.onblur = function() 
			{
				if (TopicTitleDiv)
				{
					// Eingabefeld (Knoten) entfernen
					TopicTitleDiv.removeChild(new_inputField);
										
					// Text anzeigen
					TopicTitleDiv.firstChild.style.display = '';
				}
			}
			
			// Focus auf Feld setzen
			new_inputField.focus();
		}
	}
	
	// ------------------------------------------ //
	// open or close topic
	// ------------------------------------------ //	
	if (divIDName == "OpenClose" && perm['canopencloseThread'] == true)
	{	            
    if (what == "thread")
    {
  		if (topic[id]['isClose'] == false)
  			if (ok = confirm("Soll das Thema wirklich geschlossen werden?")) 
  				ajaxRequest.openGetRequest(BOARD_AJAXPATH + '?action=ThreadOpenClose&forumid='+fID+'&threadid='+id+'&close=1', id);

  		if (topic[id]['isClose'] == true)
  			ajaxRequest.openGetRequest(BOARD_AJAXPATH + '?action=ThreadOpenClose&forumid='+fID+'&threadid='+id+'&close=0', id);
  	}
      
		if (ok || topic[id]['isClose'] == true) 
			showTableStatus(id, divIDName);
	}	
  
	// ------------------------------------------ //
	// delete or restore
	// ------------------------------------------ //		
	if (divIDName == "DeleteRestore")
	{    
		if (what == "thread")
		{
			if (perm['candelThread'] == true && topic[id]['isDelete'] == false)
					ajaxRequest.openGetRequest(BOARD_AJAXPATH + '?action=ThreadDeleteRestore&forumid='+fID+'&threadid='+id+'&delete=1&close=0', id);
			
			if (perm['canrestoreThread'] == true && topic[id]['isDelete'] == true)
				ajaxRequest.openGetRequest(BOARD_AJAXPATH + '?action=ThreadDeleteRestore&forumid='+fID+'&threadid='+id+'&delete=0', id);
		}
    
		if (what == "post")
		{
			if (perm['candelPost'] == true && topic[id]['isDelete'] == false)
				//ajaxRequest.openGetRequest(BOARD_AJAXPATH + '?action=PostDeleteRestore&forumid='+fID+'&postid='+id+'&delete=1', id);
				ajaxRequest.openGetRequest(BOARD_AJAXPATH + '?action=PostDeleteRestore&forumid='+fID+'&postid='+id+'&delete=1', id, 'LoadCloseTableStatus('+id+')');
			
			if (perm['canrestorePost'] == true && topic[id]['isDelete'] == true)
				//ajaxRequest.openGetRequest(BOARD_AJAXPATH + '?action=PostDeleteRestore&forumid='+fID+'&postid='+id+'&delete=0', id);
				ajaxRequest.openGetRequest(BOARD_AJAXPATH + '?action=PostDeleteRestore&forumid='+fID+'&postid='+id+'&delete=0', id, 'LoadOpenTableStatus('+id+')');
		}
		
		if (divIDName == "DeleteRestore")// && (topic[id]['isDelete'] == true))
			showTableStatus(id, divIDName);
	}

	// ------------------------------------------ //
	// delete complete
	// ------------------------------------------ //		
	if (divIDName == "CompleteDelete")
	{
	    if (what == "thread")
	    {
	  		if (perm['candelcompleteThread'] == true && topic[id]['isDelete'] == true)
	  			if (ok = confirm("Achtung: Wollen Sie das Thema endgültig löschen?"))
	  				ajaxRequest.openGetRequest(BOARD_AJAXPATH + '?action=ThreadCompleteDelete&forumid='+fID+'&threadid='+id, id, 'showTableStatus('+id+',\''+divIDName+'\')');  
 	    }
	    
	    if (what == "post")
	    {
	   		if (perm['candelcompletePost'] == true && topic[id]['isDelete'] == true)
	  			if (ok = confirm("Achtung: Wollen Sie den Beitrag endgültig löschen?"))
			      ajaxRequest.openGetRequest(BOARD_AJAXPATH + '?action=PostCompleteDelete&forumid='+fID+'&postid='+id, id, 'showTableStatus('+id+',\''+divIDName+'\')');  
			} 
	}
  
	// ------------------------------------------ //
	// activate or reactivate
	// ------------------------------------------ //	
	if (divIDName == "ActivateReActivate" && (perm['canactivateThread'] == true || perm['canactivatePost'] == true))
	{		
    var isActiv = (topic[id]['isActiv'] == false) ? 1:0;
    
    if (what == "thread")
      ajaxRequest.openGetRequest(BOARD_AJAXPATH + '?action=ThreadActivate&forumid='+fID+'&threadid='+id+'&activ='+isActiv, id);
        
    if (what == "post")
    {
      isFirstPost = (topic[id]['isFirstPost'] == 1) ? jbb['threadID'] : 0;        
      ajaxRequest.openGetRequest(BOARD_AJAXPATH + '?action=PostActivate&forumid='+fID+'&postid='+id+'&activ='+isActiv+'&isFirst='+isFirstPost, id);
    }  
    
		showTableStatus(id, divIDName);
	}

	// ------------------------------------------ //
	// sticky thread
	// ------------------------------------------ //	
	if (divIDName == "Sticky" && perm['canstickyThread'] == true)
	{
    var isPinned = (topic[id]['isPinned'] == false) ? 1:0;
    
		if (what == "thread")
      ajaxRequest.openGetRequest(BOARD_AJAXPATH + '?action=ThreadSticky&forumid='+fID+'&threadid='+id+'&ok='+isPinned, id, 'HrefSticky()');        
	}
  
	HrefSticky = function()
	{
		window.location.reload();
	}
  
  // ------------------------------------------ //
	// Done Thread
	// ------------------------------------------ //	
	if (divIDName == "MarkAsDone" && perm['candoneThread'] == true)
	{	    
    var isDone = (topic[id]['isDone'] == false) ? 1:0;  
    
    if (what == "thread")
  		ajaxRequest.openGetRequest(BOARD_AJAXPATH + '?action=ThreadDone&forumid='+fID+'&threadid='+id+'&done='+isDone, id);          
     
    showTopicPicture(id, divIDName);
	}	

	// ------------------------------------------ //
	// Prefix thread
	// ------------------------------------------ //	
	if (divIDName == "EditPrefix" && perm['caneditprefixThread'] == true && topic[id]['isEdit'] == true)
	{
		var TopicPrefixDiv = document.getElementById('ThreadPrefix_'+id);
  	if (TopicPrefixDiv)
  	{
      var selectIndex = 0;
  		var count = 1;
  		
  		// Text nicht anzeigen und Wert an Feld übergeben
  		if (TopicPrefixDiv)
  			TopicPrefixDiv.firstChild.style.display = 'none';
  				
  		// Selektfeld erzeugen
  		var new_selectField = document.createElement('select');
  		TopicPrefixDiv.appendChild(new_selectField);  		
      
  		//leeres optionFeld erzeugen
  		var new_optionField = document.createElement('option');
  		new_selectField.appendChild(new_optionField);
  		
      // Optionfelder erzeugen
  		for (var key in prefixes) 
  		{	       
  			var new_optionField = document.createElement('option');
  			new_optionField.value = key;
  			
        // Wert stimmt mit ThreadPrefix ueberein
  			if (key == topic[id]['isPrefix']) 
  				selectIndex = count;
  			
        // Value schreiben
  			new_selectField.appendChild(new_optionField);
  			new_optionField.appendChild(document.createTextNode(prefixes[key]));
  			count++;
  		}
  		
  		// index auf selected setzen
  		new_selectField.selectedIndex = selectIndex;

  		// event ausfuehren
  		new_selectField.onchange = function() 
      { 
      	// neuen Wert an neue Var uebergeben
      	var newSelectPrefix = new_selectField.options[new_selectField.selectedIndex].value;			
      	
        // topic Array updaten
      	topic[id]['isPrefix'] = newSelectPrefix;
      	var newPrefixValue = (newSelectPrefix != '' ? newSelectPrefix : '');
      			
      	if (TopicPrefixDiv.firstChild.firstChild) 
      		TopicPrefixDiv.firstChild.removeChild(TopicPrefixDiv.firstChild.firstChild);
      		
      	TopicPrefixDiv.firstChild.appendChild(document.createTextNode(newPrefixValue));
      	newSelectPrefix = escape(newSelectPrefix);
				
      	// Aenderung an Requeste uebergeben
      	ajaxRequest.openPostRequest(BOARD_AJAXPATH + '?action=ThreadPrefixEdit&forumid='+fID+'&threadid='+id, 'prefix='+newSelectPrefix, id);
      		
      	// select Feld verlassen
      	new_selectField.blur();    
      }
  		
      // EVENT - Feld wird verlassen
      new_selectField.onblur = function() 
      {
      	if (TopicPrefixDiv) 
      	{      		
      		var selects = TopicPrefixDiv.getElementsByTagName('select');
      		TopicPrefixDiv.removeChild(selects[0]);          
      		TopicPrefixDiv.firstChild.style.display = '';
      	}      	
      }
      
      // Focus auf  Selektfeld setzen
      new_selectField.focus();
    }
  }  
 
  // ------------------------------------------ //
	// Post Editieren
	// ------------------------------------------ //	
 	if (divIDName == "EditPost" && perm['caneditPost'] == true)
    location.href = "./postedit.php3?action=editpost&postid="+id+"";
  
 	// ------------------------------------------ //
	// Post kommentieren
	// ------------------------------------------ //	
  if (divIDName == "QuickEditPost" && perm['caneditPost'] == true)
  {
    ajaxRequest.openGetRequest(BOARD_AJAXPATH + '?action=LoadPostComment&forumid='+fID+'&postid=' + id, 0, 'TopicEdit('+id+', "LoadPostComment", "postost")');
    indicators(1, id); 
  }
  
  // ------------------------------------------ //
	// Postcomment laden
	// ------------------------------------------ //	
  if (divIDName == "LoadPostComment" && perm['caneditPost'] == true)
	{    
		var value = ajaxRequest.xmlHttpRequest.responseText;	
		
		document.getElementById('PostComment_'+id).style.display = 'none';
		var TopicTitleDiv = document.getElementById('EditComment_'+id);
		if (TopicTitleDiv)
		{
			var input1 = TopicTitleDiv.getElementsByTagName('textarea');			
		 	if (input1.length > 0)
				return;   
        
			indicators(0, id);
      
			// textarea erzeugen
			var new_areaField = document.createElement('textarea');
			new_areaField.value = value;
			new_areaField.rows = 16;
			new_areaField.cols = 90;		
			TopicTitleDiv.appendChild(new_areaField);
			TopicTitleDiv.appendChild(document.createElement('br'));
			
			// Submit-button erzeugen
			var new_btnSubmitField = document.createElement('input');
			new_btnSubmitField.setAttribute("type","button");
			new_btnSubmitField.setAttribute("value","save");
			TopicTitleDiv.appendChild(new_btnSubmitField);
			
			// Cancel-button erzeugen
			var new_btnCancelField = document.createElement('input');
			new_btnCancelField.setAttribute("type","button");
			new_btnCancelField.setAttribute("value","cancel");
			TopicTitleDiv.appendChild(new_btnCancelField);
      
			/*
			* onclick EVENT 
			* submit der Daten
			*/
			new_btnSubmitField.onclick = function() 
			{       
				// Felder beim Senden deaktivieren
				new_btnSubmitField.disabled=true;
				new_btnCancelField.disabled=true;
				new_areaField.disabled=true;
				
				new_areaField.value = new_areaField.value.trim();
        //alert(areaField.value);
				// Daten in db schreiben
				if (TopicTitleDiv)
        {
					ajaxRequest.openPostRequest(BOARD_AJAXPATH + '?action=SavePostComment&forumid='+fID+'&postid=' + id, 'postcomment='+encodeURIComponent(new_areaField.value), 0, 'SavePostComment('+id+','+fID+')');
          indicators(1, id); 
        }  
			}

			/*
			* onclick EVENT 
			* Abbruch der Aktion
			*/
			new_btnCancelField.onclick = function() 
			{
				if (TopicTitleDiv)
				{
					// Knoten wieder entfernen
					removeChild();
					
					// Eintrag wieder anzeigen 
					document.getElementById('PostComment_'+id).style.display = '';								
				}
			}	
			
			/*
			* Knoten entfernen
			*/	
			removeChild = function()
			{
				TopicTitleDiv.removeChild(new_areaField);
				TopicTitleDiv.removeChild(new_btnSubmitField);
				TopicTitleDiv.removeChild(new_btnCancelField);				
			}
		}	
	} // end edit PERM   
}

/**
* Description: Speichern der Daten
* Autor: Klaus Hentschel <javarea.de>
*
* SavePostCommend()
* @param: <int> topicID
**/
SavePostComment = function (ID, fID) 
{
	if (perm['caneditPost'] == true)
		ajaxRequest.openGetRequest(BOARD_AJAXPATH + '?action=LoadPostComment2&forumid='+fID+'&postid=' + ID, 0, 'LoadPostComment('+ID+')');    
}

/**
* Description: Laden der geaenderten Daten
* Autor: Klaus Hentschel <javarea.de>
*
* LoadPostCommend()
* @param: <int> topicID
**/
LoadPostComment = function (id) 
{	
  var value = ajaxRequest.xmlHttpRequest.responseText;
  document.getElementById('PostComment_'+id).innerHTML = value;
	document.getElementById('PostComment_'+id).style.display = '';
	
  indicators(0, id);
	// Knoten wieder entfernen
	removeChild();
}

/**
* Description: Laedt ein Template nachdem der Beitrag geloescht wurde
* Autor: Michael Loesler <derletztekick.com>
* Autor: Klaus hentschel <javarea.de>
*
* LoadCloseTableStatus()
* @param: <int> ID	topicID
**/
LoadCloseTableStatus = function(ID)
{
	var value = ajaxRequest.xmlHttpRequest.responseText;
	var value_default = "default";      // dient als Platzhalter
	
	var oldTR = document.getElementById("tblTopicStatus_"+ID);
	var parentEl = oldTR.parentNode;
	var newTR = document.createElement("tr");
	
	newTR.setAttribute((document.all ? "className" : "class"), "threadTableDelete");
	newTR.setAttribute('id', 'tblTopicStatus_'+ID);
		
	var TD = document.createElement("td");
	TD.colSpan = 2;
	
	/*
	TD.onclick=function() {
		check(ID);
	} */
	
	//TD.setAttribute("class","tblTopicStatus");

	TD.appendChild(document.createTextNode(value_default));
	newTR.appendChild(TD);
	parentEl.replaceChild(newTR, oldTR);
	
	// da createTextNode keine HTML Struktur schreibt, muss der Inhalt mit innerHTML gesetzt werden
	TD.innerHTML = value;	
}

LoadOpenTableStatus = function(ID)
{
	var value = ajaxRequest.xmlHttpRequest.responseText;
	var value_default = "default";      // dient als Platzhalter
  
	var oldTR = document.getElementById("tblTopicStatus_"+ID);
	var parentEl = oldTR.parentNode;
	var newTR = document.createElement("tr");
	
	newTR.setAttribute((document.all ? "className" : "class"), "tblTopicStatus");
	newTR.setAttribute('id', 'tblTopicStatus_'+ID);
		
	var TD = document.createElement("td");		
	TD.setAttribute("class","tblTopicStatus");
  var TD2 = document.createElement("td");		
	TD2.setAttribute("class","tblTopicStatus");
  
	TD.appendChild(document.createTextNode(value_default));
  TD2.appendChild(document.createTextNode(value_default));
  
	newTR.appendChild(TD);
  newTR.appendChild(TD2);
	parentEl.replaceChild(newTR, oldTR);
	
	// da createTextNode keine HTML Struktur schreibt, muss der Inhalt mit innerHTML gesetzt werden
	TD.innerHTML = value;	
}

check = function(ID)
{
	//document.getElementById("tblTopicStatus_"+ID).style.display = "block";
}



var TopicEditList = new TopicEditList();

var isDOMContentLoaded = false;
function addContentLoadListener () {
	if (document.addEventListener) {
	var DOMContentLoadFunction = function () {
		isDOMContentLoaded = true;
		TopicEditList.init();
	};
	document.addEventListener("DOMContentLoaded", DOMContentLoadFunction, false);
}
var oldonload = (window.onload || new Function());
	window.onload = function () {
		if (!isDOMContentLoaded) {
			oldonload();
			TopicEditList.init();
		}
	};
}
addContentLoadListener();


