var page = {};
var form = {};
var maps = {};
var map;

/* Prototypes */
Array.prototype.contains = function (element) {
	for (var i = 0; i < this.length; i++) {
		if (this[i] == element) { return true; }
	}
	return false;
}


/* Form Selection Initial */
form.selectSingle = function(field, value) {
	$("#"+field).val(value);
}

form.fillText = function(field, value) {
	if(value) { $("#"+field).removeAttr("disabled"); }
	$("#"+field).val(value);
}
form.selectRadio = function(field, value) {
	$("input[name='"+field+"']").each(function() { 
		if($(this).val() == value) {
			$(this).attr('checked', 'checked');
		}
	});
}


/* page related scripts */
page.bindCircuits = function(arrCircuits, arrLayouts) {
	var multifield = $("#circuitmultiple");
	$.ajax({ 
		type: "GET", 
		url: "./ajaxtasks.php?action=loadcircuits", 
		data: "&postcode="+$("#postcode").val()+"&distance="+$("#distance").val(), 
		cache: false, 
		beforeSend: function() { 
			multifield.html('Getting Circuits ...');
		}, 
		success: function(html) {
			multifield.html('<select id="circuit_id[]" name="circuit_id[]" multiple="multiple"></select>');	
			var field = $("select[id*='circuit_id']");
			var circuitOptions = new Array();
			eval(html);
			var arr = arrCircuits.split(",");
			for(var i = 0; i < circuitOptions.length; i++) {
				var selected = "";
				if (arr.contains(circuitOptions[i].value)) {
					selected = " selected='true'";
				}
				field.append("<option value='" + circuitOptions[i].value + "'" + selected + ">" + circuitOptions[i].text + "</option>");
			}
			field.multiSelect( { selectedList:1, 
				onCheck: function(){page.bindLayouts("0,");}, 
				onCheckAll: function(){page.bindLayouts("0,");}, 
				onUncheckAll: function(){page.bindLayouts("0,");}
			});
			if (arrLayouts) { page.bindLayouts(arrLayouts); }			
		}
	});
}



page.bindLayouts = function(arrLayouts) {
	var data = "";
	$("input[name*='circuit_id']:checked").each(function() {
		data += "&circuit_id[]="+this.value;
	});
	var multifield = $("#layoutmultiple");
	$.ajax({ 
		type: "GET", 
		url: "./ajaxtasks.php?action=loadlayouts", 
		data: data, 
		cache: false, 
		beforeSend: function() { 
			multifield.html('Getting Layouts ...');
		}, 
		success: function(html) {
			multifield.html('<select id="layout_id[]" name="layout_id[]" multiple="multiple"></select>');	
			var field = $("select[id*='layout_id']");
			var layoutOptions = new Array();
			eval(html);
			var arr = arrLayouts.split(",");
			for(var i = 0; i < layoutOptions.length; i++) {
				var selected = "";
				if (arr.contains(layoutOptions[i].value)) {
					selected = " selected='true'";
				}
				field.append("<option value='" + layoutOptions[i].value + "'" + selected + ">" + layoutOptions[i].text + "</option>");
			}
			field.multiSelect({selectedList:1});
		}
	});
}


page.bindOrganisers = function(arrOrganiser) {
	var multifield = $("#organisermultiple");
	$.ajax({ 
		type: "GET", 
		url: "./ajaxtasks.php?action=loadorganisers", 
		data: "", 
		cache: false, 
		beforeSend: function() { 
			multifield.html('Getting Organisers ...');
		}, 
		success: function(html) {
			multifield.html('<select id="organiser_id[]" name="organiser_id[]" multiple="multiple"></select>');	
			var field = $("select[id*='organiser_id']");
			var organiserOptions = new Array();
			eval(html);
			var arr = arrOrganiser.split(",");
			for(var i = 0; i < organiserOptions.length; i++) {
				var selected = "";
				if (arr.contains(organiserOptions[i].value)) {
					selected = " selected='true'";
				}
				field.append("<option value='" + organiserOptions[i].value + "'" + selected + ">" + organiserOptions[i].text + "</option>");
			}
			field.multiSelect( { selectedList:1});
			page.initSearchForm();
			page.changePage(1);
		}
	});
}



page.initSearchForm = function() {
	$("#date_start").datepicker({ dateFormat: 'dd-mm-yy' });
	$("#date_end").datepicker({ dateFormat: 'dd-mm-yy' });
	$("#clearcriteria").click(function(){
		location.reload();
	});	
	$("#distance").change(function() {
		page.toggleField($(this),'postcode');
		page.bindCircuits("0,");
	});
	$("#postcode").change(function(){
		var postcode = $("#postcode").val().toUpperCase();
		postcode = postcode.substring(0,4);
		$("#postcode").val(postcode);
		page.bindCircuits("0,");
	});
	$("input[type='radio']").click(function() {
		$("#formSearch").submit();
	});	
	$("#formSearch").submit(function(e){
		var data = $(this).serialize();
		e.preventDefault();
		$.ajax({ 
			type: "GET", 
			url: "./ajaxtasks.php?action=loadevents", 
			data: data, 
			cache: false, 
			beforeSend: function() { 
				$("#results").html('<div class="ajaxloader">Please Wait....Loading Events</div>'); 
			}, 
			success: function(html) { 
				$("#results").html(html); 
			}
		});
		return false;
	});
}

