var cSt = {ort:'',cat:'',sub:'',pg:1};
globalZoomLevel = 11;
function init()
{
	if (GBrowserIsCompatible())
	{
		BigMap = new GMap2(document.getElementById("Map"));
		BigMap.setCenter(new GLatLng(48.842125,10.077381), globalZoomLevel);
		var BigMapControl = new GSmallMapControl();
		var scaleControl = new GScaleControl()
		BigMap.addControl(BigMapControl);
		BigMap.addControl(scaleControl);
	}
	var i = document.getElementById('inSFLocation');
	if (i)
	{
		addEvent(i, "keydown", onKeywordInput);
	}
	showSimilarLocations();
	checkPermalink();
}
function onKeywordInput(event)
{
	var timeout = 800;
	switch(event.keyCode)
	{
		case 13:
			onSearchClicked(false);
			break;
/*		case 38:
		case 40:
			event.preventDefault();
			break;*/
		default:
			clearTimeout(KeywordLoader);
			KeywordLoader = setTimeout("showSimilarLocations()", timeout);
	}
	return true;
}

function showSimilarLocations()
{
	var t = getElementValueById('inSFLocation');
	var el = document.getElementById('spSFExamples');
	if (t && KeywordLoaderRequest)
	{
		var url = "/ajax/similarort.json?input=" + escape(t);
		KeywordLoaderRequest.onreadystatechange = function()
		{
			if (KeywordLoaderRequest.readyState && (KeywordLoaderRequest.readyState == 4 || KeywordLoaderRequest.readyState == "complete"))
			{
				var locations = eval("(" + KeywordLoaderRequest.responseText + ")" ).result;
				if (!locations || locations.length == 0)
				{
					return;
				}
				emptyNode(el); var rel = [];
				for(var i=0; i<locations.length; i++)
				{

					var a = {
					    tag: 'a',
					    attr: {
						id:('aInstanceLocation' + i),
						href:"javascript:addToInput(getElementValueById('aInstanceLocation"+i+"'),'inSFLocation');",
						title: locations[i]
					    },
					    content: locations[i]
					};
					rel.push(a);
					if (i+1 < locations.length)
					{
					    rel.push(', ');
					}
				}
				if (rel.length)constructElement(el,rel);
			}
		}
		KeywordLoaderRequest.open('GET', url, true);
		KeywordLoaderRequest.send(null);
	}
	else if(DefaultLocationInstances)
	{
		emptyNode(el);
		for(var i=0; i<DefaultLocationInstances.length; i++)
		{
			var a = document.createElement('a');
			a.appendChild(document.createTextNode(DefaultLocationInstances[i]));
			a.id = 'aInstanceLocation' + i;
			a.href = "javascript:document.getElementById('inSFLocation').value = getElementValueById('aInstanceLocation"+i+"');void(0);";
			el.appendChild(a);
			if (i+1 < DefaultLocationInstances.length)
			{
				el.appendChild(document.createTextNode(', '));
			}
		}
	}
}
function changeSubcategoryDropdown(cat_id)
{
	var dropdown = document.getElementById('inSFSubCategory')
	subcats = subcategories[cat_id.toString()]
	if (dropdown&&dropdown.tagName=='SELECT')
	{
		while(dropdown.options.length )dropdown.options[0]=null;
		var o = new Option('Alle Kategorien','')
		dropdown.options[dropdown.options.length] = o
		if(subcats)
		for(var c in subcats)
		{
			o = new Option(subcats[c],c)
			dropdown.options[dropdown.options.length] = o
		}
	}
}

