/*********************************************************
 * Handle AJAX requests
 * Copyright © 2009 by Eric Windmeier
 *********************************************************/

function ajax(script, id, ajaxAction) {

	var xmlHttp = null;
	
	// Mozilla, Opera, Safari sowie Internet Explorer 7
	if (typeof XMLHttpRequest != 'undefined') {
	    xmlHttp = new XMLHttpRequest();
	}
	if (!xmlHttp) {
	    // Internet Explorer 6 und Älter
	    try {
	        xmlHttp  = new ActiveXObject("Msxml2.XMLHTTP"); // IE5
	    } catch(e) {
	        try {
	            xmlHttp  = new ActiveXObject("Microsoft.XMLHTTP"); // IE6
	        } catch(e) {
	            xmlHttp  = null;
	        }
	    }
	}

	if (xmlHttp) {
		xmlHttp.onreadystatechange = function(){
			if (xmlHttp.readyState == 4) {
				if (xmlHttp.status == 200) {
					if (handleAjaxResponse(xmlHttp.responseText, id, ajaxAction) == true) {
						xmlHttp = null;
					}
				}
			}
		}
	    xmlHttp.open('GET', script, true);
	    xmlHttp.send(null);
	}
}

function showActivityIcon($id) {
	
	if (document.getElementById($id)) {
		document.getElementById($id).innerHTML = '<p><img class="icon" src="/images/icons/loader.gif" align="absmiddle" alt="Bitte warten" title="Bitte warten" /> &nbsp; Angebote werden geladen ...</p>';
	}
}

function hideActivityIcon($id) {
	
	if (document.getElementById($id)) {
		document.getElementById($id).innerHTML = '';
	}
	
}


/*********************************************************
 * Suche und Ausgabe Hotelobjekte
 *********************************************************/

function showResults(category, language, format, start, usage, price, area, rooms) {
	
	showActivityIcon('results');
	
	var querystring  = 'cat=' + category + '&lang=' + language +  '&format=' + format + '&start=' + start + '&usage=' + usage + '&price=' + price + '&area=' + area + '&rooms=' + rooms;
	
	ajax('/ajax/results.php?' + querystring, 'results', '0');	
		
	if (format == 'map') {
		if (document.getElementById('map2')) {
			document.getElementById('map2').style.display = 'block';
		}
		if (document.getElementById('map1Container')) {
			document.getElementById('map1Container').style.display = 'none';
		}
		initializeGoogleMap(2);
	} else {
		if (document.getElementById('map2')) {
			document.getElementById('map2').style.display = 'none';
		}
		if (document.getElementById('map1Container')) {
			document.getElementById('map1Container').style.display = 'block';
		}
	}
	
}

function showResultsPromo(language, list) {
	
	showActivityIcon('resultsPromo');
	
	var querystring  = 'lang=' + language + '&list=' + list;
	
	ajax('/ajax/results.php?' + querystring, 'resultsPromo', '0');
	
}

function updateResults(language, start) {
	
	var price = 0;
	var area = 0;
	var rooms = 0;
	
	if (start == null) start = 1;
	
	var usage = getFilterOption('usage');
	
	if ($( "#slider-range" ).length > 0) {
		price = $( "#slider-range" ).slider( "values", 0 ) + '-' + $( "#slider-range" ).slider( "values", 1 );
	}
	if ($( "#slider-range1" ).length > 0) {
		area = $( "#slider-range1" ).slider( "values", 0 ) + '-' + $( "#slider-range1" ).slider( "values", 1 );
	}
	if ($( "#slider-range2" ).length > 0) {
		rooms = $( "#slider-range2" ).slider( "values", 0 ) + '-' + $( "#slider-range2" ).slider( "values", 1 );
	}
	
	var category = getParameter(window.top.location.search.substring(1), 'cat');
	//var language = getParameter(window.top.location.search.substring(1), 'lang');
	var format = getParameter(window.top.location.search.substring(1), 'format');
	
	showResults(category, language, format, start, usage, price, area, rooms);
}

function getFilterOption(option) {
	
	var filtervalue = '';
	
	switch (option) {
		case 'usage': 
			for (var i=0; i < document.filter.nutzungsart.length; i++) {
				if (document.filter.nutzungsart[i].checked) {
					filtervalue = document.filter.nutzungsart[i].value; 
				}
			}
			break;
	}
	
	return filtervalue;
	
}

function handleAjaxResponse(response, id, action) {
	
	switch (action) {
		case 'addGoogleMapMarker1':
			if (addGoogleMapMarker1(response)) {
				return true;
			} else {
				return false;
			}
			break;
		case 'addGoogleMapMarker2':
			if (addGoogleMapMarker2(response)) {
				return true;
			} else {
				return false;
			}
			break;
		default:
			hideActivityIcon(id);
			document.getElementById(id).innerHTML = response;
			return true;
			break;
	}
	
	
}

function changeLocation(category, language, format) {
	
	window.location.href = '/realestate/' + language + '/objekte.php?cat=' + category + '&lang=' + language + '&format=' + format + '&#breadcrumbs';
	
}


/*********************************************************
 * Sonstige Funktionen
 *********************************************************/

