var captcha = function()
{
	var rand = $random(0, 100000000000000000)/100000000000000000;
	$('js_captcha').src = '/captcha.png?' + rand;
	return false;
}

/* --- character counter for adding message about a page --- */

var strLength = 0;
var maxLength = 160;
var textLength = 0;
var inputText = new String('');

var runCounter = function()
{
	if ($('msg_form'))
	{
		setCharCounter();
		messageForm();
		$('t_area').addEvent('keyup', function() {
			updateCharCount();
			messageForm();
		});
	}
}

var setCharCounter = function()
{
	if ($('js_code'))
	{
		var myStr = $('js_code').get('value');
		if (myStr == '') strLength = myStr.length;
		else strLength = myStr.length + 1;
		var text = maxLength - strLength + ' characters remaining';
	}
	else
	{
		var text = maxLength + ' characters remaining';
	}
	$('charcount').set('text', text);
};

var updateCharCount = function()
{
	inputText = $('t_area').get('value');
	var maxallowed = maxLength - strLength;
	textLength = maxallowed - inputText.length;
	var text = textLength + ' characters remaining';
	$('charcount').set('text', text);

	if (textLength < 0)
	{
		$('charcount').setStyle('color', '#c3544b');
		$('charcount').setStyle('fontWeight', 'bold');
		$('js_add_message_button').addClass('disabled');
	}
	else
	{
		$('charcount').setStyle('color', '#333333');
		$('charcount').setStyle('fontWeight', 'normal');
		$('js_add_message_button').removeClass('disabled');
	}
};

var messageForm = function()
{
	$('msg_form').addEvent('submit', function(e) {
		if (textLength < 0) {
			e.stop();
			alert('Your message is too long to send. Please shorten it to 160 characters.');			
		}
		else if (inputText.length == 0) e.stop();
	});
}

var launchAccordion = function()
{
	var togglers = new Array();
	var cnt;
	var acc = new Accordion('h3.toggler', 'div.js_content',
	{
		opacity: false,
		onActive: function(toggler, element)
		{
			toggler.addClass("open");
		},
		onBackground: function(toggler, element)
		{
			togglers[cnt] = toggler;
			cnt++;					
		},
		onComplete: function(toggler, element)
		{
			var i;
			for (i = 0; i < togglers.length; i++)
			{
				togglers[i].removeClass("open");
			}
			togglers.length = 0;
			cnt = 0;				
		}
	});
}; 

var map;
var geocoder;
var locus;

var editMapping = function()
{
	editPageMaps(false);
	$('js_region').addEvent('change', function() {
		editPageMaps(true);
	});
}

var pageCreation = function()
{
	if ($('js_region'))
	{
		editPageDetails(false);
		$('js_region').addEvent('change', function() {
			editPageDetails(true);
		});
	}
}

var editPageDetails = function(change)
{
	if ($('js_region'))
	{
		var region = $('js_region').get('value');
		if (region == '' || region == 'everywhere')
		{
			if ($('js_place_block'))
			{
				$('js_place_block').setStyle('display', 'none');
			}	
		}
		else
		{
			var place = $('js_selected_place').get('value');
			$('js_place_block').setStyle('display', 'block');
			var jReq = new Request.JSON({
				url: '/ajax/regions/' + region + '/' + place,
				onSuccess: function(data)
				{
					$('js_places').set('html', data.html);
					$('js_selected_place').set('value', data.selected);
				}
			}).get();
		}
	}
}

