/**
 * Asynchronously load html content from the server.
 * The response will be loaded from contentUrl and put inside the 
 * div with id targetDiv. The innerHTML values of a div with class 
 * 'xhrCb' may define a callback to execute after load using the 
 * doCallback function.
 */
function loadContent(contentUrl, targetDiv, formToSend) {
  var xhrConfig = {
    url:contentUrl,
    handleAs:"text",
    timeout:5000,
    preventCache:true,

    load: function(response, ioArgs) {
      dojo.byId(targetDiv).innerHTML = response;
      var scriptNodes = dojo.query(".xhrScript", targetDiv);
      if (scriptNodes[0]) {
        dojo.eval(scriptNodes[0].innerHTML);
      }
      var cbNodes = dojo.query(".xhrCb", targetDiv);
      if (cbNodes[0]) {
        doCallback(cbNodes[0].innerHTML, targetDiv);
      }
      return response;
    },

    error: function(response, ioArgs) {
      //console.error("HTTP status code: ", ioArgs.xhr.status);
      return response;
    }
  };
  // make sure that the form exists
  if (document.forms[formToSend]) {
    xhrConfig.form = formToSend;
  }

  // do the server call
  dojo.xhrGet(xhrConfig);
}

/**
 * Special call for loading the program.
 */
function loadProgram(contentUrl, targetDiv, formToSend) {
  // we are coming from the form tab
  if (document.forms[formToSend]) {
    loadContent(contentUrl, targetDiv, formToSend);
  }
  // any other tab
  else {
    loadContent(contentUrl+"?suche=reload", targetDiv, null);
  }
}

/**
 * After load callbacks.
 */
function doCallback(str, targetDiv) {

  // callback definitions
  function obj() {
  
    // callback used after click on 'Die Hobit'
    this.afterIndex = function(targetDiv) {
      selectMainTab(1);
      scroll(0,0);
    }
    // callback used after click on 'Das Programm'
    this.afterSearch = function(targetDiv) {
      selectMainTab(2);
      var nodes = dojo.query(".xhrResult", targetDiv);
      if (nodes[0]) {
        var resultNode = nodes[0];
        if (resultNode) {
          if (resultNode.innerHTML == "error")
          {
            dojo.query("#content").addClass("searchResultNegative");
            dojo.query("#tabs .tab2 a").addClass("red");
          }
        }
      }
      scroll(0,0);
    }
    // callback used after click on 'Veranstalter...'
    this.afterHost = function(targetDiv) {
      selectMainBottomTab(1);
      scroll(0,0);
    }
    // callback used after click on 'Kooperationen...'
    this.afterCoops = function(targetDiv) {
      selectMainBottomTab(2);
      scroll(0,0);
    }
    // callback used after click on 'Externe Links'
    this.afterLinks = function(targetDiv) {
      selectMainTab(5);
      scroll(0,0);
    }
    // callback used after click on 'Hobit Magazin'
    this.afterMagazin = function(targetDiv) {
      selectMainTab(4);
      scroll(0,0);
      // change the magazin button to yellow
      dojo.query("#mainContentBottom .tab1 a").addClass("yellow");
    }
    // callback used after click on '... Hochschulen'
    this.afterHochschulen = function(targetDiv) {
      selectMainTab(2);
      scroll(0,0);
    }
    // callback used after click on '... Firmen'
    this.afterFirmen = function(targetDiv) {
      selectMainTab(3);
      scroll(0,0);
    }
    // callback used after click on '... Arbeitsagentur'
    this.afterArbeitsagentur = function(targetDiv) {
      selectMainTab(3);
      scroll(0,0);
    }
    // callback used after click on 'Stadt Darmstadt'
    this.afterDarmstadt = function(targetDiv) {
      selectLocationTab(1);
    }
    // callback used after click on 'Veranstaltungsort...'
    this.afterOrt = function(targetDiv) {
      selectLocationTab(2);
    }
  }
  
  // call the callback
  var func = new obj();
  func[str](targetDiv);
}

function scrollIntoView(node) {
  var parent = node.parent;
  var parentCHeight = parent.clientHeight;
  var parentSHeight = parent.scrollHeight;
  if (parentSHeight > parentCHeight) {
    var nodeHeight = node.clientHeight;
    var nodeOffset = node.offsetTop;
    var scrollOffset = nodeOffset + (nodeHeight / 2) - (parentCHeight / 2);
    parent.scrollTop = scrollOffset;
  }
  if (parent.parent) {
    scrollIntoView(parent);
  }
}


