var language = 0;
var pid = 0;
var map = null;
var geocoder = null;
var observer = null;
var mapid = null;
var _form = null;
var _action = null;
var _activityID = null;
var _resultID = null;
var _additionalIDNum = undefined;
var inProgress = false;
var oldContentWordCount = 0;
var newContentWordCount = 0;
var currentWidget='';
var inProgress = false;
var indicator = null;
var scrollPosition = new Array();


function addProvider(url){
	try {
		window.external.AddSearchProvider(url);
	} 
	catch (e) {
		alert("Du brauchst Internet Explorer 7 oder Firefox 2 um Wehype als Suchmaschine in deinem Browser eintzutragen.");
		return;
	}
}


function scrollHorizontal (elementid,xDistance,scrollWidthValue,clear) {
	if (clear==undefined) 
	  clear=false;
	if (!scrollPosition[elementid] || scrollPosition[elementid]==undefined)
	  scrollPosition[elementid]=0;
	scrollWidth = $(elementid).getWidth();
	if (((   xDistance == scrollWidthValue 
		  && scrollPosition[elementid] < 0) /*left*/ 
	    ||
	     (   xDistance == ((scrollWidthValue) * -1) 
		  && scrollPosition[elementid] >= 0) /* right */ )
		&& !inProgress
		&& scrollWidth > scrollWidthValue ) {
		inProgress=true;
		new Effect.Move(document.getElementById(elementid), { 
			x: xDistance,
			y: 0, 
			mode: 'relative',
			afterFinish:function() { inProgress = false;	}
		});
		scrollPosition[elementid] += xDistance;
	} else {
		//alert("scrollWidth: "+scrollWidth+" scrollWidthValue: "+scrollWidthValue+" xDistance: "+xDistance+" scrollPosition[elementid]: "+scrollPosition[elementid]);
	}
	if (clear && autoScroller)
	  window.clearInterval(autoScroller);
}


//@todo: get rid of hardcoded width's
function autoScrollStartPageSlider () {
	elementid='scrollbereich';
	xDistance=692;
	scrollWidthValue=692;
	if (scrollPosition[elementid]<0)
	  scrollHorizontal (elementid,xDistance,scrollWidthValue);
	else 
	  scrollHorizontal (elementid,(xDistance*(-1)),scrollWidthValue);
}


String.prototype.wordWrap = function(m, b, c){
    var i, j, s, r = this.split("\n");
    if(m > 0) for(i in r){
        for(s = r[i], r[i] = ""; s.length > m;
            j = c ? m : (j = s.substr(0, m).match(/\S*$/)).input.length - j[0].length
            || m,
            r[i] += s.substr(0, j) + ((s = s.substr(j)).length ? b : "")
        );
        r[i] += s;
    }
    return r.join("\n");
};


function trim (zeichenkette) {
  return zeichenkette.replace (/^\s+/, '').replace (/\s+$/, '');
}


function is_array( mixed_var ) {
    return ( mixed_var instanceof Array );
}


function str_replace(search, replace, subject) {
    var f = search, r = replace, s = subject;
    var ra = is_array(r), sa = is_array(s), f = [].concat(f), r = [].concat(r), i = (s = [].concat(s)).length;
    while (j = 0, i--) {
        while (s[i] = s[i].split(f[j]).join(ra ? r[j] || "" : r[0]), ++j in f){};
    };
    return sa ? s : s[0];
}


function setSortOrder (order,way,downimg,upimg,orderElem) {
	$(orderElem).value=order;
	if (way == 'up') {
	  $(downimg).src = '/fileadmin/hype/img/new/sort_down_off.gif';
	  $(upimg).src = '/fileadmin/hype/img/new/sort_up_on.gif';
	} else {
	  $(downimg).src = '/fileadmin/hype/img/new/sort_down_on.gif';
	  $(upimg).src = '/fileadmin/hype/img/new/sort_up_off.gif';
	} 
}


function hideUnusedWidgets () {
	$("unusedwidgets").style.visibility="hidden";
}