page.viewNotes = function(link, notes) {
	if ($(link).html() == "Show Notes") {
		$(notes).show();
		$(link).html("Hide Notes");
	} else {
		$(notes).hide();
		$(link).html("Show Notes");
	}
}

page.toggleField = function(selectbox,field) {
	if (selectbox.val() != "") { $("#"+field).removeAttr("disabled"); $("#"+field).focus(); }
	else { $("#"+field).attr("disabled", true); $("#"+field).val(""); }
}

page.changePage = function(page,circuit_sub_id) {
	$("#pagenum").val(page);
	$("#circuit_sub_id").val(circuit_sub_id);
	$("#formSearch").submit();
}



/* maps */
maps.initialize = function(lat, long, miles) {
	var zoomlevel;
	if (!lat) { lat = 54.659005590852985; }
	if (!long) { long = -3.01025390625; }
	if (miles == 200) { zoomlevel = 5; }
	else if (miles == 150) { zoomlevel = 6; }
	else if (miles == 100) { zoomlevel = 7; }	
	else if (miles == 50) { zoomlevel = 8; }
	else { zoomlevel = 5; }
		
	var defaultLocation = new google.maps.LatLng(lat, long);
	var mapOptions = { zoom: zoomlevel, scrollwheel: false, center: defaultLocation, mapTypeId: google.maps.MapTypeId.ROADMAP};
	map =  new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
	infowindow = new google.maps.InfoWindow({ content: "hello" });
}
maps.addMarkers = function(locations) {
	for (var i = 0; i < locations.length; i++) {
		var circuitdata = locations[i];
		maps.addMarker(circuitdata);
	}
}
maps.addMarker = function(circuitdata) {
	if (circuitdata[1] == 0 && circuitdata[2] == 0) {
		return;
	}
	var image = new google.maps.MarkerImage('static/images/flag.png', new google.maps.Size(20, 32), new google.maps.Point(0,0), new google.maps.Point(0, 32)); 
	var shadow = new google.maps.MarkerImage('static/images/flag_shadow.png', new google.maps.Size(37, 32), new google.maps.Point(0,0), new google.maps.Point(0, 32));
	var shape = { coord: [1, 1, 1, 20, 18, 20, 18 , 1], type: 'poly' };	
	var location = new google.maps.LatLng(circuitdata[1], circuitdata[2]);
	var marker = new google.maps.Marker({position: location, map: map, icon: image, shadow: shadow, shape:shape, title:circuitdata[0] + " - (" + circuitdata[4] + " events)" });
	google.maps.event.addListener(marker, 'click', function() {
		page.changePage(1,circuitdata[3]);
    });
}




