/* IE6 flicker fix
-------------------------------------------------- */
try {
	document.execCommand("BackgroundImageCache", false, true);
} catch(err) {};
/* JS
-------------------------------------------------- */
document.getElementsByTagName("html")[0].className = "js";

// ========= MODAL DIALOG ========= //
var openModalContent = null;

function showModal(target){
	if ($("#overlay").length == 0) {
		$("#wrap").after("<div id='overlay'></div>");
	}
	if (openModalContent != null){
		$("#" + openModalContent).hide();
	}
	if ($("div#modalwrap").parent().get(0).tagName.toLowerCase() != 'body') {
		$("div#modalwrap").remove().appendTo(document.body);
	}
	openModalContent = target;

	$("#overlay").fadeIn(150);
	$("#modalwrap").fadeIn(150);
	$("#" + target).fadeIn(150);

	if (typeof document.body.style.maxHeight === "undefined") {//if IE 6
		$("html").css("overflow","hidden");
	} else {
		$("#modalwrap").css("margin-top","-" + $("#modalwrap").height() / 2 + "px");
	}

	$("#overlay").bgiframe({ src: "javascript:'<html></html>';" });

	modalEscape();
	return false;
};
function hideModal(){
	if (openModalContent != null){
		$("#" + openModalContent).fadeOut(150);
	}
	if (typeof document.body.style.maxHeight == "undefined") {//if IE 6
		$("html").css("overflow","");
	}
	$("#overlay").fadeOut(150);
	$("#modalwrap").fadeOut(150);

	return false;
};
function modalEscape() {
	$(document).keyup(function(event) {
		if (event.keyCode == 27) hideModal();
	});
};
// ====== END OF MODAL DIALOG ===== //
// ========== PAGE LOGIC ========== //
var toggleH2boxes = {
	init : function(){
		$("h2.toggle a").click(this.clickIt);
	},
	clickIt : function(){
		$(this).parents("h2").toggleClass("toggle-open");
		$(this).parents("h2").nextAll("div.toggle-wrap:first").slideToggle("fast");
		return false;
	}
};
function headingHover() {
	$("h2.toggle a").hover(
		function(){
			$(this).parents("h2").css("border-color","#00751e");
		},
		function(){
			$(this).parents("h2").css("border-color","#ccc");
		}
	);
};
/* data tables */
function dataHover() {
	$("table.data tbody:not(.form) tr").hover(
		function(){
			$(this).addClass("hover");
		},
		function(){
			$(this).removeClass("hover");
		}
	);
};
var toggleSubrow = {
	init : function(){
		$("table.data tbody a.toggle-subrow").click(this.clickIt);
	},
	clickIt : function(){
		if($(this).parents("tr").next("tr.subrow").css("display") == "none") {
			$(this).parents("tr").addClass("toggler");
			$(this).parents("tr").next("tr.subrow").css("display","");
		} else {
			$(this).parents("tr").removeClass("toggler");
			$(this).parents("tr").removeClass("marked");
			$(this).parents("tr").next("tr.subrow").css("display","none");
		}
		return false;
	}
};
function fixIEoverflow() {
	if (!/*@cc_on!@*/0) return;

	var all = document.getElementsByTagName('*'), i = all.length;
	while (i--) {
		// adding a class match just to show the difference
		if (all[i].className.match(/scroll/) && all[i].scrollWidth > all[i].offsetWidth) {
			all[i].style['overflowY'] = 'hidden';
			all[i].style['paddingBottom'] = '17px';
		}
	}
};
var headingSort = {
	init : function(){
		$("table.data thead th.sort a").click(this.clickIt);
	},
	clickIt : function(){
		if($(this).parent().is(".ascending")) {
			$(this).parents("thead").find("th").removeClass("ascending");
			$(this).parents("thead").find("th").removeClass("descending");
			$(this).parent().removeClass("ascending");
			$(this).parent().addClass("descending");
		}
		else if ($(this).parent().is(".descending")) {
			$(this).parents("thead").find("th").removeClass("ascending");
			$(this).parents("thead").find("th").removeClass("descending");
			$(this).parent().removeClass("descending");
			$(this).parent().addClass("ascending");
		}
		else {
			$(this).parents("thead").find("th").removeClass("ascending");
			$(this).parents("thead").find("th").removeClass("descending");
			$(this).parent().addClass("ascending");
		}
		return false;
	}
};
/* radio, checkbox */
var markRows = {
	init : function(){
		$("table.data tbody:not(.form) tr").dblclick(this.clickIt);
	},
	clickIt : function(){
		$(this).toggleClass("marked");
	}
};
var markAllCheck = {
	init : function(){
		$("div.sub-action a.mark-all").click(this.clickIt);
	},
	clickIt : function(){
		$(this).parents("div.sub-action").nextAll("table.data:first").find("tbody tr td.check input:checkbox").attr("checked","checked");
		$(this).parents("div.sub-action").nextAll("table.data:first").find("tbody tr td.check input:checked").parents("tr").addClass("checked");
		return false;
	}
};
var markNoneCheck = {
	init : function(){
		$("div.sub-action a.mark-none").click(this.clickIt);
	},
	clickIt : function(){
		$(this).parents("div.sub-action").nextAll("table.data:first").find("tbody tr td.check input:checkbox").removeAttr("checked");
		$(this).parents("div.sub-action").nextAll("table.data:first").find("tbody tr td.check input").not(":checked").parents("tr").removeClass("checked");
		return false;
	}
};
var setCheckbox = {
	init : function(){
		$("table.data tr td.check input:checkbox").click(this.clickIt);
	},
	clickIt : function(){
		if($(this).is(":checked")) {
			$(this).parents("tr").addClass("checked");
		} else {
			$(this).parents("tr").removeClass("checked");
		}
	}
};
var setRadio = {
	init : function(){
		$("table.data tr td.check input:radio").click(this.clickIt);
	},
	clickIt : function(){
		$(this).parents("table").find("tr.checked").removeClass("checked");
		$(this).parents("tr").addClass("checked");
	}
};
var showComments = {
	init : function(){
		$("p.show-comments").children("a").click(this.clickIt);
	},
	clickIt : function(){
		var link = $(this).parent();
		var elms = link.prev().children(".hidden-comment");

		link.css("display","none");
		elms.slideDown("fast");
		return false;
	}
};
function controlCheckbox() {
	$("table.data tbody tr td.check input:checkbox:checked").parents("tr").addClass("checked");
};
function controlRadio() {
	$("table.data tbody tr td.check input:radio:checked").parents("tr").addClass("checked");
};
var CustomMap = {
	Data: {
		zooming: [7, 10, 11, 12],
		zoomer: 10,
		readOnly: true,
		showMarker: true,
		smallMap: true
	},
	init: function() {
		var target = $('#map_canvas');
		target = target.length == 0 ? null: target.get(0);
		if (target && GBrowserIsCompatible()) {
			this.initMap(target);
			$(window).unload(GUnload);
		}
	},
	initMap: function(target) {
		var me = CustomMap, data = CustomMap.Data;
		if (!data.markerOpts) data.markerOpts = {};
		if (!data.markerOpts.draggable) data.markerOpts.draggable = !data.readOnly;

		data.map = new GMap2(target);
		if (data.smallMap) {
			data.map.addControl(new GSmallMapControl());
		} else {
			data.map.addControl(new GLargeMapControl());
			data.map.addControl(new GMapTypeControl());
		}
		me.center();
		me.addMarkers();

		if (!data.readOnly || !data.smallMap) {
			data.geocoder = new GClientGeocoder();
			GEvent.addListener(data.map, 'click', me.onMapClick);
		} else if (data.clickTargetHref) {
			GEvent.addListener(data.map, 'click', function() {
				window.location = CustomMap.Data.clickTargetHref;
			});
		}
	},
	/* Click on the Map event listener function */
	onMapClick: function(marker, pnt) {
		var me = CustomMap, data = CustomMap.Data;
		if (!data.readOnly) {
			if (!data.mapMarker) { // No markers on map, create and add a new marker.
				data.mapMarker = me.addMarkers(pnt.lat(), pnt.lng(), true);
			}
			if (!marker) { // No marker was clicked. Move our marker to the clicked point.
				me.updateMarkerPos(pnt, data.mapMarker);
			}
		} else if (marker && marker.target) {
			var t = marker.target;

			var keywords = $('<div></div>');
			var keywordsLength = t.keywords.length;
			$.each(t.keywords, function(i) {
				if (i < 2) {
					keywords.append($('<a href="../deedbank"></a>').attr('onclick', 'return searchByKeyword('+this.id+",'../deedbank')").text(this.name));
					if (i == 1 && i < keywordsLength - 1) {
						keywords.append('&hellip;<br/>');
					} else {
						keywords.append(i < keywordsLength - 1 ? '; ' : '<br/>');
					}
				}
			});

			var label = CustomMap.Data.label;
			var node = $('<div></div>');
			node.append($('<p style="font: 16px bold; margin-top: 0px;"></p>')
					.append($('<img src="/minueesti/styles/gfx/ico_status_' + t.statusNumber + '.png"/>').attr('alt', t.status).attr('title', t.status))
					.append(' ').append($('<strong></strong>')
							.append($('<a style="text-decoration: underline"></a>').attr('href', 'item?i=' + t.id).attr('target', '_blank')
									.append(t.name))));
			node.append($('<p></p>')
					.append(label.info).append($('<strong></strong>').text(t.description)).append('<br/>')
					.append(label.members).append($('<strong></strong>').text(t.memberCount)).append('<br/>')
					.append(label.comments).append($('<strong></strong>').text(t.commentCount)).append('<br/>')
					.append(label.keywords).append(keywords.html())
					.append(label.lastModified).append($('<strong></strong>').text(t.lastModified)));
			data.map.openInfoWindow(marker.getLatLng(), node.get(0));
		}
	},
	/* Update position data in hidden form field */
	updateMarkerPos: function(pnt, marker) {
		if (!marker) marker = CustomMap.Data.mapMarker;
		if (pnt) marker.setPoint(pnt);
		CustomMap.storePos(pnt);
	},
	/* find address coordinates and show it on the map */
	showAddress: function(address) {
		var me = CustomMap, data = CustomMap.Data;
		var zoomer = me.calcZoom(address);
		address = me.getGoogleFriendlyAddress(address);
		data.showMarker = true;
		data.geocoder.getLatLng(address, function(point) {
			if (!point) {
				window.alert(address + " ei leitud!");
			} else {
				me.center(point.lat(), point.lng(), zoomer);
				me.onMapClick(null, point);
			}
		});
	},
	/* remove bad words */
	getGoogleFriendlyAddress: function(addr){
		var badWords = [' küla',' vald', ' linn', ' alevik'];
		for (var k = 0 ; k <= badWords.length ; k++){
			addr = addr.replace(badWords[k], '');
		}
		return addr;
	},
	/* calculate magnification for specific address */
	calcZoom: function(address){
		var parts = address.split(",");
		return CustomMap.Data.zooming[parts.length];
	},
	center: function(lat, lng, zoom) {
		var me = CustomMap, data = CustomMap.Data;
		if (data.posFields == null) data.posFields = $('#latitude, #longitude').length > 0;
		if (data.pos == null) {
			var latVal = $('#latitude').val();
			var lngVal = $('#longitude').val();
			data.posFieldsData = data.posFields && latVal.length > 0 && lngVal.length > 0;
			if (data.posFieldsData) {
				data.pos = { lat: parseFloat(latVal), lng: parseFloat(lngVal), zoom: 9 };
			} else {
				data.pos = { lat: 58.745407, lng: 25.378418, zoom: 7 };
			}
		}

		if (arguments.length > 0) {
			if (lat) data.pos.lat = lat;
			if (lng) data.pos.lng = lng;
			if (zoom) data.pos.zoom = zoom;
			me.storePos(data.pos);
		}

		if (data.map) {
			data.map.setCenter(new GLatLng(data.pos.lat, data.pos.lng), data.pos.zoom);
		}
		return data.pos;
	},
	getCenterPoint: function() {
		var me = CustomMap;
		return me.convertToPoint(me.center());
	},
	storePos: function(lat, lng) {
		var pnt = CustomMap.convertToPoint(lat, lng);
		if (CustomMap.Data.posFields) {
			$('#latitude').val(pnt.lat());
			$('#longitude').val(pnt.lng());
		}
	},
	addMarkers: function(lat, lng, showMarker) {
		var me = CustomMap, data = CustomMap.Data;
		if (data.markers) {
			me.center(null, null, data.smallMap ? 6 : 7);
			data.readOnly = true;

			var baseIcon = new GIcon();
			baseIcon.iconAnchor = new GPoint(8, 8);
			var icon1 = new GIcon(baseIcon, '/minueesti/styles/gfx/ico_status_1.png');
			var icon2 = new GIcon(baseIcon, '/minueesti/styles/gfx/ico_status_2.png');
			var icon3 = new GIcon(baseIcon, '/minueesti/styles/gfx/ico_status_3.png');

			for (var i = 0; i < data.markers.length; i++) {
				var m = data.markers[i]
				if (m.longitude && m.latitude) {
					data.markerTitle = m.name;
					data.markerOpts.icon = m.statusNumber == 1 ? icon1 : (m.statusNumber == 2 ? icon2 : icon3);
					var marker = me.addMarker(m.latitude, m.longitude);
					marker.target = m;
				}
			}
		} else if (data.posFieldsData || !data.posFields && data.showMarker || showMarker) {
			var pnt = me.convertToPoint(lat, lng);
			data.mapMarker = me.addMarker(pnt);
		}
		return data.mapMarker;
	},
	addMarker: function(lat, lng, imgUrl) {
		var me = CustomMap, data = me.Data;
		var pnt = me.convertToPoint(lat, lng);
		var marker = new GMarker(pnt, data.markerOpts);
		data.map.addOverlay(marker);
		if (!data.readOnly) {
			GEvent.addListener(marker, 'dragend', me.updateMarkerPos);
		}
		return marker;
	},
	convertToPoint: function(lat, lng) {
		if (lat == null && lng == null) {
			return CustomMap.getCenterPoint();
		} else if ($.isFunction(lat.lat) && lng == null) {
			return lat;
		} else if (lat.lat && lat.lng && lng == null) {
			lng = lat.lng;
			lat = lat.lat;
		}
		return new GLatLng(lat, lng);
	}
};
// ======= END OF PAGE LOGIC ====== //
// ========= INITIALIZATION ======= //
$(document).ready(function(){
	markRows.init();
	markAllCheck.init();
	markNoneCheck.init();
	controlRadio();
	controlCheckbox();
	setCheckbox.init();
	setRadio.init();
	headingSort.init();
	showComments.init();

	$("table.data tr.subrow").css("display","none");
	toggleSubrow.init();

	headingHover();
	toggleH2boxes.init();
	$("div.toggle-wrap").css("display","none");

	fixIEoverflow();

	/* IE */
	if($.browser.msie){
	}

	/* IE6 */
	if($.browser.msie && ($.browser.version < 7) ){
		dataHover();
	}

	if ($.datepicker) {
		$("input.date").datepicker();
		$("input.date-range").datepicker({ rangeSelect: true });
	}
	window.setTimeout(function() { CustomMap.init(); });
});
// ===== END OF INITIALIZATION ==== //
// ======= CUSTOM FUNCTIONS ======= //
function updateTT(value) {
	if (value) {
		$.getJSON('./thinktanks.json?c=' + value,
			function(data, status) {
				if (status === 'success') {
					var option = $('.thinktank:first"');
					option.html(option.children('.label:first').remove());

					var options = [];
					$.each(data, function(i, item) {
						options.push('<option value="' + item.id + '">' + item.name + '</option>');
					});
					option.append(options.join(''));

					option = null;
				}
		});
	} else {
		$('.thinktank:first"').html($('.thinktank:first" .label:first').remove());
	}
};
function addRows(count, labelName, labelEmail) {
	count = parseInt(count);
	var i = $('.nr').length - 3;
	var html = [];
	while (++i < count) {
		html.push('<div class="form-row clear"><p class="nr');
		if (i == 0) {
			html.push(' nr-first');
		}
		html.push('">');
		html.push(i + 1);
		html.push('</p><p class="form">');
		if (i == 0) {
			html.push('<span><label for="participants0.name">');
			html.push(labelName);
			html.push(':</label></span>');
		}
		html.push('<input id="participants');
		html.push(i);
		html.push('.name" name="participants[');
		html.push(i);
		html.push('].name" type="text" class="text" value=""/></p><p class="form">');
		if (i == 0) {
			html.push('<span><label for="participants0.email">');
			html.push(labelEmail);
			html.push(':</label></span>');
		}
		html.push('<input id="participants');
		html.push(i);
		html.push('.email" name="participants[');
		html.push(i);
		html.push('].email" type="text" class="text" value=""/></p></div>');
	}
	$('div.form-row:last').after(html.join(''));
	i++;
	while (--i > count) {
		$('div.form-row:last').remove();
	}
}
function doSubmit() {
	$('form:first').submit();
	return false;
}
function page(number) {
	$('form:first input:hidden[name="page"]').val(number);
	return doSubmit();
}
function pages(status) {
	$('form:first input:hidden[name="pages"]').val(status);
	return doSubmit();
}
function tab(number) {
	$('form:first input:hidden[name="tabNo"]').val(number);
	return page(1);
}
function keyword(data) {
	resetHiddenElements();
	$('#keywordId').val(data);
	return page(1);
}
function area(data) {
	resetHiddenElements();
	$('#areaCode').val(data);
	return page(1);
}
function thinktank(data) {
	resetHiddenElements();
	$('#fixedThinkTankId').val(data);
	return page(1);
}
function resetHiddenElements() {
	$('#keywordId, #areaCode, #fixedThinkTankId').val('');
}
function searchByKeyword(id,url) {
	return searchBy(url, { keywordId: id});
}
function searchByUser(id,url) {
	return searchBy(url, { userId: id });
}
function searchByArea(code,url) {
	if (url == null) url = '../ideabank';
	return searchBy(url, { areaCode: code });
}
function searchByThinktank(id,url) {
	if (url == null) url = '../ideabank';
	return searchBy(url, { thinkTankId: id });
}
function searchBy(url, params) {
	if (url == null) url = '../deedbank';
	var form = $('<form id="searchForm" method="post"></form>').attr('action', url);
	$.each(params, function(name, value) {
		form.append($('<input type="text" style="display:none"/>').attr('name', name).val(value));
	});
	$(document.body).append(form);
	form[0].submit();
	form = null;
	return false;
}
function openCommentForm(source, id) {
	var parent = $(source).hide().closest('li');
	$.get('../comment', { id: id }, function(data) {
		var form = $(data).hide();
		parent.append('<hr/>').append(form);
		var prefix = Math.ceil(Math.random() * 1000);
		$(form).find('form').attr('id', prefix).find('input, label').each(function(){
			if (this.htmlFor) {
				this.htmlFor = prefix + this.htmlFor;
			} else {
				this.id = prefix + this.id
			}
		});
		window.scrollTo(0, $(parent).offset().top - 30);
		$(form).slideDown();
		form = null;
		parent = null;
	});
}
function closeCommentForm(source) {
	keepalive(false);
	var li = $(source).closest('li');
	li.find('img').show()
	li.find('hr,div.comment-form').slideUp(function(){$(this).remove()});
	li = null;
}
function saveCommentForm(source, id) {
	var form = $(source).closest('form');
	var li = $(source).closest('li');

	$.post($(form).attr('action'), $(form).serialize(), function(data) {
		if (data === 'OK') {
			updateComment(li, form.serializeArray());
			closeCommentForm(li.children().eq(0));
		} else {
			alert(data);
			reloadCaptcha($(source).parent().prev().children('label').children('a'));
		}
		li = null;
		form = null;
	});
}
function updateComment(li, form) {
	var subtopicCount = 0, keywordCount = 0;
	var subtopicRow = null, keywordRow = null;
	var subtopicTable = $(li).find('table.subtopics').html('');
	var keywordTable = $(li).find('table.keywords').html('');
	var name = null;
	var prefix = $(li).find('form').attr('id');

	$.each(form, function(i, field) {
		var pos = field.name.indexOf('.');
		field.name = pos >= 0 ? field.name.substring(pos + 1) : field.name;
		var hasLength = field.value != null && field.value.length > 0;
		if (field.name == 'name') {
			name = field.value;
		} else if (field.name == 'email') {
			if (field.value && field.value.length > 0) {
				name = '<a href="mailto:' + field.value + '">' + name + '</a>';
			}
		} else if (field.name == 'comment') {
			$(li).find('div.comment-content:nth(0)').text(field.value).toggle(hasLength).prev().toggle(hasLength);
		} else if (field.name == 'info') {
			$(li).find('div.comment-content:nth(1)').text(field.value).toggle(hasLength).prev().toggle(hasLength);
		} else if (field.name == 'requirements') {
			$(li).find('div.comment-content:nth(2)').text(field.value).toggle(hasLength).prev().toggle(hasLength);
		} else if (field.name.indexOf('subtopicIds') >= 0 && field.value != 'on') {
			var id = [prefix + field.name + field.value].join('');
			subtopicRow = addCellToTable(li, subtopicTable, subtopicRow, id, subtopicCount);
			subtopicCount++;
		} else if (field.name.indexOf('keywordIds') >= 0 && field.value != 'on') {
			var id = [prefix + field.name + field.value].join('');
			if (hasNoSelectedChildren(li, id)) {
				keywordRow = addCellToTable(li, keywordTable, keywordRow, id, keywordCount);
				keywordCount++;
			}
		}
	});

	$(li).find('.subtopics-title').toggle(subtopicCount > 0);
	$(li).find('.keywords-title').toggle(keywordCount > 0);
	$(li).find('.comment-extra').toggle(subtopicCount > 0 || keywordCount > 0);

	// Updating name and email:
	var nameCell = $(li).find('p.comment-name');
	var expert = nameCell.text();
	expert = expert.substring(expert.lastIndexOf('(') - 1, expert.lastIndexOf(')') + 1);
	nameCell.children('a').remove();
	var nameRowItems = nameCell.children().remove();
	nameCell.html(name).append(expert).append(nameRowItems.eq(0)).append(' ').append(nameRowItems.eq(1));

	subtopicTable = null;
	keywordTable = null;
	subtopicRow = null;
	keywordRow = null;
}
function reloadCaptcha(source) {
	try {
		var c = $(source).parent().siblings('#captcha')[0];
		var img = c.src;
		if (!img) {
			return;
		} else if (img.indexOf('?') > 0) {
			img = img.substring(0, img.indexOf('?'));
		}
		c.src = img + '?p=' + new Date().valueOf();
	} catch (e) {
		alert(e);
	}
	return false;
}
function addCellToTable(li, table, row, id, count) {
	var labelTmpl = [ 'label[for=', 0, ']:last' ];
	var cellTmpl = [ '<td><input type="checkbox" disabled="disabled" checked="checked"/> ', '', '</td>' ];
	if (count % 3 == 0) row = table.append('<tr></tr>').find('tr:last');
	labelTmpl[1] = id;
	cellTmpl[1] = $(li).find(labelTmpl.join('')).text();
	row.append(cellTmpl.join(''));
	return row;
}
function hasNoSelectedChildren(li, id) {
	return $(li).find(':checkbox#'+id).nextAll('p:first, div:first').find(':checkbox:checked:visible').length == 0;
}
function toggle(source, visible) {
	$(source).closest('form').find('.expert-option').toggle(visible);
}
function keepalive(enable) {
	if (enable && !window.interval) {
		window.interval = window.setInterval(function() {
			$.ajax({
				url: './item/keepalive',
				type: 'get',
				error: function(request, status, errorThrown) {
					alert('Teie sessioon on aegunud! Palun kopeerige oma salvestamata\n'
						+ 'andmed kindlasse kohta ja logige uuesti sisse.');
				}
			});
		}, 300000);
	} else if (!enable && window.interval) {
		window.clearInterval(window.interval);
		window.interval = null;
	}
}
function registerIdea(input, project, id, failMsg, callback) {
	if (input && input.val()) {
		$.ajax({
			url: './addIdea',
			type: 'post',
			data: { project: project, label: input.val(), id: (id ? id : 0) },
			success: function(data) {
				input.val('');
				if (data) {
					if (callback) callback(data);
				} else {
					alert(failMsg);
				}
			}
		});
	}
}
function removeIdea(source,project,idea,failMsg) {
	if (project && idea) {
		$.ajax({ url: './removeIdea', type: 'post', data: { project: project, idea: idea },
			success: function(data) {
				if (data == 'OK') {
					$(source).parent().remove();
				} else {
					alert(failMsg);
				}
			}
		});
	}
	return false;
}
function registerAutocomplete(input, url, params, onSelect) {
	$(input).autocomplete({ serviceUrl: url, minChars: 3, params: params || {}, onSelect: onSelect });
}
function saveInfo(input, project) {
	var value = $(input).val(), length = (value ? value.length : 0);
	if (length == 0) return informFailure();
	var data = $(input).closest('form').serialize() + '&i=' + project;
	$.post('./item/info.json', data, function(data) {
			if (!data || data.status != 'OK') {
				return informFailure();
			} else if (data.status == 'OK') {
				var span = $(input).val('').closest('p').children('span');
				span.text(span.text().replace(160 - length, 160))
				$('ul#info.comments')
					.prepend($('<li class="usual"></li>')
						.append($('<p class="comment-name"></p>').text(data.user)
								.append($('<span class="info"></span>').text(data.date).append('<span>|</span>').append(data.time)))
						.append($('<div class="comment-content"></div>').html(data.message)));
				if ($('ul#info.comments li.hidden-comment').length > 0) {
					$('ul#info.comments li.usual:last').removeClass('usual').addClass('hidden-comment');
					var link = $('ul#info').next().children('a'), count = $('ul#info.comments li').length;
					link.text(link.text().replace(count - 1, count));
				}
			}
		}, 'json');
};
function limit(input, limitNo, tracker) {
	$(input).keypress(function(event) {
		if (event.altKey || event.ctrlKey || event.shiftKey) return;
		var value = $(event.target).val(), length = value ? value.length : 0;
		var kc = event.keyCode, countable = event.charCode != 0 || (kc == 9 || kc == 13 || kc == 8 || kc == 32);
		if (countable && length == limitNo) {
			return false;
		} else if (length > limitNo) {
			$(event.target).val(value.substring(0, limitNo));
			return false;
		}
	}).keyup(function(event) {
		var value = $(event.target).val(), length = value ? value.length : 0;
		$(event.target).closest('p').children('span').text(tracker.replace('{0}', limitNo - length))
	}).change(function(event) {
		var value = $(event.target).val();
		if (value && value.length > limitNo) {
			$(event.target).val(value.substring(0, limitNo));
			$(event.target).closest('p').children('span').text(tracker.replace('{0}', 0))
		}
	});
};
function toggleChks(chk) {
	var checked = chk.checked;
	chk = $(chk).nextAll('span.' + chk.id + ':first');
	chk.css('display', checked ? 'block' : 'none');
	if (!checked) {
		chk.find('input:checkbox:checked').attr('checked', false);
	}
	chk.find('span').hide()
}
function toggleEmailUpdates(checked) {
	if (checked) {
		$('p#choices').slideDown('fast')
	} else {
		$('p#choices').slideUp('fast');
	}
};
function toggleOptions(parentOptions) {
	$(parentOptions).each(function(){$(this).parent().find('span.option').toggleClass('enable', this.checked)});
}
function showMemberDialog(hasUpdates, register) {
	window.reg = register;
	if (hasUpdates == true) {
		$('input#emailUpdates').attr('checked', hasUpdates);
		toggleEmailUpdates(hasUpdates);
	}
	$('input#emailTxt').val('');
	$('p#choices input:radio:first').attr('checked', true);
	showModal('updatesQuestion');
};
function registerMember(project, register) {
	hideModal();
	var checked = $('input#emailUpdates').attr('checked');
	var loc = './item/member?i=' + project;
	loc += register != null ? '&m=' + register : '';
	if (register != false) {
		loc += '&u=' + checked;
		if (checked && $('input:radio#e2').attr('checked')) {
			loc += '&' + $('input#emailTxt').serialize();
		}
	}
	window.location=loc;
	window.reg = null;
};
var formError = true;
function checkEmail(input) {
	inputvalue = $("#" + input).val();
	if (inputvalue) {
		var pattern = /^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\.([a-zA-Z])+([a-zA-Z])+/;
		if(pattern.test(inputvalue)){
			jQuery("#" + input).removeClass('formError');
			formError = false;
		} else {
			jQuery("#" + input).addClass('formError');
			formError = true;
		}
	}
}