function toggleUnusedWidgets (element,currentwidget) {
	if ($("unusedwidgets").style.visibility!="visible" || currentWidget!=currentwidget) {
		showUnusedWidgets(element,currentwidget);
	} else {
		hideUnusedWidgets();
	}
}


function showUnusedWidgets (element,currentwidget) {
	currentWidget=currentwidget;
	Element.clonePosition($("unusedwidgets"), element, {setWidth: false, setHeight: false, offsetLeft: 20, offsetTop: 43 });
	$("unusedwidgets").style.visibility="visible";
}


function changeWidget (selfWidget,NewWidget) {
	widgetorder=extractWidgetElements("sort_container");
	widgetorder=widgetorder.toString().replace(selfWidget,NewWidget);
	Element.clonePosition($("widgetprogress"), selfWidget, {setWidth: false, setHeight: false, offsetLeft: -18, offsetTop: 18 });
	$("widgetprogress").style.visibility="visible";
	hideUnusedWidgets();
	ajaxGet('index.php?eID=tx_hype_pi1&no_cache=1&L=' + language + '&tx_hype_pi1[ajaxview]=savewidgetorder&tx_hype_pi1[widgetorder]='+widgetorder,undefined,undefined,undefined,false);
	location.reload();
}


function updateLatestTweets (language) {
	Element.clonePosition($('widgetprogress'), 'latesttweets', {setWidth: false, setHeight: false, offsetLeft: -18, offsetTop: 18 }); 
	$('widgetprogress').style.visibility='visible'; 
	ajaxGet('index.php?id=13&type=445&no_cache=1&tx_hype_pi1[ajaxview]=showlatesttweets&L='+language,'widgetprogress','tweetcontainer',false);	
}


function extractWidgetElements (sortableElement) {
	widgetorder = new Array();
	widgets=$$('div.moveme');
	for (i=0;i<widgets.length;++i)
		widgetorder.push(widgets[i].id);
	return widgetorder;
}


function changeText (id, showText, hideText) {
	if ($(id).innerHTML == hideText)
	  $(id).innerHTML = showText;
	else 
	  $(id).innerHTML = hideText;
}


function toggleBox(elementId, myDuration, switcher, showText, hideText) {
	if ($(elementId) && !inProgress) {
		inProgress = true;
		if (myDuration == undefined)
			myDuration = 0.5;
		if ($(elementId).style.display == 'none')  {
			//show
			changeText(switcher, showText, hideText);
			Effect.BlindDown(elementId, {
					duration: myDuration, 
					afterFinish:function(){
						inProgress = false;
					}
			}); 
		}
		else {
			//hide
			changeText(switcher, showText, hideText);
			Effect.BlindUp(elementId, {
				duration: myDuration, 
				afterFinish:function() {
					inProgress = false;
				}
			});
		}

	}
	return false;
}


function toggleCSS (htmlObj, cssValue1, cssValue2) {
	if (trim(htmlObj.className) == cssValue1)
	  htmlObj.className = cssValue2;
	else 
	  htmlObj.className = cssValue1;
}


function addSelectOption(selectObj, text, value, isSelected) {
    if (selectObj != null && selectObj.options != null) {
        selectObj.options[selectObj.options.length] = 
            new Option(text, value, false, isSelected);
    }
}


function removeSelectOption (selectObj, value) {
	var kids = selectObj.childNodes; 
	var numkids = kids.length; 
	for (var i = 0; i < numkids; i++) {
	     if (kids[i].value == value) {
	  		selectObj.removeChild(kids[i]);
	  		break;
	     }
	}
}


function isInSelectOptions (selectObj, value) {
	if (selectObj.options)
		for (i=0;i<selectObj.options.length;++i)
			if (value == selectObj.options[i].value)
		  		return true;
	return false;
}


function selectSelectOption (selectObj, value) {
	if (selectObj.options)
		for (i=0;i<selectObj.options.length;++i)
			if (value == selectObj.options[i].value)
		  		selectObj.options[i].selected=true;
}


