/** 
	* Allgemeine Basisfunktionen
	* 
	*
	* @package		JS Frontend
	* @copyright	Kurzurlaub.de
	* @author			Kurzurlaub.de
*/

/** 
	* Browser Darstellungs-Modus abzufragen. 
	* Quirks-Mode: 		Wert 'BackCompat' oder 'Quirks-Mode'
	* Standards-Mode: CSS1compat
	* IE 6, 
	* Mozilla ab Version 1
	* Netscape und Opera ab Version 7 
	* Alle anderen Browser liefern als Wert 'undefined'
	* 
*/

/*
	Aktuellen BrowserMode ermitteln
	return	browserMode			Textangabe
*/
function getBrowserMode(){
		var browserMode = document.compatMode;
		// window.status = "Browsermode: "+browserMode;
		return browserMode;
}
/*
	Aktuellen BrowserTyp ermitteln
	return	browserTyp			Textangabe
*/
function getBrowserType(){
		// alert ( navigator.appName+" "+navigator.appVersion);			
		if(navigator.appName.indexOf("Microsoft") != -1)
			return "IE";
		else if(navigator.appName.indexOf("Netscape") != -1 && navigator.appVersion.charAt(0) >= 4)
			return "NN";
		else
			return "";
}

/*
	ObjektBilder zu einem Angebot wechseln (kleine Bilder bei Click in großem Container zeigen)
	param		newImage			Objekt des zu wechselnden Bildes
	return					
*/
function changeObjektImage(newImage){
	
		var originalImage = document.getElementById("angebot_objektbild");
		if(!originalImage || !newImage) return;
		
		// bei neuem Admin Bildquelle ändern von klein -> normal
		var srcNew = newImage.src;
		if(srcNew.match(/images_objekte_klein/g)) {
				srcNew = srcNew.replace(/images_objekte_klein/,"images_objekte_normal");
		}
		// alert("SRC:"+originalImage.src+" -> SRC:"+srcNew);
		// alert("W:"+originalImage.width+" H:"+originalImage.height);
		
		originalImage.src = srcNew;
		// alert("W:"+newImage.width+" H:"+newImage.height);
		
		// TITLE & ALT Tags setzen
		newImage.alt.length > 0 ? originalImage.alt = newImage.alt : originalImage.alt = "";
		newImage.title.length > 0 ? originalImage.title = newImage.title : originalImage.title = "";
		
		// Höhe und Breite setzen
		// width: 320px ->im container.css gesetzt (DIV.container_angebot_objektbild IMG)
		// padding: 10px -> bei den Eigenschaften müssen jeweils 20px in Breite und Höhe dazugerechnet werden
		// da im Original und den Thumbnail die Breite per CSS verändert wurde -> neues Bild mit src erzeugen um Originalwerte zu erhalten
		// Convert alt: w-max:260 h-max:173
		
		var testImage = new Image();
		testImage.src = originalImage.src;
		var oWidth = testImage.width
		// alert("W:"+oWidth+" H:"+testImage.height);
		if(oWidth==0 || oWidth > 320) oWidth = 320;
		if(oWidth) {
			originalImage.width = oWidth;
			// Style für FF mit Einheit px setzen
			originalImage.style.width = oWidth+"px";
		}
	
}

/*
	Class (HintergrundBild) über Mouseevents zu einem Element wechseln (on/off)
	param		classStatus			Status(on/off)
	return					
*/
function changeClass(evtElement,classStatus){
	
		var cssClass = evtElement.className;
		if(classStatus=="on") 
			cssClass = cssClass+"_on";
		else
			cssClass = cssClass.replace("_on","");
		evtElement.className = cssClass;
		
}

