var xmap;
function onPageLoad()
{
	fixPNGs();
    showIntro();
	cats = all_cats[startWithRoutes ? 'routes' : 'points'];
	enableRoutes(startWithRoutes);
	xmap = new XMap(startWithRoutes);
	renderCats();

    if (window.lightwindowInit)
        lightwindowInit();
	// enableRoutes(false);
	// setTimeout('fixPNGs()', 1);
	
}


function zoomIn(lng, lat) {
	var districtZoom = 19;
	map.setZoom(districtZoom);
	map.panTo(new GLatLng(lat, lng));
}
function districtClick(lng, lat) {
	var districtZoom = 15;
	if (window.DISTRICT_ZOOM)
		districtZoom = parseInt(DISTRICT_ZOOM);
	if (map.getZoom() != districtZoom)
		map.setZoom(districtZoom);
	map.panTo(new GLatLng(lat, lng));
}

function navToDistrict(num) {
	var coords = districts[num];
	if (! coords)
		alert('district '+num);
	else
		districtClick(coords[0], coords[1]);
}

/* loads given url via ajax into the side panel
   tabId is optional, if omited no tab should be highlighted
   TODO: highlight tab by id */
function setSidePanel(url, tabId) {
	// if (tabId != 'tab4')
	if (window.removeMovableMarker)
		removeMovableMarker();
	var _this = this;
	
	document.getElementById('sidepanel').innerHTML = 
	    '<center><img src="/fileadmin/bikemap/i/loading.gif" alt="Loading.." /></center>';
	    
	if (tabId == 'tab_new' || tabId == 'tab_details')
	{
	    // if (browserName == "Microsoft Internet Explorer")
	    if (document.all)
	    {
	        document.getElementById('sidepanel').style.overflow = 'hidden';
	    }
	    $('sidepanel').update('<iframe allowtransparency="true" style="width: 600px; height: 400px;" src="'+url+'"  name="marker_frame" id="marker_frame" frameborder="0" scrolling="0" border="0"></iframe>');
		 setActiveTab(tabId);   
	    return;
	}
	new Ajax.Request(url, {
		method:'get',
		onSuccess: function(transport) {			
			var response = transport.responseText || "no response text";
			$('sidepanel').update(response);
			setActiveTab(tabId);
			fixPNGs('sidepanel');
		},
		onFailure: function(){ alert('Unable to fetch content') }
	});

}

function clearSubPanel() {
	document.getElementById('subpanel').innerHTML = '';
}

function setSubPanel(url) {
	document.getElementById('subpanel').innerHTML = '<iframe allowtransparency="true" style="width: 600px; height: 250px;" src="'+url+'" frameborder="0" border="0"></iframe>';
}

var tabs = {
	'tab_top': {
		img: 'tab1.gif',
		active_img: 'tab1_active.gif'
	},
	'tab_latest': {
		img: 'tab2.gif',
		active_img: 'tab2_active.gif'
	},
	'tab_details': {
		img: 'tab3.gif',
		active_img: 'tab3_active.gif'
	},
	'tab_new': {
		img : 'tab_newroute.gif',
		active_img : 'tab_newroute_active.gif'

		/*
		img: 'tab4.gif',
		active_img: 'tab4_active.gif'
		*/
	}
};
var curActiveTab = null;

function enableRoutes(flag) {
/*
	if (xmap.routesEnabled == flag)
		return;
	if (! xmap.dataLoaded)
		return;
*/
	var tab_new = tabs.tab_new;
	if (flag) {
		tab_new.img = 'tab_newroute.gif';
		tab_new.active_img = 'tab_newroute_active.gif';
	} else {
		tab_new.img = 'btn-spot-posten.png';
		tab_new.active_img = 'btn-spot-posten.png';
	}
/*
	var prefix = '/fileadmin/bikemap/i';	
	document.getElementById('route_switch_on').src = flag ?
		prefix + '/route/points.gif' :
		prefix + '/route/points_active.gif';
	document.getElementById('route_switch_off').src = flag ?
		prefix + '/route/routes_active.gif' :
		prefix + '/route/routes.gif';
*/
/*
	reloadSideBar();

	cats = all_cats[flag ? 'routes' : 'points'];
	renderCats();

	setActiveTab(curActiveTab);
	xmap.enableRoutes(flag);
*/
}

function setActiveTab(tabId)
{
	for (id in tabs) {
		var tab = tabs[id];
		var tab_img = document.getElementById(id +'_img');
		if (id == tabId)
	    	tab_img.src = '/fileadmin/bikemap/i/tab/'+ tab.active_img;
		else
			tab_img.src = '/fileadmin/bikemap/i/tab/'+ tab.img;
	}
	curActiveTab = tabId;
}

