var map;
var markers;
var pointMarkers = [];
var Langs = new Hash();
var currentNoteId;
var currentMarker;
var Notes = new Hash();
var coverageP;
var haveqt = false;
var maxNoteTextLength = 256;
var iconBase;
var iconDefault;
var iconDisabled;

var createNewNote = '<i class="gray">Click here to create a text note.</i>';
var disableNoteLink = '<a href="#" title="If you disable this note nobody including you will not be able to receive it via Toozla." onclick="changeNoteStatusTo(0); return false;">Disable this note</a>';
var enableNoteLink = '<a href="#" title="Click here to enable this note." onclick="changeNoteStatusTo(1); return false;">Enable this note</a>';


function Note(id, latlng, title, txt, lang, sex, agegroup, created, active) {
	var note = new Object();
	note.id = id;
	note.latlng = latlng;
	note.title = title;
	note.txt = txt;
	note.lang = lang;
	note.sex = sex;
	note.agegroup = agegroup;
	note.created = created;
	note.active = active;
	return note;
}

function loadLangList() {

	var langs;

	GDownloadUrl("/?load_lang_list=1", function(data) {
		var xml = GXml.parse(data);
		var langs = xml.documentElement.getElementsByTagName("language");
		for (var i = 0; i<langs.length; i++) {
			Langs.set(langs[i].getAttribute('id'), langs[i].getAttribute('code'));
		}

	});
}

function langList(id) {
	var langs = '';
	for (var i = 0; i<Langs.keys().length; i++) {
		langs += "<option value='"+Langs.keys()[i]+"'"+(Langs.keys()[i]==id?" selected":"")+">"+Langs.get(Langs.keys()[i]);
	}
	return langs;
}

function checkRFrm() {
	var flag = 0;
	$$(".frm-error").invoke('update','');
	$$(".text").invoke('removeClassName','field-error');
//	if (!$F("r_nick")) { $('r_nick').addClassName('field-error'); $("r_nick_error").update('Please create a nickname.'); flag++; }
	if (!$F("r_pwd")) { $('r_pwd').addClassName('field-error'); $("r_pwd_error").update('Please create a password.'); flag++; }
	if (flag) { return 0; }

	$("loading").show();
	$("r_frm_button").hide();

	$("r_frm").submit();
	return 0;

/*
	new Ajax.Request('/registration', {
		method: 'get',
		parameters: {
			check_nickname: 1,
			nickname: $F("r_nick")
		},
		onSuccess: function(tr) {
			if (tr) {
				$("r_frm").submit();
			}
			else {
				$('r_nick').addClassName('field-error'); $("r_nick_error").update('Sorry, a user with this nickname already exists.');
				$("loading").hide();
				$("r_frm_button").show();
			}
		}
	});
*/
}

function checkLoginFrm() {
	var flag = 0;
	$$(".frm-error").invoke('update','');
	$$(".text").invoke('removeClassName','field-error');
	if ($("l_login") && !$F("l_login")) { $('l_login').addClassName('field-error'); $("l_login_error").update('Please provide your e-mail.'); flag++; }
	if (!$F("l_pwd")) { $('l_pwd').addClassName('field-error'); $("l_pwd_error").update('Please provide your password.'); flag++; }
	if (flag) { return 0; }
	$("l_frm").submit();
}

function checkChPwdFrm() {
	var flag = 0;
	$$(".frm-error").invoke('update','');
	$$(".text").invoke('removeClassName','field-error');
	if (!$F("p_oldpwd")) { $('p_oldpwd').addClassName('field-error'); $("p_oldpwd_error").update('Please provide your current password.'); flag++; }
	if (!$F("p_newpwd")) { $('p_newpwd').addClassName('field-error'); $("p_newpwd_error").update('Please create a new password.'); flag++; }
	if (flag) { return 0; }

	$("chpwd-button").hide();
	$("loading").show();

	$("p_frm").submit();
}

