/**
 * Initialize the jQuery functions
 *
 * TODOS:
 *  # bind checklinks() to submit button in event_new.rstl
 *  # replace all on* attributes in event_new.rstl with event bindings.
 */
jQuery(function($)
{
  // Frontend Functions
  initHover();
  initPreview();
  initEventRegistration();
  initBestBets();
  initAutocompletion();
  initFancybox();
  initSearch();

  // Backend Functions
  initLangSwitcher();
  initMaxLengthHandler();
  initKontextlinks();
  initKarussell();
  initMastercheckbox();
  initDatepicker();
  initUnset();

  initBacklinks();
  initCheckLastday();
  initCheckFirstday();
  initCheckInput2();

  /* Fake column2 in preview */
  $('.input2').each(function()
  {
    $('#col3').removeClass("col2-hidden");
  });
  $('.preview').each(function()
  {
    $('#col3').removeClass("col2-hidden");
    $('#main').removeClass("hide-col2");
    /* append col2 after col1 */
    var inhalt = $("#inhalt").attr("value"),
        links = $("#links").attr("value"),
        kw_list = $("#kw_list").attr("value"),
        // <headerimg />
        header = '<div class="clearfix" id="col2-header"><a title="Anwendung der Passivhaustechnologie im sozialen Wohnbau" href="http://www.hausderzukunft.at/highlights/utendorfgasse.htm"> <img width="241" height="68" alt="Foto: Frontansicht des sozialen Wohnbaus Utendorfgasse Wien (Quelle: Bruno Klomfar)" src="/img/header/hdz/hdz-utendorfgasse-content.jpg"> </a></div>',
        verzeichnis = '<div id="col2-toc" class="clearfix"> <h2>Inhaltsverzeichnis</h2>'+inhalt+'</div><div class="clearfix" id="col2-toc-ending">&nbsp;</div>',
        keywords = unescape('<div id="col2-content" class="clearfix"><div class="content"><div id="keywords"><h2>Stichw%F6rter</h2>'+kw_list+'</div></div></div>');

    if(links)
    {
      var kontext = '<div id="col2-links" class="clearfix"><h2>Kontext Links</h2>'+links+ '</div><div class="clearfix" id="col2-links-ending">&nbsp;</div>';
    }
    else
    {
      var kontext = '';
    }

    $('#col1').after('<div id="col2">'+header +verzeichnis +kontext +keywords +'<div class="clearfix" id="col2-ending">&nbsp;</div></div>');
  });
});


 /**
   * change options in selectbox on language change
   * */ 
function initLangSwitcher(){
 $("select#sprache").change(function(){
    var auswahl = $("select#art option:selected").attr("value");
    
    if($("select#sprache option:selected").attr("value") == 1)
    {
      $("select#art").html("<option value=''></option>" +
						"<option value='Aufbaustudium'>Aufbaustudium</option> " + 
  					"<option value='Ausstellung'>Ausstellung</option>" + 
						"<option value='Fachforum'>Fachforum</option>" + 
						"<option value='Fachtagung'>Fachtagung</option>" + 
						"<option value='Info-Veranstaltung'>Info-Veranstaltung</option>" + 
						"<option value='Konferenz'>Konferenz</option>" + 
						"<option value='Kongress'>Kongress</option>" + 
						"<option value='Messe'>Messe</option>" + 
						"<option value='Seminar'>Seminar</option>" + 
						"<option value='Symposium'>Symposium</option>" + 
						"<option value='Tagung'>Tagung</option>" + 
						"<option value='Workshop'>Workshop</option>" + 
						"<option value='Universitätslehrgang'>Universitätslehrgang</option>");
      
    }
    else{      
      	$("select#art").html("<option value=''></option>" +
						"<option value='Konferenz'>Conference</option>" +
						"<option value='Kongress'>Congress</option>" +
						"<option value='Messe'>Fair</option>" +
						"<option value='Ausstellung'>Exhibition</option>" +
						"<option value='Aufbaustudium'>Postgraduate Studies</option>" +
						"<option value='Info-Veranstaltung'>Road Show</option>" +
						"<option value='Seminar'>Seminar</option>" +
						"<option value='Fachtagung'>Session</option>" +
						"<option value='Symposium'>Symposium</option>" +
						"<option value='Workshop'>Workshop</option>" +
						"<option value='Universitätslehrgang'>University Course</option>");
    }
    
    $("select#art option[value='"+auswahl+"']").attr("selected", ":selected");

  
  }); 
}
 /**
   * Limit the number of characters in the input fields
   * */ 