function toggleSelectOption (selectObj, text, value, isSelected) {
	if (isInSelectOptions(selectObj,value))
		selectSelectOption (selectObj, value);
		//removeSelectOption (selectObj, value);
	else
		addSelectOption(selectObj,text,value,true);
}


function justBlindDown (elementId) {
	if ($(elementId).style.display == 'none')
	  Effect.BlindDown(elementId);
}


function toggleBlind (elementId) {
	if (!inProgress) {
		inProgress=true;
		if ($(elementId).style.display=='none') 
			Effect.BlindDown(elementId, {afterFinish:function(){inProgress=false;}} );
		else 
			Effect.BlindUp(elementId , {afterFinish:function(){inProgress=false;}});
	}
}


function hideAllCategories () {
	elems = $$('#catmenu ul.level2');
	for (i = 0; i < elems.length; ++i) 
		elems[i].style.display = 'none';
}


function createInPlaceEditor (language,ajaxview,externalControlId,returnParamName,mode,enterEditMode) {
	if (mode == 'textarea') {
		var editor = new Ajax.InPlaceEditor(returnParamName, 'index.php?eID=tx_hype_pi1&no_cache=1&L=' + language + '&tx_hype_pi1[ajaxview]=' + ajaxview, {
			rows: 6,
			cols: 87,
			okText: "Speichern",
			cancelText: "Abbrechen",
			savingText: "Speichere...",
			clickToEditText: "Hier klicken, um zu editieren",
			externalControl: externalControlId,
			callback: function(form, value){
				return 'tx_hype_pi1[' + returnParamName + ']=' + encodeURIComponent(value)
			}, 
			onEnterEditMode: function(form, value) { 
				search=new Array("<br>","<BR>");
				replace= new Array("","");
				$(returnParamName).innerHTML=str_replace(search,replace,$(returnParamName).innerHTML);
			},
			onLeaveEditMode: function(form, value) { 
				$(returnParamName).innerHTML=str_replace("\n","\n<br>",$(returnParamName).innerHTML);
			}
		});
	} else {
		var editor = new Ajax.InPlaceEditor(returnParamName, 'index.php?eID=tx_hype_pi1&no_cache=1&L=' + language + '&tx_hype_pi1[ajaxview]=' + ajaxview, {
			okText: "Speichern",
			cancelText: "Abbrechen",
			size: 70,
			savingText: "Speichere...",
			clickToEditText: "Hier klicken, um zu editieren",
			externalControl: externalControlId,
			callback: function(form, value){
			  return 'tx_hype_pi1[' + returnParamName + ']=' + encodeURIComponent(value)
			}, 
			onEnterEditMode: function(form, value) { 
				search=new Array("<br>","<BR>");
				replace= new Array("","");
				$(returnParamName).innerHTML=str_replace(search,replace,$(returnParamName).innerHTML);
			},
			onLeaveEditMode: function(form, value) { 
				$(returnParamName).innerHTML=str_replace("\n","\n<br>",$(returnParamName).innerHTML);
			}
		});
	}
	if (enterEditMode)
	  editor.enterEditMode('click');
}


function starboxChangedTextFor(event) {
  var indicator = this.down('.indicator'),
  pick = (event.memo.rating || 0).round() - 1,
  indicator = this.down('.indicator');
  this.starboxResetText = this.starboxResetText || $('votetextresult').innerHTML;
  			  
  $('votetextresult').update([
	hoverTextVoteFor
  ][pick]);
}
		
					
function starboxChangedTextAgainst(event) {
  var indicator = this.down('.indicator'),
  pick = (event.memo.rating || 0).round() - 1,
  indicator = this.down('.indicator');
  this.starboxResetText = this.starboxResetText || $('votetextresult').innerHTML;
  
  $('votetextresult').update([
	hoverTextVoteAgainst
    ][pick]);
}