function checkPwdResetFrm() {
	var flag = 0;
	$("pwdreset-error").hide();
	$$(".frm-error").invoke('update','');
	$$(".text").invoke('removeClassName','field-error');
	if (!$F("p_email")) { $('p_email').addClassName('field-error'); $("p_email_error").update('Please provide your e-mail.'); flag++; }
	if (flag) { return 0; }

	$("pwdreset-button").hide();
	$("loading").show();

	new Ajax.Request('/', {
		method: 'get',
		parameters: {
			pwd_reset: 1,
			auth_key: $F("auth_key"),
			email: $F("p_email")
		},
		onSuccess: function(tr) {

			if ($('reset-key-error')) {
				$('reset-key-error').hide();
			}
			if (!tr.responseText) { $("pwdreset-ok").update("<div class='my-table'><div class='row info'>Bingo!</div></div><p>Please follow a link in the e-mail which we have just sent to <b>"+$F("p_email")+"</b>. Once you click the link, you will be able to reset your password.</p><p>Please notice that your old password is still working until you click the link.</p>"); }
			else { $("loading").hide();	$("pwdreset-button").show(); $("pwdreset-error").show(); $("pwdreset-error").down().update(tr.responseText); }
		}
	});
}

function checkNewPwdFrm() {
	var flag = 0;
	$("pwdreset-error").hide();
	$$(".frm-error").invoke('update','');
	$$(".text").invoke('removeClassName','field-error');
	if (!$F("p_pwd")) { $('p_pwd').addClassName('field-error'); $("p_pwd_error").update('The password cannot be blank.'); flag++; }
	if (flag) { return 0; }
	$("newpwd-button").hide();
	$("loading").show();

	new Ajax.Request('/', {
		method: 'get',
		parameters: {
			pwd_new: 1,
			auth_key: $F("auth_key"),
			reset_key: $F("reset_key"),
			p_cred: $F("p_cred"),
			p_pwd: $F("p_pwd")
		},
		onSuccess: function(tr) {
			if (!tr.responseText) { $("newpwd_ok").update("<div class='my-table'><div class='row info'>You have successfully changed your password. Go to <a href='/login"+($F("auth_key")?"?auth_key="+$F("auth_key"):"")+"'>Log in</a> page.</div></div>"); }
			else { $("loading").hide();	$("newpwd-button").show(); $("pwdreset-error").show(); $("pwdreset-error").down().update(tr.responseText); }
		}
	});
}

function resizeMap() {

	if(!$("map")) { return 0; };
	var myHeight = 0;
	if( typeof( window.innerWidth ) == 'number' ) { //Non-IE
		myHeight = window.innerHeight;
	}
	else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) { //IE 6+ in 'standards compliant mode'
		myHeight = document.documentElement.clientHeight;
	}
	else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) { //IE 4 compatible
		myHeight = document.body.clientHeight;
	}
	var h = myHeight - 185;
	document.getElementById("map").style.height = h+"px";
	document.getElementById("leftpanel").style.height = (h - 44)+"px";
	map.checkResize();
}

function loadMap() {

	var lat = 51.12;
	var lng = 16.35;
	map = new GMap2(document.getElementById("map"), {draggableCursor:'auto', draggingCursor:'move'});
	resizeMap();

	map.setCenter(new GLatLng(lat, lng), 2);
	map.addMapType(G_PHYSICAL_MAP);

	var hierarchy = new GMenuMapTypeControl();

	map.addControl(hierarchy);
	map.addControl(new GSmallMapControl());
	GEvent.addListener(map, "infowindowclose", function() {
		$$(".point-item").invoke('removeClassName','point-item-selected');
//		currentNoteId = 0;
	});

	GEvent.addListener(map, "load", function() {
		resizeMap();
	});

	loadPoints();
	loadLangList();
	checkQT();

	iconBase = new GIcon(G_DEFAULT_ICON);

	iconBase.shadow = "http://www.google.com/mapfiles/shadow50.png";
	iconBase.iconSize = new GSize(20, 34);
	iconBase.shadowSize = new GSize(37, 34);
	iconBase.iconAnchor = new GPoint(9, 34);
	iconBase.infoWindowAnchor = new GPoint(9, 40);

	iconDefault = new GIcon(iconBase);
	iconDefault.image = "/assets/i/icon_default.png";

	iconDisabled = new GIcon(iconBase);
	iconDisabled.image = "/assets/i/icon_disabled.png";
}