function initMaxLengthHandler()
{
	/* Insert HTML-Markup */
	$('textarea[maxlength]').each(function(){
		$(this).after('<p class="chars_available"></p>');
		updateTextareaCharsRemaining($(this))
	});
	
	/* Zeichenbegrenzung & Anzeige der Restzeichen. */
	$('textarea[maxlength]').keyup(function() {
		updateTextareaCharsRemaining($(this))
	});
	
	function updateTextareaCharsRemaining (textarea)
	{
		var max = parseInt(textarea.attr('maxlength'));
		var contentlength = textarea.val().length;
		var message = "";
		var infobox = textarea.parent().find('.chars_available');
		
		/* Set soft character limits */
		switch (max)
		{
			case 100:
				max = 70;
				break;
			case 400:
				max = 300;
				break;
		}
		
		if( contentlength > max )
		{
			/* Truncate the content if necessarry */
			//textarea.val(textarea.val().substr(0, max));
		}
		
		var charsremaining = max - contentlength;
		if (charsremaining < 0)
		{
			charsremaining = Math.abs(charsremaining);
			message = "" + charsremaining + " Zeichen zu viel";
			infobox.addClass("exceeded");
		}
		else
		{
			message = "Noch " + charsremaining + " Zeichen";
			infobox.removeClass("exceeded");
		}
		
		/* Update the number remaining chars */
		infobox.html(message);
	}
}

/**
 * This function handles the hover effects.
 */
function initHover()
{
  if (! $('.result-item, .result-item-nolink, .emphasize-item, .editable-item').length ) return;

  /* result-item hover*/
  $(".result-item").mouseover(function()
  {
    $(this).removeClass("result-item").addClass("result-item-hover");
    window.status=$(this).find("a").attr("href");
    return true;
  }).mouseout(function()
  {
    $(this).removeClass("result-item-hover").addClass("result-item");
    window.status='';
    return true;
  }).click(function()
  {
    if($(this).find("a").attr("href"))
      document.location=$(this).find("a").attr("href");
  });

  /* result-item nolink hover*/
  $(".result-item-nolink").mouseover(function()
  {
    $(this).removeClass("result-item-nolink").addClass("result-item-nolink-hover");
  }).mouseout(function()
  {
    $(this).removeClass("result-item-nolink-hover").addClass("result-item-nolink");
  }).click(function()
  {
    if($(this).find("a").attr("href"))
      document.location=$(this).find("a").attr("href");
  });

  /* highlight emphazise item */
  $(".emphasize-item").mouseover(function()
  {
    $(this).removeClass("emphasize-item").addClass("emphasize-item-hover");
    window.status=$(this).find("a").attr("href");
    return true;
  }).mouseout(function()
  {
    $(this).removeClass("emphasize-item-hover").addClass("emphasize-item");
    window.status='';
    return true;
  }).click(function()
  {
    if($(this).find("a").attr("href"))
      document.location=$(this).find("a").attr("href");
  });

  /* highlight editable block & show edit button */
  $(".editable-item")
  .mouseover(function()
  {
    $(this).removeClass("editable-item").addClass("editable-item-hover");
    return true;
  })
  .mouseout(function()
  {
    $(this).removeClass("editable-item-hover").addClass("editable-item");
    return true;
  })  ;
  $("a.edit").
  click(function()
  {
    $(".edit").hide();
  });

}


/**
 * This function handles the preview images.
 */
function initPreview()
{
  if (! $('.thumbnail, .largeimg').length ) return;

  /* Preview Image functions */
  $(".thumbnail").click( function()
  {
    var id=$(this).attr("id");
    $("#"+id).hide();
    var id_l=id.replace(/s$/, "l");
    $("#"+id_l).show();
    return false;
  });

  $(".largeimg").click( function()
  {
    var id=$(this).attr("id");
    $("#"+id).hide();
    var id_s = id.replace(/l$/, "s");
    $("#"+id_s).show();
  });
}


