var map;
var bigmapMap;
var bigmapPoins = new Array();
var geocoder;
var icon;
var img_small_spinner;
var canSubmitSearchForm = true;
var willSubmitForm = false;

var bod;
var fbOverlay;
var bigMap;
var bigMap_x;
var timeouts = {};
var hiddenEls = [];
var html = document.documentElement;

var agent = navigator.userAgent, version = navigator.appVersion;

var mac = version.indexOf('Macintosh') !== -1;
	
if (window.opera) {
		var opera = true;
		var operaOld = parseFloat(version) < 9.5;
		var operaMac = mac;
} else if (document.all) {
		var ie = true;
		var ieOld = parseInt(version.substr(version.indexOf('MSIE') + 5), 10) < 7;
		var ie8b2 = version.indexOf('MSIE 8.0') !== -1 && navigator.appMinorVersion === 'beta 2';
		var ieXP = parseInt(version.substr(version.indexOf('Windows NT') + 11), 10) < 6;
} else if (agent.indexOf('Firefox') !== -1) {
		var ff = true;
		var ffOld = parseInt(agent.substr(agent.indexOf('Firefox') + 8), 10) < 3;
		var ffNew = !ffOld;
		var ffMac = mac;
} else if (version.indexOf('WebKit') !== -1) {
		var webkit = true;
		var webkitNew = parseInt(version.substr(version.indexOf('WebKit') + 7), 10) >= 500;
		var webkitOld = !webkitNew;
		var webkitMac = mac;
}

function $(id) { return document.getElementById(id); }

function selectWert(sObj) { with (sObj) return options[selectedIndex].value; }

function getElementsByClassName(className, tag, elm){
	var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)");
	var tag = tag || "*";
	var elm = elm || document;
	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returnElements = [];
	var current;
	var length = elements.length;
	for(var i=0; i<length; i++){
		current = elements[i];
		if(testClass.test(current.className)){
			returnElements.push(current);
		}
	}
	return returnElements;
}


function initialize()
{
     icon = new GIcon();
     icon.image  = "http://telhosting.1api.net/g2/shared/img/map-marker-icon.png";
     icon.shadow = "http://telhosting.1api.net/g2/shared/img/map-marker-icon-shadow.png";
     icon.iconSize = new GSize(29, 37);
     icon.shadowSize = new GSize(28, 20);
     icon.iconAnchor = new GPoint(14, 38);
      
     var lon = parseFloat($('lon').value);
     var lat = parseFloat($('lat').value);

     map = new GMap2($('search_karte'));

     if (lat>0)
      placeMark(lon, lat);
     else
      map.setCenter(new GLatLng(46.686042,7.84986), 10);

     map.addControl(new GSmallMapControl());
 //    map.addControl(new GMapTypeControl());

     geocoder = new GClientGeocoder();

     img_small_spinner = new Image();
     img_small_spinner.src = "/images/spinner-e4e4dc.gif";
     
     img_spinner = new Image();
     img_spinner.src = "/images/spinner-map.gif";

     bod = document.body || document.getElementsByTagName('body')[0];
     bigMap    = newNode('div', 'bigMap', bod);
     fbOverlay = newNode('div', 'fbOverlay', bod);    

     bigMap_x    = newNode('a', 'bigMap_x', bod,    new Array(   new Array("style",        "-moz-user-select: none;"),
                                                                 new Array("unselectable", "on"),
                                                                 new Array("title",        "Close"),
                                                                 new Array("onClick",      "closeBigMap()"),
                                                                 new Array("href",         "#")
                                                               ));
     
     var tmpSpan = newNode('span', '', bigMap_x,    new Array(   new Array("style",        "-moz-user-select: none;"),
                                                                 new Array("unselectable", "on")
                                                             ));
     tmpSpan.appendChild(document.createTextNode('X'));

     if (bigMap_x.addEventListener) {
	bigMap_x.addEventListener("onclick", closeBigMap, true);
     } else if (bigMap_x.attachEvent) {
	bigMap_x.attachEvent('onclick', closeBigMap);
     }
     
     //<a style="-moz-user-select: none;" unselectable="on" onClick="closeBigMap()" href="#" id="bigMap_x" title="Close"><span style="-moz-user-select: none;" unselectable="on">X</span></a>

     fadeOpacity(fbOverlay, 0, 0);
     
     var url = document.location.href;
     var splitted = url.split("#", 2);
     if (splitted.length>1)
     {
      var args = splitted[1].split(",");
      
      for (var i=0 ; i<=args.length ; i++)
      {
       switch (args[i])
       {
        case "showMap":
             showResOnMap();
             break;
       }
      }
     }
     
     init_advance_search();
}

