var mainOverLay;
var activeImages=[];
var activeItemID=0;
var activePage=1;
var iconsperPage=20;
var imageIndex=new Array();
var imageMarkers=new Array();
var filterlocked=false;
var mapReloader;
var galReloader;
//Status of gallery 'list', 'look'
var galStatus='list';
// Video polyline overlay
var isVidLook=0;
var vidPOverLay;
var vidPtsOverLay;
var vidPoints=[];
var vidIndex=[];
var vidActMarker;
var vidOls=[];
var avInt;
var isVidActMarker=0;
var areaview_id;
var cluster;
var fullresize;
//var rootUrl='?';
function setAreaView(view_id) {
	areaview_id=view_id;
}

function zoomToArea(lat,lon,zoom,area_id) {
	var newCenter=new GLatLng(lat,lon);
	map.setZoom(zoom);
	map.panTo(newCenter);

}
/*
function displayGallery(swlat,swlng,nelat,nelng) {
galStatus='list';
new Ajax.Updater('vf_gallery',rootUrl+'ajax=1&m=vfGalleryView', {
method:'post',
parameters: {
ajax: 1,
m: 'vfGalleryView',
swlat: swlat,
swlng: swlng,
nelat: nelat,
nelng: nelng,
view_id: areaview_id,
sid: Math.random()
},
evalScripts:true
});

return true;
}
*/


function displayGallery(swlat,swlng,nelat,nelng) {
	galStatus='list';
	ajax_load_url("vf_gallery",rootUrl+'ajax=1&m=vfGalleryView&swlat='+swlat+'&swlng='+swlng+'&nelat='+nelat+'&nelng='+nelng+'&view_id='+areaview_id+'&sid='+Math.random());
	return true;
}

function displayFilter() {
	galStatus='list';
	//	stripTabber();
	new Ajax.Updater('vf_filter_area',rootUrl, {
		method:'get',
		parameters: {
			ajax: 1,
			m: 'vfGalleryFilter',
			action: 'fetchfilter',
			ajax: 1,
			sid: Math.random()
		},
		evalScripts:true
	});

	return true;
}

function displayGalleryByMap() {
	galStatus='list';
	resizeMap();
	var b=map.getBounds();
	var sW = map.getBounds().getSouthWest();
	var nE = map.getBounds().getNorthEast();
	restoreIcons();
	//	stripTabber();
	new Ajax.Updater('vf_gallery',rootUrl, {
		method:'get',
		parameters: {
			ajax: 1,
			m: 'vfGalleryView',
			swlat: sW.lat(),
			swlng: sW.lng(),
			nelat: nE.lat(),
			nelng: nE.lng(),
			view_id: areaview_id,
			sid: Math.random()
		},
		evalScripts:true
	});

	return true;
}


function createImageMarker(img,i) {
	var markerOptions;
	var point=new GLatLng(img['latitude'],img['longitude']);



	if (img['icon']) {
		var icon=new GIcon(G_DEFAULT_ICON);
		if (!(i>=(activePage-1)*iconsperPage && i<activePage*iconsperPage) && img['iconlow']) {
			icon.image=img['iconlow'];
		}
		else icon.image=img['icon'];

		if (img['arrowicon']) {
			icon.iconSize = new GSize(40, 40);
			icon.shadowSize = new GSize(0, 0);
			icon.iconAnchor = new GPoint(20, 20);
			/*icon.infoWindowAnchor = new GPoint(23, 23);
			icon.infoShadowAnchor = new GPoint(40, 40);*/
			icon.imageMap=[0,0, 40,0, 40,40, 0,40];
		}
		if (img['ddicon']) {
			icon.iconSize = new GSize(37, 37);
			icon.shadowSize = new GSize(0, 0);
			icon.iconAnchor = new GPoint(3, 37);
			/*icon.infoWindowAnchor = new GPoint(23, 23);
			icon.infoShadowAnchor = new GPoint(40, 40);*/
			icon.imageMap=[0,0, 37,0, 37,37, 0,37];
		}
		markerOptions = { icon:icon };
	}
	/**
	If we've got a point add a tooltip
	**/
	if (img['type']==4) {
		markerOptions.title=img['name'];
	}
	var marker=new GMarker(point,markerOptions);

	if (img['imagetext']) {
		var markerText=img['imagetext'];



		GEvent.addListener(marker, "mouseover", function() {
			//document.getElementById('sidebar_mainview').innerHTML=img['imagehtml'];
			//var mText="<div onclick='showGalImage("+img["id"]+","+point.lat()+","+point.lng()+");'>"+markerText+'</div>';
			//map.openInfoWindowHtml(point,mText,{pixelOffset:new GSize(25,-40)});
			if (img['otype']!='OTYPE_POINT' && !activeItemID>0) {
				changeIconHigh(img['id']);
				hlGalImg(img['id']);
				scrollSideToVid(img['id']);
			}
		});

		GEvent.addListener(marker, "click", function() {
			if (img['otype']=='OTYPE_POINT') {
				var mText="<div style='width:200px;z-index:200;color:#000;'>"+markerText+'<br /></div>';
				map.openInfoWindowHtml(point,mText,{pixelOffset:new GSize(25,-40)});
			}
			else showGalImage(img['id'],point.lat(),point.lng());

		});

		GEvent.addListener(marker, "mouseout", function() {
			//document.getElementById('sidebar_mainview').innerHTML='';
			if (img['otype']!='OTYPE_POINT' && !activeItemID>0) {
				changeIconNormal(img['id']);
				rmGalImgHL();
			}

		});
	}



	return marker;

}



