var map, mgr, mgr1, highlightedMarker, highlightedMarkerType, mapStatusBar, sideList, bottomInfo;
var currentZoom, standardZoom = 16;
var markers = new Array(),bigMarkers = new Array(), markersTemp = new Array(),bigMarkersTemp = new Array();
var highlight = false, highlightedMarker = false;
var selectedPOIs;
var isIconCompleted=true;
var highlightedObject=false;
var loadingIndex=0;
var highlightIcon = new GIcon();
highlightIcon.image = '/media/images/map/hover.png';
highlightIcon.iconSize = new GSize(50, 50);
highlightIcon.iconAnchor = new GPoint(24, 35);

var controlClass= new Array('xs_cat_etendrinken_ia', 'xs_cat_recreatie_ia','xs_cat_nachtleven_ia', 'xs_cat_cultuur_ia', 'xs_cat_voorstelling_ia', 'xs_cat_overnachting_ia', 'xs_cat_welness_ia','xs_cat_algemeen_ia' );



if(getCookie('categories') == '') {
	selectedPOIs = new Array('1', '2', '3', '4', '5' ,'6' , '7', '8');
	}else{
		selectedPOIs=loadCategories();
	}



function star_color(value) {
	color = 'geen'
    if(value >= 5.5)
        color = 'brons';
    if(value >= 7)
        color = 'zilver';
    if(value >= 9)
        color = 'goud';
    return color
}

document.addEvent('domready', function() {	
	$j("#map_weergave").find('a.icon').each(function (i){		
		if($j.inArray((i + 1).toString(), selectedPOIs) == -1)$j("#map_weergave").find('a.icon').eq(i).toggleClass(controlClass[i])
	});
	
	mapStatusBar = $('map_gevonden_plekken');
	sideList = $('listBody');
	bottomInfo = $('bottomInfo');
	isMapLoaded=false;
	try
	{
	map = new GMap2($('map'));
	if(getCookie('mrplaceGMPos') == '') {
       map.setCenter(new GLatLng(51.4365957, 5.4780014), 16);
	} else {
		loadPosition();
	}
	
	map.addControl(new GSmallMapControl());	

	
	mgr = new MarkerManager(map);
	currentZoom = standardZoom;
	highlightedMarker = false;
	loadingIndex++;
	
	fetchPOIs(true, false,loadingIndex);
	
	if(map.getZoom())
		currentZoom=map.getZoom()
	
	GEvent.addListener(map, 'moveend', function() {
		loadingIndex++;
		isMapLoaded=false;
		savePosition();
		currentZoom = map.getZoom();
		if(getSelectedCategory() && getSelectedCategory().length>0){
			setTimeout("fetchAdvancedPOIs1(true);",2000);
			return;
		}
		else
			setTimeout("fetchPOIs(true, false,"+loadingIndex+");",2000);
		isMapLoaded=true;
	});

	GEvent.addListener(map, 'infowindowclose', function() {
		GEvent.trigger('moveend');
	});
	} catch (Exception) {}
	isMapLoaded=true;
});

function savePosition() {
	var mapzoom = map.getZoom();
	var mapcenter = map.getCenter();
	var maplat = mapcenter.lat();
	var maplng = mapcenter.lng();
	var cookiestring = maplat + '_' + maplng + '_' + mapzoom;
	var exp = new Date();
	exp.setTime(exp.getTime() + (1000 * 60 * 60 * 24 * 30));
	setCookie('mrplaceGMPos', cookiestring, exp);
}

function loadPosition() {
	var loadedstring = getCookie('mrplaceGMPos');
	var splitstr = loadedstring.split('_');
        if(splitstr[2] < 12)splitstr[2]=12;
	map.setCenter(new GLatLng(parseFloat(splitstr[0]), parseFloat(splitstr[1])), parseFloat(splitstr[2]));
	GEvent.clearListeners(highlight, 'click');
}

function saveCategories() {
	var cookiestring = selectedPOIs.join(',');
	var exp = new Date();
	exp.setTime(exp.getTime() + (1000 * 60 * 60 * 24 * 30));
	setCookie('categories', cookiestring, exp);
}

function loadCategories() {
	var loadedstring = getCookie('categories');
	return loadedstring.split(',');
}

function setCookie(name, value, expires) {
	document.cookie = name + '=' + escape(value) + '; path=/' + ((expires == null) ? '' : '; expires=' + expires.toGMTString());
}

function getCookie(c_name) {
	if(document.cookie.length > 0) {
		c_start = document.cookie.indexOf(c_name + '=');
		if (c_start != -1) {
			c_start = c_start + c_name.length + 1;
			c_end = document.cookie.indexOf(';', c_start);
			if(c_end == -1)
				c_end = document.cookie.length;
			return unescape(document.cookie.substring(c_start, c_end));
		}
	}
	return '';
}