/**
 * This function handles input field for the event registration.
 */
function initEventRegistration()
{
  if (! $('.hideContent').length ) return;

  /* Hide content for radio buttons */
  $(".hideContent .radio").change( function(){
    var feldID = $(this).attr("name").replace("feld_", "");
    if ($(this).hasClass("contentHide"))
    {
      $("#"+feldID).hide();
    }
    if ($(this).hasClass("contentShow"))
    {
      $("#"+feldID).show();
    }
  });
}


/**
 * This function handles best bets more results disclosure.
 */
function initBestBets()
{
  if (! $('.more_bestbets').length ) return;

  /* best bets, hide/show div "more_bestbets" */
  $(".more_bestbets").hide();
  $("#show_link").show();

  $("#show_link").click( function()
  {
    $(".more_bestbets").show('slow');
    $("#show_link").hide();
    $("#hide_link").show();
  });
  $("#hide_link").click( function()
  {
    $(".more_bestbets").hide('slow');
    $("#show_link").show();
    $("#hide_link").hide();
  });
}


/**
 * This function handles the search autocompletion.
 */
function initAutocompletion()
{
  if (! $('#search').length ) return;

  function findValue(li)
  {
    if ( li == null )
    {
      return alert("No match!");
    }

    // if coming from an AJAX call, let's use the Id as the value
    if ( !!li.extra )
    {
      var sValue = li.extra[0];
    }
    // otherwise, let's just display the value in the text box
    else
    {
      var sValue = li.selectValue;
    }
  }

  function selectItem(li)
  {
    findValue(li);
  }

  function formatItem(row) {
    return " <span class=\"count\">" + row.count + " Treffer</span><span class=\"word\">" + row.name + "</span>";
  }

  function prep_data(data) {
    var rows = new Array();
    for(var i=0; i<data.length; i++)
    {
      rows[i] = { data:data[i], value:data[i].count, result:data[i].name };
    }
    return rows;
  }

  $("#search").autocomplete(
    "/rxml/common/inc/autocomplete.json",
    {
      autoFill:false,
      cacheLength:10,
      dataType: "json",
      delay:200,
      extraParams: {
        location: function() { return $("#search_t").val(); }
      },
      formatItem: formatItem,
      matchSubset:true,
      matchContains:true,
      max:10,
      minChars:3,
      onItemSelect:selectItem,
      onFindValue:findValue,
      parse: prep_data,
      selectFirst: false,
      scroll: false,
      width:225
    }
  );

  $("#searchbox-q").autocomplete(
    "/rxml/common/inc/autocomplete.json",
    {
      autoFill:false,
      cacheLength:10,
      dataType: "json",
      delay:200,
      extraParams: {
        location: function() { return $("#searchbox-ul").val(); }
      },
      formatItem: formatItem,
      matchSubset:true,
      matchContains:true,
      max:10,
      minChars:3,
      onItemSelect:selectItem,
      onFindValue:findValue,
      parse: prep_data,
      selectFirst: false,
      scroll: false,
      width:325
    }
  );
}


/**
 * Initialize fancybox plugin for image display.
 * */
function initFancybox ()
{
  if (! $('.imageSmall a').length ) return;

  $('.imageSmall a').fancybox({
    'titlePosition': 'inside',
    'overlayShow': true,
    'overlayOpacity': 0.6,
    'opacity': true,
    'speedIn': 300,
    'speedOut': 300,
    'changeSpeed': 200
  });
}


/**
 * This function takes care of the String replacement in the search field.
 */
function initSearch()
{
  if (! $('#search').length ) return;

  var searchterm = 'Suchen ...';
  $('#search').val(searchterm);

  $('#search').focus(function()
  {
    if( $(this).val() == searchterm ) $(this).val('');
  });
  $('#search').blur(function()
  {
    if( $(this).val() === '' ) $(this).val(searchterm);
  });
}


/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */


/**
 * Backend function: to add/remove/edit kontext links.
 * */
