// JavaScript Document


function addOrganisation() {
	var selectedOption = document.forms.input_event.all_orgs.selectedIndex;
	if (selectedOption !=0) {
		newOrganisation = new Option(document.forms.input_event.all_orgs.options[selectedOption].text, document.forms.input_event.all_orgs.options[selectedOption].value, false, true);
		document.forms.input_event.selected_orgs.options[document.forms.input_event.selected_orgs.length] = newOrganisation;
		document.forms.input_event.selected_orgs.size=document.forms.input_event.selected_orgs.length;
		document.forms.input_event.selected_orgs.style.display = "inline";
		document.forms.input_event.remove_organisation.style.display = "inline";
		option_list();
	}
}

function removeOrganisation() {
	var selectedOption = document.forms.input_event.selected_orgs.selectedIndex;
	document.forms.input_event.selected_orgs.options[selectedOption] = null;
	document.forms.input_event.selected_orgs.size=document.forms.input_event.selected_orgs.length;
	
	if (document.forms.input_event.selected_orgs.length == 0) {
		document.forms.input_event.selected_orgs.style.display = "none";
		document.forms.input_event.remove_organisation.style.display = "none";
	} else {
		for (i=0; i<=document.forms.input_event.selected_orgs.length-1; i++) {
			document.forms.input_event.selected_orgs.options[i].selected=true;
		}
	}
	option_list();
}

function option_list() {
	opt_list = new Array();
	for (i=0; i<=document.forms.input_event.selected_orgs.length-1; i++) {
		opt_list[i] = document.forms.input_event.selected_orgs.options[i].value;
	}
	var list = opt_list.join(",");
	document.forms.input_event.organisation.value=list;
}

function get_maps() {
var addresse = document.getElementsByName("address")[0].value;
	if (addresse!="") {
		getLGLN();
		get_bau_kuerzel();
		return true;
	}
}

function getLGLN() {
	//var map = new GMap2(document.getElementById("map_canvas"));
	var address = document.getElementsByName("address")[0].value;
	var geocoder = new GClientGeocoder();
	geocoder.getLatLng(address,
	function(point) {
		if (!point) {
			alert("Zu der angegebenen Adresse " + address + " konnten keine Google-Map-Koordinaten gefunden werden.");
		} else {
		//	document.getElementById("LGLN").innerHTML="Länge und Breite für Google-Maps: "+point;
			//document.getElementById("LGLN").innerHTML='<a href="map.php?geo='+point+'" target="_blank">Google-Map anzeigen</a>';
			document.getElementsByName("geo_coord")[0].value=point;
		}
	});
}

function showMap(lat,lng) {
	var map = new GMap2(document.getElementById("map_canvas"));
	map.setCenter(new GLatLng(lat, lng), 15);
	var point = new GLatLng(lat, lng);
	var marker = new GMarker(point);
	map.addOverlay(marker);
	map.setMapType(G_NORMAL_MAP);
	map.addControl(new GLargeMapControl());
	map.addControl(new GMapTypeControl());
	document.getElementById("mapTitle").innerHTML = 'Karte';
	window.location.href = '#map';
}

//some AJAX

var http_request = false;