function reloadSideBar() {
	switch (curActiveTab) {
		case 'tab_top' :
			showTop();
			break;
		case 'tab_latest': 
			showLatest();
			break;
		case 'tab_new' :
			showAddPOI();
			break;
		default:
			showIntro();
	}	
}

function showIntro() {
	var url = '/index.php?id='+ PID_AJAX_INTRO;
	setSidePanel(url)
	clearSubPanel();
}

// display top 10
function showTop() {
	var url = '/index.php?id='+ PID_AJAX_SELECTED_MARKERS +'&mode=top';
	if (xmap.routesEnabled)
		url += '&routes=1';
	url += '&slt='+Math.random();
	setSidePanel(url, 'tab_top');
	clearSubPanel();
}

function showLatest() {
	var url = '/index.php?id='+ PID_AJAX_SELECTED_MARKERS +'&mode=latest';
	if (xmap.routesEnabled)
		url += '&routes=1';
	url += '&slt='+Math.random();
	setSidePanel(url, 'tab_latest');
	clearSubPanel();
}

// this should show comments
function showDetails(markerUid, showAddComment) {
	if (! markerUid)
		return;
	// var m = xmarkerMap[markerUid];
	var url = '/index.php?id='+ PID_AJAX_COMMENTS +'&addr_uid='+markerUid;
	if (xmap.routesEnabled)
		url += '&routes=1';	
	url += '&slt='+Math.random();
	
	setSidePanel(url, 'tab_details');

	if (showAddComment !== false) {
		var curl = '/index.php?id='+ PID_AJAX_EDIT_COMMENT +'&addr_uid='+markerUid+'&nocache=1&slt='+Math.random();
		setSubPanel(curl);
	}
}

function showAddPOI() {
	var url = '/index.php?id='+ PID_AJAX_EDIT_POI;
	if (xmap.routesEnabled)
		url += '&mode=new_route&routes=1';
	url += '&nocache=1&slt='+Math.random();
	setSidePanel(url, 'tab_new');
	clearSubPanel();
}

var smart_focus_values = {};
function smartFocus(el) {
	if (! smart_focus_values[el.name]) {
		el.value = '';
		smart_focus_values[el.name] = true;
	}
}

function navToMarker(uid) {
        xmap.openInfoWindow(uid);
}


function newnavToMarker(uid,lng,lat) {
        var districtZoom = 19;
        map.setZoom(districtZoom);
	map.panTo(new GLatLng(lat, lng));
	xmap.openInfoWindow(uid);
}

function submitAjaxForm(f, upd) {
	var data = Form.serialize(f);
	var _this = this;
	new Ajax.Request(f.action, {
		method:'post',
		postBody:data,
		onSuccess: function(transport) {
			var response = transport.responseText || "no response text";
			$(upd).update(response);
		},
		onFailure: function(){ alert('Unable to fetch content') }
	});
}

function doSearch() {
	var q = $('search_query').value;
	var url = '/index.php?id='+ PID_AJAX_SEARCH +'&query='+encodeURIComponent(q)+'&slt='+Math.random();
	if (xmap.routesEnabled)
		url += '&routes=1';
	setSidePanel(url);
}

var curSearchResultPage = 1;
function showSearchResultPage(num) {
	if (curSearchResultPage == num)
		return;
	var el = $('search_result_page_'+ curSearchResultPage);
	if (el)
		el.style.display = 'none';
	el = $('search_result_pagelink_'+ curSearchResultPage);
	if (el)
		el.className = 'page_normal';

	el = document.getElementById('search_result_page_'+ num);
	if (el)
		el.style.display = 'block';
	el = $('search_result_pagelink_'+ num);
	if (el)
		el.className = 'page_active';

	curSearchResultPage = num;
}
function openLigthBox(link)
{
    var url = link.href;
    myLightWindow.activate(null, link);
    return false;
}

