/** Open a link via JavaScript
 * @var uri:   url of link:
 * "Go( 'none' );" for no reaction
 **/
Go = function ( uri ) {
	if( uri != "none" )
		location.href = uri;
}

/** Toggle layer visible/invisible using jQuery (jquery.js)
 *  and close the last opened Layer automatically
 *  @var layerID   layer to be toggled
 *  @var imgName   image resource to be changed when toggling layer (optional)
 **/
toggleLayerNew = function ( layerID, method )
{
	if( document.getElementById )
	{
		document.getElementById( layerID ).style.display = method;
	}
	return false; // no processing of link if javascript is enabled
}


/** Toggle layer visible/invisible using jQuery (jquery.js)
 *  and close the last opened Layer automatically
 *  @var layerID   layer to be toggled
 *  @var imgName   image resource to be changed when toggling layer (optional)
 **/
var lastLayer = ""; // stores the last opened Layer
toggleLayer = function ( layerID, imgName )
{
	if( document.getElementById )
	{
		// if layer is open, close it
		if( document.getElementById( layerID ).style.display == "block" )
		{
			$(document.getElementById( layerID )).slideUp("fast");
			lastLayer = "";
		}
		else // else if layer is close, open it
		{
			$(document.getElementById( layerID )).slideDown("fast");
			lastLayer = layerID;
			// if layer 'authorDetails' is shown
			// and image 'authorPortrait* is present
			// height needs to be checked
		}
		
		if( imgName != "" ) // is there an image to change?
		{
			document.images[imgName].src = ( document.images[imgName].src == "/images/open.gif" ? "/images/close.gif" : "/images/open.gif" );
		}
	}
	return false; // no processing of link if javascript is enabled
}

/** Resize layer for not being resized because of "float"-style
 *
 */
resizeAuthor = function()
{
	var newHeight;
	// check, if layer needs to be resized
	if( parseInt( document.getElementById('authorPortrait').height) > parseInt(document.getElementById( 'authorDetails' ).offsetHeight ) )
	{
		newHeight = parseInt( document.getElementById('authorPortrait').height) + 50; // +50 because of margins etc.
		document.getElementById( 'authorDetails' ).style.height = newHeight + "px";
	}
	return false;
}

/** Hide last opened layer if clicked on empty part of document
 *  @var evt: event object where mouse was clicked
 **/
hideHeadwords = function ( evt )
{
	// no action required if no layer is opened
	if( lastLayer != "" )
	{
		if( !evt ) // sometimes event is not correctly fired
		{
			evt = window.event;
		}
		var elem = (evt.target) ? evt.target : evt.srcElement;  // html element which fired event
		if( elem.tagName != "A" && lastLayer != "authorDetails" ) // no hiding if click was on a link
		{
			$(document.getElementById( lastLayer )).slideUp("fast");
			lastLayer = "";	
		}
	}
}

/** Hide both menus on main page
 *
 **/
hideAll = function ()
{
	if( document.getElementById( 'headwords' ) )
	{
		document.getElementById( 'headwords' ).style.display = "none";
	}
	if( document.getElementById( 'authors' ) )
	{
		document.getElementById( 'authors' ).style.display = "none";
	}
	if( document.getElementById( 'helpLinks' ) )
	{
		document.getElementById( 'helpLinks' ).style.display = "none";
	}
	if( document.getElementById( 'authorsDyn' ) )
	{
		document.getElementById( 'authorsDyn' ).style.display = "none";
	}
	if( document.getElementById( 'headwordsDyn' ) )
	{
		document.getElementById( 'headwordsDyn' ).style.display = "none";
	}
}

/** Toggle menu layer on main page without animation
 *  and closing other opened menu layer
 *  @var layerID:  
 **/
toggleLayerEasy = function ( layerID )
{
	if( document.getElementById )
	{
		// close all menu layers
		if( document.getElementById( layerID ).style.display == "inline" )
		{
			hideAll();	
		}
		else // close all other layers and opened specified layer
		{
			hideAll();
			document.getElementById( layerID ).style.display = "inline";
			if(self.location.href.search(/\/zitate\/suche/) == -1 )
			{
				window.scrollBy( 0, 10000 ); // Scroll to bottom of page, if menu opens beyond window
			}
		}
	}
	return false;
}