function get_bau_kuerzel() {
	http_request = false;
	var addresse = document.getElementsByName("address")[0].value;
	if (addresse!="") {
		var url = "http://www.uzh.ch/news/agenda/edit/ajax/get_bk.php";
		if (window.XMLHttpRequest) { // Mozilla, Safari,...
			http_request = new XMLHttpRequest();
		} else if (window.ActiveXObject) { // IE
			try {
				http_request = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					http_request = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {}
			}
		}
		
		if (!http_request) {
			alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
				return false;
		}
		
		var query_str = "address="+escape(addresse);
		http_request.onreadystatechange = writeBauKuerzel;
		http_request.open('POST', url, true);
		http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset iso-8859-1');
		http_request.send(query_str);
		}
	}

	function writeBauKuerzel() {

		if (http_request.readyState == 4) {
			if (http_request.status == 200) {
				if(document.getElementsByName("bldg")[0].value==="") {
					document.getElementsByName("bldg")[0].value=http_request.responseText;
				}
			} else {
				alert('Bei dem Request ist ein Problem aufgetreten.');
			}
		}
	}
	
	function get_address() {
	http_request = false;
	var bk = document.getElementsByName("bldg")[0].value;
	if (bk !="") {
		var url = "http://www.uzh.ch/news/agenda/edit/ajax/get_adr.php";
		if (window.XMLHttpRequest) { // Mozilla, Safari,...
			http_request = new XMLHttpRequest();
		} else if (window.ActiveXObject) { // IE
			try {
				http_request = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					http_request = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {}
			}
		}
		
		if (!http_request) {
			alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
				return false;
		}
		
		var query_str = "bk="+escape(bk);
		http_request.onreadystatechange = writeAdr;
		http_request.open('POST', url, true);
		http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset iso-8859-1');
		http_request.send(query_str);
		}
	}
	
	function writeAdr() {

		if (http_request.readyState == 4) {
			if (http_request.status == 200 && http_request.responseText !="") {
				if(document.getElementsByName("address")[0].value==="") {
					document.getElementsByName("address")[0].value=http_request.responseText;
				}
			} else {
				alert('Das Kürzel '+document.getElementsByName("bldg")[0].value +' ist kein gültiges UZH-Gebudekürzel.');
				document.getElementsByName("bldg")[0].value="";
			}
		}
	}
	
	// function to retrieve the Map-Graphic from plaene.uzh.ch
	
	function getPlaene(mapURL) {
	http_request = false;
	imgLink = mapURL;
	if (mapURL !="") {
		var url ="edit/ajax/getPlan.php";
		if (window.XMLHttpRequest) { // Mozilla, Safari,...
			http_request = new XMLHttpRequest();
		} else if (window.ActiveXObject) { // IE
			try {
				http_request = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					http_request = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {}
			}
		}
		
		if (!http_request) {
			
				return false;
		}
		
		var query_str = "url="+escape(mapURL);
		http_request.onreadystatechange = showPlan;
		http_request.open('POST', url, true);
		http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset iso-8859-1');
		http_request.send(query_str);
		}
	}
	
	function showPlan() {
		
		if (http_request.readyState == 4) {
			if (http_request.status == 200 && http_request.responseText !="") {
				document.getElementById("mapTitle").innerHTML = 'Karte';
				document.getElementById("map_canvas").innerHTML = '<a href="'+imgLink+'"><img src="'+http_request.responseText+'" width="460" border="0" /></a>';
				window.location.href = '#map';
			} else {
				return false;
			}
		}
	}
	
	// Aus institute.js notwendig, damit die Bilder gefunden werden
	
	imgNav_0 = new Image(); imgNav_0.src = "http://www.uzh.ch/public/authoring/images/key-visual_0.jpg";
	imgNav_1 = new Image(); imgNav_1.src = "http://www.uzh.ch/public/authoring/images/key-visual_1.jpg";
	imgNav_2 = new Image(); imgNav_2.src = "http://www.uzh.ch/public/authoring/images/key-visual_2.jpg";
	imgNav_3 = new Image(); imgNav_3.src = "http://www.uzh.ch/public/authoring/images/key-visual_3.jpg";
	imgNav_4 = new Image(); imgNav_4.src = "http://www.uzh.ch/public/authoring/images/key-visual_4.jpg";
	imgNav_5 = new Image(); imgNav_5.src = "http://www.uzh.ch/public/authoring/images/key-visual_5.jpg";

	function changeImgNav(imgNr){
		if(imgNr == 0) {
			document.images["key-visual"].src = imgNav_0.src;
		} else {
			document.images["key-visual"].src = eval('imgNav_'+imgNr+'.src');
		}
	}

	function selectLocation( newLocation ) {
		if ( ( newLocation ) && ( newLocation != '' ) ) {
			location.href = newLocation;
		}
	}
	
	
/* SHOW EVENTS-LIST */

function showEventsList() {
	document.getElementById("eventsList").style.display='none';
	var glossarSpans = document.getElementsByTagName("span");
	for (var i = 0; i<glossarSpans.length; i++) {
		if (glossarSpans[i].className=="eventsNumber") {
			// add event only for spans wirh class "glossar"
			if (glossarSpans[i].addEventListener) {
				// mozilla
				glossarSpans[i].addEventListener("mouseover", toggleHint, false);
				glossarSpans[i].addEventListener("mouseout", toggleHint , false);
				//glossarSpans[i].removeEventListener("mouseout", displayHint , false);
				//glossarSpans[i].removeEventListener("mouseover", hideHint , false);
			} else {
				// IE
				glossarSpans[i].attachEvent("onmouseover", toggleHint);
				glossarSpans[i].attachEvent("onmouseout", toggleHint);
				//glossarSpans[i].detachEvent("onmouseout", displayHint);
				//glossarSpans[i].detachEvent("onmouseover", hideHint);
			}
		}		
	}
}