function fetchPOIs(reset, type,index) {
	setGroupCookie(type,-1);
	if(index!=0 && loadingIndex!=index) return;
    highlight = false, highlightedMarker = false;
	
	var bounds = map.getBounds();
	
	if(reset) {
		mgr.clearMarkers();
		mgr.refresh();
		if (mgr1) {
		mgr1.clearMarkers();
		mgr1.refresh();
	}}
	
	// Use POI type as on/off toggling.
	var index = $j.inArray(type, selectedPOIs);
    
	if (index > -1)
	{ 
		// Turn off this type, thus remove from list 
		selectedPOIs = $j.grep(selectedPOIs, function(val) { return val != type; }); 
	} else {
		// Add to list
		if (type != false)
		{
			selectedPOIs.push(type);
		}
	}
	
	saveCategories();
	
	
	
	markersTemp = new Array();
 
	params = { 
			south_west: bounds.getSouthWest(),
			   north_east: bounds.getNorthEast(),
			   startlat : bounds.getSouthWest().lat(),
			   endlat: bounds.getNorthEast().lat(),
			   startlon: bounds.getSouthWest().lng(),
			   endlon: bounds.getNorthEast().lng(),
			   reset: reset,
			   type: escape(selectedPOIs),
			   companyId: ""
	}
	var url="";
	
	
	//Changed here
		fetchAdvancedPOIs1(true);
		return;
	
		url = $j.queryString("/ajax/companygrouplist.php", params);
	//Changed here
	
 	mapStatusBar.set('text', 'Laden...');
 
	$j.each
	$j.ajax( {
      type : "GET",
      url : url,
      dataType : "json",
      //success:function(data){alert(data)}
      success : mapOnSuccess
	});

}

function fetchAdvancedPOIs(reset) {
	setTimeout("fetchAdvancedPOIs1(true)",1000)
}

function fetchAdvancedPOIs2(catid,reset)
{
	setGroupCookie(catid,1);
	fetchAdvancedPOIs(reset);
}

function fetchAdvancedPOIs1(reset) {
	var bounds = map.getBounds();
	if(reset) {
		mgr.clearMarkers();
		mgr.refresh();
		if (mgr1) {
		mgr1.clearMarkers();
		mgr1.refresh();
	}}
	
	markersTemp = new Array();
	var selectedCat="";
	$j("input.chkcats").each(function(i){
		if($j("input.chkcats").eq(i).attr("checked"))
		{
			if($j("input.chkcats").eq(i).attr('checked'))
			{
				if(selectedCat!="")
					selectedCat+=",";
				selectedCat+=$j("input.chkcats").eq(i).val();
			}
		}
	});
	if(selectedCat=="")
		selectedCat=getSelectedCategory();
	var options = { path: '/', expires: 30 };
    $j.cookie("GMapSelectedCategory",selectedCat, options);
    
    var groups=getSelectedGroup();
    
    var strGrp="",strVal="";
    for(i=0;i<groups.length;i++)
    {
    	if(i>0)
    	{
    		strGrp+=",";
    		strVal+=",";
    	}
    	strGrp+=groups[i].k;
    	strVal+=groups[i].v;
    }
    if(selectedCat==null) selectedCat=0;
    //alert(strGrp)
    //alert(strVal)
	params = { 
			south_west: bounds.getSouthWest(),
			   north_east: bounds.getNorthEast(),
			   startlat : bounds.getSouthWest().lat(),
			   endlat: bounds.getNorthEast().lat(),
			   startlon: bounds.getSouthWest().lng(),
			   endlon: bounds.getNorthEast().lng(),
			   reset: reset,
			   type: escape(selectedCat),
			   grplist:strGrp,
			   grpval:strVal,
			   companyId: ""
	}
    var url = $j.queryString("/ajax/companycategorylist.php", params);
 
 // LADEN
 	mapStatusBar.set('text', 'Laden...');
 
	$j.each
	$j.ajax( {
      type : "GET",
      url : url,
      dataType : "json",
      success : mapOnSuccess
	});

}

function getSelectedCategory()
{
	var out=$j.cookie("GMapSelectedCategory");
	if(out==null)
		return null;
	else
		return out.split(',');
}

function getSelectedGroup()
{
	var out=$j.cookie("GMapGroupInfo");
	if(out==null || out=="")
	{
		resetGroupCookie();
		return getSelectedGroup();
	}
	else
		return eval(out);
}

function getCategoryStatusByGroup(id)
{
	var out=getSelectedGroup();
	for(i=0;i<out.length;i++)
	{
		if(out[i].k==id)
			return out[i].v;
	}
	return 0;
}

