var markers = new Array();
var nomap;
var mapviewer;
var searcher;
var view = 'list';
var refresh = true;
var per_page = 10;
var page_selected = 1;
var host;
var ref;
var query;
var query1;
var category;
var start_date;
var end_date;

function InitMap()
{
	mapviewer = MMFactory.createViewer(document.getElementById('mapviewer'));
	mapviewer.goToPosition( new MMLocation(new MMSearch (new MMSearchFilter('town','eq','London')),10));

	ResetMap();
	
    var map_type_container = document.getElementById('maptype');
    
	if(map_type_container)
	{
		var map_type_widget = new MMMapTypeWidget (undefined,undefined,undefined);
		//map_type_widget.setContainer(map_type_container);
		mapviewer.addWidget(map_type_widget);
    }
	
	var links = document.getElementById('maplinks');
	links.style.display = 'block';
	
	mapviewer.removeWidget('');
	mapviewer.addWidget(new MMSmallPanZoomWidget());
}

function ShowMap(val)
{
	var map = document.getElementById('map-area');
	if (!map) return false;
	
	if (val) {map.style.display = 'block';}
	else {map.style.display = 'none';}
	
}

function ResetMap()
{
	if (mapviewer)
	{
		mapviewer.removeAllOverlays();
		markers = new Array();
	}
}

function initSearch()
{ 
	refresh = true;
	
	LoadingStatus(true);
	
	if (nomap == false) {ResetMap();}
	
	var search = new MMSearch();
	search.filters = new Array();

	var pager = document.getElementById('pager');
	if (pager.value>0) {page_selected = pager.value;}
    else {page_selected = 1;}
     
    var start_index = Number(((Number(page_selected)-1)*Number(per_page))+1);
	search.count = Number(per_page);
    search.start_index = start_index;

	search.filters.push( new MMSearchFilter('end','ge',start_date));
	search.filters.push( new MMSearchFilter('start','le',end_date));
	search.logic = 'AND';

	if (category != 'all')
	{
		search.filters.push( new MMSearchFilter('category','eq',category));
		search.logic = 'AND,AND';
	}
	
	if (query)
	{
		search.address = new MMAddress({ qs : query, country_code: 'GB' });
		search.max_distance = Number('1');
		search.distance_units = 'miles';
	}
	
	if (query1)
	{
		search.filters.push( new MMSearchFilter('town', 'in',query1));
		search.filters.push( new MMSearchFilter('street', 'in',query1));
		search.filters.push( new MMSearchFilter('pc','in',query1));
		
		search.filters.push( new MMSearchFilter('title', 'contains',query1));
		search.filters.push( new MMSearchFilter('author', 'contains',query1));
		search.filters.push( new MMSearchFilter('cast', 'contains',query1));
		search.filters.push( new MMSearchFilter('description', 'contains',query1));
		search.filters.push( new MMSearchFilter('website', 'contains',query1));
		search.filters.push( new MMSearchFilter('place', 'contains',query1));
		
		search.logic = 'AND,AND,AND,OR,OR,OR,OR,OR,OR,OR,OR';
	}
	    
	searcher = MMFactory.createSearchRequester(ShowEvents);
	searcher.search(search);
}

function TrimDescription(desc,length)
{
	return desc.substr(0,length);
}

function createInfoBoxContent(data,address_only)
{
	var content = '';
	
	content = '<div style="padding:7px;width:200px;">';
	
		if (data.title) content = content + '<h4 style="margin-bottom:4px;font-size:13px;">' + data.title + '</h4>';
	
		content = content + '<div style="font-size:11px;">';
			
			if (address_only)
			{
				content = content + '<ul style="list-style-type:none;margin:0px;padding:0px;">'
		
					if (data.place) content = content + '<li>'+ data.place +'</li>';
					if (data.street)content = content + '<li>'+ data.street +'</li>';
					if (data.town) 	content = content + '<li>'+ data.town +'</li>';
					if (data.pc) 	content = content + '<li>'+ data.pc +'</li>';
					
				content = content + '</ul>'
				
				
				if (data.website)
				{
					var url = data.website;
					if (url.substr(0,7) != 'http://') {url = 'http://'+url;}
					content = content + '<a style="text-decoration:underline;" href="' + url +'">' + data.website + '</a>';
				}
			}
			else
			{
				content = content + '<div style="margin-top:10px;padding-top:5px;border-top:1px dotted #c0c0c0;">';
				
				if (data.description) {content = content + TrimDescription(data.description,100) + '... ';}
				
				content = content + '<a style="text-decoration:underline;" href="' + host +'?pg=preview&ref='+ ref + '&id=' + data.id + '&cat=' + data.category + '">read more</a>';
				
				content = content + '</div>';
			}
	
		content = content + '</div>'
	
	content = content + '</div>';
	
	return content;
}

