/* <![CDATA[ *//* BEGIN ---------- jsLibSelector *//** * @fileoverview JavaScript Library for geo navigation display. * (C) 2004-2006 SP Integration GmbH * http://www.sp-integration.de *//** * Update map display according to selected filter values. * 	If a country is selected the region is ignored, and the country is displayed, otherwise the region is displayed. * 	If a division or legal is selected this filter is added as well * @param {String} source Name of calling select object * @param {String} popup if true then use popup view instead of standard map views * @version 1.0.9 build 11.05.2006: parameter hideicons * @version 1.0.8 build 03.04.2006: added display filter * @version 1.0.7 build 13.03.2006: added business and service filter * @version 1.0.6 build 12.03.2006: added context * @version 1.0.5 build 25.09.2005: added displaylocation parameter * @version 1.0.4 build 21.09.2005: added popup parameter * @version 1.0.3 build 21.09.2005: added directions to filter sources to call "how to find us" with all current filters * @version 1.0.2 build 07.09.2005: legal structure filter * @version 1.0.1 build 13.04.2005: division filter * @version 1.0 build 01.04.2005 * @author Jens Polster, SP Integration GmbH */function Selector(source, popup){/* Currently active filter values are contained in global variables	regionfilter	countryfilter	filter	divisionfilter	businessfilter	servicefilter	legalfilter	context	display*/	var baselocation = "";	var command = "";	var newsearch = "";	var newlocation = "";	var filtername = "";	var filterselect;	var viewname = "";	var key = "";	var params = new Array();	var posamp;	var poseq;	var pname = "";	var filters = new Object();	/* selector filters */	var selectors = new Array("business", "service", "division");	/* set filters to current values */	filters["region"] = regionfilter;	filters["country"] = countryfilter;	filters["division"] = divisionfilter;	filters["legal"] = legalfilter;	filters["context"] = context;	filters["business"] = businessfilter;	filters["service"] = servicefilter;	filters["filter"] = filter;	filters["display"] = display;		/* get name of filter which has changed */	filtername = source.replace(/selector/i, "").toLowerCase();		/* if source is directions selector don't modify existing filter */	/* call "how to find us" with all current filters */	if (filtername == "directions")	{		viewname = "vwDirectionsByKey";		key = "/" + unid;		command = "?OpenDocument";		/* append filter parameters */		for (var a in filters)		{			if ((filters[a] != "") && (filters[a] != defaultvalue))			{				params.push(a + "=" + filters[a]);			}		}	} else {			/* set changed filter to new value */		filterselect = document.getElementsByName(source);		if (filterselect)		{			if (filterselect.length == 1)			{				filters[filtername] = filterselect[0].value;			} else {				filters[filtername] = getRadioValue(filterselect);			}			/* region has changed - clear country */			if (filtername == "region")			{				filters["country"] = "";			}			/* filter has changed - clear filter selector fields */			if (filtername == "filter")			{				for (var f in selectors)				{					if (selectors[f] != filtername)					{						filters[selectors[f]] = "";					}				}			}		}				/* get view to display map */		if ((filters["country"] != "") && (filters["country"] != defaultvalue))		{			if ((doctype == "Geo-Data") && (filtername != "region") && (filtername != "country"))			{				/* if a contact is displayed and one of the "display by" filters changes still display the contact and only change the filter url params */				viewname = "0"				key = "/" + unid;				command = "?OpenDocument"			} else {				/* country is selected - use country maps view */				viewname = "vwEntriesByCountryEmbedded";				command = "?OpenView"			}		} else {			command = "?OpenDocument";			if (popup)			{				/* popup parameter is set --> use popup views */				viewname = "vwPopupMaps";				key = "/" + unid;							} else {				/* country is not selected */				if ((filters["region"] != "") && (filters["region"] != defaultvalue))				{					/* region is selected - show continent */					if (filters["context"] != "") {						viewname = "vwContinentMapsLookup";											key = "/" + filters["region"] + "*" + filters["context"];					} else {						viewname = "vwContinentMaps";						key = "/" + filters["region"];					}				} else {					/* no region selected - show world map */					if (filters["context"] != "") {						viewname = "vwWorldMapsLookup";						key = "/World" + "*" + filters["context"];					} else {						viewname = "vwWorldMaps";						key = "/World";					}					}			}		}				if (location.search != "")		{			posamp = location.search.indexOf("&");			if (posamp != -1)			{				/* write all parameters in an array */				params = location.search.slice(posamp+1, location.search.length).split("&");				/* loop all parameters */				for (var e in params)				{					/* get paramater name */					poseq = params[e].indexOf("=");					if (poseq != -1)					{						pname = params[e].slice(0, poseq).toLowerCase();					} else {						pname = params[e].toLowerCase();					}					switch (pname)					{						/* code is identical in all five cases */						case "region":							if ((filters[pname] != ""))							{								if (filters[pname] == defaultvalue) {									filters[pname] = "";									params[e] = "";								} else {									params[e] = pname + "=" + filters[pname];									filters[pname] = "";								};							} else {								params[e] = "";							}							break;						case "country":							if ((filters[pname] != ""))							{								if (filters[pname] == defaultvalue) {									filters[pname] = "";									params[e] = "";								} else {									params[e] = pname + "=" + filters[pname];									filters[pname] = "";								}							} else {								params[e] = "";							}							break;						case "filter":							if ((filters[pname] != ""))							{								if (filters[pname] == defaultvalue) {									filters[pname] = "";									params[e] = "";								} else {									params[e] = pname + "=" + filters[pname];									filters[pname] = "";								}							} else {								params[e] = "";							}							break;						case "division":							if ((filters[pname] != ""))							{								if (filters[pname] == defaultvalue) {									filters[pname] = "";									params[e] = "";								} else {									params[e] = pname + "=" + filters[pname];									filters[pname] = "";								}							} else {								params[e] = "";							}							break;						case "business":							if ((filters[pname] != ""))							{								if (filters[pname] == defaultvalue) {									filters[pname] = "";									params[e] = "";								} else {									params[e] = pname + "=" + filters[pname];									filters[pname] = "";								}							} else {								params[e] = "";							}							break;						case "service":							if ((filters[pname] != ""))							{								if (filters[pname] == defaultvalue) {									filters[pname] = "";									params[e] = "";								} else {									params[e] = pname + "=" + filters[pname];									filters[pname] = "";								}							} else {								params[e] = "";							}							break;						case "legal":							if ((filters[pname] != ""))							{								if (filters[pname] == defaultvalue) {									filters[pname] = "";									params.splice(e,1);								} else {									params[e] = pname + "=" + filters[pname];									filters[pname] = "";								}							} else {								params[e] = "";							}							break;						case "context":							if ((filters[pname] != ""))							{								if (filters[pname] == defaultvalue) {									filters[pname] = "";									params.splice(e,1);								} else {									params[e] = pname + "=" + filters[pname];									filters[pname] = "";								}							} else {								params[e] = "";							}							break;						case "display":							if ((filters[pname] != ""))							{								if (filters[pname] == defaultvalue) {									filters[pname] = "";									params.splice(e,1);								} else {									params[e] = pname + "=" + filters[pname];									filters[pname] = "";								}							} else {								params[e] = "";							}							break;						case "hideicons":							if ((filters[pname] != ""))							{								filters[pname] = "";								params.splice(e,1);							} else {								params[e] = "";							}							break;					}				}				/* remove all empty elements from the paramater array */				for (var p in params)				{					if (params[p] == "")					{						params.splice(p,1);					}				}			}			/* append new filter parameters */			for (var a in filters)			{				if ((filters[a] != "") && (filters[a] != defaultvalue))				{					params.push(a + "=" + filters[a]);				}			}		}	}	baselocation = "/" + replicaID + "/" + viewname + key + command;	if (params.length > 0)	{		newsearch = "&" + params.join("&");	}	newlocation = baselocation + newsearch;		if (newlocation != "")	{		location.href = newlocation;	}}/** * Get the value of a radio button. * @param {Object} objElement radio button element * @return Value of radio button element * @type String */function getRadioValue(objElement){	for (var i=0; i<objElement.length; i++)	{		if (objElement[i].checked)		{			return objElement[i].value;		}	}	return false;}/** * Get an element by its ID (cross-browser). * 	If it is not found by ID it is searched for by name.  * 	If only one element is found by name it is returned. * @param {String} strID ID of the element to return * @return Element if found. * @type Object */function returnObjectByID(strID){	if (document.getElementById)		var returnVar = document.getElementById(strID);	else if (document.all)		var returnVar = document.all[strID];	else if (document.layers)		var returnVar = document.layers[strID];	if (!returnVar)	{		var returnVar = document.getElementsByName(strID);		if (returnVar.length == 1)			returnVar = returnVar[0]		else			returnVar = null;	}	return returnVar;}/** * Update the hotspot links in the specified container (usually the div containing the image map). * @param {String} strTargetContainerId ID of the element containing the links to update * @param {Object} objParameters "Associative Array" containing the parameters to add to the links. * 	Listtag=parameter name, value=parameter value. * @version 1.0.1 buld 2006-05-16: fixed parameter division * @version 1.0 build 2005-11-22 * @author Jens Polster, SP Integration GmbH */function updateHotspotLinks(strTargetContainerId, objParameters){	try{		var objCurrent = new Object();		var strQuery = "";		var intPos = -1;		var strID = "";		/* get container node */		var objContainer = returnObjectByID(strTargetContainerId);		if (objContainer)		{			/* loop all children */			for (var i=0; i < objContainer.childNodes.length; i++)			{				objCurrent = objContainer.childNodes[i];				strID = objCurrent.id;					if ( (objCurrent.nodeName == "A") || (objCurrent.nodeName == "AREA") )				{					if (objCurrent.href != "")					{						/* we're only interested in links */						strQuery = objCurrent.search;						if (strQuery != "")						{							for (var strPName in objParameters)							{								/* check if the parameter is already contained in the URL */								intPos = strQuery.indexOf('&' + strPName);								if (intPos == -1)								{									/* parameter does not yet exist in query string --> append with value */									strQuery = strQuery + "&" + strPName + "=" + objParameters[strPName];								} else {									/* parameter already exists in query string */									/* --> do nothing */								}							}							/* write new query string */							objCurrent.search = strQuery;						}					}				} else {					if (objCurrent.nodeName == "MAP")					{						/* image map --> update all children here, too */						updateHotspotLinks(objCurrent.name, objParameters)					}				}			}		}	} catch(e) {		var strMsg = e;		if (objCurrent)		{			strMsg = strMsg + "\n\nName: " + objCurrent.name + "\nID: " + objCurrent.id + "\nHRef: " + objCurrent.href;		}		alert(strMsg);	}}/** * show contact information on click * @version 1.1 build 2006-11-28 */function myClick(id){	isClicked = 1;	if (contactdetailsdefault == "") {		contactdetailsdefault = returnObjectByID("details").innerHTML	}	returnObjectByID("details").innerHTML = document.getElementById(id).innerHTML;}/** * hide contact information on click * @version 1.1 build 2006-11-10 */function myUnclick(){	isClicked = 0;	returnObjectByID("details").innerHTML = contactdetailsdefault;}/** * show contact information on mouseover * @version 1.1 build 2006-11-28 */function myShow(id){	if (!isClicked)	{	if (contactdetailsdefault == "") {		contactdetailsdefault = returnObjectByID("details").innerHTML	}		returnObjectByID("details").innerHTML = document.getElementById(id).innerHTML;	}}/** * hide contact information on mouseout * @version 1.1 build 2006-11-28 */function myHide(){	if (!isClicked)	{		returnObjectByID("details").innerHTML = contactdetailsdefault;	}}/* END ---------- jsLibSelector *//* ]]> */
