 //locationstuff
 
function updateLocation(locForm, locGeocoder, reload, locMap){
    		  
	locationHasChanged = true;
	
	errorMsg = '';
 	
	if (locForm == undefined) {
 		errorMsg += 'Bitte Formularname übergeben.\n';
 	}
 	if (locGeocoder == undefined) {
 		errorMsg += 'Bitte GClientGeocoder Objekt übergeben.\n';
 	}
 	
 	if (reload == undefined) {
 		errorMsg += 'Bitte Reload true oder false übergeben.\n';
 	}
 	
 	if (locMap == undefined) {
 		errorMsg += 'Bitte GMap2 Objekt übergeben.\n';
 	}
 	if (errorMsg != '') {
		alert(errorMsg);
		return false;	
	}
 

	var locationAdress = locForm.locationAdress.value;
    
    //Cookies löschen
	setCookie('vivo_plz', '');
	setCookie('vivo_gemeinde', '');
		            
	//PLZ? : Cookie                
	var plz = getPLZ(locationAdress);
	var city = containsValidCity(locationAdress);
                               
	if (plz !== false) {
	   setCookie('vivo_plz', plz); 
	}
	//City? : Cookie
	if (city !== false) {
		setCookie('vivo_gemeinde', Utf8.encode(city));
	}
			 
	if (locGeocoder) {
		locGeocoder.getLatLng(
			locationAdress,
					function(point) {
						  if (!point) {
					         alert(locationAdress + " nicht gefunden.");
					         return false;
						  } else {
						  	setLocation(point,reload, false);
						  
								locMap.clearOverlays();
						        locMap.setCenter(point, 13);
						        locMarker = new GMarker(point);
						        locMap.addOverlay(locMarker);
								
								setCookie('vivo_standort', Utf8.encode(locationAdress));
    
							    //User Feedback
							    if (typeof ortContainer != "undefined" ) {
							       updateInfo(cookieContainer, cookieField, locationAdress, new Array(ortContainer, strContainer));
							    }
							                 
							    var msg = "Dein Standort wurde auf  <strong>" + locationAdress + "</strong> aktualisiert.";
							    updateInfo(false, "locationChangeInfo", msg, false);
								
						        //locMarker.openInfoWindowHtml(address);
						        //locMarker.openInfoWindowHtml('testme');
						        //updateLatLngFields(point);                     
						   }
					 }
			);
	}else{
		return false;
	}
	return false;
}

function containsValidCity(adress) {
	if (typeof arrGemeinden == 'undefined') {
		return false;
	}
	
	for ( i = 0; i < arrGemeinden.length; i ++ ) {
				
		if (adress.indexOf(arrGemeinden[i]) > -1) {
			return arrGemeinden[i];
		}
	}
	
	return false;
}
                      
function getPLZ(adress) {
    var adressArr = adress.split(" ");
    
    for (i = 0; i < adressArr.length; i++) {
        if (adressArr[i].match(/^\d{4}/)) {
            return adressArr[i];
        }
    }
    
    return false;
}
 
function setLocation(point, reload, feedback) {
    //cookie setzen
   setCookie('vivo_latitude', point.y);                                                    
   setCookie('vivo_longitude', point.x);
   setCookie('standort', 'not_set');
   setCookie('vivo_standort', 'not_set');
   

   
   //User Feedback geben
   if ( typeof lGradContainer != 'undefined' ) {
    updateInfo(lGradContainer, lGradField, point.x, new Array(ortContainer, strContainer));
    updateInfo(bGradContainer, bGradField, point.y, false);
   }
   
   if (feedback) {
    var msg = "Deine Koordinaten wurden auf <strong>" + point.x + ", " + point.y + "</strong> aktualisiert."
    updateInfo(false, "locationChangeInfo", msg, false);
    locationHasChanged=true;
   }
   
   //reload
   if(reload==true){
	   reloadWindow();  
   }else{
		return false;
   }                                          
}

function setCookie(name, value) {                            
    var now    = new Date();
    var expire = new Date(now.getTime() + (1000 * 60 * 60 * 24 * 365));
    
    var cookieData = name + "="+ value + "; expires=" + expire +"; path=/;";
            
    document.cookie = cookieData;
}
 
function clearInput(obj, type) {                                                   
    switch (type) {
         case 'focus':
             tempValue = obj.value;             
             obj.value = '';
             break;                             
         case 'blur':    
             if (obj.value == '') {
                 obj.value = tempValue;
             }
             break;                                                 
    }                                                                                                                                                                
}
 
 function gohome(lat,lon){
 
  setCookie('vivo_latitude', '');                                                    
   setCookie('vivo_longitude', '');
     setCookie('standort', '');
   setCookie('vivo_standort', '');
  // reloadWindow();
   window.location.href=window.location.href;
   
 
 }
function reloadWindow() {
	if (locationHasChanged) {
	   window.location.href=window.location.href;
    } else {
		toggleMap();
	}
}

function toggleMap() {
  var mapHolder = document.getElementById('bigMap');
  
  if (mapHolder.style.display == 'block') {
      document.getElementById('bigMap').style.display = 'none';
  } else {
      document.getElementById('bigMap').style.display = 'block';
  }
  toggleOverlay();
  load();   
}   

function toggleOverlay() {
    var overlayer = document.getElementById('overlayer');
		
	if ( (overlayer != null)) {
		//Ausblenden
		if ( overlayer.style.display == 'none' )  {
		  showOverlayer();	
		} else {
		  hideOverlayer();
	    }
	} else {
		//Schon erzeugt?
		createOverlayer();
		showOverlayer();
	}
}