function toggleHint(e) {
	// get the event-Object
	if (!e) {
		var e = window.event
	}
	// pass the evento to a global var, so we can use it in other functions
	callerType = e.type;

	// get the Element, that triggered the event
	if (e.target) {
		// Mozilla
		target = e.target;
	} else if (e.srcElement) {
		// IE
		target = e.srcElement;
	}
	if (target.nodeType == 3) {// defeat Safari bug
		target = target.parentNode;
	}
	
	// get the position of the Element
	if (target.offsetParent) {
		targPos = target;
		var posX=0;
		var posY=0;
		do {
			posX += targPos.offsetLeft;
			posY += targPos.offsetTop;
		} while (targPos = targPos.offsetParent);
	}
	
	// get the scroll offset
	var scrOfY = 0;
	if ( typeof( window.pageYOffset ) == 'number' ) {
		//Netscape compliant
		scrOfY = window.pageYOffset;
		scrOfX = window.pageXOffset;
	} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
		//DOM compliant
		scrOfY = document.body.scrollTop;
		scrOfX = document.body.scrollLeft;
	} else if ( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
		//IE6 standards compliant mode
		scrOfY = document.documentElement.scrollTop;
		scrOfX = document.documentElement.scrollLeft;
	}
	var cursorPos = posY - scrOfY;
	
	// show or hide?
	if (document.getElementById("eventsList").style.display == 'none') {
		// show hint
		// start ajax
		//alert(target.getAttribute("rel"));
		getEventsList(target.getAttribute("rel"));
		setTimeout('displayHint('+posX+','+posY+','+cursorPos+')',500);
	} else {
		// hide hint
		setTimeout('hideHint('+posX+','+posY+','+cursorPos+')',200);
	}
}

/// SHOW HINT
function displayHint(posX,posY,relativeCursorPos) {
	if (callerType=='mouseover') {
	//if (caller.type =='mouseover') {
		// display the hint only when the cursor is still n the element
		var divHeight = document.getElementById("eventsListHidden").offsetHeight+20;
		document.getElementById("eventsList").style.height='0px';
		document.getElementById("eventsList").style.display='block';	
		document.getElementById("eventsList").style.left = posX+'px';
		// slide-animation
		if (relativeCursorPos >= divHeight) {
			// slide up
			document.getElementById("eventsList").style.top=eval(relativeCursorPos-20)+'px';
			document.getElementById("eventsList").style.height=0+'px';
			for (z=20;z<=divHeight;z++) {
				setTimeout('showSlideUp('+z+','+posY+')',z);
			}
		} else {
			//slide down
			document.getElementById("eventsList").style.top=eval(posY+20)+'px';
			document.getElementById("eventsList").style.height=0+'px';
			for (z=20;z<=divHeight;z++) {
				setTimeout('showSlideDown('+z+')',z);
			}
		}
	}
}

/// SLIDES UP IN AND OUT
function showSlideUp(z,cursorPos) {
	document.getElementById("eventsList").style.top=eval(cursorPos-z)+'px';
	document.getElementById("eventsList").style.height=eval(z-20)+'px';
}

function showSlideDown(z) {
	document.getElementById("eventsList").style.height=z+'px';
}

/// HIDE HINT

function hideHint(posX,posY,relativeCursorPos) {
	if (callerType=='mouseout') {
	// hide the hint only, when the cursor ist still off the element
	var divHeight = document.getElementById("eventsListHidden").offsetHeight+20;
	// slide-animation
	if (relativeCursorPos >= divHeight) {
		// hint is above the word
		for (z=divHeight;z>=0;z--) {
			setTimeout('hideSlideUp('+z+')',divHeight-z);
		}
	} else {
		// hint is below
		for (z=0;z<=divHeight;z++) {
			setTimeout('hideSlideDown('+z+')',z);
		}
	}
	setTimeout('document.getElementById("eventsList").style.display='+'"none"',divHeight);
	}
}


function hideSlideUp(z) {
	document.getElementById("eventsList").style.height = z+'px';
	var posTop = document.getElementById("eventsList").offsetTop+1;
	document.getElementById("eventsList").style.top=posTop+'px';
}

function hideSlideDown(z) {
	var divHeight = document.getElementById("eventsListHidden").offsetHeight+20;
	document.getElementById("eventsList").style.height=eval(divHeight-z)+'px';
}

function getEventsList(orgID) {
	http_request = false;
	if (orgID !="") {
		var url = "http://www.uzh.ch/news/agenda/edit/ajax/getEventsByOrg.php";
		if (window.XMLHttpRequest) { // Mozilla, Safari,...
			http_request = new XMLHttpRequest();
		} else if (window.ActiveXObject) { // IE
			try {
				http_request = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					http_request = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {}
			}
		}
		
		if (!http_request) {
			alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
				return false;
		}
		var query_str = "orgID="+escape(orgID);
		http_request.onreadystatechange = showList;
		http_request.open('POST', url, true);
		http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset iso-8859-1');
		http_request.send(query_str);
		}
	}
	
	function showList() {

		if (http_request.readyState == 4) {
			if (http_request.status == 200 && http_request.responseText !="") {
				//alert(http_request.responseText);
				document.getElementById("eventsListHidden").innerHTML = http_request.responseText;
				document.getElementById("eventsList").innerHTML = http_request.responseText;
			} else {
				return false;
			}
		}
	}