/** Hide all menu layers on main page when clicked on empty part of document
 *  @var evt:  event object where mouse was clicked
 **/
clickAway = function ( evt )
{
	if( !evt ) // sometimes event is not correctly fired
	{
		evt = window.event;
	}
	var elem = (evt.target) ? evt.target : evt.srcElement;  // html element which fired event
	if( elem.tagName != "A" && elem.tagName != "IMG" && elem.tagName != "INPUT"  ) // no hiding if click was on a link or an image
	{
		hideAll();
	}
}

/** Redirect search on search form for Google-friendly url
 *  @var searchString:  string to be searched in database
 **/
searchForm = function ( searchString )
{
	// check if search string is empty or given dummy string
	if( searchString == "" || searchString == "Suchbegriff" )
	{
		alert( "Bitte geben Sie einen Suchbegriff ein!" );
	}
	else // check, if some of the words (seperated by spaces) are < 4 letters
	{
		strings = searchString.split(" ");
		for( i = 0; i < strings.length; i++ )
		{
			if( strings[i].length <= 3 )
			{
				alert( "Suchbegriffe mit weniger als 4 Buchstaben werden bei der Volltextsuche ignoriert." );
				break;
			}
		}
		Go('/zitate/suche/'+searchString+'/');
	}
	return false;
}

function clearForm(inputObj, text)
{
	if( inputObj.value == text )
		inputObj.value = "";
}

function insertForm(inputObj, text)
{
	if( inputObj.value == "" )
		inputObj.value = text;
}

/** Emulate hover pseudo element for <li>-elements for MSIE
 *
 **/
startList = function() {
	if( document.all && document.getElementById )
	{
		navRoot = document.getElementById( "nav" );
		
		for (i=0; i<navRoot.childNodes.length; i++)
		{
			node = navRoot.childNodes[i];
			if( node.nodeName=="LI" )
			{
				node.onmouseover = function()
				{
					this.className += " over";
				}
				node.onmouseout = function()
				{
					this.className = this.className.replace(" over", "");
				}
			}
		}
	}
}

accessibleList = function( node )
{
	node.parentNode.className += " over";
}
hideAccessibleList = function()
{
	document.getElementsByTagName("LI")[1].className = "";
	document.getElementsByTagName("LI")[6].className = "";
}


/** Rate cites via clicking on 1-5 stars
 *  @var rating:   value of rating (1-5)
 *  @var formName: name of form which contains rating
 **/
function rate( rating, formName )
{
	document.forms[formName].ratingvalue.value = rating;
	document.forms[formName].submit();
	return false;
}

/** Display 1-5 stars indicating possibel rating
 *  @var rating:    number of stars to display
 *  @var imageName: image which displays the stars
 *  @var dir:		mouseover or mouseout
 **/
function hoverRate( rating, imageName, dir )
{
	document.images[imageName].src = "/images/rating"+rating+".gif";
	var text_id=imageName+'word';
	var text=document.getElementById(text_id);
	if(text) text.parentNode.removeChild(text);
	if(dir=='in') {
		var word='';
		var el=document.createElement('span');
		var class=document.createAttribute('class');
		class.nodeValue='ratingConfirm';
		var id=document.createAttribute('id');
		id.nodeValue=text_id;
		el.setAttributeNode(class);
		el.setAttributeNode(id);
		switch(rating) {
			case 1:
				word='schwach';
			break;
			case 2:
				word='mäßig';
			break;
			case 3:
				word='nicht schlecht';
			break;
			case 4:
				word='gut';
			break;
			case 5:
				word='ausgezeichnet';
			break;
		}
		var text=document.createTextNode(word);
		el.appendChild(text);
		var container=document.getElementById(imageName).parentNode.parentNode;
		container.appendChild(el);
	}
}
/** Preload Rating Images
 *
 **/