function getParameter ( queryString, parameterName ) {   
	// Add "=" to the parameter name (i.e. parameterName=value)   
	var parameterName = parameterName + "=";   if ( queryString.length > 0 ) {      
	// Find the beginning of the string      
	begin = queryString.indexOf ( parameterName );      
	// If the parameter name is not found, skip it, otherwise return the value      
	if ( begin != -1 ) {         
		// Add the length (integer) to the beginning         
		begin += parameterName.length;         
		// Multiple parameters are separated by the "&" sign         
		end = queryString.indexOf ( "&" , begin );      if ( end == -1 ) {         
		end = queryString.length      }      
		// Return the string      
		return unescape ( queryString.substring ( begin, end ) );   }   
		// Return "null" if no parameter has been found   
		return "null";   
	}
}

function formatNumber(nStr) {
  nStr += '';
  x = nStr.split(',');
  x1 = x[0];
  x2 = x.length > 1 ? ',' + x[1] : '';
  var rgx = /(\d+)(\d{3})/;
  while (rgx.test(x1)) {
    x1 = x1.replace(rgx, '$1' + '.' + '$2');
  }
  return x1 + x2;
}


/*********************************************************
 * Google Map
 *********************************************************/
var map1 = null;
var map2 = null;

function initializeGoogleMap(id) {
    
    switch (id) {
    	// Small Map on the right site showing all real estate objects
    	case 1:
			var latlng = new google.maps.LatLng(51.5, 10.3);
		    var myOptions = {
		    	zoom: 5,
		    	center: latlng,
		    	mapTypeId: google.maps.MapTypeId.HYBRID
		    };
		    map1 = new google.maps.Map(document.getElementById("map1"), myOptions);
		    
		    ajax('/ajax/results_map.php?map=1', '0', 'addGoogleMapMarker1');
    		break;
    		
   		// Big map showing search results
    	case 2:
			var latlng = new google.maps.LatLng(51.318928, 10.5);
		    var myOptions = {
		    	zoom: 6,
		    	minZoom: 4,
		    	maxZoom: 11,
		    	center: latlng,
		    	mapTypeId: google.maps.MapTypeId.ROADMAP
		    };
		    map2 = new google.maps.Map(document.getElementById("map2"), myOptions);

			var price = 0;
			var area = 0;
			var rooms = 0;
		    
		    var usage = getFilterOption('usage');

			if ($( "#slider-range" ).length > 0) {
				price = $( "#slider-range" ).slider( "values", 0 ) + '-' + $( "#slider-range" ).slider( "values", 1 );
			}
			if ($( "#slider-range1" ).length > 0) {
				area = $( "#slider-range1" ).slider( "values", 0 ) + '-' + $( "#slider-range1" ).slider( "values", 1 );
			}
			if ($( "#slider-range2" ).length > 0) {
				rooms = $( "#slider-range2" ).slider( "values", 0 ) + '-' + $( "#slider-range2" ).slider( "values", 1 );
			}
			
			var category = getParameter(window.top.location.search.substring(1), 'cat');
			var language = getParameter(window.top.location.search.substring(1), 'lang');
			var format = getParameter(window.top.location.search.substring(1), 'format');
			
			var querystring  = 'cat=' + category + '&lang=' + language +  '&format=' + format + '&start=1&usage=' + usage + '&price=' + price + '&area=' + area + '&rooms=' + rooms;

			ajax('/ajax/results_map.php?map=2&' + querystring, '0', 'addGoogleMapMarker2');
    		break;
    		
    }
}

function addGoogleMapMarker1(locationdata) {
	
	var geoLocations = locationdata;
	var geoLocationsArray = geoLocations.split('||');

	for (var i=0, len=geoLocationsArray.length; i<len; ++i) {
		
		var geoPosition = geoLocationsArray[i].split('---');
		
		var latlng = new google.maps.LatLng(geoPosition[3], geoPosition[4]);
		var marker = new google.maps.Marker({
	    	position: latlng,
	    	map: map1,
	    	clickable: true
		});
		google.maps.event.addListener(marker, 'click', function() {
			location.href = '/realestate/' + lang + '/objekte.php?cat=&lang=' + lang +'&format=map&amp;#breadcrumbs';
    	});
	}
}

function addGoogleMapMarker2(locationdata) {
	
	var geoLocations = locationdata;
	var geoLocationsArray = geoLocations.split('||');
	
	for (var i=0, len=geoLocationsArray.length; i<len; ++i) {
		
		var locationInfo = geoLocationsArray[i].split('---');
		var latlng = new google.maps.LatLng(locationInfo[3], locationInfo[4]);
		var infowindow = new google.maps.InfoWindow({ 
			position: latlng
		});
		var marker = new google.maps.Marker({
			animation: google.maps.Animation.DROP,
	    	position: latlng,
	    	map: map2,
			title: "Objekt " + locationInfo[1],
			content: locationInfo[5]
		});
		
		google.maps.event.addListener(marker, 'click', function() {
      		//this.openInfoWindowHtml(this.content);
      		infowindow.setContent(this.content);
      		infowindow.open(map2, this);
    	});
    	
	}
}

/*********************************************************
 * jQuery
 *********************************************************/
$(document).ready(function() { 
   $('#s3slider').s3Slider({ 
      timeOut: 6000 
   });
}); 