function updateInfo(elementParentId, elementId, text, hideFields) {    
	var elementObject = document.getElementById(elementId);
	var elementParent = document.getElementById(elementParentId);
	
	if (!elementParentId) {
		elementParent = null;
	}
	
	if (elementObject == null && elementParent == null) {		
		return false;
	}
	
	if (elementParent != null) {
		elementParent.style.display='block';
	}
	
	if (hideFields) {
		var hideElement;
		
		for (i = 0; i < hideFields.length; i++) {
			hideElement = document.getElementById(hideFields[i]);
			
			if (hideElement != null) {
			     hideElement.style.display = 'none';	
			}
		}
	}
	
	elementObject.innerHTML = text;
}
 
function getPageScroll(){

    var yScroll;

    if (self.pageYOffset) {
        yScroll = self.pageYOffset;
    } else if (document.documentElement && document.documentElement.scrollTop){  // Explorer 6 Strict
        yScroll = document.documentElement.scrollTop;
    } else if (document.body) {// all other Explorers
        yScroll = document.body.scrollTop;
    }

    arrayPageScroll = new Array('',yScroll) 

    return arrayPageScroll;
}

function getPageSize(){
    
	var xScroll, yScroll;

    if (window.innerHeight && window.scrollMaxY) {  
        xScroll = document.body.scrollWidth;
        yScroll = window.innerHeight + window.scrollMaxY;
    } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
        xScroll = document.body.scrollWidth;
        yScroll = document.body.scrollHeight;
    } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
        xScroll = document.body.offsetWidth;
        yScroll = document.body.offsetHeight;
    }

    

    var windowWidth, windowHeight;

    if (self.innerHeight) { // all except Explorer
        windowWidth = self.innerWidth;
        windowHeight = self.innerHeight;
    } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
        windowWidth = document.documentElement.clientWidth;
        windowHeight = document.documentElement.clientHeight;
    } else if (document.body) { // other Explorers
        windowWidth = document.body.clientWidth;
        windowHeight = document.body.clientHeight;
    }   

    // for small pages with total height less then height of the viewport
    if(yScroll < windowHeight){
        pageHeight = windowHeight;
    } else { 
        pageHeight = yScroll;
    }

    // for small pages with total width less then width of the viewport
    if(xScroll < windowWidth){  
        pageWidth = windowWidth;
    } else {
        pageWidth = xScroll;
    }

    arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
    return arrayPageSize;
}

function showOverlayer(objLink) {
    
	var objOverlay = document.getElementById('overlayer');

    var arrayPageSize = getPageSize();
    var arrayPageScroll = getPageScroll();

    objOverlay.style.height = (arrayPageSize[1] + 'px');
    objOverlay.style.display = 'block';

    arrayPageSize = getPageSize();
    objOverlay.style.height = (arrayPageSize[1] + 'px');

}

function hideOverlayer() {

    objOverlay = document.getElementById('overlayer');
    objOverlay.style.display = 'none';

    // make select boxes visible
    selects = document.getElementsByTagName("select");
    for (i = 0; i != selects.length; i++) {
        selects[i].style.visibility = "visible";
    }

}

function createOverlayer() {
	
    if (!document.getElementsByTagName){ return; }

    var objBody = document.getElementsByTagName("body").item(0);
    var objMapContainer = document.getElementById('mapContainer');
	
    var objOverlay = document.createElement("div");
    objOverlay.setAttribute('id','overlayer');
    objOverlay.onclick = function () {reloadWindow(); return false;}
    objOverlay.style.display = 'none';
    objOverlay.style.position = 'absolute';
    objOverlay.style.top = '0';
    objOverlay.style.left = '0';
    objOverlay.style.zIndex = '90';
    objOverlay.style.width = '100%';
    objBody.insertBefore(objOverlay, objBody.firstChild);

    var objBigMap = document.getElementById('bigMap');
	var objBigMapNew = objMapContainer.removeChild(objBigMap);
	
	
	var arrayPageSize = getPageSize();
    var arrayPageScroll = getPageScroll();


    // center loadingImage if it exists
    objBigMapNew.style.top = (arrayPageScroll[1] + ((arrayPageSize[3] - 35 - 557) / 2) + 'px');
    objBigMapNew.style.left = (((arrayPageSize[0] - 20 - 529) / 2) + 'px');
    
	// Hide select boxes as they will 'peek' through the image in IE
    selects = document.getElementsByTagName("select");
    for (i = 0; i != selects.length; i++) {
        selects[i].style.visibility = "hidden";
    }

	objBody.insertBefore(objBigMapNew, objOverlay.nextSibling);	
}

var Utf8 = {

    // public method for url encoding
    encode : function (string) {
        string = string.replace(/\r\n/g,"\n");
        var utftext = "";

        for (var n = 0; n < string.length; n++) {

            var c = string.charCodeAt(n);

            if (c < 128) {
                utftext += String.fromCharCode(c);
            }
            else if((c > 127) && (c < 2048)) {
                utftext += String.fromCharCode((c >> 6) | 192);
                utftext += String.fromCharCode((c & 63) | 128);
            }
            else {
                utftext += String.fromCharCode((c >> 12) | 224);
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                utftext += String.fromCharCode((c & 63) | 128);
            }

        }

        return utftext;
    },

    // public method for url decoding
    decode : function (utftext) {
        var string = "";
        var i = 0;
        var c = 0;
        var c1 = 0; 
        var c2 = 0;

        while ( i < utftext.length ) {

            c = utftext.charCodeAt(i);

            if (c < 128) {
                string += String.fromCharCode(c);
                i++;
            }
            else if((c > 191) && (c < 224)) {
                c2 = utftext.charCodeAt(i+1);
                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                i += 2;
            }
            else {
                c2 = utftext.charCodeAt(i+1);
                c3 = utftext.charCodeAt(i+2);
                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                i += 3;
            }

        }

        return string;
    }

}