function loadPoints() {

	for (var i = 0; i<pointMarkers.length; i++) {
		map.removeOverlay(pointMarkers[i]);
	}

	var mapBounds =
		map.getBounds().getSouthWest().lat() + ":" +
		map.getBounds().getSouthWest().lng() + "," +
		map.getBounds().getNorthEast().lat() + ":" +
		map.getBounds().getNorthEast().lng();

//	showLoading();

	GDownloadUrl("/?load_points=1", function(data) {
		var xml = GXml.parse(data);
		markers = xml.documentElement.getElementsByTagName("marker");
		errors = xml.documentElement.getElementsByTagName("error");

		if (errors.length) {
			$("no-points").update(errors[0].getAttribute("text"));
			$("no-points").show();
		}
		else {
			for (var i = 0; i < markers.length; i++) {
				var id = markers[i].getAttribute("id");
				var lat = parseFloat(markers[i].getAttribute("lat"));
				var lng = parseFloat(markers[i].getAttribute("lng"));
				var title = markers[i].getAttribute("title");
				var txt = markers[i].getAttribute("txt");
				var lang = markers[i].getAttribute("lang");
				var sex = markers[i].getAttribute("sex");
				var agegroup = markers[i].getAttribute("agegroup");
				var created = markers[i].getAttribute("created");
				var active = markers[i].getAttribute("active");
				var latlng = new GLatLng(lat, lng);
				var marker = createMarker(id, latlng, title, txt, lang, sex, agegroup, created, active);
				map.addOverlay(marker);
				pointMarkers.push(marker);
				var sidebarEntry = createSidebarEntry(marker, id, title, created, active);
				$("points-list").insert(sidebarEntry);
			}
			$("points-list").show();
		}
	});

//	hideLoading();

}

function createMarker(id, latlng, title, txt, lang, sex, agegroup, created, active) {

	var note = Note(id, latlng, title, txt, lang, sex, agegroup, created, active);
	Notes.set(id, note);
	var marker = new GMarker(latlng, {draggable: false, icon:active == 1?iconDefault:iconDisabled});
	var html =
		'<div id="note-window">' +
		'</div>';

	var html2 =
		'<form><input type="button" class="note-button" value="Save position" /> <span class="small">or <a href="#" onclick="return false;">Cancel</a></span></form>';

	GEvent.addListener(marker, "dragstart", function() {
		$$(".point-item").invoke('removeClassName','point-item-selected');
		$("point-item-"+id).addClassName("point-item-selected");
	  map.closeInfoWindow();
	});

	GEvent.addListener(marker, "dragend", function() {
		marker.openInfoWindowHtml(html2, {maxWidth: 250});
	});

	GEvent.addListener(marker, "infowindowopen", onOpenIW);

	GEvent.addListener(marker, "click", function() {

		currentNoteId = id;
		currentMarker = marker;
		map.closeInfoWindow();
		if (coverageP) {
			map.removeOverlay(coverageP);
		}

//		map.setCenter(marker.getLatLng());
//		map.panDirection(0, 1);

		showCoverage(this.getLatLng());
		$$(".point-item").invoke('removeClassName','point-item-selected');
		$("point-item-"+id).addClassName("point-item-selected");
		marker.openInfoWindowHtml(html, {maxWidth: 250});

	});

	return marker;
}

function createSidebarEntry(marker, id, title, created, active) {
	var div = document.createElement('div');
	div.id = "point-item-" + id;
	div.className = "point-item" + (active == 0 ? " point-item-disabled" : "");
	var html = "<a href='#' onclick='return false;' id='point-item-title-"+id+"'>"+title+"</a><br/><span class='small gray'>"+id + " " + created+"</span>";
	div.innerHTML = html;
	GEvent.addDomListener(div.childNodes[0], 'click', function() {

		map.panTo(marker.getLatLng());
		GEvent.trigger(marker, 'click');
		$("point-item-"+id).addClassName("point-item-selected");
	});
	return div;
}

function zoomTo(latlng) {
	map.setZoom(17);
	map.panTo(latlng);
}