function addAddressToMap(response)
{
      map.clearOverlays();
      if (!response || response.Status.code != 200) 
      {
        alert("Leider konnten wir an Hand Ihrer Eingabe, diesesn Ort nicht finden.");
      } else {
        place = response.Placemark[0];
        placeMark( place.Point.coordinates[0], place.Point.coordinates[1] );
        writeLatnLngtoForm( place.Point.coordinates[0], place.Point.coordinates[1] );

        $('ort_searchbox').style.backgroundImage = "url(/images/find.gif)";  
        canSubmitSearchForm = true;
        
        if (willSubmitForm==true)
        {
         document.SuchFormular.submit();
        }
      }
}

function placeMark(lon, lat)
{
     map.setCenter(new GLatLng(lat, lon), 14);

     point = new GLatLng(lat, lon);
     marker = new GMarker(point, {icon:icon, draggable: true});
     map.addOverlay(marker);

     marker.enableDragging();

     GEvent.addListener(marker,'dragend',function() { updateLatnLng() } );
    }

    function updateLatnLng()
    {
     var point = marker.getPoint() ;

     writeLatnLngtoForm( point.lng(), point.lat() );
    }
    
    function writeLatnLngtoForm(lon, lat)
    {
     $('lon').value = lon;
     $('lat').value = lat;

     lat = (Math.round(lat*1000)/1000);
     lon = (Math.round(lon*1000)/1000);

     $('latnlon').innerHTML = 'Lat: '+lat+' &nbsp; Lon: '+lon;
}

function showLocation()
{
      var address = $('adress').value;

      if (address.length>0)
      {
       geocoder.getLocations(address, addAddressToMap);

       $('search_karte_block').style.display='block';
       
       $('ort_searchbox').style.backgroundImage = "url(/images/spinner-e4e4dc.gif)";

      } else {
       $('lon').value = 0;
       $('lat').value = 0;
       $('latnlon').innerHTML = '';
       $('search_karte_block').style.display='none';
      }
}
    
function activateOrtSuche()
{
     canSubmitSearchForm = false; 
}

function submitSearchForm()
{
     if (canSubmitSearchForm==false && $('adress').value.length>0)
     {
      willSubmitForm = true; 
      showLocation();
      return false;
     }

     return true;
}
    
function getElementsByClassName(classname, node)
{
      if(!node)
       node = document.getElementsByTagName("body")[0];
      var a = [];
      var re = new RegExp('\\b' + classname + '\\b');
      var els = node.getElementsByTagName("*");
      for(var i=0,j=els.length; i<j; i++)
       if(re.test(els[i].className))
        a.push(els[i]);

      return a;
}

function showResOnMap()
{
     bigMap.style.display='block';
     bigMap_x.style.display='block';
     
     newNode('img', '', bigMap,    new Array(   new Array("src",        "/images/spinner-map.gif"),
                                                new Array("border", "0")
                                              ));

     fadeOpacity(fbOverlay, 0.75, 6);

     bigmapMap = new GMap2(bigMap);

     var point = marker.getPoint();
     bigmapMap.setCenter(new GLatLng(point.lat(),point.lng()), getZommeForUmkreis( parseFloat(selectWert($('uk'))) ) );
     bigmapMap.addControl(new GSmallMapControl());
     bigmapMap.addControl(new GMapTypeControl());

     var objs = getElementsByClassName("inner");

     for(var i=0; i<=objs.length; i++)
      if (objs[i])
      {
       var _spans  = objs[i].getElementsByTagName('span');
       var _smalls = objs[i].getElementsByTagName('small');
       var _as     = objs[i].getElementsByTagName('a');
       var lonnlat = new Array();
       var txt     = '';
      
       if (_spans[0].className=="cords")
       {      // 0=lat 1=lon
        lonnlat = _spans[0].firstChild.nodeValue.split(" ", 2);
       }

       if (_smalls && _smalls.length>0 && _smalls[0].firstChild)
        var txt   = _smalls[0].firstChild.nodeValue;

       var title = _as[0].firstChild.firstChild.nodeValue;
       var url   = _as[0].href;

       var html  = '<a href="'+url+'" target="_blank"><b>'+title+'</b></a><br><small>'+wordwrap(txt, 40, "<br />\n", false)+'</small>';

       bigmapMap.addOverlay(createMarker(new GLatLng(lonnlat[0], lonnlat[1]), html));
      }
      
     return false;
}
    
function createMarker(point, html)
{
       var marker = new GMarker(point);

       GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(html);
       });

       return marker;
}
    
function closeBigMap()
{
     bigMap.style.display='none';
     bigMap_x.style.display='none';
     fadeOpacity(fbOverlay, 0, 6);
}
    