function openPrintView(url) {
    //var url = window.location.href;
	var requestParam = window.location.search;
    if (requestParam != '') {
      window.open(url.concat(requestParam+'&view=print'), '', 'width=710,height=710,menubar=yes,scrollbars');
    } else {
      window.open(url.concat('?view=print'), '', 'width=710,height=710,menubar=yes,scrollbars');
    }
  }
  
  
  /* GOOGLE-MAP-OVERLAY */
/*  
var baseIcon = new GIcon(G_DEFAULT_ICON);
baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
baseIcon.iconSize = new GSize(20, 34);
baseIcon.shadowSize = new GSize(37, 34);
baseIcon.iconAnchor = new GPoint(9, 34);
baseIcon.infoWindowAnchor = new GPoint(9, 2);
*/
tips = new Array();

// Creates a marker whose info window displays the letter corresponding
// to the given index.
function createMarker(point, address, bau, farbe, eventsNumber, events) {
	var newIcon = MapIconMaker.createFlatIcon({width: 30, height: 30, addStar: true, label: bau, primaryColor: farbe, labelColor: "#ffffff", labeSize:14 });
	markerOptions = {icon: newIcon};
	if (eventsNumber >0) {
		var moreLink = '<br /><a class="internal" href="index.php?bldg='+bau+'">Anzeigen</a>';
		if (eventsNumber >1) {
			var message = eventsNumber + ' aktuelle Veranstaltungen';
		} else {
			var message = eventsNumber + ' aktuelle Veranstaltung';
		}
	} else {
		var moreLink = '';
		var message = '';
	}
	var linkToMap = '<a class="internal" href="http://www.plaene.uzh.ch/gebaeude/'+bau+'_list.html">'+bau+'</a>';
	var tipText = '<strong>Universität Zürich ' + linkToMap + '</strong><br />'+ address + '<br />' + message + moreLink;
	var marker = new GMarker(point, markerOptions);
	GEvent.addListener(marker, "mouseover", function() {
		getListByBldg(bau,marker);
	});
	return marker;
}

function getListByBldg(building,curMarker) {
	currentMarker = curMarker;
	currentBldg = building;
	http_request = false;
	var url = "http://www.agenda.uzh.ch/edit/ajax/getEventsByBuilding.php";
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
		http_request = new XMLHttpRequest();
	} else if (window.ActiveXObject) { // IE
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}
		
	if (!http_request) {
		return false;
	}
		
	var query_str = "bldg="+escape(building);
	http_request.open('POST', url, true);
	http_request.onreadystatechange = writeEventList;
	http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset iso-8859-1');
	http_request.send(query_str);
	
}

	function writeEventList() {
		if (http_request.readyState == 4) {
			if (http_request.status == 200) {
				var infoWindow = map.getInfoWindow();
				var currentPoint = currentMarker.getPoint();
				map.openInfoWindowHtml(currentMarker.getPoint(),http_request.responseText,{onOpenFn:function() { 
					var events = http_request.responseText.match(/even|odd/g);
					if (events) {
						var infoWindowHeight = 100 + events.length*20;
					} else {
						var infoWindowHeight = 100;
					}
					infoWindow.reset(currentMarker.getPoint(),infoWindow.getTabs(),new GSize(350,infoWindowHeight),null,null);
					var markerPixel = map.fromLatLngToContainerPixel(currentPoint); 
				var posX = markerPixel.x;
				var posY = markerPixel.y;
				var panX = 0;
				var panY = 0;
				if (posY-300 < 0) {
					panY = 320-posY;
				}
				if (posX > 400) {
					panX = 400 - posX;
				}
				if (posX < 125) {
					panX = 130;
				}
				
				if (panY > 0 || panX != 0) {
					var panDistance = new GSize(panX,panY);
					map.panBy(panDistance);
				}
				}});
			} else {
				return false;
			}
		}
	}
	
/* jQuery */

$(document).ready(function() {
	initJquery();
});

function initJquery() {
	$('#close').bind('click',closeAlert);
	if (document.cookie) {
		var state = getCookie('hintClosed');
		if (state=='1') {
			$('#close').parent().css('display','none');
		}
	}
}

function closeAlert() {
	setCookie('hintClosed','1',1);
	$(this).parent().css('display','none');
}

function setCookie(c_name,value,exdays) {
	var exdate=new Date();
	exdate.setDate(exdate.getDate() + exdays);
	var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
	document.cookie=c_name + "=" + c_value;
}

function getCookie(c_name) {
	var cookies = document.cookie.split(';');
	for (var i=0; i<cookies.length; i++) {
		var cv = cookies[i].split('=');
		if (cv[0]==c_name) {
			return cv[1];
		}
	}
	return false;
}
