//
// OTS Portal - Copyright (c) 2007 AUEL EDV-Beratung GmbH
//

//
// JavaScript-Datei für das OTS Portal Projekt.
// 
// @author Sebastian Hornbostel (AUEL EDV-Beratung GmbH)
// @author Nicolas Marochow (AUEL EDV-Beratung GmbH)
// @version $Id$
//
	
	// Basierend auf der kompletten Id des Quell-Elements und der Teil-Id des
  // Ziel-Elements die komplette Id des Ziel-Elements erstellen
  // Bsp: Aus 'main_:xyz:meinIdentifierEbene1:ZeileX:partialSourceId' wird
  //          'main_:xyz:meinIdentifierEbene1:ZeileX:partialTargetId'.
function createCompleteTargetId(completeSourceId, partialTargetId)
{
  //alert(completeSourceId+"'/'"+partialTargetId);
  var lastIndexOfDoppelpunkt = completeSourceId.lastIndexOf(":");
  var prefixTargetId = completeSourceId.substring(0,lastIndexOfDoppelpunkt+1);
  var completeTargetId = prefixTargetId.concat(partialTargetId);
  //alert(completeTargetId);
  return completeTargetId;
}

// Wert vom Button übernehmen
function doWertUebernehmen(completeSourceId,wert,partialTargetId)
{
  // Id des Ziel-Elementes aufbauen
 var completeTargetId = createCompleteTargetId(completeSourceId,partialTargetId);

 var source = document.getElementById(completeSourceId);
 source.blur();
 
  // Wert im Ziel-Element setzen
  var target = document.getElementById(completeTargetId);
  target.value = wert;
  
  // Focus ins Eingabefeld
  target.focus();
  target.click();
  //alert(completeTargetId+': '+wert);
}

// Inputfeld verstecken
function doVerstecken(completeSourceId,partialTargetId)
{
	// Id des Ziel-Elementes aufbauen
 	var completeTargetId = createCompleteTargetId(completeSourceId,partialTargetId);

 	// Wert im Ziel-Element setzen
  document.getElementById(completeTargetId).style.display = "none";
}

// Element verstecken wenn vorhanden
function doVersteckenIfExists(completeSourceId,partialTargetId)
{
	if(document.getElementById(partialTargetId) != null)
	{
	// Id des Ziel-Elementes aufbauen
 	var completeTargetId = createCompleteTargetId(completeSourceId,partialTargetId);

 	// Wert im Ziel-Element setzen
	document.getElementById(completeTargetId).style.display = "none";
	}
}

// Inputfeld wieder sichtbar machen
function doWiederherstellen(completeSourceId,partialTargetId)
{
 	// Id des Ziel-Elementes aufbauen
 	var completeTargetId = createCompleteTargetId(completeSourceId,partialTargetId);

 	// Wert im Ziel-Element setzen
  document.getElementById(completeTargetId).style.display = "inline";
}

// Element wieder sichtbar machen, wenn vorhanden
function doWiederherstellenIfExists(completeSourceId,partialTargetId)
{
 	if(document.getElementById(completeSourceId) != null && document.getElementById(partialTargetId) != null)
	{
		// Id des Ziel-Elementes aufbauen
	 	var completeTargetId = createCompleteTargetId(completeSourceId,partialTargetId);

	 	// Wert im Ziel-Element setzen
		document.getElementById(completeTargetId).style.display = "inline";
	}
}

// Inputfeld wieder sichtbar machen, allerdings mit display:block
function doWiederherstellenBlock(completeSourceId,partialTargetId)
{
 	// Id des Ziel-Elementes aufbauen
 	var completeTargetId = createCompleteTargetId(completeSourceId,partialTargetId);

 	// Wert im Ziel-Element setzen
  document.getElementById(completeTargetId).style.display = "block";
}



// Inputfeld-Sichtbarkeit toggeln
function toggleVisibility(completeSourceId,partialTargetId)
{
  // Id des Ziel-Elementes aufbauen
 	var completeTargetId = createCompleteTargetId(completeSourceId,partialTargetId);

 	// Sichtbarkeit toggeln
 	var visibility = document.getElementById(completeTargetId).style.display;
 	if (visibility == "none")
 	{
 	  doWiederherstellen(completeSourceId,partialTargetId);
 	}
 	else
 	{
 	  doVerstecken(completeSourceId,partialTargetId);
 	}
}

// Checkbox deaktivieren (not checked)
function doDeactivate(completeSourceId,partialTargetId)
{
 	// Id des Ziel-Elementes aufbauen
 	var completeTargetId = createCompleteTargetId(completeSourceId,partialTargetId);

 	// Wert im Ziel-Element setzen
  document.getElementById(completeTargetId).checked = false;
}