function getZommeForUmkreis(uk)
{
     var zoomstufen = new Array(99999, 36144.578, 18181.818, 9090.909, 4545.455, 2264.151, 1132.075, 566.038, 283.019, 141.176, 70.588, 35.294, 17.647, 8.824, 8.333, 2.222, 1.101, 0.55, 0.275, 0.138);
     
     for(var z=(zoomstufen.length-1) ; z>=1 ; z--)
     {
      if (zoomstufen[z]>(uk*2))
       return z
     }
}
    
function wordwrap( str, int_width, str_break, cut )
{
     var m = ((arguments.length >= 2) ? arguments[1] : 75   );
     var b = ((arguments.length >= 3) ? arguments[2] : "\n" );
     var c = ((arguments.length >= 4) ? arguments[3] : false);
 
     var i, j, l, s, r;
 
     str += '';
 
     if (m < 1) {
        return str;
     }
 
     for (i = -1, l = (r = str.split("\n")).length; ++i < l; r[i] += s) {
        for(s = r[i], r[i] = ""; s.length > m; r[i] += s.slice(0, j) + ((s = s.slice(j)).length ? b : "")){
            j = c == 2 || (j = s.slice(0, m + 1).match(/\S*(\s)?$/))[1] ? m : j.input.length - j[0].length || c == 1 && m || j.input.length + (j = s.slice(m).match(/^\S*/)).input.length;
        }
     }

     return r.join("\n");
}

function fadeOpacity(el, opacity, duration, callback) {
	var startOp = +(el.style.opacity || 0);
	duration = duration || 0;

	var fadeIn = (startOp <= opacity && opacity > 0);

	if (opacity==0) {
	 el.style.display = 'none';
	 showElements();

	} else { 
	 el.style.display = 'block';
	 hideElements('select');
	 hideElements('flash');
	 hideElements('applet');

	 stretchOverlay();
	 
	if (this.ieOld) {
	 this.fbOverlay.style.position = 'absolute';
	}

	 if (document.addEventListener) {
	 	document.addEventListener("onresize", stretchOverlay, true);
	 	document.addEventListener("onscroll", stretchOverlay, true);
	 } else if (document.attachEvent) {
	 	attachEvent('onresize', stretchOverlay);
	 	attachEvent('onscroll', stretchOverlay);
	 }

	}
	
	if (duration > 10) duration = 10;
	if (duration < 0) duration = 0;
	if (duration === 0) {
		startOp = opacity;
		var incr = 1;
	} else {
		var root = Math.pow(100, 0.1),
			power = duration + ((10 - duration)/9) * (Math.log(2)/Math.log(root) - 1),
			incr = 1/Math.pow(root, power);
	}
	if (fadeIn) {
		
	} else {
		incr = -incr;
	}
	stepFade(el, startOp, opacity, incr, fadeIn, callback);
}

function stepFade(el, thisOp, finishOp, incr, fadeIn, callback) {
	if (!el) return;
	if ((fadeIn && thisOp >= finishOp) || (!fadeIn && thisOp <= finishOp)) thisOp = finishOp;
	if (ie) el.style.filter = 'alpha(opacity=' + thisOp*100 + ')';
	el.style.opacity = thisOp + '';
	if (thisOp === finishOp) {
	//	clearTimeout( timeouts['fade' + el.id] );
	//	delete timeouts['fade' + el.id];
		
		if (ie && finishOp >= 1) el.style.removeAttribute('filter');
		if (callback) callback();
	} else {
		timeouts['fade' + el.id] = setTimeout(function() { stepFade(el, thisOp + incr, finishOp, incr, fadeIn, callback); }, 20);
	}
}

function getScroll(win) {
	if (!(win && win.document)) win = self;
	var doc = win.document,
		html = doc.documentElement,
		bod = doc.body || doc.getElementsByTagName('body')[0],
		left = win.pageXOffset || bod.scrollLeft || doc.documentElement.scrollLeft || 0;
	return {
		left: left,
		top: win.pageYOffset || bod.scrollTop || doc.documentElement.scrollTop || 0
	};
}

function stretchOverlay(foo) {

//	return function() {
		if (arguments.length === 1) {
			clearTimeout(timeouts['stretch']);
			timeouts['stretch'] = setTimeout(function() { stretchOverlay(); }, 25);
		} else {
			delete timeouts.stretch;
			if (!bigMap) { return; }
   			var width = bigMap.offsetLeft + bigMap.offsetWidth,
				height  = bigMap.offsetTop + bigMap.offsetHeight,
				display = getDisplaySize(),
				scroll  = getScroll(),
				overlay = fbOverlay.style;
			overlay.left   = '0px';
			overlay.width  = Math.max(width, bod.scrollWidth, bod.clientWidth, html.clientWidth, display.width + scroll.left) + 'px';
			overlay.height = Math.max(height, bod.scrollHeight, bod.clientHeight, html.clientHeight, display.height + scroll.top) + 'px';
                }
//	};
}