function hlGalImg(id) {
	if (document.getElementById('gallery_td_'+id)) {
		document.getElementById('gallery_td_'+id).className='gallery_td gallery_td_active';
	}
}

function rmGalImgHL() {
	var chaps=document.getElementById('object_list');
	var elems=kklgetElementsByClassName(chaps,'div','gallery_td_active');
	for (var c=0; c<elems.length; c++) {
		elems[c].className='gallery_td';
	}
}


function showGalImage(id,lat,lng) {
	/*
	if (lat && lng) {
	map.setCenter(new GLatLng(lat,lng),11);
	}
	*/
	rmGalImgHL();
	changeIconsNormal();
	restoreIcons();
	var m = document.getElementById("object_view");
	m.style.display = 'none';
	restoreIcons();
	//stripTabber();
	galStatus='look';
	ajax_load_url("object_view","?m=vfGalleryView&gal_L="+id+"&ajax=1&local=1");
	displayVideoPolyLine(id);
	m.style.display = 'block';
	activeItemID=id;
	changeIconHigh(id);
	hlGalImg(id);
	scrollSideToVid(id);
}

function showGalImageW(id,lat,lng) {
	window.setTimeout('showGalImage('+id+','+lat+','+lng+')',500);
}


function hideObjectView() {
	var m = document.getElementById("object_view");
	m.style.display = 'none';
	m.innerHTML='';
}

function setImageMarkers() {
	var i=0;
	resizeMap();
	map.clearOverlays();

	imageMarkers.length=0;

	for (i=0; i < activeImages.length; i++) {

		img=activeImages[i];

		var id=img['id'];
		imageIndex[id]=i;
		var imageMarker=createImageMarker(img,i);
		imageMarkers.push(imageMarker);
		//map.addOverlay(imageMarker);
	}

	if (cluster === null || cluster === undefined) {
		cluster=new ClusterMarker(map);
	}
	cluster.removeMarkers();
	cluster.intersectPadding=-5;
	cluster.addMarkers(imageMarkers);
	cluster.refresh(true);

	//var cluster=new ClusterMarker(map, { markers:imageMarkers } );
	//cluster.fitMapToMarkers();
}

function getImageData(swlat,swlng,nelat,nelng,view_id)
{

	new Ajax.Request(rootUrl,
	{
		method:'get',
		parameters: {
			ajax: 1,
			m: 'vfGmapView',
			type: 'getImagesByLoc',
			swlat: swlat,
			swlng: swlng,
			nelat: nelat,
			nelng: nelng,
			view_id:view_id,
			zoom:map.getZoom(),
			sid: Math.random()
		},
		onSuccess: function(transport){

			activeImages=transport.responseText.evalJSON();
			//debugmessage(activeImages[0]['query']);
			setImageMarkers();
			return true;
		},
		onFailure: function(){ alert('Something went wrong...') }
	});

}

function saveMapCoords(lat,lng,zoom)
{

	new Ajax.Request(rootUrl,
	{
		method:'get',
		parameters: {
			ajax: 1,
			m: 'vfGmapView',
			type: 'savecoords',
			lat: lat,
			lng: lng,
			zoom: zoom
		},
		onSuccess: function(transport){

			return true;
		}
		/*onFailure: function(){ alert('Something went wrong...') }*/
	});

}

