

var GET_JSP_FILE = "STGetTags.jsp";
var SET_JSP_FILE = "STSetTags.jsp";
var DELETE_JSP_FILE = "STDeleteTags.jsp";

var imagesDirectory = "images/";
var request = null;

var serverUrl = "/AcadEurope/";//"http://129.27.153.165:8080/AcadEurope/";

function initRequest()
{
  try {
    if(window.XMLHttpRequest) {
      request = new XMLHttpRequest();
    } else 
	if(window.ActiveXObject)
	{
      request = new ActiveXObject("Microsoft.XMLHTTP");
    } else
	{
      //Error message
    }
    if(request.overrideMimeType ) 
	{
       request.overrideMimeType('text/xml');
    }
  } catch( exception )
  {
    //Error message
  }
  //request.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
}


function getTags(link, userrestriction)
{
	initRequest();
	//var index = link.indexOf('#');
	// encode url to ensure correct get request
	var encodedLink = encodeURIComponent(link); 
	//var escapedLink = escape(link); 
	var url = serverUrl + GET_JSP_FILE + "?url=" + encodedLink + "&userrestriction=" + userrestriction + "&time="+new Date().getTime();
;
    
	//url = "http://localhost:8080/JSPWiki/tagcloudplugin/GetTags.jsp?page=news"
	
	//alert(url);
	request.open("GET", url, true);
    request.onreadystatechange =  function()
        {
		  //alert("Ready.State: " + request.readyState);
          if (request.readyState == 4)
          {
			//alert(request.responseXML);
            var xmlDoc = request.responseXML.documentElement;
			if (userrestriction == "false")
			{
			  processAllTags(xmlDoc);
			} else
  		    {
			  processUserTags(xmlDoc);
            }
          }
        }
	
	request.send(null);
}

function processAllTags(xmlDoc)
{
    if (document.getElementById("sectionTaggingTagBox") == null)
    {
		return;
    }
	//alert("zerlege xml: " + xmlDoc);
    var tagList = xmlDoc.getElementsByTagName('tag');
	var tags = "";
	var tagBuffer = new Array(tagList.length);
	var tagBufferCounter = new Array(tagList.length);
	for (var index = 0; index < tagList.length; index++)
	{
		tagBuffer[index] = "";
		tagBufferCounter[index] = 0;
	}
	// Look for identical tags and count them
    for (var index = 0; index < tagList.length; index++)
	{
		var tag = tagList[index].firstChild.data;
		var tagAlreadyExists = false;
		for (var bufferIndex = 0; bufferIndex < tagBuffer.length; bufferIndex++)
		{
			if (tagBuffer[bufferIndex] == tag)
			{
				tagBufferCounter[bufferIndex] = (parseInt(tagBufferCounter[bufferIndex]) + 1) + "";
				tagAlreadyExists = true;
				break;
			}
		}
		if (tagAlreadyExists == false)
		{
		   var bufferIndex = 0;
		   // Find free index
		   while (tagBuffer[bufferIndex] != "") bufferIndex++;
		   // Insert tag with count 1
		   tagBuffer[bufferIndex] = tag;
		   tagBufferCounter[bufferIndex] = 1;
		}
	}
    // Sort tags by occurrence (selection sort)
    var sortedTagBuffer = new Array();
	var sortedTagBufferCounter = new Array();
    for (var index = 0; index < tagBuffer.length; index++)
    {
		var maximum  =  0;
		var position = -1;
		for (var index2 = 0; index2 < tagBuffer.length; index2++)
		{
			if (maximum < tagBufferCounter[index2])
			{
              position = index2;
			  maximum = tagBufferCounter[index2];
			}
		}
		if (position == -1) break; // no more tags
		sortedTagBuffer.push(tagBuffer[position]);
		sortedTagBufferCounter.push(maximum);
		tagBufferCounter[position] = 0;
    }
    // Create rendered tags list 
    while (sortedTagBuffer.length > 0)
    {
		var tag = sortedTagBuffer.shift();
		var count = sortedTagBufferCounter.shift();
		if (tags != "") tags += ", ";
		tags += tag;
		if (count > 1) tags += " (" + count + ")";
    }

	
}


function processUserTags(xmlDoc)
{
	
	var tagList = xmlDoc.getElementsByTagName('tag');
	var tags = "";
	for (var index = 0; index < tagList.length; index++)
	{
		if (index > 0) tags += ", ";
		tags += tagList[index].firstChild.data;
	}
	//var text = document.createTextNode(tags);
    	var textBox = document.getElementById("sectionTaggingTextBox")
	if (textBox != null)
	{
	    textBox.value = tags;
	}
	setLoadingMode("okcancel");
}


function processSetTags(xmlDoc)
{
   
    var textBox = document.getElementById("sectionTaggingTextBox");
	if (textBox != null)
    {
		var error = xmlDoc.getElementsByTagName('error')[0];
		if (error.firstChild != null)
		{
			//textBox.value = error.firstChild.data;
			document.getElementById("taggingstatus").innerHTML = "<span style=\"font-size:80%;color:#CC0000\"><b>ERROR:</b> "+error.firstChild.data+"</span><br>"
			//alert(error.firstChild.data);
		} else {
			document.getElementById("taggingstatus").innerHTML = "<span style=\"font-size:80%;color:green\"><b>Info:</b> Tag(s) erfolgreich gesetzt!</span><br>"
		}
	}
	setLoadingMode("cancel");
}