function showPlayer(id) {

	$("note-player").update("loading...");

	var player = '<object type="application/x-shockwave-flash" data="/assets/template/common/musicplayer.swf?&song_url=/?audio='+id+'&b_fgcolor=6699cc" width="17" height="17"><param name="movie" value="/assets/template/common/musicplayer.swf?&song_url=/audio='+id+'&b_fgcolor=6699cc" /><img src="/assets/i/transp.png" width="17" height="17" alt="" /></object>';
/*
	var player =
		"<object id='audio_note'>" +
		"<param name='src' value='/?audio="+id+"'>" +
		"<param name='autoplay' value='true'>" +
		"<param name='controller' value='true'>" +
		"<param name='width' value='80'>" +
		"<param name='height' value='16'>" +
		"<param name='showlogo' value='false'>" +
		"<embed name='audio_note' id='note-player-emb' src='/?audio="+id+"' controller='true' autoplay='true' type='audio/amr' height='16' width='80' showlogo='false' />" +
		"</object>";
*/
	$("note-player").update(player);
}

function checkQT() {
	if (navigator.plugins) {
		for (i=0; i < navigator.plugins.length; i++ ) {

			if (navigator.plugins[i].name.indexOf("QuickTime") >= 0) {
				haveqt = true;
			}
		}
	}

	if ((navigator.appVersion.indexOf("Mac") > 0)
	&& (navigator.appName.substring(0,9) == "Microsoft")
	&& (parseInt(navigator.appVersion) < 5) )
	{ haveqt = true; }
}
function onOpenIW() {

	var player = '<object type="application/x-shockwave-flash" data="/assets/template/common/musicplayer.swf?&song_url=/?audio='+currentNoteId+'&b_fgcolor=6699cc" width="17" height="17"><param name="movie" value="/assets/template/common/musicplayer.swf?&song_url=/audio='+currentNoteId+'&b_fgcolor=6699cc" /><img src="/assets/i/transp.png" width="17" height="17" alt="" /></object>';

/*
	var player = haveqt ?
		"<object id='audio_note'>" +
		"<param name='src' value='/?audio="+currentNoteId+"'>" +
		"<param name='autoplay' value='true'>" +
		"<param name='controller' value='true'>" +
		"<param name='width' value='140'>" +
		"<param name='height' value='16'>" +
		"<param name='showlogo' value='false'>" +
		"<embed name='audio_note' id='note-player-emb' src='/?audio="+currentNoteId+"' controller='true' autoplay='false' type='audio/amr' height='16' width='140' showlogo='false' />" +
		"</object>"
		:
		"<span class='small'><span style='color: #cc0000;'>Sorry, QuickTime is required to play audio.</span> <a href='#' onclick='alert(\"Please install QuickTime Player from http://apple.com/quicktime\"); return false;'>What to do?</a></span>";
*/

	var textSlice = Notes.get(currentNoteId).txt;

	$('note-window').update(

	'<div class="small gray">' + Notes.get(currentNoteId).created + ' &nbsp; <a href="#" onclick="zoomTo('+Notes.get(currentNoteId).latlng+'); return false;">Zoom in</a>' + '</div>' +
	'<div class="v-gap"></div>' +

	'<div class="note-title-container"><span title="Click to edit the title." id="note-title">' + Notes.get(currentNoteId).title + '</span></div>' +

	'<div class="v-gap"></div>' +

	'<div class="note-lang-container"><div>Language:&nbsp;</div><div><span title="Click to edit the language." class="note-lang" id="note-lang">'+Langs.get(Notes.get(currentNoteId).lang)+'</span></div><br clear="all" />'+
	// 'Sex: ' + Notes.get(currentNoteId).sex + '; Agegroup: '+Notes.get(currentNoteId).agegroup
	'</div>' +

	'<div class="v-gap"></div>' +

	'<div class="qtplayer" id="note-player">'+player+'</div>' +

// <a href="#" onclick="showPlayer(' + currentNoteId + '); return false;"><img src="/assets/i/qt_player.gif" width="80" height="16" border="0" title="Show audio player" /></a>

	'<div class="v-gap"></div>' +

	'<div id="note-text-container" class="note-text-container"><span id="note-text" class="note-text" title="Click to edit the text note.">' + (textSlice.length > 0 ? textSlice : createNewNote) + '</span></div>' +
	'<div class="v-gap"></div>' +

	'<div id="note-actions-container"><div id="note-actions"><span class="small gray">' + currentNoteId + '</span> &nbsp; &nbsp; <span id="note-status-link">' +
	(Notes.get(currentNoteId).active == 1 ? disableNoteLink : enableNoteLink) + '</span> &nbsp; or &nbsp; <a href="#" onclick="deleteNote(); return false;">Delete it</a></div></div>'

	);

	if(textSlice.length > 210) { $('note-text-container').addClassName('note-text-container-long'); }

	$("note-title").observe('mouseover', function (event) {
		this.addClassName('editable');
	});

	$("note-title").observe('mouseout', function (event) {
		this.removeClassName('editable');
	});

	$("note-title").observe('click', function (event) {

		this.up().addClassName('editable-container');

		this.up().insert(
			'<div id="note-title-edit"><form id="note-title-form">' +
			'<input type="text" class="note-input-text" id="note-title-text" value="'+this.innerText+'" /><br />' +
			'<input type="button" value="Save" class="note-button" onclick="saveNoteTitle(); return false;" /> &nbsp; <a href="#" class="small" onclick="cancelNoteTitle(); return false;">Cancel</a></form>' +
			'</div>'
		);
		this.hide();
		updateIW();
		$('note-title-text').focus();
	});

	$("note-lang").observe('mouseover', function (event) {
		this.addClassName('editable');
	});

	$("note-lang").observe('mouseout', function (event) {
		this.removeClassName('editable');
	});

	$("note-lang").observe('click', function (event) {

		this.up().up().addClassName('editable-container');

		this.up().insert(
			'<div id="note-lang-edit"><form id="note-lang-form">' +
			'<select class="select-short" id="note-lang-list">' +
			langList(Notes.get(currentNoteId).lang) +
			'</select>' +
			'<input type="button" value="Save" class="note-button" onclick="saveNoteLang(); return false;" /> &nbsp; <a href="#" class="small" onclick="cancelNoteLang(); return false;">Cancel</a></form>' +
			'<div style="clear: both"></div>' +
			'</div>'
		);

		this.hide();
		updateIW();
	});

	$("note-text").observe('mouseover', function (event) {
		this.addClassName('editable');
	});

	$("note-text").observe('mouseout', function (event) {
		this.removeClassName('editable');
	});

	$("note-text").observe('click', function (event) {
		$('note-text-container').addClassName('editable-container');
		$('note-text-container').removeClassName('note-text-container-long');
		$('note-text-container').insert(
			'<div id="note-text-edit"><form id="note-text-form">' +

			'<textarea class="note-textarea" id="note-textarea" onKeyDown="return checkCharsLeft()"  onKeyUp="updateCharsLeftNotice()">'+Notes.get(currentNoteId).txt+'</textarea>' +

			'<div style="float: left;"><input type="button" value="Save" class="note-button" onclick="saveNoteTxt(); return false;" /> &nbsp; <a href="#" class="small" onclick="cancelNoteTxt(); return false;">Cancel</a></div><div style="line-height: 24px; float: right" class="small"><span id="note-chars-notice">'+(maxNoteTextLength-Notes.get(currentNoteId).txt.length)+' characters</span> left</div><div style="clear: both"></div></form>' +
			'</div>'
		);

		this.hide();
		updateIW();
	});

	updateIW();
}