function vfLoadImages(id) {
	if (galStatus=="look") return true;
	var b=map.getBounds();
	var sW = map.getBounds().getSouthWest();
	var nE = map.getBounds().getNorthEast();

	getImageData(sW.lat(),sW.lng(),nE.lat(),nE.lng(),areaview_id);

	if (galStatus!='look') {
		displayGallery(sW.lat(),sW.lng(),nE.lat(),nE.lng());
	}
	var center=map.getCenter();
	var zoom=map.getZoom();
	saveMapCoords(center.lat(),center.lng(),zoom);
	if (id>0) {
		window.setTimeout('showGalImage('+id+')',500);
		galStatus='look';
	}

}


function vfLoadImagesW() {

	//if (galStatus!='look') {
	window.clearTimeout(mapReloader);
	mapReloader=window.setTimeout('vfLoadImages()',1000);
	//}

	return true;
}

function changeIconHigh(id) {
	var i=imageIndex[id];

	if (i!=0 && !i) return true;

	/**
	Requered by clusterer - isVisible check
	**/
	if (imageMarkers[i]._isVisible && activeImages[i]['iconhigh']) {
		imageMarkers[i].setImage(activeImages[i]['iconhigh']);
	}

}

function changeIconNormal(id) {
	var i=imageIndex[id];

	if (i!=0 && !i) return true;
	if (!(i>=(activePage-1)*iconsperPage && i<activePage*iconsperPage) && activeImages[i]['iconlow']) {
		if (imageMarkers[i]._isVisible && activeImages[i]['iconlow']) {
			imageMarkers[i].setImage(activeImages[i]['iconlow']);
		}
	}
	else if (imageMarkers[i]._isVisible ) {
		imageMarkers[i].setImage(activeImages[i]['icon']);
	}


}


function changeIconLow(id) {
	var i=imageIndex[id];
	/**
	Requered by clusterer - isVisible check
	**/
	if (imageMarkers[i]._isVisible ) {
		imageMarkers[i].setImage(activeImages[i]['icon']);
	}


}

function restoreIcons() {
	if (isVidLook==1) {
		window.clearInterval(avInt);
		map.removeOverlay(vidActMarker);
		map.removeOverlay(vidPOverLay);
		//map.removeOverlay(vidPtsOverLay);
		vidPoints=[];
		vidIndex=[];
		for (var a = 0; a < vidOls.length; a++) {
			map.removeOverlay(vidOls[a]);
		}
		isVidLook=0;
				

	}
	for (i=0; i< imageMarkers.length; i++ ) {
		changeIconNormal(imageMarkers[i]['id']);
	}
}


function selectCategory(obj,cat,type) {
	if (filterlocked==true) {
		if (obj.checked==true) {
			obj.checked=false;
		}
		else {
			obj.checked=true;
		}
		return false;
	}
	filterlocked=true;

	if (obj.checked==true) {
		upDateMap(obj,cat,'add',type);


	}
	else {
		upDateMap(obj,cat,'remove',type);
	}
	filterlocked=false;
}

function upDateMap(obj,cat,add,type) {
	resizeMap();
	new Ajax.Request(rootUrl,
	{
		method:'get',
		parameters: {'ajax': 1, 'm': 'vfGalleryFilter','action':add,'cat':cat,'type':type},
		onSuccess: function(transport,json){
			var json = transport.responseText.evalJSON();
			for (var i in json.filter)
			{
				if (document.getElementById(i)) {
					document.getElementById(i).checked=json.filter[i];
				}
			}


			if (json.error) {
				alert(json.error);
			}

			window.clearTimeout(galReloader);
			galReloader=window.setTimeout('displayGalleryByMap()',1000);
			//}
			vfLoadImagesW();
			return true;

		},
		onFailure: function(){ alert('Something went wrong...') }
	});
}

function displayVideoPolyLine(video_id) {
	new Ajax.Request(rootUrl,
	{
		method:'get',
		parameters: {
			ajax: 1,
			m: 'vfGmapView',
			type: 'getVideoCoords',
			id: video_id,
			sid: Math.random()
		},
		onSuccess: function(transport){

			locs=transport.responseText.evalJSON();

			if (locs.length>1) {
				var colour = '#00981e';
				var width  = 3;
				for (var a = 0; a < locs.length; a++) {
					// get any line attributes
					// read each point on that line
					vidPoints[a] = new GLatLng(parseFloat(locs[a]['latitude']),parseFloat(locs[a]['longitude']));
					vidIndex[a] = parseFloat(locs[a]['time']);
					var icon=new GIcon(G_DEFAULT_ICON);
					icon.image='img/mumm_green.png';
					icon.iconSize = new GSize(10, 10);
					icon.shadowSize = new GSize(0, 0);
					icon.iconAnchor = new GPoint(5, 5);
					var markerOptions = { icon:icon };
					vidOls[a]=new GMarker(vidPoints[a],markerOptions);
					map.addOverlay(vidOls[a]);
				

				}
				isVidLook=1;
				avInt=window.setInterval('showActiveVidPoint()',500);
				vidPOverLay=new GPolyline(vidPoints,colour,width);
				map.addOverlay(vidPOverLay);

				
			}


			return true;
		},
		onFailure: function(){ alert('Something went wrong...') }

	});

	return true;
}