function setGroupCookie(type,v)
{
	//[{"k":1,"v":1},{"k":1,"v":1}]
	
	var out=$j.cookie("GMapGroupInfo");
	//alert(out)
	if(out==null){
		resetGroupCookie();
		out=eval($j.cookie("GMapGroupInfo"));
	}
	else
		out=eval(out);
	
	var output="[";
	for(i=0;i<out.length;i++)
	{
		if(output!="[")output+=",";
		
		output+="{";
		if(out[i].k==type)
		{
			if(v==-1)
			{
				if(out[i].v==0)
					out[i].v=v;
				else
					out[i].v=0;
			}
			else
				out[i].v=v;
		}
		output+='"k":"'+out[i].k+'",';
		output+='"v":"'+out[i].v+'"';
		output+="}";
	}
	output+="]";
	
	var options = { path: '/', expires: 30 };
    $j.cookie("GMapGroupInfo",output, options);
}

function resetGroupCookie()
{
	var output="[";
	for(i=1;i<=8;i++)
	{
		if(output!="[")output+=",";		
		output+="{";
		output+='"k":"'+i+'",';
		output+='"v":"'+(-1)+'"';
		output+="}";
	}
	output+="]";
	var options = { path: '/', expires: 30 };
    $j.cookie("GMapGroupInfo",output, options);
}

function mapOnRequest() {
	mapStatusBar.set('text', 'Laden...');
}

function mapOnSuccess(data) {
	//if(loadingIndex!=index) return;
	mgr1 = new MarkerManager(map,"hide()");
	if(!data) {
		return;
	}
	
	if(data.markers) {
		var numMarkers = data.markers.length		
		data.markers.each(function(item) {
			var point = new GLatLng(
				parseFloat(item.lat),
				parseFloat(item.lon)
			);
			addMarker(item.id, map, point, item.groupcode, item.absolute_uri);
		});
	}

	if(data.list) {
		markers = new Array();
		bigMarkers = new Array();
		markersTemp = new Array();
		bigMarkersTemp = new Array();
		num_markers = data.count;
		extraAlert = '';
		
		// IF NUMMARKERS >= MAXRESULTS
		if(num_markers>300) {
			extraAlert = ' Zoom in op plekken zichtbaar te maken';
		}
		
		mapStatusBar.set('text', num_markers + ' plek' + (num_markers != 1 ? 'ken' : '') + ' gevonden.' + extraAlert);
		var sideListContent = '';
        var isFirst = true;
        var myIndex=0;
		data.list.each(function(item) {
            if(isFirst) {
                infoRequest(item.id);
                isFirst = false;
            }
            if(item.name==null) item.name="";
        sideListContent += '<tr><td class="map_lijst_td1" onclick="GEvent.trigger(markers[' + myIndex + '], \'click\');" onmouseover="GEvent.trigger(markers[' + myIndex + '], \'mouseover\');" onmouseout="GEvent.trigger(bigMarkers[' + myIndex + '], \'mouseout\');"><a href="/bedrijf/'+item.id+'.html" class="map_lijst_link" id="sidelist' + item.id + '">' + item.name + '</a></td><td class="map_lijst_td2"><div class="icon xs_ster_' + star_color(item.get_rating) + '" style="margin:0 2px;"></div><div class="icon xs_cat_' + item.groupcode + '" style="margin:0 2px;"></div></td></tr>'
        myIndex++;
			//sideListContent += '<tr><td onclick="GEvent.trigger(markers[' + item.id + '], \'click\');" onmouseover="GEvent.trigger(markers[' + item.id + '], \'mouseover\');"><div class="right icon xs_ster_' + star_color(item.get_rating) + '_w" style="margin:0 2px;"></div><div class="right icon xs_cat_' + item.type.code + '" style="margin:0 2px;"></div><a href="#" class="map_lijst_link" id="sidelist' + item.id + '">' + item.name + '</a></td></tr>'
                        var point = new GLatLng(
				parseFloat(item.lat),
				parseFloat(item.lon)
			);
			addMarker(item.id, map, point, item.groupcode, item.absolute_uri);

        });
		sideList.set('html', sideListContent);
		mgr.addMarkers(markers, currentZoom, 19);
		mgr1.addMarkers(bigMarkers, currentZoom, 19);
		mgr.refresh();
		mgr1.refresh();
		reassignBoxLinks();
	}
	else {
		sideList.empty();			
	}

	// KLAAR
}

function getAlternateClass(v)
{
	var cls=v.attr('class');
	if(cls)
	{
		cls=cls.split(' ');
		cls1=cls[cls.length-1];
		var ncls="";
		if(cls1.indexOf("_ia")>0)
			ncls=cls1.replace('_ia','');
		else
			ncls=cls1+'_ia';
		v.addClass(ncls);
		v.removeClass(cls1);
		return cls;
	}
	return "";
}