if( document.images )
{
	rating0		= new Image();	rating0.src		= "/images/rating0.gif";
	rating1		= new Image();	rating1.src		= "/images/rating1.gif";
	rating15	= new Image();	rating15.src	= "/images/rating15.gif";
	rating2		= new Image();	rating2.src		= "/images/rating2.gif";
	rating25	= new Image();	rating25.src	= "/images/rating25.gif";
	rating3		= new Image();	rating3.src		= "/images/rating3.gif";
	rating35	= new Image();	rating35.src	= "/images/rating35.gif";
	rating4		= new Image();	rating4.src		= "/images/rating4.gif";
	rating45	= new Image();	rating45.src	= "/images/rating45.gif";
	rating5		= new Image();	rating5.src		= "/images/rating5.gif";
}

/** Attach event handler for documents
 *  see description of each function
 **/
if( document.addEventListener )
{
	document.addEventListener( "click", clickAway, false );
	document.addEventListener( "click", hideHeadwords, false );
}
if( document.attachEvent )
{
	document.attachEvent( "onclick", clickAway );
	document.attachEvent( "onclick", hideHeadwords );
	window.attachEvent( "onload", startList );
}

selectExtended = function( id, name, which )
{
	hideAll();

	document.getElementById( which ).value = name;
	if(which.search(/Author/) != -1 )
	{
		if(id != 0)
			document.getElementById('searchAuthor').checked = true;
		document.getElementById('authorId').value=id;
		document.getElementById('authorName').value=name;
	}
	else
	{
		if(id != 0)
			document.getElementById('searchHeadword').checked = true;
		document.getElementById('headwordId').value=id;
		document.getElementById('headwordName').value=name;
	}
	
	return false;
}

checkSelection = function(which)
{
	if(!document.getElementById('search'+which).checked)
	{
		if(which=="Author")
			clearAuthor();
		else
			clearHeadword();
	}
	else
	{
		document.getElementById('select'+which).value = "[alle "+(which=="Author"?"Autoren":"Themen")+"]";
	}
}

clearAuthor = function()
{
	document.getElementById('selectAuthor').value = '[alle Autoren]';	
	document.getElementById('authorId').value="";
	document.getElementById('authorName').value="";
}

clearHeadword = function()
{
	document.getElementById('selectHeadword').value = '[alle Themen]';	
	document.getElementById('headwordId').value="";
	document.getElementById('headwordName').value="";
}

updateDyn = function( searchString, outputObj, phpFile )
{
	var http;
	var table = (outputObj.id == "authorsDyn"?"aphorismus_author":"aphorismus_headword");
	if (window.XMLHttpRequest)
	{
		http = new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		http = new ActiveXObject("Microsoft.XMLHTTP");
	}
	http.open("POST", "http://www.zitate-aphorismen.de/zitate/"+phpFile, true);
	http.onreadystatechange = function()
	{
		if (http.readyState == 4)
		{
			outputObj.innerHTML = http.responseText;
		}
	}
	http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	http.send( "searchString="+encodeURIComponent(searchString)+"&table="+table );
	return http;
}

var lastAJAX;
dynamicSearchList = function( obj )
{
	var staticObj = document.getElementById((obj.id=="selectAuthor"?"authors":"headwords"));
	var dynObj = document.getElementById((obj.id=="selectAuthor"?"authorsDyn":"headwordsDyn"));
	try
	{	lastAJAX.abort(); } catch(e) {}
	dynObj.innerHTML = "<li><em>laden...</em></li>";
	if(obj.value == "[alle "+(obj.id=="selectAuthor"?"Autoren]":"Themen]") || obj.value == (obj.id=="selectAuthor"?"[Autor":"[Thema")+" auswählen]")
	{
		obj.value = "";
	}
	if( obj.value == "" )
	{
		toggleLayerNew(dynObj.id, "none");
		toggleLayerNew(staticObj.id, "block");
	}
	else
	{
		if(self.location.href.search(/\/zitate\/suche/) == -1 )
		{
			lastAJAX = updateDyn(obj.value, dynObj, "getlinklist.php");
		}
		else
		{
			lastAJAX = updateDyn(obj.value, dynObj, "getlist.php");
		}
		toggleLayerNew(staticObj.id, "none");
		toggleLayerNew(dynObj.id, "block");
	}
}

standardText = function(text, obj)
{
	if( obj.value == "" )
		obj.value = text;
}