function onSearchClicked(permalink,s)
{
	var ort, cat, sub, pg;
	var country = 'DE'
	pagenumber=1;
	if (permalink)
	{
		ort  = getUrlParameter('o');
		cat = getUrlParameter('c');
		sub = getUrlParameter('s');
		pg  = getUrlParameter('p');
	}
	else if (s&&typeof s=='object')
	{
		ort = s.ort;
		cat = s.cat;
		sub = s.sub;
		pg = s.pg;
	}
	else
	{
		ort  = getElementValueById('inSFLocation');
		cat = getElementValueById('inSFCategory');
		sub = getElementValueById('inSFSubCategory');
		pg = 1
	}
	if (!ort)
	{
		alert('Please, enter your location!');
		return;
	}
	setElementValueById('inSFLocation',ort);
	setElementValueById('inSFCategory', cat);
	setElementValueById('inSFSubCategory',sub);
	var geocoder = new GClientGeocoder();
	geocoder.getLatLng(ort + '+' + country, function(point)
						{
							if (point)
							{
								BigMap.panTo(point);
							}
						}
						)
	GetSearchResults(ort, cat, sub, pg);
}
/* Functions */
function setPermalink(ort, cat, sub, pg)
{
	var plink = 'http://'+document.domain + "/kijiji.html";
	plink +="?permalink=true&o=" + escape(ort) + '&c=' + escape(cat) +
		'&s=' + escape(sub) + '&p=' + escape(pg);
	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 GetSearchResults(ort, cat, sub, pg)
{
	cSt.ort = ort;
	cSt.cat = cat;
	cSt.sub = sub;
	cSt.pg = pg;
	HideError();
	var listBox = document.getElementById('productList');
	clearProducts(listBox);
	hideElementById('dvWelcomeMessage');
	hideElementById('dvProductList');
	showElementById('dvLoadingThrobber');
	disableElements(document.getElementById('dvSF'));
	if(cSt.ort)
	{
	    SearchRequest = getXmlHttpObject();
	}
	if (SearchRequest == null)
	{
		alert ("Your browser does not support HTTP Request")
		disableElements(document.getElementById('dvSF'), true);
		return false;
	}
	var url = "/ajax/kijiji.json?ort=" + escape(ort) + '&cat=' + escape(cat) +
		'&sub=' + escape(sub) + '&amount=' + 10 + '&page=' + pg;
	setPermalink(ort, cat, sub, pg);
	SearchRequest.onreadystatechange = function()
	{
		if (SearchRequest.readyState && (SearchRequest.readyState == 4 || SearchRequest.readyState == "complete"))
		{
			hideElementById('dvLoadingThrobber');
			var kijijiObj = eval("(" + SearchRequest.responseText + ")" ).result;
			var error = kijijiObj.Errors;
			if (error && error.ErrorCode)
			{
				ShowError(error.LongMessage + ' (' + error.ErrorCode + ')');
				hideElementById('dvPager');
			}
			else if (kijijiObj != null)
			{
				showElementById('dvProductList');
				var items = kijijiObj.Items
				if (items.length == 0)
				{
					showElementById('dvNothingFound');
					hideElementById('dvPager');
				}
				else
				{
					hideElementById('dvNothingFound');
					listBox.start = (cSt.pg - 1) * kijijiObj.ItemsPerPage + 1;
					setElementValueById('inPageNumber', cSt.pg);
					emptyNode(listBox);
					for(var i=0;i<items.length;i++)
					{
						var item = items[i]
						if (item && item.ID)
						{
							global_items["'"+item.ID+"'"] = item;
							if(listBox != null)
							{
								addProduct(item, listBox);
							}
							locateProduct(item, {ort:cSt.ort,cat:cSt.cat,sub:cSt.sub,pg:cSt.pg});
						}
					}
					showElementById('dvPager');
					var pp = createAdvancedPager(kijijiObj.TotalNumberOfPages, cSt.pg,'GehezuSeite');
//					pp.className='pagerList';
					emptyNode(document.getElementById('dvPager'));
					document.getElementById('dvPager').appendChild(pp);
				}
			}
			disableElements(document.getElementById('dvSF'), true);
		}
	}
	SearchRequest.open("GET", url, true);
	SearchRequest.send(null);
}
function GehezuSeite(n)
{
	n=n?n:1;GetSearchResults(cSt.ort, cSt.cat, cSt.sub, n);
}
function locateProduct(item, s)
{
	var countries = {DE: 'Germany'};
	country = 'DE'
	SetProductState(item, 'Load');
	var info = constructInfo(item);
	global_infos["'"+item.ID+"'"] = info;
	if (item.Address)
	{
		if (BigMap != null)
		{
			var geocoder = new GClientGeocoder(null);
			geocoder.getLocations(item.Address + '+' + countries[country], function(response)
			{
				if (!response || response.Status.code != 200)
				{
					SetProductState(item, 'Fail');
				}
				else
				{
					var place = response.Placemark[0];

					if(place.AddressDetails.Country.CountryNameCode != country)
					{
						SetProductState(item, 'Fail');
					}
					else
					{
						var point = new GLatLng(place.Point.coordinates[1],place.Point.coordinates[0]);
						item.Coords = point;
						var marker = new GMarker(point);
						GEvent.addListener(marker, "click", function()
								{
									marker.openInfoWindowHtml(info.innerHTML);
								});
						global_markers["'" + item.ID + "'"] = marker;
						if(s.ort==cSt.ort&&s.pg==cSt.pg)//&&s.lc==cSt.lc&&s.ds==cSt.ds&&s.cn==cSt.cn&&s.ct==cSt.st)
						{
							BigMap.addOverlay(marker);
						}
						SetProductState(item, 'Ok');
					}
				}
			});
		}
	}
	else
	{
		SetProductState(item, 'Fail');
	}
}
function constructInfo(item)
{
	if (global_infos["'" +item.ID + "'"])
	{
		return global_infos["'" +item.ID + "'"];
	}
	var s = {
		tag:'div',
		content:{
			tag:'table',attr:{className:'productInfoBox'},
			content: {tag:'tr',content:{tag:'td',content:[
				{tag:'img',attr:{src:'/media/images/i_kijiji.gif',alt:"Kijiji",align:'left',className:'bubbleImage'}},
				{tag:'h3',content:{tag:'a',attr:{href:item.URL},content:item.Title}},
				{tag:'p',content:item.Description}
				]
			}}
		}
	};
        var box = createElementByTemplate(s);
	var dv = document.createElement('div');
	dv.appendChild(box);
	return dv;
}

function addProduct(item, parent)
{
	var a = {
		tag : 'li',
		attr: {
			id: 'liSRListItem' + item.ID,
			originalClassName: 'liSRListItem',
			className: 'liSRListItem'
		},
		content: [
		{
			tag: 'a',
			attr : {
				href : "javascript:void(0);",
				className: 'liSRListItemLink'
			},
			content: item.Title
		},
		" ",
		{
			tag: 'a',
			attr : {
				href : item.URL,
				target: '_blank',
				title: 'Link to Kijiji'
			},
			content:
			{
				tag: 'img',
				attr : {
					src : '/media/images/ext_link_anim.gif',
					align : 'absmiddle',
					border: '0px',
					alt: 'Link to Kijiji'
				}
			}
		}
		],
		event:{
			'mouseover' : "if (this.style) this.style.className = 'liSRListItem_hovered';",
			'mouseout' : "if (this.style) this.style.className = 'liSRListItem';"
		}
	}
	constructElement(parent,a);
}
function SetProductState(item, state)
{
	var e = document.getElementById('liSRListItem' + item.ID);
	if (e && e.originalClassName)
	{
		e.className = e.originalClassName + state;
		if (state=='Ok'||state=='Fail')
		{
			var info = global_infos["'" +item.ID +"'"].innerHTML;
			var l = getElementsByClass('liSRListItemLink', e, 'a')[0];
			if (l)
			{
				if(state=='Ok')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();");
			}
		}
	}
}