/*
	Zu einer URL wechseln nachdem eine Auswahl im Select (Sortierung der Suche) geändert wurde
	param		s								Referenz auf das SELECT des Events
	return					
*/
function onChange_Select(s){
		var sName = s.name;
		var sValue = s.options[s.selectedIndex].value;
		var cOffset = currentOffset;
		// offset (LimitStart) zurücksetzen wenn sich Sortierung oder Anzahl der Ergebnisse je Seite ändert
		if(s.name=="order" || s.name=="offset_limit") cOffset = 0;

		var cParamList = new Array();
		cParamList["offset"] = (sName=="offset" ? sValue : cOffset ? cOffset : "");
		cParamList["offset_limit"] = (sName=="offset_limit" ? sValue : currentOffsetLimit ? currentOffsetLimit : "");
		cParamList["order"] = (sName=="order" ? sValue : currentOrder ? currentOrder : "");
		
		if(restriktionenObjekt.objektliste > 0)
			cParamList["objektliste"] = restriktionenObjekt.objektliste;
		if(restriktionenObjekt.objekt > 0)
			cParamList["objekt"] = restriktionenObjekt.objekt;
		if(restriktionenObjekt.uebernachtungen && restriktionenObjekt.uebernachtungen!='-1')
			cParamList["uebernachtungen"] = restriktionenObjekt.uebernachtungen;
		if(restriktionenObjekt.budget > 0)
			cParamList["budget"] = restriktionenObjekt.budget;
		if(restriktionenObjekt.klassifizierung && restriktionenObjekt.klassifizierung!='-1')
			cParamList["klassifizierung"] = restriktionenObjekt.klassifizierung;
		
		// Umkreis Suche
		if(restriktionenObjekt.anreise_datum)
			cParamList["anreise_datum"] = restriktionenObjekt.anreise_datum;
		if(restriktionenObjekt.abreise_datum)
			cParamList["abreise_datum"] = restriktionenObjekt.abreise_datum;
		if(restriktionenObjekt.umkreis_ort)
			cParamList["umkreis_ort"] = restriktionenObjekt.umkreis_ort;
		if(restriktionenObjekt.umkreis_plz_id)
			cParamList["umkreis_plz_id"] = restriktionenObjekt.umkreis_plz_id;
		if(restriktionenObjekt.umkreis_region_id)
			cParamList["umkreis_region_id"] = restriktionenObjekt.umkreis_region_id;
		if(restriktionenObjekt.umkreis_km)
			cParamList["umkreis_km"] = restriktionenObjekt.umkreis_km;
		if(restriktionenObjekt.umkreis_map)
			cParamList["umkreis_map"] = restriktionenObjekt.umkreis_map;
		
		// A la carte Suche
		if(restriktionenObjekt.verpflegung)
			cParamList["verpflegung"] = restriktionenObjekt.verpflegung;
		if(restriktionenObjekt.bl_liste)
			cParamList["bl_liste"] = restriktionenObjekt.bl_liste;
		if(restriktionenObjekt.zl_gruppe)
			cParamList["zl_gruppe"] = restriktionenObjekt.zl_gruppe;
		// A la carte Angebot (Selects)
		if(sName=="uebernachtungen")
			cParamList["uebernachtungen"] = sValue;
		if(sName=="verpflegung")
			cParamList["verpflegung"] = sValue;
			
		gotoURL(currentTemplate, cParamList);
}

/*
	Zu einer URL wechseln
	param		templateName		Name des Templates
	param		paramList				Parameterliste als String oder assoz. Array
*/
function gotoURL(templateName, paramList){
		
		if(templateName.indexOf(".php") != -1)
			var cURL = templateName;
		else
			var cURL = templateName+".html";
			
		if(getType(paramList)=="String") {
			cURL+= "?"+paramList;
		} else if(getType(paramList)=="Array") {
			cURL+= "?";
			for(paramName in paramList) {
				if(typeof(paramList[paramName])!='function')
					cURL+= paramName+"="+paramList[paramName]+"&";
			}
		}
		cURL = cURL.replace(/\+/g, '%2B');
		
		self.location.href = cURL;
		return false;
}
/*
	Typ einer Variablen ermitteln (besser als typeof)
	param		Variable
	return	(Array,Object,Number,String,Function,boolean)

*/
function getType(v) {
		if(!v) return null;
		return String(v.constructor).split(" ")[1].split("()").join("");
}

/*
	Typ einer Variablen ermitteln (Array)
	param		v						Variable
	return	true/false	Ist ein Array
*/
function is_array(v) {
    return ( v instanceof Array);
}

/*
	Test ob ein Wert in einem Array enthalten ist
	param		item					Wert
	param		arr						Array
	return	true/false		Ist enthalten
*/
function in_array(item, arr) {
		for(p=0;p<arr.length;p++) if (item == arr[p]) return true;
		return false;
}


/*
	Zu einer URL wechseln im Popup Fenster
	param		pURL						URL
	param		pName						Name des Windows
	param		pHeight					Höhe des Windows
	param		pWidth					Breite des Windows
*/
function openPopup(pURL, pName, pHeight, pWidth, normalWindow){
		self.name="mainwindow";
		var pOptions = "scrollbars=yes,left=100,top=100";
		pOptions+= ",height="+(pHeight ? pHeight : 600);
		pOptions+= ",width="+(pWidth ? pWidth : 610); 
		if(normalWindow) {
			pOptions+= ",menubar=yes,toolbar=yes,resizable=yes";
		}
		// alert("pURL:"+pURL+" ,pName: "+pName+" ,pOptions: "+pOptions);
		pW = window.open(pURL, pName, pOptions); 
		pW.focus();		
}