function changeIndicatorText (element,t) {
  var indicator = $(element).down('.indicator'),
  restore = indicator.innerHTML;
  responses=t.responseText.split("|");
  indicator.update(responses[0]);
  $('votetextresult').update(responses[1]);
  //(function() { indicator.update(restore) }).delay(2);
}


// here we restore the indicator on mouseout, if needed
function starboxLeftText() {
  $('votetextresult').update(this.starboxResetText || '');
}


function starboxChangeTextQuality (event) {
  indicator = this.down('.indicator'),
  //pick = (event.memo.rating || 0).round() - 1,
  indicator = this.down('.indicator');
  this.starboxResetText = this.starboxResetText || indicator.innerHTML;
  
  indicator.update(starboxChangedTextQuality);
  /*
  indicator.update([
	starboxChangedTextQuality
    ][pick]);
   */
}


// here we restore the indicator on mouseout, if needed for quality voter
function starboxLeftTextQuality () {
  indicator.update(this.starboxResetText || '');
}


// when the link is clicked update the restore value
function starboxRatedText() {
  var indicator = this.down('.indicator');
  this.starboxResetText = indicator.innerHTML;
}	


function previewSearch (form,action,activityID,resultID,delay,additionalIDNum) {
	_form=form;
	_action=action;
	_activityID=activityID;
	_resultID=resultID;	
    _additionalIDNum=additionalIDNum;
	if (observer) clearTimeout(observer);
	observer = setTimeout("delegateAjaxSubmit()", delay);
}


function delegateAjaxSubmit () {
	$(_resultID).innerHTML="";
	if (_additionalIDNum!=undefined)
	  $(_resultID + _additionalIDNum).innerHTML="";
	ajaxSubmit(_form,_action,_activityID,_resultID,_additionalIDNum);
}


function ajaxSubmit (form,action,activityID,resultID,evalJS,resetOnSuccess) {
	$(activityID).style.display="inline";
	new Ajax.Updater("", action, {asynchronous:true, 
								  parameters:Form.serialize(form),
								  encoding: "UTF-8",
								  method: "post",
								  onSuccess: function (t) {
									$(activityID).style.display="none";
									if (resultID!=undefined && t.responseText!="")
									  $(resultID).innerHTML=t.responseText;
									if (resetOnSuccess!=undefined && resetOnSuccess && t.responseText.indexOf('message bad')==-1) 
								      form.reset();
								    if (evalJS!=undefined && evalJS)
								      extractAndExecuteJS(t.responseText);
									},
								  onFailure: function (t) {
									$(resultID).innerHTML="Ajax-Error";
								  }
								  }); 
}


function validateForm (fields) {
	fields=fields.split("|");
	for (i=0;i<fields.length;++i) {
	  if ($(fields[i]).value=="") {
	  	alert("Please fill out field "+fields[i]);
	  	return false;
	  }
	}
	return true;
}


function quoteText (text) {
	text = text.wordWrap(42, "\n", false);
	text = str_replace("\n","\n> ",text);
	text = str_replace("<br>","",text);
	return '> '+text;
}


function confirmPrompt (link,text) {
	var antwort = false;
  	antwort = confirm (text);
  	if (antwort) {
    	self.location.href = link;
  	}
} 


function extractAndExecuteJS (html) {
	scriptParts=html.extractScripts();
	for (i=0;i<scriptParts.length;++i)
		eval(scriptParts[i]);
}


function ajaxGet(action, activityID, resultID, evalJS, async) {
	if (activityID != undefined)
	  $(activityID).style.display = "inline";
	if (async == undefined)
	  async = true;
	if (evalJS == undefined)
	  evalJS = false;
	new Ajax.Request(action, { asynchronous: async, 
							   method: 'get',
							   encoding: 	"UTF-8",
							   //evalScripts: evalJS,
							   onSuccess: function (t) {
								 if (activityID!=undefined)
								   $(activityID).style.display="none";
								 if (resultID!=undefined && t.responseText!="")
								   $(resultID).innerHTML=t.responseText;
								 if (evalJS!=undefined && evalJS)
								   extractAndExecuteJS(t.responseText);
							   },
							   onFailure: function (t) {
								 if (resultID!=undefined)
								   $(resultID).innerHTML="Ajax-Error";
							   }
	  }
    )
}