var editPageMaps = function(change)
{
	if ($('js_region').get('value') == '' || $('js_region').get('value') == 'everywhere')
	{
		if ($('js_editmap'))
		{
			$('js_editmap').setStyle('height', '0px');
			$('js_map_block').setStyle('display', 'none');
		}
		if ($('js_place_block'))
		{
			$('js_place_block').setStyle('display', 'none');
		}	
	}
	else
	{
		var lati = $('js_lat').get('value');
		var longi = $('js_long').get('value');
		var zoomlvl = parseInt($('js_zoomlevel').get('value'));
		var reg_loc = $('js_region').get('value');
		if (reg_loc.indexOf('/') < 0)
		{
			$('js_place_block').setStyle('display', '');
		}
		else
		{
			$('js_place_block').setStyle('display', 'none');
		}
		var jReq = new Request.JSON({
			url: '/ajax/mapping/' + reg_loc,
			onSuccess: function(data) {
				if (change)
				{
					if (data[0]['g_latitude'] != '') lati = data[0]['g_latitude'];
					if (data[0]['g_longitude'] != '') longi = data[0]['g_longitude'];
					if (data[0]['g_zoom'] != '') zoomlvl = parseInt(data[0]['g_zoom']);
					storeLocationInfo();
				}
				if ($('js_editmap'))
				{
					$('js_editmap').setStyle('height', '316px');
					$('js_map_block').setStyle('display', 'block');
				}

				map = new GMap2($('js_editmap'));

				var mapcntr = new GLatLng(lati, longi);
				map.setCenter(mapcntr, zoomlvl);
				locus = new GMarker(mapcntr);

				storeLocationInfo();

				map.addOverlay(locus);
				map.setUIToDefault();
				geocoder = new GClientGeocoder();

				if ($('js_mapupdate'))
				{
					GEvent.addListener(map, "click", function(overlay, latlng)
					{
						if (latlng != null)
						{
							geocoder.getLocations(latlng, showAddress);
						}
					});
					GEvent.addListener(map, "dragend", function()
					{
						storeLocationInfo();
					});
					$('js_mapupdate').addEvent('click', function(e)
					{
						e.stop();
						var place = $('js_address').get('value') + ' , uk';
						if (place != '') {
							map.clearOverlays();
							geocoder.getLatLng(place, function(point)
							{
								if (!point)
								{
									//alert(place + " not found");
								}
								else
								{
									map.setCenter(point, 13);
									locus = new GMarker(point);
									map.addOverlay(locus);
									storeLocationInfo();
								}
							});
						}
					});
				}
			}
		}).get();
	}
}

var showAddress = function(response)
{
	map.clearOverlays();
	if (!response || response.Status.code != 200)
	{
		//alert("Status Code: " + response.Status.code);
	}
	else
	{
		place = response.Placemark[0];
		point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
		locus = new GMarker(point);
		map.addOverlay(locus);
		$('js_address').set('value', place.address);
		storeLocationInfo();
	}
}

var storeLocationInfo = function ()
{
	if (locus)
	{
		var mlatlng = locus.getLatLng();
		var mlng = mlatlng.lng();
		var mlat = mlatlng.lat();
		var zmlevel = map.getZoom();
		$("js_long").setAttribute("value", mlng.toString());
		$("js_lat").setAttribute("value", mlat.toString());
		$("js_zoomlevel").setAttribute("value", zmlevel.toString());
	}
}

var flagMapping = function()
{
	$('js_map').setStyle('height', '310px');
	map = new GMap2($('js_map'));
	map.setCenter(new GLatLng(lat, lng), zoom);

	map.addControl(new GSmallMapControl());
	var mgr = new MarkerManager(map);
	if (xmlfile != '')
	{
		GDownloadUrl(xmlfile, function(data, responseCode)
		{
			var batch = [];
			var xml = GXml.parse(data);
			var markers = xml.documentElement.getElementsByTagName("marker");
			var j = markers.length;
			for (var i = 0; i < j; i++)
			{
				var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
				var marker = createMarker(map, point, markers[i].getAttribute("page"), markers[i].getAttribute("code"), markers[i].getAttribute("blurb"));
				batch.push(marker);
			}
			mgr.addMarkers(batch, 6);
			mgr.refresh();
		});
	}
}

var pageMapping = function()
{
	if ($('js_mappage'))
	{
		$('js_mappage').setStyle('height', '180px');
		$('js_mappage').setStyle('margin', '9px 0 4px 0');
		map = new GMap2($('js_mappage'));
		map.setCenter(new GLatLng(lat, lng), zoom);
		map.addControl(new GSmallMapControl());
		var mgr = new MarkerManager(map);
		var marker = new GMarker(new GLatLng(lat, lng));
		mgr.addMarker(marker, 11);
		mgr.refresh();
	}
}