function hideElements(type, thisWindow) 
{
	if (!thisWindow) {
		hideElements(type, self);
	} else {

		var tagName, tagNames = type === 'flash' ? ['object', 'embed'] : [type];
		try {
			while ((tagName = tagNames.pop())) {
				var els = thisWindow.document.getElementsByTagName(tagName),
				i = els.length;

				while (i--) {
					var el = els[i];
					if (el.style.visibility !== 'hidden' && (tagName !== 'object' ||
					(el.getAttribute('type') && el.getAttribute('type').toLowerCase() === 'application/x-shockwave-flash') ||
					(el.getAttribute('classid') && el.getAttribute('classid').toLowerCase() === 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000') ||
					/data\s*=\s*"?[^>"]+\.swf\b/i.test(el.innerHTML) ||
					/param\s+name\s*=\s*"?(movie|src)("|\s)[^>]+\.swf\b/i.test(el.innerHTML))) {
						el.style.visibility = 'hidden';
						hiddenEls.push(el);
					}
				}
			}
		} catch(e) {}
		 var iframes = thisWindow.frames, i = iframes.length;
		 while (i--) {
			try {
				if (typeof iframes[i].window === 'object') hideElements(type, iframes[i].window);
			} catch(e) {}
		}
	}
}

function showElements()
{
    		while(hiddenEls.length) {
			var el = hiddenEls.pop();
			el.style.visibility = 'visible';
			if (ffOld && ffMac) {
				el.focus();
				el.blur();
			}
		}
}

function newNode(nodeType, id, parentNode, atributes)
{
	var node = document.createElement(nodeType);
	node.id = id;
        
	if(atributes)
	 for(a in atributes)
          node.setAttribute(atributes[a][0], atributes[a][1]);

	parentNode.appendChild(node);
        
	return node;
}

function getDisplaySize() {
	return { width: getDisplayWidth(), height: getDisplayHeight() };
}

function getDisplayWidth() {
	return html.clientWidth || bod.clientWidth;
}

function getDisplayHeight() {
	if (webkitOld) return window.innerHeight;
	if (!html.clientHeight || operaOld || document.compatMode === 'BackCompat') {
		return bod.clientHeight;
	}
	return html.clientHeight;
}

function JumpToLang(obj, baseUrl)
{
 var lang = selectWert(obj);

 if (baseUrl=='')
  location.href = '/?lang='+lang;
 else
  location.href = baseUrl+'&lang='+lang;
}

var extd_search_stufe = '';

function advance_search()
{
  var extd_search_a = getElementsByClassName('extd_search_a');
  var extd_search_b = getElementsByClassName('extd_search_b');

  if (extd_search_stufe=='')
  {
   for(var i=0 ; i<extd_search_a.length ; i++)
   {
    extd_search_a[i].style.display='block';
    
    var obj = extd_search_a[i].getElementsByTagName('input');
    obj[0].disabled = false;
   }
   extd_search_stufe = 'a'; 
  } else {
   for(var i=0 ; i<extd_search_b.length ; i++)
   {
    extd_search_b[i].style.display='block';
    
    var obj = extd_search_b[i].getElementsByTagName('input');
    obj[0].disabled = false;
   }
   extd_search_stufe = 'b';
   $('btn_advance_search').style.display='none';
  }

  return false;
}

function init_advance_search()
{
 var extd_search = getElementsByClassName('extd_search_.*');
 
 var show_extd_search = new Object();

 for(var i=0 ; i<extd_search.length ; i++)
 {
  var obj = extd_search[i].getElementsByTagName('input');

  for(var x=0 ; x<obj.length ; x++)
  {
   if (obj[x].type=='checkbox')
   {
    if (obj[x].checked==true)
     show_extd_search[extd_search[i].className] = true;

   } else if (obj[x].type=='text') {
    if (obj[x].value.length>0)
     show_extd_search[extd_search[i].className] = true;

   }
  }
 }
 
 if (show_extd_search.extd_search_b==true)
  show_extd_search.extd_search_a=true;

 if (show_extd_search.extd_search_a==true)
  advance_search();

 if (show_extd_search.extd_search_b==true)
  advance_search();
 
 extIpCheck();
}

function extIpCheck()
{
 var canUseQ = true;

 var extd_search = getElementsByClassName('extd_search_.*');

 for(var i=0 ; i<extd_search.length ; i++)
 {
  var obj = extd_search[i].getElementsByTagName('input');
  
  if (obj[0].type=='text' && obj[0].value.length>0)
  {
   canUseQ = false;
   break;
  }
 }

 if (canUseQ==true)
 {
  $('ip_q').disabled = false;
 } else {
  $('ip_q').value = '';
  $('ip_q').disabled = true;
 }

}