var globalZoomLevel = 11;
var globalPageItems = [];
var global_current_page_value = 1;
var global_total_items = 1;
var global_total_pages = 1;
var global_items_per_page = 10;
/*
cst = {lat:'', lng:'', location:'', country:'',city:'',address:'',distance:''};
csf = {
	location : {field: 'inSFLocation', plink: 'l',  ajax: 'location',    "default": ''},
	country  : {field: 'inSFCountry',  plink: 'c',  ajax: 'countryCode', "default": 'DE'},
	city     : {field: 'inSFCity',     plink: 'ct', ajax: 'city',        "default": ''},
	address  : {field: 'inSFAddress',  plink: 'a',  ajax: '',            "default": ''},
	distance : {field: 'inSFDistance', plink: 'd',  ajax: 'distance',    "default": '10'}
};*/

function onSearchClicked(permalink)
{
	var location; 
	var country;
	var city;
	var address;
	var distance;
	global_current_page_value = 1;
	var s = {};

	for (p in csf)
	{
		if(permalink)
		{
			if (csf[p].plink) s[p] = getUrlParameter(csf[p].plink)
		}
		else
		{
			s[p] = getElementValueById(csf[p].field)
		}
		if (!s[p]&&csf[p].deflt)s[p]=csf[p].deflt
		setElementValueById(csf[p].field,s[p])
	}
	if (!(s.location || s.city))
	{
		alert('Bitte geben Sie Ihre Stadt oder Postleitzahl ein');
		return;
	}
	if (s.distance == '25') globalZoomLevel = 10;
	if (s.distance == '50') globalZoomLevel = 9;
	if (s.distance == '100') globalZoomLevel = 7;

	var geocoder = new GClientGeocoder();
	var query = s.location ? s.location + '+' + s.country : s.city + '+' + s.country;
	geocoder.getLocations(query,
		function(response)
		{
			if (!response) return;
			var point
			if (response.Placemark)
			{
				place = response.Placemark[0];
				point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
				cst.lat = place.Point.coordinates[1];
				cst.lng = place.Point.coordinates[0];
			}
			if (point)
			{
//				BigMap.panTo(point);
				BigMap.setCenter(point, globalZoomLevel);
				GetSearchResults(s, point.lat(), point.lng());
			}
			else
			{
				alert ('Couldn\'t find your location!');
			}
		}
		)
    return false;
}
/* Functions */

function setPermalink(s)
{
	var plink = 'http://'+document.domain + "/"+ global_page_type +".html?permalink=true";
	for(p in csf)
	{
		plink += '&' + csf[p].plink + '=' + escape(s[p])
	}
	pldiv = document.getElementById('permalink');

	var anchor = {
		tag: 'a',
		attr : {href : plink},
		content: [{
				tag: 'img',
				attr : {
					src : '/media/images/bar_icon_link.gif',
					align : 'absmiddle',
					border: '0px'
				}
			},
			' Link to this page'
			]
		}
	emptyNode(pldiv);
	constructElement(pldiv,anchor);
}

function pleaseWait()
{
	hideElementById('dvWelcomeMessage');
	hideElementById('dvProductListContainer');
	hideElementById('dvPager');
	showElementById('dvLoadingThrobber');
	disableElements(document.getElementById('dvSF'));
}

function GetSearchResults(s,lat,lng)
{
	var SearchRequest = getXmlHttpObject();
	var listBox = document.getElementById('dvProductList');
	clearProducts(listBox);
	pleaseWait();
	if (SearchRequest == null)
	{
		alert ("Your browser does not support HTTP Request");
		disableElements(document.getElementById('dvSF'), true);
		return false;
	}
	var url = "/ajax/"+global_page_type+".json?lat="+escape(lat)+"&lng="+escape(lng)+"&page="+global_current_page_value;
	for(p in csf)
	{
		cst[p]=s[p];
		if(csf[p].ajax)url+='&'+csf[p].ajax+'='+escape(s[p]);
	}
	setPermalink(s);
	SearchRequest.onreadystatechange = function()
	{
		if (SearchRequest.readyState && (SearchRequest.readyState == 4 || SearchRequest.readyState == "complete"))
		{
			var results = eval("(" + SearchRequest.responseText + ")" ).result;
			global_total_items = eval("(" + SearchRequest.responseText + ")" ).total;
			global_total_pages = Math.ceil(global_total_items / global_items_per_page);
			if (results != null)
			{
				if (results.length)
				{
					hideElementById('dvLoadingThrobber');
					showElementById('dvWelcomeMessage');
					showElementById('dvProductList');
					showElementById('dvProductListContainer');
					hideElementById('dvWelcomeMessage');
					hideElementById('dvNothingFound');
					emptyNode(listBox);
					var ol = document.createElement('ol');
					ol.id = 'productList';
					ol.start = (global_current_page_value - 1) * global_items_per_page + 1;
					for (var i = 0; i < global_items_per_page; i++)
					{
						var item = results[i];
						if (item && item.id)
						{
							global_items["'"+item.id+"'"] = item;
							addProduct(item, ol, true);
						}
					}
					listBox.appendChild(ol);
					if(global_total_pages&&global_total_pages>1)
					{
						showElementById('dvPager');
						var pp = createAdvancedPager(global_total_pages, global_current_page_value,'showPage');
						emptyNode(document.getElementById('dvPager'));
						document.getElementById('dvPager').appendChild(pp);
					}
				}
				else
				{
					nothingFound();
				}
			}
			else
			{
			    nothingFound();
			}
			disableElements(document.getElementById('dvSF'), true);
		}
	    return false;
	}
	
	SearchRequest.open("GET", url, true);
	SearchRequest.send(null);
	return false;
}