function updateIW() {
	var noteWindow = $("note-window");
	map.updateInfoWindow([new GInfoWindowTab("label", noteWindow)]);
}

function changeNoteStatusTo(newStatus) {
	$('note-actions-container').insert('<div class="loading-small" id="actions-loading">&nbsp;</div>');
	$('note-actions').hide();
	new Ajax.Request("/", {
		parameters: {
			change_note_status: 1,
			new_status: newStatus,
			note_id: currentNoteId
		},
		onSuccess: function (tr) {
			$("actions-loading").remove();
			$('note-actions').show();
			Notes.get(currentNoteId).active = !Notes.get(currentNoteId).active;
			if (newStatus) {
				$("note-status-link").update(disableNoteLink);
				currentMarker.setImage('/assets/i/icon_default.png');
				$('point-item-'+currentNoteId).removeClassName('point-item-disabled');
			}
			else {
				$("note-status-link").update(enableNoteLink);
				currentMarker.setImage('/assets/i/icon_disabled.png');
				$('point-item-'+currentNoteId).addClassName('point-item-disabled');
			}
		}
	});
}

function deleteNote() {
	if (!confirm("Sure you want to delete this note? There is NO undo!")) {
		return 0;
	}
	$('note-actions-container').insert('<div class="loading-small" id="actions-loading">&nbsp;</div>');
	$('note-actions').hide();
	new Ajax.Request("/", {
		parameters: {
			delete_note: 1,
			note_id: currentNoteId
		},
		onSuccess: function (tr) {
			map.removeOverlay(currentMarker);
			map.removeOverlay(coverageP);
			$('point-item-'+currentNoteId).remove();
			currentNoteId = null;
		}
	});
}