function renderCats() {
	var out = '';
	for (var i = 0; i < cats.length; i++) {
		var cat = cats[i];
		var key = cat.uid;
    	var id = 'cat-map-'+ key;
    	var color = (cat.color !=  '') ? ' style="color:'+cat.color+';"' : '';

		out += 
			'<div class="googlebutton" style="display: none;">\n'+
			'  <div class="fleft">\n'+
			'    <a href="#" onclick="categoryClick(\''+ key +'\'); this.blur()">\n';
		if (cat.alias)		
		{
			 out += '<img' +
			 	' src="/fileadmin/bikemap/i/marker/cat_'+ cat.alias+'.png" style="width:23px;height:21px"' +
			 	' alt="Filter an/aus" title="Filter an/aus" />';
		}
		var title;
		if (cat.title.substr(0, 6) == 'Bahn: ') {
			title = cat.title.substr(6);
		} else if (cat.title.substr(0, 5) == 'Bus: ') {
			title = cat.title.substr(5);
		} else {
			title = cat.title;
		}
		out += 
			'    </a>\n' +
			'  </div>\n' +
			'  <div class="googlebutton_text">\n'+
			'    <a id="cat_filter_text_'+ key +'" title="Filter an/aus" href="#" class="cat_on"'+
			'       onclick="categoryClick(\''+ key +'\'); this.blur()"'+ color +'>'+ title +
			'       <span id="cat_filter_count_'+ key +'">(0)</span>\n'+
			'    </a>\n'+
			'  </div>\n'+
			'  <div class="fleft"><img src="/fileadmin/bikemap/i/googlebuttons_right.png" alt="" style="width:11px;height:21px" /></div>'+
			'</div>\n';
	}


	document.getElementById('googlebuttons').innerHTML = out;
	fixPNGs('googlebuttons');
}

function updateCatCount(catCount) {
	for (key in catMap) {
		var catEl = document.getElementById('cat_filter_count_'+key);
		if (catEl) {
			var count = catCount[key];
			if (! count)
				count = 0;
			catEl.innerHTML = '(' + count + ')';
		}
	}
}

function getActiveCats() {
	var c = {};
	for (var i = 0; i < cats.length; i++) {
		var cat = cats[i];
		var test = 'cat_filter_text_'+ cat.uid;
		if (document.getElementById(test).className == 'cat_on')
			c[cat.uid] = true;
	}
	return c;
}

function categoryClick(id) {
	var elId = 'cat_filter_text_'+ id;
	var el = document.getElementById(elId);
	var cl = el.className;
	cl = (cl == 'cat_on') ? 'cat_off' : 'cat_on';
	el.className = cl;
	
	xmap.catFilterChanged();
}

/* object editor */

Editor = function(){}
Editor.prototype.deleteMarker = function(uid){
	if (!confirm('Wollen Sie den Punkt tatsächlich löschen?')) 
		return;
	this.deleteAddress('deleteMarker', uid);
}
Editor.prototype.deleteSeg = function(uid){
	if (!confirm('Wollen Sie die Teilstrecke tatsächlich löschen?')) 
		return;
	this.deleteAddress('deleteSeg', uid);
}
Editor.prototype.deleteRoute = function(uid){
	if (!confirm('Wollen Sie die gesamte Strecke tatsächlich löschen?')) 
		return;
	this.deleteAddress('deleteRoute',uid);
}

Editor.prototype.deleteAddress = function(op, uid) {
	this.send({
		op: op,
		uid: uid
	})
}

Editor.prototype.moveMarker = function(uid, lng, lat) {
	this.sendAjax({
		op : 'moveMarker',
		uid : uid,
		lng : lng,
		lat : lat
	})
}

Editor.prototype.send = function(data){
	var form;
	try {
		var fr = document.getElementById('marker_frame').contentWindow;
		form = fr.document.forms.js_edit_form;
	} catch (e) {
		alert(e);
		return;
	}

	// ALERT!! protype's Array.toJSON sucks!!!!	
	form.json.value = JSON.stringify(data);
	form.submit();
}

Editor.prototype.sendAjax = function(data) {
	var url = '/index.php?id='+ PID_AJAX_EDIT_POI +'&mode=js_edit&slt='+Math.random();
	var postBody = 'json='+encodeURIComponent(JSON.stringify(data));
	new Ajax.Request(url, {
		method:'post',
		postBody:postBody,
		onSuccess: function(transport) {
			// alert(transport.responseText);
		},
		onFailure: function(){ alert('Sending command failed') }
	});
}

var editor = new Editor();

function fixPNG(img) {
	var fix = ((browserVer >= 4) && (browserVer < 7) && (document.body.filters));
	if (! fix)
		return;
	if (! img)
		return;
	if (typeof(img) == 'string')
		img = document.getElementById(img);
	if (! img)
		return;

	var src = img.src;
	img.src='/clear.gif';
	img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+ src +"', sizingMethod='scale')";
	
}

function fixPNGs(container) {
	
	var fix = ((browserVer >= 4) && (browserVer < 7) && (document.body.filters));
	if (! fix)
		return;
	if (! container)
		container = document;
	if (typeof container == 'string')
		container = document.getElementById(container);
	if (! container)
		container = document;
		
	var imgs = container.getElementsByTagName('img');
	for (var i = 0; i < imgs.length; i++) {
		var img = imgs[i];
		if (img.src.substring(img.src.length - 4) == '.png') {
			fixPNG(img);
		}
	}
	
}