// Checkbox deaktivieren (not checked), wenn vorhanden
function doDeactivateIfExists(completeSourceId,partialTargetId)
{
 	if(document.getElementById(completeSourceId) != null && document.getElementById(partialTargetId) != null)
	{
		// Id des Ziel-Elementes aufbauen
	 	var completeTargetId = createCompleteTargetId(completeSourceId,partialTargetId);

	 	// Wert im Ziel-Element setzen
		document.getElementById(completeTargetId).checked = false;
	}
}

// Checkbox aktivieren (checked)
function doActivate(completeSourceId,partialTargetId)
{
 	// Id des Ziel-Elementes aufbauen
 	var completeTargetId = createCompleteTargetId(completeSourceId,partialTargetId);

 	// Wert im Ziel-Element setzen
  document.getElementById(completeTargetId).checked = true;
}

// Checkbox-Checked-Status toggeln
function toggleChecked(completeSourceId,partialTargetId)
{
  // Id des Ziel-Elementes aufbauen
 	var completeTargetId = createCompleteTargetId(completeSourceId,partialTargetId);

 	// Sichtbarkeit toggeln
 	var value = document.getElementById(completeTargetId).checked;
 	if (value == false)
 	{
 	  doActivate(completeSourceId,partialTargetId);
 	}
 	else
 	{
 	  doDeactivate(completeSourceId,partialTargetId);
 	}
}

function doSetTrue(completeSourceId,partialTargetId)
{
 	// Id des Ziel-Elementes aufbauen
 	var completeTargetId = createCompleteTargetId(completeSourceId,partialTargetId);

 	// Wert im Ziel-Element setzen
  document.getElementById(completeTargetId).value = "1";
}

function doSetFalse(completeSourceId,partialTargetId)
{
 	// Id des Ziel-Elementes aufbauen
 	var completeTargetId = createCompleteTargetId(completeSourceId,partialTargetId);

 	// Wert im Ziel-Element setzen
  document.getElementById(completeTargetId).value = "0";
}

function doSetValue(completeSourceId, partialTargetId, value)
{
	// Id des Ziel-Elementes aufbauen
	var completeTargetId = createCompleteTargetId(completeSourceId,partialTargetId);

	// Wert im Ziel-Element setzen
	$(completeTargetId).value = value;
}

function neuesBildFenster(bildUrl,imageTitle)
{
  
  if(bildUrl != null && bildUrl != "")
  {
	 var bild = new Image();
	 bild.src = bildUrl;
	 var breite = bild.width + 20;
	 var hoehe = bild.height + 20;
	 var neuesFenster = window.open("", "targetGrossansicht", "width="+breite+", height="+hoehe+", scrollbars=no, toolbar=no, status=no, menubar=no, resizeable=no, location=no");
	 var html = '<html><body leftmargin=0" topmargin="0" marginwidth="0" marginheight="0"><div style="margin-top:10px; margin-left:10px"><img src="'+bildUrl+'" id="meinBild" title="'+imageTitle+'" onclick="javascript:window.close()" style="cursor: pointer;" /></div></body></html>';
	 neuesFenster.document.write(html);
	 neuesFenster.document.close();
	 neuesFenster.focus();
  }
} 

//
// Wird für das Login innerhalb des Admin-Bereichs verwendet.
// Überprüft ob die Return-Taste gedrückt wurde. In diesem Fall den
// Login-Button betätigen.
//
function doLoginKeyPressed(event, login_button)
{
	//alert('doLoginKeyPressed: '+event+'/'+login_button);
	var buttonElement = $(login_button);

	// Gedrückte Taste bestimmen.
	var keyCode = event.which;
	if(!keyCode)
	{
		keyCode = event.keyCode;
	}
	
	//alert('doLoginKeyPressed: '+keyCode+'/'+buttonElement);

	// Wenn es sich um die Return-Taste handelt, dann Berechnung ausführen.
	if(keyCode == 13)
	{
		//alert('doLoginKeyPressed_1: '+keyCode+'/'+buttonElement);
		if(buttonElement)
		{
		  //alert('doLoginKeyPressed_2: '+keyCode+'/'+buttonElement);
		  buttonElement.focus();		  
		  buttonElement.click();
		}

		// false zurückgeben, damit das Event nicht weitergeleitet wird. 
		// Funktioniert so nicht mit Opera in der Version 9.
		return false;
	}
}


/**
 * Über diese Methode werden alle Checkboxen innerhalb der übergebenen 
 * Tabelle deselektiert.
 */
function doDeselectAll(table, checkBoxAlle)
{
  for (i = 0, n = table.getElementsByTagName("input").length; i < n; i++)
  {
    if(table.getElementsByTagName("input")[i].id != checkBoxAlle)
    {
      table.getElementsByTagName("input")[i].checked = false;
    }
  }
} 