function saveNoteTitle() {

	if (!$F('note-title-text')) {
		alert('Note title cannot be blank.');
		$('note-title-text').focus();
		return 0;
	}

	$("note-title").up().removeClassName('editable-container');
	$('note-title-edit').hide();
	$('note-title-edit').up().insert('<div style="margin-top: 5px;" class="loading-small" id="note-title-loading"></div>');
	updateIW();

	new Ajax.Request("/", {
		parameters: {
			save_note_title: 1,
			note_id: currentNoteId,
			note_title: $F('note-title-text')
		},
		onSuccess: function (tr) {
			$("note-title").innerHTML = $F('note-title-text');
			$('point-item-title-'+currentNoteId).update($F('note-title-text'));
			Notes.get(currentNoteId).title = $F('note-title-text');
			$('note-title-edit').remove();
			$('note-title-loading').remove();

			$("note-title").show();
			updateIW();
		}
	});
}

function cancelNoteTitle() {
	$('note-title-edit').remove();
	$("note-title").up().removeClassName('editable-container');
	$("note-title").show();
	updateIW();
}

function saveNoteLang() {
	$("note-lang").up().up().removeClassName('editable-container');
	$('note-lang-edit').hide();
	$('note-lang-edit').up().insert('<div style="margin-top: 8px;" class="loading-small" id="note-lang-loading"></div>');

	new Ajax.Request("/", {
		parameters: {
			save_note_lang: 1,
			note_id: currentNoteId,
			note_lang: $F('note-lang-list')
		},
		onSuccess: function (tr) {
			$("note-lang").innerHTML = Langs.get($F('note-lang-list'));
			Notes.get(currentNoteId).lang = $F('note-lang-list');
			$('note-lang-edit').remove();
			$('note-lang-loading').remove();
			$("note-lang").show();
			updateIW();
		}
	});
}

function cancelNoteLang() {
	$('note-lang-edit').remove();
	$("note-lang").up().up().removeClassName('editable-container');
	$("note-lang").show();
	updateIW();
}

function saveNoteTxt() {
	$("note-text").up().removeClassName('editable-container');
	$('note-text-edit').hide();
	$('note-text-edit').up().insert('<div style="margin-top: 8px;" class="loading-small" id="note-text-loading"></div>');
	updateIW();

	new Ajax.Request("/", {
		parameters: {
			save_note_text: 1,
			note_id: currentNoteId,
			note_text: $F('note-textarea')
		},
		onSuccess: function (tr) {
			$("note-text").innerHTML = $F('note-textarea');
			Notes.get(currentNoteId).txt = $F('note-textarea');
			if (!$F('note-textarea').length) {
				$("note-text").update(createNewNote);
			}
			if ($F('note-textarea').length > 210) { $('note-text-container').addClassName('note-text-container-long'); }
			$('note-text-edit').remove();
			$('note-text-loading').remove();
			$("note-text-container").removeClassName('editable-container');
			$("note-text").show();
			updateIW();
		}
	});
}

function cancelNoteTxt() {
	$('note-text-edit').remove();
	$("note-text").up().removeClassName('editable-container');
	if (Notes.get(currentNoteId).txt.length > 210) { $('note-text-container').addClassName('note-text-container-long'); }
	$("note-text").show();
	updateIW();
}