function setLoadingMode(mode)
{
    var cancelButton = document.getElementById("sectionTaggingEditCancelButton");
    var okButton     = document.getElementById("sectionTaggingEditOkButton");
    var loadingBox   = document.getElementById("sectionTaggingEditLoadingBox");
    /*if (cancelButton != null && okButton != null && loadingBox != null)
    {
		if (mode == "loading")
		{
			cancelButton.style.display = "none";
		    okButton.style.display     = "none";
		    loadingBox.style.display   = "block";
		} else
		if (mode == "okcancel")
		{
			cancelButton.style.display = "block";
			okButton.style.display     = "block";
			loadingBox.style.display   = "none";
		} else
		if (mode == "cancel")
		{
			cancelButton.style.display = "block";
			okButton.style.display     = "none";
			loadingBox.style.display   = "none";
		}
    }*/
}


function setTags(link)
{
	setLoadingMode("loading");
	var text = "";
	//var link = "";
    var textBox = document.getElementById("sectionTaggingTextBox");
	if (textBox != null)
    {
		text = textBox.value
		//textBox.disabled = "true";
		// Search for closing PCDATA-tag which is not allowed in the tag-string
		if (text.search(/]]>/) != -1)
		{
			textBox.value = "It is not allowed tu use ]]> in a tag";
			setLoadingMode("cancel");
			return;
		}
		//link = textBox.getAttribute("link");
	}
	initRequest();
	//var index = link.indexOf('#');
	// encode url and tags to ensure correct get request
	var encodedLink = encodeURIComponent(link);
	var encodedTags = encodeURIComponent(text);
	var url = serverUrl + SET_JSP_FILE + "?url=" + encodedLink + "&tags=" + encodedTags + "&time="+new Date().getTime();

	request.open("GET", url, true);
        request.onreadystatechange =  function()
        {
		  //alert("Ready.State: " + request.readyState);
          if (request.readyState == 4)
          {
			//alert(request.responseXML);
            var xmlDoc = request.responseXML.documentElement;
			processSetTags(xmlDoc);
		reloadTagCloud();
          }
        }
	
	request.send(null);
	
}

function setBookmark(link)
{
	
	var text = "";
	
    var textBox = document.getElementById("bookmarkcat");
	if (textBox != null)
    {
		text = textBox.value
		
		// Search for closing PCDATA-tag which is not allowed in the tag-string
		if (text.search(/]]>/) != -1)
		{
			textBox.value = "It is not allowed tu use ]]> as category";
			
			return;
		}
		//link = textBox.getAttribute("link");
	}
	initRequest();
	
	// encode url and tags to ensure correct get request
	var encodedLink = encodeURIComponent(link);
	var encodedTags = "Bookmark:"+encodeURIComponent(text);
	var url = serverUrl + SET_JSP_FILE + "?url=" + encodedLink + "&tags=" + encodedTags + "&time="+new Date().getTime()+ "&app=true";

	request.open("GET", url, true);
        request.onreadystatechange =  function()
        {
		  //alert("Ready.State: " + request.readyState);
          if (request.readyState == 4)
          {
			//alert(request.responseXML);
            var xmlDoc = request.responseXML.documentElement;



		var error = xmlDoc.getElementsByTagName('error')[0];
		if (error.firstChild != null)
		{
			document.getElementById("bookmarkingstatus").innerHTML = "<span style=\"font-size:80%;color:#CC0000\"><b>ERROR:</b> "+error.firstChild.data+"</span><br>"
			
		} else {
			document.getElementById("bookmarkingstatus").innerHTML = "<span style=\"font-size:80%;color:green\"><b>Info:</b> Bookmark gesetzt!</span><br>"
		}


			
		
          }
        }
	
	request.send(null);
	
}


function deleteBookmark(mytag,link,id,id2)
{
	
	
	initRequest();
	
	var encodedLink = encodeURIComponent(link);
	var encodedTag = encodeURIComponent(mytag);
	
	var url = serverUrl + DELETE_JSP_FILE + "?url=" + encodedLink + "&tag=" + encodedTag + "&time="+new Date().getTime();

	request.open("GET", url, true);
        request.onreadystatechange =  function()
        {
		  //alert("Ready.State: " + request.readyState);
          if (request.readyState == 4)
          {
			//alert(request.responseXML);
            var xmlDoc = request.responseXML.documentElement;



		var error = xmlDoc.getElementsByTagName('error')[0];
		if (error.firstChild != null)
		{
			document.getElementById(id).innerHTML = document.getElementById(id).innerHTML + "<br><span style=\"font-size:80%;color:#CC0000\"><b>ERROR:</b> "+error.firstChild.data+"</span><br>"
			
		} else {

			//d2 = document.getElementById(id2);

			oldel = document.getElementById(id);
	
			oldel.style.display = "none";

  			//d2.removeChild(oldel);

			//document.getElementById(id).innerHTML = "";
//alert(nodeLength(id2) );
			/*if (nodeLength(id2) == 1) {
				d2 = document.getElementById("bmmm");
				oldel = document.getElementById(id2);
  				d2.removeChild(oldel);
			}*/
		}


			
		
          }
        }
	
	request.send(null);
	
}

function nodeLength(id) {
	var cnt = 0;
	var ele = document.getElementById(id);
	for(var i=0; i < ele.childNodes.length; i++){
		var child = ele.childNodes[i];
		if (child.nodeType == 1) {
            		cnt++;
		}
        }
return cnt;
}

function editTags(link)
{


	getTags(link, "true");

}