/**
 * Called, when a kategorie checkbox is clicked
 */
function themaClicked(element, name) {
  if (element.value == 'alleThemen')
    setOptions(name, element.checked);
  else if (name == 'kategorien[]')
    setOption('alleThemen', 'alleThemen', false);
}

/**
 * Helper functions for dynamically changing the display.
 */
function selectMainTab(id) {
  dojo.query("#content").removeClass("searchResultNegative");
  dojo.query("#tabs div a").removeClass("active").removeClass("red");
  // change the magazin button back to white
  dojo.query("#mainContentBottom .tab1 a").removeClass("yellow");
  if (id > 0) {
    selectMainBottomTab(0);
    dojo.query("#tabs .tab"+id+" a").addClass("active");
  }
}
function selectMainBottomTab(id) {
  dojo.query("#mainContentBottom div a").removeClass("active");
  if (id > 0) {
    selectMainTab(0);
    dojo.query("#mainContentBottom .tab"+id+" a").addClass("active");
  }
}
function selectLocationTab(id) {
  dojo.query("#locationTabs div a").removeClass("active");
  dojo.query("#locationTabs .tab"+id+" a").addClass("active");
}

/* search result items */
function toggleDetail(id) {
  if (isDetailOpen(id))
    closeDetail(id);
  else
    showDetail(id);
}
function showDetail(id) {
  dojo.query("#veranstaltung_"+id).addClass("active");
  dojo.query("#veranstaltung_"+id+" td.col1").addClass("active");
  dojo.query("#veranstaltung_detail_"+id).addClass("active").style("display", "");
  dojo.query("#veranstaltung_closeBtn_"+id).addClass("closeActive").style("display", "");
}
function closeDetail(id) {
  dojo.query("#veranstaltung_"+id).removeClass("active");
  dojo.query("#veranstaltung_"+id+" td.col1").removeClass("active");
  dojo.query("#veranstaltung_detail_"+id).removeClass("active").style("display", "none");
  dojo.query("#veranstaltung_closeBtn_"+id).removeClass("closeActive").style("display", "none");
}
function closeAllDetails() {
  dojo.query("tr.veranstaltung").removeClass("active");
  dojo.query("tr.veranstaltung td.col1").removeClass("active");
  dojo.query("tr.veranstaltung_detail").removeClass("active").style("display", "none");
  dojo.query("tr.veranstaltung_closeBtn").removeClass("closeActive").style("display", "none");
}
function isDetailOpen(id) {
  return dojo.query("#veranstaltung_"+id+" td.active").length == 1;
}

/* magazine article list items */
var lastArticleId = -1;
function showArticleInfo(id) {
  if (lastArticleId >= 0)
    closeArticleInfo(lastArticleId);
  dojo.query("#item_"+id).style("display", "none");
  dojo.query("#info_"+id).style("display", "block");
  lastArticleId = id;
}
function closeArticleInfo(id) {
  dojo.query("#item_"+id).style("display", "block");
  dojo.query("#info_"+id).style("display", "none");
}

function setOptions(name, /*boolean*/ isChecked) {
  for (i=0; i<document.Suche2.length; i++) {
    var curElement = document.Suche2.elements[i];
    if (curElement.name == name)
      curElement.checked = isChecked;
  }
}
function setOption(name, value, /*boolean*/ isChecked) {
  for (i=0; i<document.Suche2.length; i++) {
    var curElement = document.Suche2.elements[i];
    if (curElement.name == name && curElement.value == value)
      curElement.checked = isChecked;
  }
}
function gup(name) {
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}

/**
 * functions for the hobit magazin
 */
function changeImg(index, state) {
  document.getElementById("articleImg" + index).src = articleImages[index][state];
}

function preload(imgObj,imgSrc) {
	if (document.images) {
		eval(imgObj+' = new Image()');
		eval(imgObj+'.src = "'+imgSrc+'"');
	}
}

function preloadArticleImg() {
  for (i=0; i<articleImages.length; i++)
     preload("img" + i, articleImages[i][1]);
}