function checkCharsLeft() {
	return true;
	var evt = (evt) ? event : (window.event) ? event : null;

	var keyCode = event.keyCode ? event.keyCode :
               event.charCode ? event.charCode :
               event.which ? event.which : void 0;
	var noteTextLength = $F("note-textarea").length;
	return (maxNoteTextLength - noteTextLength < 1) && keyCode > 46 ? false : true;
}

function updateCharsLeftNotice() {
	var noteTextLength = $F("note-textarea").length;
	var charsLeft = maxNoteTextLength - noteTextLength;
	$('note-chars-notice').update(charsLeft == 1 ? '1 character' : charsLeft + ' characters');
}

function showCoverage(latlng) {
	var radius = 0.02; // 50 meters
	var lat = latlng.lat();
	var lng = latlng.lng();
	var d2r = Math.PI/180;
	var r2d = 180/Math.PI;
	var Clat = radius * 0.014483;  // Convert statute miles into degrees latitude
	var Clng = Clat/Math.cos(lat*d2r);
	var Cpoints = [];
	for (var i=0; i < 33; i++) {
		var theta = Math.PI * (i/16);
		Cy = lat*1 + (Clat * Math.sin(theta));
		Cx = lng*1 + (Clng * Math.cos(theta));
		var P = new GPoint(Cx,Cy);
		Cpoints.push(P);
	}

	coverageP = new GPolygon(Cpoints, 'red', 1, .5, 'red', .2);
	map.addOverlay(coverageP);
}

/* SUBSCRIPTION		*/

function subscriptionOnLoad() {
//	$$(".channels-chbox").invoke('observe', 'click', onChBoxClick);
	$$(".stream-button").invoke('observe', 'click', onSubscrClick);
	$$(".stream-button2").invoke('observe', 'click', onSubscrClick2);

//	$$(".channels-radio").invoke('observe', 'mousedown', onRadioClick);
}

function onSubscrClick2() {

	var el = this;

	var channel = this.id;
	var chid = "channel-" + channel;

	el.hide();

	$('stream-icon-'+channel).removeClassName("tick");
	$('stream-icon-'+channel).removeClassName("empty");
	$('stream-icon-'+channel).addClassName("loading-small");

	new Ajax.Request('/', {
		parameters: {
			toggle_subscribe: 1,
			channel: channel,
			action: "0"
		},
		onSuccess: function (tr) {

			if (tr.responseText) {
				alert(tr.responseText);
			}
			else {
				new Effect.BlindUp($('my-'+chid).up().up());
			}
		}
	});
}

function onSubscrClick() {

	var el = this;

	var channel = this.id;
	var chid = "channel-" + channel;
	var action = this.alt;

	el.hide();
	$('stream-icon-'+channel).removeClassName("tick");
	$('stream-icon-'+channel).removeClassName("empty");
	$('stream-icon-'+channel).addClassName("loading-small");

	new Ajax.Request('/', {
		parameters: {
			toggle_subscribe: 1,
			channel: channel,
			action: action
		},
		onSuccess: function (tr) {

			if (tr.responseText) {
				alert(tr.responseText);
			}
			else {
				action == "1" ? $('my-'+chid).down().addClassName('strong') : $('my-'+chid).down().removeClassName('strong');
				action == "1" ? el.setValue('Unsubscribe') : el.setValue('Subscribe');

				$('stream-icon-'+channel).removeClassName("loading-small");
				action == "1" ? $('stream-icon-'+channel).addClassName("tick") : $('stream-icon-'+channel).addClassName("empty");

				el.alt = action == "1" ? "0" : "1";
			}

			el.show();
			el.next().remove();
		}
	});
}

function onChBoxClick() {
	var channel = this.alt;
	var chid = "channel-" + channel;
	var action = this.checked ? 1 : 0;
	$('div-'+chid).down().hide();
	$('div-'+chid).insert("<div class='loading-small'></div>");
	new Ajax.Request('/', {
		parameters: {
			toggle_subscribe: 1,
			channel: channel,
			action: action
		},
		onSuccess: function (tr) {

			if (tr.responseText) {
				alert(tr.responseText);
				$("channel-"+channel).checked = !$("channel-"+channel).checked;
			}
			else {
				action ? $('my-'+chid).down().addClassName('strong') : $('my-'+chid).down().removeClassName('strong');
//				action ? $('ch-comments-'+channel).removeClassName('hidden-control') : $('ch-comments-'+channel).addClassName('hidden-control');
//				if (!action) { $('ch-comments-'+channel).checked = false };
			}

			$('div-'+chid).down().next().remove();
			$('div-'+chid).down().show();
		}
	});
}