function addMarker(id, map, point, type, url) {
	var options = { icon: mrplaceIcons[type] };
	var options1 = { icon: mrplaceBigIcons[type],hide:true,zIndexProcess:function(){return 999;} };
	var marker = new GMarker(point, options);
	var marker1 = new GMarker(point, options1);

	GEvent.addListener(marker, 'mouseover', function() {
		
		for(i=0;i<markers.length;i++)
		{
			if(markers[i]==marker)
			{
				marker.hide();
				bigMarkers[i].show();
				infoRequest(id);
			}
			else
			{
				marker.show();
				bigMarkers[i].hide();
			}
		}
	});
	
	GEvent.addListener(marker1, 'mouseout', function() {
		for(i=0;i<markers.length;i++)
		{
			if(bigMarkers[i]==marker1)
			{
				marker1.hide();
				markers[i].show();
			}
		}
	});
	
	GEvent.addListener(marker1, 'click', function() {
		GEvent.trigger(marker1, 'mouseover');
		document.location = url;
	});
	
	markersTemp.push(marker);
	bigMarkersTemp.push(marker1);
	markers[markers.length] = marker;
	bigMarkers[bigMarkers.length]=marker1;
	
}

function infoRequest(id) {
	/// 
    new Request.JSON({
        url: 'ajax/company_info.php?id='+ id ,
        onRequest: infoOnRequest,
        onSuccess: infoOnSuccess
    }).get();
}

function infoOnRequest() {
	if(bottomInfo)
	bottomInfo.set('text', 'Laden...');
}

function infoOnSuccess(data) {
	if(!data) {
            
		return;
	}
	
	if(data.info) {
           
		var template = $('bottom_info_template').get('html').toString();
		
                data = data.info[0];
               
		var name = data.name;
		if(name==null) name="";
		if(name=="null") name="";
		name = name.replace("'", "BIERHOER");
		template = unescape(template);
		var info = template.substitute({
                        gid: data.gid,
			id: data.id,
			type: data.groupcode,
			name: name,
			city: data.city,
			address: data.address,
                        number: data.number,
                        addition: data.addition,
                        category: data.category,
						category_a: data.category_a,
						category_b: data.category_b,
						group: data.group,
			zipcode: data.zipcode,
			province: data.province.title,
			telephone: data.telephone,
			num_reviews: data.get_num_reviews,
			rating: (data.get_rating > 0 ? data.get_rating : ''),
			star_color: star_color(data.get_rating),
			absolute_uri: data.absolute_uri,
			originaltitle:data.Sliders,
            photo_url: (data.get_photo_url != null && data.get_photo_url != "" ? data.get_photo_url : '/media/images/photos/no_company_m.jpg')
		});
  
		info = info.replace("BIERHOER", "'"); 
		if(bottomInfo)
		bottomInfo.set('html', info);
		reassignBoxLinks();
	}
}

function reassignBoxLinks()
{
	SqueezeBox.assign($$('a[rel=mini-boxed-dynamic]'), {
		size: {x: 420, y: 175},
		ajaxOptions: {
			method: 'get'
		}
	});
	SqueezeBox.assign($$('a[rel=mini2-boxed-dynamic]'), {
		size: {x: 450, y: 250},
		ajaxOptions: {
			method: 'get'
		}
	});
	SqueezeBox.assign($$('a[rel=boxed-dynamic]'), {
		size: {x: 700, y: 550},
		ajaxOptions: {
			method: 'get'
		}
	});
	$j(function() {
		 $j('.tooltipdyna').tipsy({gravity: $j.fn.tipsy.autoNS, html: true});
	});
	
}


//search company from planner

function openFriendSearchRequest()
{
       
	SqueezeBox.open('/ajax/friend_searchbox.php',{size: {x: 800, y: 500},
		ajaxOptions: {
		method: 'get'
	}});
}
//search company from planner

function searchFriends()
{
	
	var s=$j("#keywords1").val();
	var c=$j("#city1").val();
	if(c==document.getElementById('city1').defaultValue) c="";
	if(s==document.getElementById('keywords1').defaultValue) s="";
	
    $j("#searchResult").html("<img src='/images/ajax-loader.gif' />");
     $j.ajax( {
      type : "GET",
      url : '/ajax/friend_search.php?s='+s+'&c='+c,
     // dataType : "json",
      success : function(data){
          if(!data){
           return;
           alert('Informatie niet beschikbaar')
          }
          if(data) {

		$j("#searchResult").html(data);

	}

      }

	});
}