/*
	Details ein und ausblenden + Text des Click Elements wechseln
	param		eventElement		Click Elements 
*/
function toggleDetails(eventElement){
		var toggleID = eventElement.getAttribute("toggle_id");
		var toggleText = eventElement.getAttribute("toggle_text");
		if(toggleID) {
			var toggleElement = document.getElementById(toggleID);
			var dT = toggleElement.style.display;
			// alert(dT);
			// FF kann mit block hier nichts anfangen wegen colspan in Tabelle und TR einblenden
			var dTshow = ("IE"==getBrowserType() ? "block" : "table-row"); 
			toggleElement.style.display = (dT=="none" ? dTshow: "none");
		}
		if(toggleText) {
			// FF verlangt innerHTML statt innerText
			eventElement.setAttribute("toggle_text",eventElement.innerHTML);
			eventElement.innerHTML = toggleText;
		}
		// "table-row" 
}

/*
	Tab Navigation für AP - Area ein und ausblenden + Class des Navi Elements wechseln
	param		eventElement		Click Elements 
*/
function toggleTabNavigationAP(naviElement){
	
		var tabList = {
						0: "fotos",
						1: "objekt",
						2: "entfernungen",
						3: "arrangements"}
					
		for(var i in tabList) {
				try {
					var tabNaviElement = document.getElementById("tab_navigation_"+tabList[i]);
					if(tabNaviElement)
						tabNaviElement.className = (tabNaviElement.id == naviElement.id ? "navi_tabs_active" : "navi_tabs");
					var tabAreaElement = document.getElementById("tab_"+tabList[i]);
					if(tabAreaElement)
						tabAreaElement.style.display = (tabNaviElement.id == naviElement.id ? "inline" : "none");
				} catch(e) {};
		}
		try {
			// Resize ohne Scrollen zum Start
			resizeFrameAP(apGatewayURI, 1);
		} catch(e){}
		return false;
}

function toggleInterview(stat) {
	document.getElementById("interview_container").style.height = (stat==1) ? "auto" : "198px";
	document.getElementById("interview_container").style.overflow = "hidden";
	if(stat==0) {
		document.getElementById("interview_container_overflow").innerHTML = "<a href=\"javascript:toggleInterview(1)\" title=\"Ansehen\" class=\"colorlink\">Ansehen</a>";
	} else {
		document.getElementById("interview_container_overflow").innerHTML = "<a href=\"javascript:toggleInterview(0)\" title=\"Schliessen\" class=\"colorlink\">Schliessen</a>";
	}
}

function toggleFilterOptions() {
	var oDiv = document.getElementById("container_sort_more_option");
	if(oDiv)
		oDiv.style.display = (oDiv.style.display == "block" ? "none" : "block");
	var oLink = document.getElementById("container_sort_more_link");
	if(oLink)
		oLink.innerHTML = (oDiv.style.display == "none" ? "Mehr Filteroptionen" : "Weniger Filteroptionen");
	var oNavi = document.getElementById("container_sort_navi");
	if(oNavi)
		oNavi.style.borderBottomWidth = (oDiv.style.display == "none" ? "1px" : "0px");	
		
}
/*
	Step Navigation für AP - umschalten
	param		eventElement		Click Elements 
*/
function toggleStepNavigationAP(naviStep,elementText){
	
		var naviElement = document.getElementById('ap_navigation_step_link_'+naviStep);
		if(!naviElement) naviElement = document.getElementById('ap_navigation_step_'+naviStep);
		if(!naviElement) return;
		
		naviElement.innerHTML = elementText;		
		
}

/*
	Navigation für Destinationen AP - Reionen / Orte ein und ausblenden + Resize Frame
	param		eventElement		Click Elements 
*/
function toggleDestinationNavigationAP(){
	
		var navElement = document.getElementById('ap_navigation_destinations');
		if(navElement)
			navElement.style.display = (navElement.style.display == "none" ? "block" : "none");
		try {
			resizeFrameAP(apGatewayURI, 1);
		} catch(e){}
		return true;
}


/** 
	* Link erzeugen mit optionalen URL-Parametern (bspw. Session ID)
	*
	* @param		string			URL
	* @param		string			Linktext
	* @param		string			CSS Klasse
	* @param		string			zusätliche Tags, wie styles
	* @param		string			target
	* @return		string			A-Tag
	*/
function makeLink(vLinkURL, vLinkText, vClassname, vExtras, vTarget) {
      
      // Analog zu PHP weitere URL-Parameter hinzufügen wenn vorhanden (bspw. Session)
			
			var link = '<a href="' + vLinkURL + '"' + (vClassname ? ' class="' + vClassname + '"' : '') + (vTarget ? ' target="'+vTarget+'"' : '') + (vExtras ? ' '+vExtras : '') + '>' + vLinkText +'</a>';
			return link;
}

/** 
	* Eventhandler zuweisen (Affilian) 
	*
	* @param		string			Eventname
	* @param		object			Element
	* @param		string			callback Funktion
	* @param		bool				bubble
	*/