function updateMap () {
	if ($("origin").value!="") {
		justBlindDown(mapid);
		showPlace($("origin").value);
	}
}


function showPlace (place) {
	if (geocoder) {
    	geocoder.getLatLng (
        place,
        function(point) {
        	if (!point) {
            	alert(place + " konnte nicht in Google Maps gefunden werden");
			} else {
            	map.setCenter(point, 13);
				$("latitude").value=point.lat();
				$("longitude").value=point.lng();
				var marker = new GMarker(point);
				map.addOverlay(marker);
				//marker.openInfoWindowHtml(place);
			}
		}
	);
    }
}
	

function initGoogleMaps (mapContainerId) {
	google.load("maps", "2.x");
	mapid=mapContainerId;
	
	function initialize () {
		if (document.getElementById(mapid)) {
			map = new google.maps.Map2(document.getElementById(mapid));
			map.setCenter(new google.maps.LatLng(51.165567, 10.458984), 1);
		    map.addControl(new GSmallMapControl());
		    map.addControl(new GMapTypeControl());
			geocoder = new GClientGeocoder();
			$(mapid).hide();
		}
	}
	
	Event.observe("origin", "keyup", showMap);
	function showMap () {
		if (this.observer) 
			clearTimeout(this.observer);
		this.observer = setTimeout("updateMap()", 1500);
	}
  
	google.setOnLoadCallback(initialize);
	//window.addOnUnload(GUnload);
	//google.setOnUnLoadCallback(GUnload);
}


function countWords (content) {
	fullStr = content + " ";
	initialWhitespaceRexp = /^[^A-Za-z0-9]+/gi;
	leftTrimmedStr = fullStr.replace(initialWhitespaceRexp, "");
	initialWhitespaceRexp = rExp = /[^A-Za-z0-9]+/gi;
	cleanedStr = leftTrimmedStr.replace(initialWhitespaceRexp, " ");
	splitString = cleanedStr.split(" ");
	return splitString.length -1;
}
	
	
function registerRevisionAmount (oldContent,newContent) {
	oldContentWordCount = oldContentWordCount+countWords(oldContent);
	newContentWordCount = newContentWordCount+countWords(newContent);	
	additionaWords =  newContentWordCount-oldContentWordCount;
	if (additionaWords>40)
	  $('saverevisionauthor').value=1;
	return true;
}


function appendTagToList (tag) {
	if ($('tags').value.indexOf(',') != -1) {
		currentEntry = $('tags').value;
		currentEntryPos = currentEntry.lastIndexOf(',');
		currentEntry = currentEntry.substr((currentEntryPos+1));
		//when the last entered string is just a blank -> append the found value instead
		//of replacing the first occurence of the blank which is not right in that case
		if (currentEntry==' ' || currentEntry=='')
		  $('tags').value = $('tags').value+tag.innerHTML;
		else
		  $('tags').value = $('tags').value.replace(currentEntry, ' '+tag.innerHTML);
	} else {
		$('tags').value = tag.innerHTML;
	}
	$('tags').focus();
}

/*
function handleOnDrop (dropelementId,dragElement) {
	tempHTML=$(dropelementId).innerHTML;
  	dragElement.removeAttribute('style');
	$(dropelementId).innerHTML=dragElement.parentNode.innerHTML;
	dragElement.parentNode.innerHTML=tempHTML;
	new Draggable('latesthypesdraggable', { revert: true, handle: 'latesthypesmovehandler' });
	new Draggable('hypeofdaydraggable', { revert: true, handle: 'hypeofdaymovehandler' });
	new Draggable('tophypesdraggable', { revert: true, handle: 'tophypesmovehandler' });
}
*/