function onRadioClick() {
	var action = !this.checked ? 1 : 0;

	if (action == 0) { return 0; }

	var channel = this.alt;
	var chid = "channel-" + channel;
	$('div-'+chid).down().hide();
	$('div-'+chid).insert("<div class='loading-small'></div>");
	new Ajax.Request('/', {
		parameters: {
			toggle_comments: 1,
			channel: channel
		},
		onSuccess: function (tr) {

			if (action) { $('ch-comments-'+channel).checked = true };

			$('div-'+chid).down().next().remove();
			$('div-'+chid).down().show();
		}
	});
}

/* /SUBSCRIPTION	*/

/*	PAYMENT		*/

function submitStreamKey() {
	var flag = 0;
	$$(".frm-error").invoke('update','');
	$$(".text").invoke('removeClassName','field-error');
	if (!$F("stream-key")) { $('stream-key').addClassName('field-error'); $("stream-key-error2").update('Please provide a stream key.'); flag++; }
	if (flag) { return 0; }
	$("stream-key-frm").submit();
}

/*	/PAYMENT	*/

/* LINK ACCOUNTS */

function showLinkNA() {
	$('link-na-error').hide();
	$('link-na-error').down().update('');
	$('link-na-link').hide();
	Effect.BlindDown($('new-account'), {duration: 0.5});
}

function hideLinkNA() {
	Effect.BlindUp($('new-account'), {duration: 0.5});
	Effect.BlindDown($('link-na-link'), {duration: 0, queue: 'end'});
}

function linkNewAccount() {

	$('li-actions').hide();
	$('li-actions').up().insert('<div class="loading-small" id="li-loading"></div>');

	new Ajax.Request('/', {
		parameters: {
			link_new_account: 1,
			nickname: $F('li_nick'),
			password: $F('li_pwd')
		},
		onSuccess: function (tr) {
			$('li-loading').remove();
			if (tr.responseText) {
				$('li-actions').show();
				$('link-na-error').down().update(tr.responseText);
				Effect.BlindDown($('link-na-error'), {duration: 0.5});
			}
			else {
				window.location.replace('?al=1');
			}
		}
	});
}

function linkAccount(id) {
	$('link-link-'+id).hide();
	$('link-link-'+id).up().insert('<img src="/assets/i/loading.gif" align="absmiddle" style="margin-top:-4px" id="link-loading-'+id+'" />');
	new Ajax.Request('/', {
		parameters: {
			link_account: 1,
			account_id: id
		},
		onSuccess: function (tr) {
			$('link-loading-'+id).remove();
			if (!tr.responseText) {
				$('link-link-'+id).update('<i>Successfully linked</i>');
			}
			else {
				alert('Error: '+tr.responseText);
			}
			$('link-link-'+id).show();
		}
	});
}

function unlinkAccount(id) {
	$('unlink-link-'+id).hide();
	$('unlink-link-'+id).up().insert('<img src="/assets/i/loading.gif" align="absmiddle" style="margin-top:-4px" id="unlink-loading-'+id+'" />');
	new Ajax.Request('/', {
		parameters: {
			unlink_account: 1,
			account_id: id
		},
		onSuccess: function (tr) {
			$('unlink-loading-'+id).remove();
			if (!tr.responseText) {
				Effect.BlindUp($('linked-account-'+id), {duration: 0.5});
			}
			else {
				$('unlink-link-'+id).show();
				alert('Error: '+tr.responseText);
			}
		}
	});
}

/* /LINK ACCOUNTS */

var st;
function hideInfo(id, mode) {
	if (mode) {
		Effect.BlindUp($(id), {duration: 0.5});
		clearTimeout(st);
		return 0;
	}
	st = setTimeout("hideInfo('"+id+"', 1)", 2000);
}