function elementAddEventListener(event, element, callback, bubble) {
	// alert('elementAddEventListener('+event+', '+element.tagName+', '+callback+')');
	if (element.addEventListener) {
		element.addEventListener(event, callback, bubble);
	} else if (element.attachEvent) {
		element.attachEvent('on' + event, callback);
	}
}

/** 
	* Event-Element lesen (Affilian) 
	*
	* @param		string			Eventname
	* @return		object			Element
	*/
function getEventTarget(event) {
	return event.target || event.srcElement || event;
}

/** 
	* Event-Element Keycode lesen 
	*
	* @param		string			Eventname
	* @return		int					Keycode
	*/
function getEventKeyCode(evt){
	
	evt = (evt) ? evt : ((window.event) ? window.event : "");
	var evtElement = (evt.target) ? evt.target : evt.srcElement;
	// alert(evtElement.tagName);
	
	var pressedKeyCode = 0;
	// if (!evt) evt = window.event;
  if (evt.which) {
    pressedKeyCode = evt.which;
  } else if (evt.keyCode) {
    pressedKeyCode = evt.keyCode;
  }
  // alert("Element:"+evtElement.tagName+" Type:"+evt.type+" -> KeyCode:"+pressedKeyCode);

  return pressedKeyCode;
}



/*
	AffiliatePartner IFAME init
*/
function resizeFrameAP(kurzurlaubGatewayURI, noScroll){
		
		var pHeight = document.body.offsetHeight + 30;
		var noScroll = (noScroll ? 1 : 0);
		var apGateway = document.getElementById('ap_gateway'); 
		apGateway.src = kurzurlaubGatewayURI + '?height=' + pHeight + '&noScroll=' + noScroll;
		//apGateway.src="http://www.kurzurlaub.de.paris/img/info.gif";
		// var apGateway_ = window.frames['ap_gateway'];
		//apGateway_.src = "http://www.kurzurlaub.de.paris/img/info.gif";
		//apGateway_.location = "http://www.kurzurlaub.de.paris/img/info.gif";
}





function createBookmark() {
	
	var trackURI = location.href;	
	trackURI = trackURI.replace(new RegExp(window.location.protocol+'\/\/'+window.location.host,'g') , '');
	try { pageTracker._trackEvent('Social Bookmarks', 'Add to favorites', trackURI, 1); } catch(err) {}

	var agent = navigator.userAgent.toLowerCase();
	var isKonqueror = (agent.indexOf('konqueror')!=-1);
  var isSafari = (agent.indexOf('webkit')!=-1);
  var isMac = (agent.indexOf('mac')!=-1);   
  var stringCtrlButton = (isMac ? 'Command/Cmd' : 'CTRL'); 
  var stringKeyButton = (isKonqueror ? 'B' : 'D');  
	if (window.sidebar) {
		window.sidebar.addPanel(document.title,location.href,''); // FF
	} else if(window.external) {
		window.external.AddFavorite(location.href, document.title); // IE
	} else { // alle anderen
		brDialog.showDialog(
			'Zu den Favoriten hinzufügen',
			'Um diese Seite zu den Favoriten hinzuzufügen, drücken Sie '+stringCtrlButton+' + '+stringKeyButton);
	}
}
function createSocialBookmark(bmName) {
	
	var trackURI = location.href;	
	trackURI = trackURI.replace(new RegExp(window.location.protocol+'\/\/'+window.location.host,'g') , '');
	try { pageTracker._trackEvent('Social Bookmarks', 'Add to ' + bmName, trackURI, 1); } catch(err) {}
	
	var uri = encodeURIComponent(location.href);
	var desc = encodeURIComponent(document.title);
	
	var sb_liste = Array();
	sb_liste['mister-wong'] = 'http://www.mister-wong.de/index.php?action=addurl&bm_url='+uri+'&bm_description='+desc;
	sb_liste['del.icio.us'] = 'http://del.icio.us/post?url='+uri+'&title='+desc;
	sb_liste['google'] 			= 'http://www.google.com/bookmarks/mark?op=add&hl=de&bkmk='+uri+'&title='+desc;
	sb_liste['facebook'] 		= 'http://www.facebook.com/share.php?u='+uri+'&t='+desc;
	sb_liste['yahoo'] 			= 'http://de.bookmarks.yahoo.com/?u='+uri+'&t='+desc;
	sb_liste['yigg'] 				= 'http://www.yigg.de/neu?exturl='+uri;
	sb_liste['linkarena'] 	= 'http://linkarena.com/bookmarks/addlink/?url='+uri;
	sb_liste['one-view'] 		= 'http://www.oneview.de/quickadd/neu/addBookmark.jsf?URL='+uri+'&title='+desc;
		
	if(sb_liste[bmName])
	 	window.open(sb_liste[bmName]);	
}