function initKontextlinks () {

  if (! $('.kontextlinks').length ) return;
  
  var linknummer = $(".kontextlinks").children().size();

  $(".kontextlink").live('mouseover mouseout', function(event){
    if ( event.type == "mouseover" ) {
     $(this).addClass("editable-item-hover");
    } else {
      $(this).removeClass("editable-item-hover");
    }
  });

 //=========================
  // weiterer Kontextlink
  //=========================´
  $(".plus").click(function()
  {
    var linkname = $(this).attr("href");
    
    //var linkcount = $("#linkcount").attr("value");
    linkname++;
    //add new div- kontextlink
    $(".kontextlinks").append("<div class=\"kontextlink\" id=\"link_"+linkname+unescape("\">  <a href=\"#\" title=\"Link l%F6schen\" class=\"minus\" id=\"removeLink_")+linkname+"\"> </a><div class=\"kontexteingabe\"> <label for=\"linktext_"+linkname+"\">Linktext:<\/label> <input type=\"text\" name=\"linktext_"+linkname+"\" id=\"linktext_"+linkname+"\" /> <\/div><div class=\"kontexteingabe\"> <label for=\"kontextlink_"+linkname+"\">Link:<\/label> <input type=\"text\" name=\"kontextlink_"+linkname+"\" id=\"kontextlink_"+linkname+"\" value=\"http://\" \/> <\/div> <\/div>");

    $(this).attr("href",linkname);
    
    //count remaining children of div "kontextlinks"
    var linknummer = $(".kontextlinks").children().size();
    //write to hidden variable
    $("#linkcount").attr("value", linknummer);
    return false;
  });
  //===============
  // remove Link
  //===============
  $(".minus").live('click', function()
  {
    //remove last div- kontextlink
    var linknummer = $(this).attr("id").split("_")[1];
    
    if ( $("#linktext_"+linknummer).val().length > 0 || $("#kontextlink_"+linknummer).val().length > 7)
    {
      if ( confirm(unescape("Linktext und Kontextlink wirklich l%F6schen?")) )
      {  // wenn ja dann löschen
        $("#link_"+linknummer).remove();
        //count remaining children of div "kontextlinks"
        linknummer = $(".kontextlinks").children().size();
        $("#linkcount").attr("value", linknummer);
      }
    }
    else
    {
      $("#link_"+linknummer).remove();
      linknummer = $(".kontextlinks").children().size();
      $("#linkcount").attr("value", linknummer);
    }			
    
    return false;
  });
  
}

/**
 * Backend function: for event management - open & closes registrations
 */
function initKarussell()
{
  if (! $('.accordion .head').length ) return;

  $('.accordion .head').click(function() {
    $(this).next().toggle();
    $(this).toggleClass('active');
    return false;
  }).next().hide();

  $('.accordion .head:first').next().show();
  $('.accordion .head:first').addClass('active');
}


/**
 * Backend function: for event management.
 */
function initMastercheckbox()
{
  $('form .reglist').each( function(i)
  {
    i++;
    $('input[type=checkbox].master'+i).checkboxGroup({
      master: $('#master'+i)
    });
  });
}


/**
 * jQuery UI Datepicker 
 * */
function initDatepicker()
{
  $( ".date" ).each( function(){
    $(this).datepicker({
      showOn: "button",
      buttonImage: "/img/calendar/cal.gif",
      buttonImageOnly: true,
      dateFormat: 'yy-mm-dd'
    });
  });
}


/**
 * Backend function:
 *  delete icon - unset rich text edited variables
 * */
function initUnset()
{
  $(".unset").bind('click', unset);
}


/**
 * new (not in db) -> just reset variables
 * Must be public - so lightbox saveLB event works.
 * */
function unset( ev ) {
  var sortby = $(this).attr("href"),
      spezialfall = $(this).attr("class").split(' ')[1];

  if(spezialfall && spezialfall.match("fake"))
  { // Spezialfall fake-textarea (zb. in Kontakt Events Grunddaten, News Description)
    $('div#fake_'+sortby).html('');
  }
  else
  {
    $('div#t'+sortby +' h4 ~ *').remove();
  }
  $("#"+sortby).attr("value", "");
  $('#d'+sortby).remove();

  var $ref = $('a[href*='+sortby+']'),
      href = $ref.attr('href');

  if( href.indexOf('content=') != -1 )
  {
    href = href.replace(/&content=[^&]+/g, '');
    $ref.attr('href', href);
  }
  else
  {
    $ref.attr('href', href + '&content=');
  }
  // console.log(href);
  ev.preventDefault();
}