/* Wird für das Popup-Fenster verwendet in dem Alle Preisinformationen für eine Veranstaltungsgruppe kombiniert dargestellt werden.
 * Der Aufruf der Methode bewirkt, dass beim Herüberfahren über die Indizes der Veranstaltungen im Tabellenheader, jeweils die  
 * entsprechenden Veranstaltungsinformationen in einen DIV geschrieben werden.
 */
function writeVAInfo(div_id, va_info, span_id, input_id)

{
	document.getElementById(span_id).className = 'textDecorationNone text_9pt';
	document.getElementById(span_id).style.fontWeight='bold';
	
	if(document.getElementById(input_id) != null)
	{
		if(document.getElementById(input_id).value != span_id && document.getElementById(input_id).value != "")
		{
			document.getElementById(document.getElementById(input_id).value).className = 'textDecorationUnderline text_8pt'; 
			document.getElementById(document.getElementById(input_id).value).style.fontWeight='bolder';
		}		
		document.getElementById(input_id).value = span_id;
	}

	if(document.getElementById(div_id) != null)
	{
		va_info = va_info.replace("&lt;br&gt;","<br>");
		document.getElementById(div_id).innerHTML = va_info;
	}
}

/* 
 * Mit dieser Methode kann die übergene URL im Browser als Bookmark hinzugefügt werden. 
 */
function addBookmark(id, title, url)
{
  //IE5+
  if(document.all && !window.opera && window.external)
  {
    window.external.AddFavorite(url,title);
  }
  // Gecko (Firefox,...)
  else if ((typeof window.sidebar == 'object') && (typeof window.sidebar.addPanel == 'function'))
  {
  }
  else
  {
	document.getElementById(id).href = url;
    document.getElementById(id).rel="sidebar";
  }
}

function vaCommandCalendarClicked(selectedDate)
{
	// JavaScript Methode die von einzelnen Seiten überschrieben werden kann
	// um auf das Event Klick in den Kalender zu reagieren.
}

/*
 * Datumsüberprüfung innerhalb der Stöbern Komponente.
 * 
 * Es wurde ein Von Datum eingegeben:
 * - Wenn Von Datum gelöscht wurde -> keine Änderung
 * - Wenn kein Bis Datum eingetragen -> keine Änderung
 * - Wenn Bis Datum gleich/nach Von Datum -> keine Änderung
 * - Wenn Bis Datum vor Von Datum -> Bis Datum ist Von Datum
 *  
 * Es wurde ein Bis Datum eingegeben:
 * - Wenn Bis Datum gelöscht wurde -> keine Änderung
 * - Wenn kein Von Datum eingetragen -> keine Änderung
 * - Wenn Bis Datum gleich/nach Von Datum -> keine Änderung
 * - Wenn Bis Datum vor Von Datum -> Bis Datum ist Von Datum
 */
function checkDate(fromInputId, toInputId, dateFormatPattern)
{
	var fromInput = $(fromInputId);
	var toInput = $(toInputId);
		
	if(fromInput && toInput)
	{
		var fromDateValue = fromInput.value;
		var toDateValue = toInput.value;
		
		var simpleDateFormat = new org_apache_myfaces_SimpleDateFormat(dateFormatPattern);
	    var fromDate = simpleDateFormat.parse(fromDateValue);
	    var toDate = simpleDateFormat.parse(toDateValue);
	    
	    if(fromDate && toDate)
	    {
	    	if(toDate.getTime() < fromDate.getTime())
	    	{
	    		toInput.value = fromInput.value;
	    	}
	    }
	}    
}

function fireEvent(obj,evt){
	var fireOnThis = obj;
	if( document.createEvent ) {
	  var evObj = document.createEvent('MouseEvents');
	  evObj.initEvent( evt, true, false );
	  fireOnThis.dispatchEvent(evObj);
	} else if( document.createEventObject ) {
	  fireOnThis.fireEvent('on'+evt);
	}
}


/*
 * Deaktivierung der Buttons nach dem ersten Klick (für eine bestimmte 
 * Zeitspanne).
 */
Event.observe(this.window, 'load', addDisabledListeners);


//
//Wird im Zusammenhang mit der PortalLinkRenderer Komponente verwendet.
//Nach dem Klick auf einen Link sollen alle Links für eine bestimmte
//Zeitspanne gesperrt werden, um einen doppelten Aufruf der Seite zu
//verhindern.
//

var linkDisabledAfterClick = false;

var OnclickOnceHelper =
{
	ignore : function(link)
	{
		linkDisabledAfterClick = false;
		return true;
	},
		
	clickOnce : function(link)
	{
		if(linkDisabledAfterClick)
		{
			return false;
		}
		else
		{
			linkDisabledAfterClick = true;
			window.setTimeout("OnclickOnceHelper.enableAfterClick(true)", 2000);
			//window.document.bgColor = "#00ff00";
			return true;
		}
	},

	enableAfterClick: function(enable)
	{
		linkDisabledAfterClick = false;
		//window.document.bgColor = "";
	}	
};