function showActiveVidPoint() {
	if (isVidActMarker==1) {
		map.removeOverlay(vidActMarker);
	}
	/*
	getFlashMovieObject("remoteControl").receiveControlVideoScrub=function(tcode)  {
	alert('a');
	}
	*/
	var icon=new GIcon(G_DEFAULT_ICON);
	icon.image='img/markers/camera_37px_map_active.png';
	icon.iconSize = new GSize(37, 37);
	icon.shadowSize = new GSize(0, 0);
	icon.iconAnchor = new GPoint(15, 37);
	var markerOptions = { icon:icon };
	var x=0;
	var ok=0;
	while (vidPoints[x] && ok!=1) {
		y=x+1;
		if (vidIndex[y]=='undefined' || vidIndex[y]=='NaN' || vidIndex[y]>playerPos || !vidIndex[y]>0) {
			var actid=x;
			ok=1;
		} else {
			x=x+1;
		}
	}
	vidActMarker=new GMarker(vidPoints[x],markerOptions);
	map.addOverlay(vidActMarker);
	isVidActMarker=1;
	return true;
}

/**
Resize map and also object list if existant
**/
function resizeMap() {
	if (fullresize==1) {
		x=0;
		
	}
	else x=150;
	
	var m = document.getElementById("mainview");
	var windowHeight = getWindowHeight();
	m.style.height = (windowHeight - x) + "px";

	if (m2=document.getElementById("object_list")) {
		m2.style.height = (windowHeight - x -20) + "px";
	}
}

function stripTabber() {

	var divCollection = document.getElementsByTagName("div");
	for (var i=0; i<divCollection.length; i++) {
		if(divCollection[i].getAttribute("class") == "tabberlive") {
			var d=divCollection[i];
			var p=d.parentNode;
			p.removeChild(d);

		}
	}
}

function runTabber(title) {
	tabberAutomatic(tabberOptions);
	document.title=title;
	if (self.opener) self.opener.title=title;
}

function viewNextVid() {
	showGalImage(getNextVidId(activeItemID));
}

function viewPrevVid() {
	showGalImage(getPrevVidId(activeItemID));
}

function getNextVidId(startid) {
	var l=activeImages.length;
	for (i=0; i < l; i++) {
		if (activeImages[i]['id']==startid) {
			if (i<l && activeImages[i+1]) {
				if (activeImages[i+1]['type']!=3) {
					return getNextVidId(activeImages[i+1]['id'])
				}
				return activeImages[i+1]['id'];
			}
			else {
				if (activeImages[0]['type']!=3) {
					return getNextVidId(activeImages[0]['id']);
				}
				return activeImages[0]['id'];
			}
		}
	}
}

function getPrevVidId(startid) {
	var l=activeImages.length;
	for (i=0; i < l; i++) {
		img=activeImages[i];
		var id=img['id'];
		if (activeImages[i]['id']==startid) {
			if (i>0) {
				if (activeImages[i-1]['type']!=3) {
					return getPrevVidId(activeImages[i-1]['id']);
				}
				return activeImages[i-1]['id'];
			}
			else {
				if (activeImages[l-1]['type']!=3) {
					return getPrevVidId(activeImages[l-1]['id']);
				}
				return activeImages[l-1]['id'];
			}
		}
	}
}

function scrollSideToVid(id) {

	if (document.getElementById('gallery_td_'+id)) {
		var thepoint = document.getElementById('gallery_td_'+id).offsetTop;
		if (thepoint>20) thepoint=thepoint-20;
		document.getElementById('object_list').scrollTop = thepoint;
	}
}

function changeIconsNormal() {
	var l=activeImages.length;
	for (i=0; i < l; i++) {
		changeIconNormal(activeImages[i]['id']);
	}
}

function closeImageView() {
	activeItemID=0;
	restoreIcons();
	galStatus="search";
	//displayGalleryByMap();
	hideObjectView();
	window.clearInterval(avInt);

}