/**
 * Backend function used in event_new.rstl
 * ###
 * */
function convertDate(shortdate)
{
  splitD = new Array();
  splitD = shortdate.split('-');
  return new Date(splitD[0],splitD[1]-1,splitD[2]);
}


function initBacklinks(){
  
  $('.to1').click(function(){
    document.checkform.screen.value='1';
  });
  $('.to2').click(function(){
    document.input1.screen.value='2';document.input1.submit(); return false
  });
  $('.to3').click(function(){
    document.input2.screen.value='3';document.input2.submit(); return false
  });
  $('.to4').click(function(){
    document.saveform.screen.value='4';document.saveform.submit(); return false
  });
  
}
/**
 * Backend function used in event_new.rstl
 * js input check of lastday field in input1 forms
 * */
function initCheckLastday(){
  $( "#lastday" ).change( function(){
    if(!checkDate(document.input1.lastday, document.input1.firstday, "lastday")) return false;
    else return true;
  });
}


/**
 * Grunddaten form (id input1)
 * Backend function used in event_new.rstl
 * endday > firstday
 * */
function initCheckFirstday(){
  $( "#firstday" ).change( function(){
    if(!checkDate(document.input1.lastday, document.input1.firstday, "firstday")) return false;
    else return true;
  });
}

/**
 * ###
 * */
function checkDate(date1, date2, checkon) {
  if(checkon=="firstday"){
    var checkeddate = date2,
        msg = "Startdatum liegt nach dem Enddatum!";
  }else{         
    var checkeddate = date1,
        msg = "Enddatum liegt vor dem Startdatum!";
  }

  // check if in future (checkedday < today)
  datetocheck = convertDate(checkeddate.value);
  today = new Date();
  if ((datetocheck - today) < 0){
    alert('Hinweis: Datum liegt in der Vergangenheit');
  }
  
  // check format
  var goodDate = checkeddate.value.match(/^\d{4}-[0-1]?\d\-[0-3]?\d$/i);
  if (!goodDate){
    alert(unescape('Ung%FCltiges Datumsformat.\nBitte benutzen Sie das Format JJJJ-MM-TT'));
    checkeddate.value="";
    return false;
  }

  date1D = convertDate(date1.value);
  // lastday > firstday
  if(date2) {
    date2D = convertDate(date2.value);
    if ((date1D - date2D) < 0){
      alert('Fehler: ' + msg);
      checkeddate.value="";
      return false;
    }else{
      return true;
    }
  }
}

/**
 * Zusatzinfo form (id input2)
 * */
function initCheckInput2(){
  $( "#input2" ).each( function(){
    if(checkKontextlinks()){
      return true;
    }
    else {
      return false;
    }
  });
}
/**
 * ### Backend function?
 * Kontextlinks check if empty
 * */
function checkKontextlinks(){
 var anz = $(".kontextlinks").children().size();

  for(var i=1; i <= anz; i++)
  {
    if($("#kontextlink_"+i).val().search("http://") == 0){
      var li = 7;
    }else {
      var li = 0;
    }
    if ( $("#linktext_"+i).val().length > 0 && $("#kontextlink_"+i).val().substr(li).length == 0)
    {
      alert(unescape("Kontextlink "+i+" nicht ausgef%FCllt!"));
      return false;
    }
    else if ( $("#linktext_"+i).val().length == 0 && $("#kontextlink_"+i).val().substr(li).length > 0)
    {
      alert(unescape("Linktext "+i+" nicht ausgef%FCllt!"));
      return false;
    }
    else if ( $("#linktext_"+i).val().length == 0 && $("#kontextlink_"+i).val().substr(li).length == 0)
    {
      $("#link_"+anz).remove();
      anz--;
      $("#linkcount").attr("value", anz);
    }    
  }
  return true;
}


/**
 * === Older scripts. Should be translated to jQuery syntax. ===
 * */

/* set classname of object O to toggle (mainly for IE's pseudohover) */
function toggleClass ( O, toggle, statusline ) {
  if ( O ) {
    O.className = toggle;
  }
  if (statusline) {
    window.status = statusline;
  }
}