var createMarker = function(thismap, point, place, code, blurb)
{
	var marker = new GMarker(point);
	GEvent.addListener(marker, "click", function()
	{
		var myHtml = '';
		myHtml += '<p><a class="standard" href="/page/' + code + '">' + place + '</a> ';
		myHtml += blurb + '</p>';
		windowOptions = { maxWidth:160 };
		thismap.openInfoWindowHtml(point, myHtml, windowOptions);
	});
	return marker;
}

var flickrImages = function()
{
	if (group != '')
	{
		if (page != '')
		{
			$('js_flickr').load('/ajax/flickr/' + group +'/' + page);
		}
		else
		{
			$('js_flickr').load('/ajax/flickr/' + group);
		}
	}
}

var helpfields = function()
{
	var hfs = $$('fieldset');
	hfs.each(function(hf)
	{
		hf.addClass('hidefield');
		hf.addEvents({
			'mouseenter' : function() {
				var t = function(){
					hf.removeClass('hidefield');
				};
				t.delay(400);
			},
			'mouseleave' : function() {
				var t = function(){
					hf.addClass('hidefield');
				};
				t.delay(400);
			}
		});
	});
}

var tweenLights = function()
{
	var lights = $$('.alert');
	lights.each(function(light) {
		light.setStyle('color', '#ffffff');
		light.set('tween', {duration: '2500'});
		light.tween('color', '#a61300');
	});
}

var hideForms = function()
{
	if ($('js_mydetails'))
	{
		$('js_mydetails_trigger').setStyle('display', 'block');
		$('js_mydetails_trigger').setStyle('margin-top', '10px');
		$('js_mydetails_trigger').setStyle('text-decoration', 'underline');
		$('js_mydetails_trigger').setStyle('cursor', 'pointer');
		var toggler = new Fx.Slide('js_mydetails');
		toggler.hide();
		$('js_mydetails_trigger').addEvent('click', function(e){
			e.stop();
			toggler.toggle();
		});
	}
}

var selectAll = function()
{
	if ($('selectall'))
	{
		$('selectall').addEvent('click', function(e){
			$$('.js_chck').set('checked', $(this).get('checked'));
		});
	}
}

var cancelScheduledMessage = function()
{
	if ($('inboxcolumn'))
	{
		var clnks = $$('#inboxcolumn dl dt a.js_cancel');
		clnks.each(function(clnk)
		{
			clnk.addEvent('click', function(e)
			{
				var req;
				e.stop();
				if (confirm('Cancel this message?'))
				{
					req = new Request(
					{
						method: 'post',  
						url: clnk.get('href'),
						onComplete: function(response)
						{
							var cparent, cuncle;
							if (response == '')
							{
								cparent = clnk.getParent();
							 	cuncle = cparent.getPrevious();
								cparent.set('html', 'Sorry. An error occurred');
								alert('Sorry. An error occurred');
							}
							else if (response == 'cancelled')
							{
								cparent = clnk.getParent();
								cuncle = cparent.getPrevious();
								cparent.dispose();
								cuncle.dispose();
							}
						}
					}).send();
				}

			});
		});
	}
};