/*

page = {};
maps = {};
form = {};
var map;
var infowindow;


searchform = {};
searchform.default_circuits = "";
searchform.default_layouts = "";
searchform.default_organisers = "";




page.initSearchForm = function() {
	page.bindCircuits(searchform.default_circuits);
	page.bindLayouts(searchform.default_layouts);
	//page.bindOrganisers(searchform.default_organisers);
	/*
	page.toggleField($("#distance"),'postcode');
	page.bindCircuits(defaultcircuits);
	page.bindLayouts();
	
	$("input[type='radio']").click(function() {
		$("#formSearch").submit();
	});
	$(".multiple").multiSelect({selectedList:5});
	$("#date_start").datepicker({ dateFormat: 'yy-mm-dd' });
	$("#date_end").datepicker({ dateFormat: 'yy-mm-dd' });
	
	$("#distance").change(function() {
		page.toggleField($(this),'postcode');
		page.bindCircuits();
	});
	$("#postcode").change(function(){
		var postcode = $("#postcode").val().toUpperCase();
		postcode = postcode.substring(0,4);
		$("#postcode").val(postcode);
		page.bindCircuits();
	});
	
	$("#clearcriteria").click(function(){
		location.reload();
	});
	$("#search").click(function(){
		$("#pagenum").val(1);
		$("#circuit_sub_id").val(0);
	});
	$("#formSearch").submit(function(e){
		var data = $(this).serialize();
		e.preventDefault();
		$.ajax({ 
			type: "GET", 
			url: "./ajaxtasks.php?action=loadevents", 
			data: data, 
			cache: false, 
			beforeSend: function() { 
				$("#results").html('<div class="ajaxloader">Please Wait....Loading Events</div>'); 
			}, 
			success: function(html) { 
				$("#results").html(html); 
			}
		});		
	});
	
}


page.bindCircuits = function(arrValues) {
	var multifield = $("#circuitmultiple");
	$.ajax({ 
		type: "GET", 
		url: "./ajaxtasks.php?action=loadcircuits", 
		data: "&postcode="+$("#postcode").val()+"&distance="+$("#distance").val(), 
		cache: false, 
		beforeSend: function() { 
			multifield.html('Getting Circuits ...');
		}, 
		success: function(html) {
			multifield.html('<select id="circuit_id[]" name="circuit_id[]" multiple="multiple"></select>');	
			var field = $("select[id*='circuit_id']");
			var circuitOptions = new Array();
			eval(html);
			var arr = arrValues.split(",");
			for(var i = 0; i < circuitOptions.length; i++) {
				var selected = "";
				if (arr.contains(circuitOptions[i].value)) {
					selected = " selected='true'";
				}
				field.append("<option value='" + circuitOptions[i].value + "'" + selected + ">" + circuitOptions[i].text + "</option>");
			}
			field.multiSelect( { selectedList:1, 
				onCheck: function(){page.bindLayouts();}, 
				onCheckAll: function(){page.bindLayouts();}, 
				onUncheckAll: function(){page.bindLayouts();}
			});
		}
	});
}


page.bindLayouts = function(arrValues) {
	var data = "";
	$("input[name*='circuit_id']:checked").each(function() {
		data += "&circuit_id[]="+this.value;
	});
	alert(data);
	var multifield = $("#layoutmultiple");
	$.ajax({ 
		type: "GET", 
		url: "./ajaxtasks.php?action=loadlayouts", 
		data: data, 
		cache: false, 
		beforeSend: function() { 
			multifield.html('Getting Layouts ...');
		}, 
		success: function(html) {
			multifield.html('<select id="layout_id[]" name="layout_id[]" multiple="multiple"></select>');	
			var field = $("select[id*='layout_id']");
			var layoutOptions = new Array();
			eval(html);
			var arr = arrValues.split(",");
			for(var i = 0; i < layoutOptions.length; i++) {
				var selected = "";
				if (arr.contains(layoutOptions[i].value)) {
					selected = " selected='true'";
				}
				field.append("<option value='" + layoutOptions[i].value + "'" + selected + ">" + layoutOptions[i].text + "</option>");
			}
			field.multiSelect({selectedList:1});
		}
	});
}




page.changePage = function(page,circuit_sub_id) {
	$("#pagenum").val(page);
	$("#circuit_sub_id").val(circuit_sub_id);
	$("#formSearch").submit();
}

page.toggleField = function(selectbox,field) {
	if (selectbox.val() != "") { $("#"+field).removeAttr("disabled"); $("#"+field).focus(); }
	else { $("#"+field).attr("disabled", true); $("#"+field).val(""); }
}







maps.initialize = function(lat, long, miles) {
	var zoomlevel;
	if (!lat) { lat = 54.659005590852985; }
	if (!long) { long = -3.01025390625; }
	if (miles == 200) { zoomlevel = 6; }
	else if (miles == 100) { zoomlevel = 7; }
	else if (miles == 50) { zoomlevel = 8; }
	else if (miles == 20 || miles == 10) { zoomlevel = 9; }
	else { zoomlevel = 5; }
		
	var defaultLocation = new google.maps.LatLng(lat, long);
	var mapOptions = { zoom: zoomlevel, scrollwheel: false, center: defaultLocation, mapTypeId: google.maps.MapTypeId.ROADMAP};
	map =  new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
	infowindow = new google.maps.InfoWindow({ content: "hello" });
}
maps.addMarkers = function(locations) {
	for (var i = 0; i < locations.length; i++) {
		var circuitdata = locations[i];
		maps.addMarker(circuitdata);
	}
}
maps.addMarker = function(circuitdata) {
	if (circuitdata[1] == 0 && circuitdata[2] == 0) {
		return;
	}
	var image = new google.maps.MarkerImage('static/images/flag.png', new google.maps.Size(20, 32), new google.maps.Point(0,0), new google.maps.Point(0, 32)); 
	var shadow = new google.maps.MarkerImage('static/images/flag_shadow.png', new google.maps.Size(37, 32), new google.maps.Point(0,0), new google.maps.Point(0, 32));
	var shape = { coord: [1, 1, 1, 20, 18, 20, 18 , 1], type: 'poly' };	
	var location = new google.maps.LatLng(circuitdata[1], circuitdata[2]);
	var marker = new google.maps.Marker({position: location, map: map, icon: image, shadow: shadow, shape:shape, title:circuitdata[0] + " - (" + circuitdata[4] + " events)" });
	google.maps.event.addListener(marker, 'click', function() {
		page.changePage(1,circuitdata[3]);
    });
}




form.selectRadio = function(field, value) {
	$("input[name='"+field+"']").each(function() { 
		if($(this).val() == value) {
			$(this).attr('checked', 'checked');
		}
	});
}

form.fillText = function(field, value) {
	$("#"+field).val(value);
}

form.selectSingle = function(field, value) {
	$("#"+field).val(value);
}

form.selectMultiple = function(field, arrValues) {
	var arr = arrValues.split(",");
	$("select[id*='" + field + "'] option").each(function () {
		alert("hello");
		if (arr.contains($(this).val())) {
			$(this).attr("selected", true); 
		}
	});
}






*/
