addLoadListener(init);

function init()
{
    if (document.getElementById("suggested_topics") != null) {
    	document.getElementById("suggested_topics").onchange = showRightItems;
    	var selectedtopics  = document.getElementById("suggested_topics").value;
    	var targetName      = 'new_' + selectedtopics.replace(/s$/, "")
    	var targetDiv       = document.getElementById(targetName);
    	var submission      = document.getElementById("submission");
    	submission.value    = selectedtopics.replace(/s$/, "");
    	targetDiv.className = "";
    }
    else {
    	if (document.getElementById("new_book") != null) {
            document.getElementById("suggest_book").onclick = showItems;
            document.getElementById("close_book").onclick = hideItems;
        }
        else if (document.getElementById("new_link") != null) {
            document.getElementById("suggest_link").onclick = showItems;
            document.getElementById("close_link").onclick = hideItems;
        } 
        else if (document.getElementById("new_database") != null) {
            document.getElementById("suggest_database").onclick = showItems;
            document.getElementById("close_database").onclick = hideItems;
        }
        else if (document.getElementById("new_article") != null) {
            document.getElementById("suggest_article").onclick = showItems;
            document.getElementById("close_article").onclick = hideItems;
        }
        else if (document.getElementById("new_software") != null) {
            document.getElementById("suggest_software").onclick = showItems;
            document.getElementById("close_software").onclick = hideItems;
        }
        else if (document.getElementById("new_webserver") != null) {
            document.getElementById("suggest_webserver").onclick = showItems;
            document.getElementById("close_webserver").onclick = hideItems;
        }
        else if (document.getElementById("new_publication") != null) {
            document.getElementById("suggest_publication").onclick = showItems;
            document.getElementById("close_publication").onclick = hideItems;
        }
    }
    if (document.getElementById("googlesearchbox") != null) {
        document.getElementById("show_results").onclick = showResults;
        document.getElementById("hide_results").onclick = hideResults;
    }
    
        var showSpans = getSpansByAttribute("name","showdescription");
    for (var i = 0; i < showSpans.length; i++) {
      attachEventListener(showSpans[i], "click", showDescription, false)
    }
    
    var hideSpans = getSpansByAttribute("name","hidedescription");
    for (var i = 0; i < hideSpans.length; i++) {
      attachEventListener(hideSpans[i], "click", hideDescription, false)
    }
    
    return true;
}


function showDescription(event) {
    if (typeof event == "undefined") {
	event = window.event;
    }


    var theShowLink = getEventTarget(event)
    var theInfos = theShowLink.getAttribute('id').split("|");
    theShowLink.className = "hidden"
    
    var theDescription = document.getElementById('item-' + theInfos[1]);
    theDescription.className = "";
    
    var theHideLink = document.getElementById('linktohide|' + theInfos[1]);
    theHideLink.className = "link";
}

function hideDescription(event) {
    if (typeof event == "undefined") {
	event = window.event;
    }


    var theHideLink = getEventTarget(event)
    var theInfos = theHideLink.getAttribute('id').split("|");
    theHideLink.className = "hidden"
    
    var theDescription = document.getElementById('item-' + theInfos[1]);
    theDescription.className = "hidden";
    
    var theShowLink = document.getElementById('linktoshow|' + theInfos[1]);
    theShowLink.className = "link";
}


function showResults() {
	var targetDiv         = document.getElementById("googlesearchresult");
	var hideButton       = document.getElementById("hide_results");
	targetDiv.className   = "";
	hideButton.className = "";
	this.className        = "hidden";
}

function hideResults() {
	var targetDiv           = document.getElementById("googlesearchresult");
	var suggestButton       = document.getElementById("show_results");
	targetDiv.className     = "hidden";
	suggestButton.className = "";
	this.className          = "hidden";
}

function showItems() {
	var targetName        = this.getAttribute("id").replace(/suggest_/, "new_");
	var closeName         = this.getAttribute("id").replace(/suggest_/, "close_");
	var targetDiv         = document.getElementById(targetName);
	var closeButton       = document.getElementById(closeName);
	targetDiv.className   = "";
	closeButton.className = "";
	this.className        = "hidden";
}

function hideItems() {
	var targetName          = this.getAttribute("id").replace(/close_/, "new_");
	var suggestName         = this.getAttribute("id").replace(/close_/, "suggest_");
	var targetDiv           = document.getElementById(targetName);
	var suggestButton       = document.getElementById(suggestName);
	targetDiv.className     = "hidden";
	suggestButton.className = "";
	this.className          = "hidden";
}

function showRightItems () {
	var submission      = document.getElementById("submission");
	var listItems      = document.getElementById("suggested_topics");
    var positionNewItems  = listItems.selectedIndex;
    for(var i=0; i < listItems.length; i++) {
        if (i == positionNewItems) {
    	    document.getElementById('new_' + listItems[i].value.replace(/s$/, "")).className = "";
    	    submission.value    = listItems[i].value.replace(/s$/, "");
        }
        else {
            document.getElementById('new_' + listItems[i].value.replace(/s$/, "")).className = "hidden";
        }
    }
}


function addLoadListener(fn)
{
  if (typeof window.addEventListener != 'undefined')
  {
    window.addEventListener('load', fn, false);
  }
  else if (typeof document.addEventListener != 'undefined')
  {
    document.addEventListener('load', fn, false);
  }
  else if (typeof window.attachEvent != 'undefined')
  {
    window.attachEvent('onload', fn);
  }
  else
  {
    var oldfn = window.onload;
    if (typeof window.onload != 'function')
    {
      window.onload = fn;
    }
    else
    {
      window.onload = function()
      {
        oldfn();
        fn();
      };
    }
  }
}

function attachEventListener(target, eventType, functionRef, capture)
{
  if (typeof target.addEventListener != "undefined")
  {
    target.addEventListener(eventType, functionRef, capture);
  }
  else if (typeof target.attachEvent != "undefined")
  {
    target.attachEvent("on" + eventType, functionRef);
  }
  else
  {
    eventType = "on" + eventType;

    if (typeof target[eventType] == "function")
    {
      var oldListener = target[eventType];

      target[eventType] = function()
      {
        oldListener();

        return functionRef();
      }
    }
    else
    {
      target[eventType] = functionRef;
    }
  }

  return true; 
}


function getEventTarget(event)
{
  var targetElement = null;

  if (typeof event.target != "undefined")
  {
    targetElement = event.target;
  }
  else
  {
    targetElement = event.srcElement;
  }

  while (targetElement.nodeType == 3 && targetElement.parentNode != null)
  {
    targetElement = targetElement.parentNode;
  }

  return targetElement;
}

function getSpansByAttribute(attribute, attributeValue)
{
  var elementArray = new Array();
  var matchedArray = new Array();

  elementArray = document.getElementsByTagName("span");

  for (var i = 0; i < elementArray.length; i++)
  {
    if (attribute == "class")
    {
      var pattern = new RegExp("(^| )" + attributeValue + "( |$)");

      if (pattern.test(elementArray[i].className))
      {
        matchedArray[matchedArray.length] = elementArray[i];
      }
    }
    else if (attribute == "for")
    {
      if (elementArray[i].getAttribute("htmlFor") || elementArray[i].getAttribute("for"))
      {
        if (elementArray[i].htmlFor == attributeValue)
        {
          matchedArray[matchedArray.length] = elementArray[i];
        }
      }
    }
    else if (elementArray[i].getAttribute(attribute) == attributeValue)
    {
      matchedArray[matchedArray.length] = elementArray[i];
    }
  }

  return matchedArray;
}