var showMessageEdit = function()
{
	if ($('message_list'))
	{
		var dds = $$('#message_list dl dd');
		var dts = $$('#message_list dl dt');
		var title = $('js_pagetitle').get('html') + ': ';

		dts.each(function(dt, i)
		{
			var divs = dt.getElements('div');
			var reply_holder = divs[0]
			var links_holder = divs[1];
			var rlnk = links_holder.getElement('span.js_response a');
			var mnkr = links_holder.getElement('span.moniker');

			rlnk.addEvent('click', function(e)
			{
				e.stop();
				var baseurl = rlnk.get('href').split('/');
				var url = '/ajax/' + baseurl[3] + '/' + baseurl[2] + '/' + baseurl[4];
				if (baseurl[3] == 'publish')
				{
					var req = new Request(
					{
						method: 'post',  
						url: url,
						onComplete: function(response)
						{
							if (response == '')
							{
								dts[i].set('html', 'Sorry. An error occurred');
							}
							else
							{
								rlnk.removeClass('publish');
								rlnk.set('html', '');
								/*
								var newlnk = new Element('a', {href: '/settings/' + baseurl[2] + '/dialogue/' + response, html: 'Reply'});
								newlnk.inject(rlnk, 'after');
								*/
							}
						}
					}).send();
				}
				else if (baseurl[3] == 'reply')
				{
					var req = new Request(
					{
						method: 'post',  
						url: url,
						onComplete: function(response)
						{
							if (response == '')
							{
								dts[i].set('html', 'Sorry. An error occurred');
							}
							else
							{
								reply_holder.set('html', response);
								links_holder.setStyle('display', 'none');
								var frm = reply_holder.getElement('form');
								frm.set('send', {
									onSuccess: function(resp)
									{
										if (resp == '')
										{
											mnkr.set('html', '');
											rlnk.set('html', 'Reply');
											links_holder.setStyle('display', '');
										}
										else
										{
											mnkr.set('html', title);
											rlnk.set('html', resp);
											links_holder.setStyle('display', '');
										}
										reply_holder.set('html', '');
									}
								}).addEvent('submit', function(e)
								{
									e.preventDefault();
									this.send();
								});							
								var cncl = frm.getElement('a');
								cncl.addEvent('click', function(e)
								{
									e.stop();
									links_holder.setStyle('display', '');
									reply_holder.set('html', '');
								});

							}
						}
					}).send();
				}
			});

			var dlnk = links_holder.getElement('a.js_delete');
			dlnk.addEvent('click', function(e)
			{

				e.stop();
				if (confirm('Delete this message from the page?'))
				{
					var baseurl = dlnk.get('href').split('/');
					var url = '/ajax/remove/' + baseurl[2] + '/' + baseurl[4];

					var req = new Request(
					{
						method: 'post',  
						url: url,
						onComplete: function(response)
						{
							if (response == '')
							{
								dts[i].set('html', 'Sorry. An error occurred');
							}
							else if (response == 'deleted')
							{
								dts[i].dispose();
								dds[i].dispose();
							}
						}
					}).send();
				}

			});
		});
	}
}

var showScroller = function()
{
	if ($('scrollbox'))
	{
		var opt = {
			slides: 'slide',
			duration: 1500,
			buttons: {next:'go-next',prev:'go-prev'},
			transition: Fx.Transitions.Quint.easeOut
		}
		var scroller = new QScroller('scroller', opt);
		scroller.load();
	}
}

function txtAdder()
{
	if ($('t_area'))
	{
		if ($('t_area').get('value') == '' && $('js_edit_area').get('value') == 'edit') $('t_area').set('value', "write your message here");
		else if ($('t_area').get('value') == '') $('t_area').set('value', " ...or add your message here");
		$('t_area').addEvent('click', function()
		{
			if ($('t_area').get('value') == " ...or add your message here") $('t_area').set('value', '');
			else if ($('t_area').get('value') == "write your message here" && $('js_edit_area').get('value') == 'edit') $('t_area').set('value', '');
		});
	}
}

function showPopups()
{
	if ($$('a.boxed').length > 0) SqueezeBox.assign($$('a.boxed'), { parse: 'rel' });
}

var showCalendar = function()
{
	if ($('datetime')) new DatePicker('#datetime', { positionOffset: { x: 0, y: 5 }, timePicker: true, format: 'd-m-Y @ H' });
}

window.addEvent('domready', function()
{
    if ($('js_mapupdate')) editMapping();
    pageCreation();
	if ($('js_map')) flagMapping();
	if ($('js_mappage')) pageMapping();
	if ($('js_flickr')) flickrImages();
	launchAccordion();
	runCounter();
	//helpfields();
	tweenLights();
	hideForms();
	var action = $$('.js_refresh').addEvent('click', captcha);
	showMessageEdit();
	cancelScheduledMessage();
	showScroller();
	txtAdder();
	showPopups();
	selectAll();
	showCalendar();
});