function nothingFound()
{
	hideElementById('dvPager');
	hideElementById('dvLoadingThrobber');
	showElementById('dvProductListContainer');
	showElementById('dvNothingFound');
}

function showPage(page)
{
	global_current_page_value = page;
	GetSearchResults(cst,cst.lat,cst.lng);
	return false;
}
function addProductPage(itemids, parent, page)
{
	var ol = document.createElement('ol');
	ol.id = 'productList';
	ol.start = (page - 1)*global_items_per_page + 1;
	for (var i = 0; i < itemids.length; i++)
	{
		item = global_items[itemids[i]];
		addProduct(item,ol, true);
	}
	parent.appendChild(ol);
}

function addProduct(item, parent, ret)
{
	var point = new GLatLng(item.Longitude, item.Latitude);
	var marker = new GMarker(point);
	
	var info = constructInfo(item);
	var link_url = "javascript: void(0)";
	if (item.HotelKey)
		link_url = "http://www.hoteldatenbank.de/hotel/" + item.HotelKey+".html";
	if (item.URL)
		link_url = item.URL

	var a = {
		tag : 'li',
		attr: {
			id: 'liSRListItem' + item.id,
			originalClassName: 'liSRListItem',
			className: 'liSRListItem'
		},
		content: [{
			tag: 'a',
			attr : {
				href : "javascript:expandProduct('"+item.id+"');",
				className: 'liSRListItemLink'
			},

			content: item.Name,
			event:{
				mouseover:"return coolTip('"+escape(info.innerHTML)+"', FULLHTML,DELAY,500, NOANCHORWARN, 1, STICKY, ANCHOR, 'liSRListItem"+item.id+"', ANCHORALIGN, 'lr','ul', TIMEOUT, 5000, FADEIN);",
				mouseout:"nd();"
			}
		},
		{
			tag: 'span',
			attr : {
				className: 'listItemStars'
			},
			content: item.Stars
		},
		" ",
		{
			tag: 'a',
			attr : {
				href : link_url,
				target: '_blank'
			},
			content:{
				tag: 'img',
				attr : {
					src : '/media/images/ext_link_anim.gif',
					align : 'absmiddle',
					border: '0px'
				}
			}
		}
		]
	}
	constructElement(parent,a);

	global_infos["'"+item.id+"'"] = info;
	GEvent.addListener(marker, "click", function()
	{
		marker.openInfoWindowHtml(info.innerHTML);
	});
	global_markers["'" + item.id + "'"] = marker;
	BigMap.addOverlay(marker);
}

function SetProductState(item, state)
{
	var e = document.getElementById('liSRListItem' + item.id);
	if (e && e.originalClassName)
	{
		e.className = e.originalClassName + state;
		if (state == 'Ok')
		{
			var info = global_infos["'" +item.id +"'"].innerHTML;
			var l = getElementsByClass('liSRListItemLink', e, 'a')[0];
			if (l)
			{
				l.href = "javascript:expandProduct('"+item.id+"');";
				addEvent(l,'mouseover',function(){return coolTip(info, FULLHTML,DELAY,500, NOANCHORWARN, 1, STICKY, ANCHOR, 'liSRListItem"+item.id+"', ANCHORALIGN, 'lr','ur', TIMEOUT, 5000, FADEIN);});
				addEvent(l,'mouseout',"nd();");
			}
		}
	}
}

//TODO: remove this when last queries work

function addToInput(val, id)
{
	document.getElementById(id).value = val;
}