function CreateItemContent(data,marker)
{
	var address = new Array();
	
	if (data.place)  {address[0] = data.place.replace(/&amp;/g,'&');}
	if (data.street) {address[1] = data.street.replace(/&amp;/g,'&');}
	if (data.town) 	 {address[2] = data.town.replace(/&amp;/g,'&');}

	var content = document.createElement('div');
	content.style.margin = '5px auto';
	content.style.borderBottom = '1px dotted #c0c0c0';
	content.style.paddingBottom = '3px';
	
	var preview_url = host +'?pg=preview&ref='+ ref + '&id=' + data.id + '&cat=' + data.category;
	
	if (data.title)
	{
		var anchor = document.createElement ('a');
	    anchor.href = preview_url;
	    anchor.appendChild(document.createTextNode(data.title.replace(/&amp;/g,'&')));
	    anchor.onmouseup = function () {openInfoBox(marker);return false;};
		
		if (view == 'grid')
		{
			var el = document.createElement('h3');
			el.style.fontSize = '13px';
			el.style.margin = '0px';
			el.appendChild(anchor);

			anchor.className = 'purple';			
			anchor = el;
		}
		
		content.appendChild(anchor);
	}
	
	if (address.length>0)
	{
		var div = document.createElement ('div');
		div.appendChild(document.createTextNode(address.join(', ')));
	
		if (view == 'grid')
		{
			div.style.fontWeight = 'bold';
			div.style.fontSize = '11px';
		}
		
		content.appendChild(div);
	}
	
	if (view=='list' && data.times)
	{
		var div = document.createElement ('div');
		div.style.fontWeight = 'bold';
		div.appendChild(document.createTextNode(data.times.replace(/&amp;/g,'&')));
		
		content.appendChild(div);
	}
	
	if (view == 'grid')
	{
		var div = document.createElement ('div');
		div.appendChild(document.createTextNode(TrimDescription(data.description.replace(/&amp;/g,'&'),100) + '... '));
	
		var anchor = document.createElement ('a');
	    anchor.href = preview_url;
	    anchor.appendChild(document.createTextNode('read more'));
		
		div.appendChild(anchor);
		content.appendChild(div);
	}
	
	return content;
}

function createMarker(location,data, num)
{
	var group = ConvertPoint(location);

    var icon = MM_DEFAULT_ICON.copy();
    icon.groupName  = group;
	
    var marker = mapviewer.createMarker(location, {'label': data.title,'text' : num, 'icon' : icon});
    marker.setInfoBoxContent(createInfoBoxContent(data));
	mapviewer.declutterGroup(group);
	
	return marker;
}

function openInfoBox(target)
{
	if(target.infoBoxOpened()) {return;}
    else {target.openInfoBox();}
}

function ConvertPoint(point)
{
	if (point.lon==0 || point.lat==0) {return false;}
	
	var lon = String(point.lon);
	var lat = String(point.lat);
	
	lon = lon.substr(0,6);
	lat = lat.substr(0,6);
	
	return lon+lat;
}

function LoadingStatus(bool)
{
	var res_box = document.getElementById('results');
	var view = document.getElementById('view');
	
	if (bool)
	{
		res_box.innerHTML = '<div id="loading" class="tac mt10"><img src="http://media.tiscali.co.uk/images/gfx/loading.gif" /></div>';
		view.style.visibility = 'hidden';
	}
	else
	{
		res_box.innerHTML = '';
		view.style.visibility = 'visible';
	}
}

function NoResults()
{
	var cont = document.getElementById('results');
	cont.innerHTML = '<div class="tac mt10">No events have been found. <a href="'+host+'">Search again</a></div>';
}

function ChangeView(obj)
{
	if (view=='grid')
	{
		view='list';
		obj.innerHTML = '<img src="http://media.tiscali.co.uk/images/gfx/lgicn_16.gif" class="imag mr4" />View details';
	}
	else
	{
		view='grid';
		obj.innerHTML = '<img src="http://media.tiscali.co.uk/images/gfx/lgicn_16.gif" class="imag mr4" />View list';
	}
	
	LoadingStatus(true);
	
	refresh = false;
	
	ShowEvents();
}

function ShowEvents()
{
	var res_box = document.getElementById('results');
	
	LoadingStatus(false);
	
	if (searcher.error_code)
	{
		NoResults();
		return false;
	}

	for (var count=0;count<searcher.record_sets.length;count++)
	{
		if (searcher.record_sets[count].records)
		{
			if (refresh == false && nomap == false) {mapviewer.removeAllOverlays();}
			
			var cnt = searcher.record_sets[count].records.length;
			
            for (var record_count=0;record_count<cnt;record_count++ )
			{
				var record = searcher.record_sets[count].records[record_count];
				
				if (nomap == false)
				{
					var marker = createMarker(record.point,record,record_count+1);
					markers.push(marker);
				}
				res_box.appendChild(CreateItemContent(record,marker));
			}
		}
		else
		{
			NoResults();
			return false;
		}
	}
	
	if (refresh)
	{
		if (nomap == false) {mapviewer.goToPosition (mapviewer.getAutoScaleLocation(markers));}
		DisplayPages(searcher.record_sets[0].totalRecordCount);
	}
}

function DisplayPages(total)
{
	var pgs = document.getElementById('pgs');
	var mnu = document.getElementById('mnu');
	var pager = document.getElementById('pager');
	var tot   = document.getElementById('total');
	
	while (pager.firstChild) {pager.removeChild(pager.firstChild);}
	
	var pages = Math.ceil(total/per_page);
		
    for (i = 0; i< pages; i++ )
	{
        var el = document.createElement ('option');
        el.value = i+1;
        el.appendChild(document.createTextNode(i+1));
        pager.appendChild(el);
	}

	pager.selectedIndex=page_selected-1;
	
	tot.innerHTML = '<b>' + total + '</b> events | Page <b>' + page_selected + '</b> of <b>' + pages + '</b>';
	
	pgs.style.display = 'block';
	mnu.style.display = 'block';
}
