/* attaches an event to  */
function attach (obj, evt, fun)
{
	if (obj.addEventListener)
		obj.addEventListener (evt, fun, false);
	else if (obj.attachEvent)
		obj.attachEvent ("on" + evt, fun);
	else
		obj["on" + evt] = fun;
}

function initializeAdvancedEdit ()
{
	var el = document.getElementsByTagName ("DIV");
	var ell = el.length, i;
	for (i = 0; i < ell; i++)
	{
		if (!el[i].className.match ("advedit"))
			continue;

		var container = el[i];
		var label = container.getElementsByTagName ("LABEL")[0];
		var spans = label.getElementsByTagName ("SPAN");
		var span;
		for (j = 0; j < spans.length; j++)
			if (spans[j].className.match ("counter"))
				span = spans[j];
		var ta = container.getElementsByTagName ("TEXTAREA")[0];

		attach (ta, "keydown", updateTextCount);
		attach (ta, "keyup", updateTextCount);
		attach (ta, "change", updateTextCount);

		container.maxLength = parseInt (span.innerHTML);
		span.innerHTML = "(max. " + container.maxLength + " characters, " + (container.maxLength - ta.value.length) + " remaining) ";

//		var anch = document.createElement ("A");
//		anch.innerHTML = "Edit&nbsp;in&nbsp;new&nbsp;window&nbsp;&raquo;";
//		attach (anch, "click", showEditPopup);

//		label.appendChild (anch);
	}
}

function showEditPopup (event)
{
	event = event || window.event;
	var anch = event.currentTarget || event.srcElement;

	var container = anch.parentElement.parentElement;
	var ta = container.getElementsByTagName ("TEXTAREA")[0];

	var w = window.open (window.location, "_blank", "width=400,height=400,scrollbars=no,menubar=yes,toolbar=no,status=yes,resizable=yes");
	w.document.write ('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>' + document.getElementsByTagName ("HEAD")[0].innerHTML + '<style type="text/css">html, body { height: 100%; margin: 0; padding: 0; text-align: right } textarea { border: solid 0; border-width: 1px 0; display: block; margin: 0; padding: 0; width: 100% }</style><script type="text/javascript">var taid = "' + ta.id +'"; attach (window, "resize", editWindowResizedEvent);</script></head><body><textarea id="value"></textarea><button onclick="editWindowOnSubmit ()">Update &amp; close</button><button onclick="window.close()">Close</button><script type="text/javascript">initializeEditWindow ();</script></body></html>');
	w.focus ();
}

function updateTextCount (event) 
{ 
	event = event || window.event;
	var ta = event.currentTarget || event.srcElement;
	updateTextAreaCount (ta);
}

function updateTextAreaCount (ta) 
{ 
	var container = (ta.parentElement) ? ta.parentElement : ta.parentNode;
	var span = container.getElementsByTagName ("SPAN")[0];

	var len = ta.value.length;
	if (len > container.maxLength)
		ta.value = ta.value.substring (0, container.maxLength);

	span.innerHTML = "(max. " + container.maxLength + " characters, " + (container.maxLength - ta.value.length) + " remaining) ";
}

function initializeEditWindow ()
{
	document.getElementById ("value").value = window.opener.document.getElementById (taid).value;
	editWindowResizedEvent ();
}

function editWindowResizedEvent ()
{
	var y = window.innerHeight ? window.innerHeight : document.body.clientHeight;
	document.getElementById ('value').style.pixelHeight = y - 50;
}

function editWindowOnSubmit ()
{
	var ta = document.getElementById ("value");
	window.opener.document.getElementById (taid).value = ta.value; 
	window.opener.updateTextAreaCount (window.opener.document.getElementById (taid));
	window.close ();
}

function advancedSelector_InitAll ()
{
	var sel = document.getElementsByTagName ("SELECT");
	var i;
		
	for (i = 0; i < sel.length; i++)
	{
		if (sel[i].id.match (/_d$/g))
			advancedSelector_Init (sel[i].id.substring (0, sel[i].id.length - 2));
	}
}

function advancedSelector_Init (id)
{
	var obj = document.getElementById (id + "_d");
	
	if (!obj || obj.initialized)
		return;
	
	var container = obj.parentNode || obj.parentElement;
	var val = obj.options [obj.selectedIndex].value;
	
	attach (obj, "change", advancedSelector_OnChange);
	
	document.getElementById (id + "_txt").style.display = "none";
	document.getElementById (id + "_t").style.display = (val == "" && obj.selectedIndex > 0) ? "" : "none";
	
	obj.initialized = true;
}

function advancedSelector_OnChange (event)
{
	event = event || window.event;

	var select = event.currentTarget || event.srcElement;
	var val = select.options [select.selectedIndex].value;

	var txtid = select.id.substring (0, select.id.length - 2) + "_t";

	document.getElementById (txtid).style.display = (val == "" && select.selectedIndex > 0) ? "" : "none";
}


function initializeAll ()
{
	initializeAdvancedEdit ();
	advancedSelector_InitAll ();
}

attach (window, "load", initializeAll);

$(document).ready(function() {
	$.datepicker.setDefaults({ changeFirstDay: false, dateFormat: 'd. m. yy', firstDay: 1 });
	$('.advdatepicker .datepicker').datepicker({ changeMonth: true, changeYear: true, showButtonPanel: true });
	$('.datepicker:not(.hasDatepicker)').datepicker({ changeMonth: true, changeYear: true });
	$('.datepicker-recent').datepicker({ changeMonth: true, changeYear: true, yearRange: '2008:' });
	$('.dob-datepicker').datepicker({ changeMonth: true, changeYear: true, yearRange: '1940:2000' });

	$('body.admin .item-date-from').datepicker({ changeMonth: true, changeYear: true });
	$('body.client .item-date-from').datepicker(
					{
						beforeShow: function(input) {
							var to = $.datepicker.parseDate('yy-mm-dd', $('#projectend').val());

							if ($(input).parents('tr').find('input[name*=Till]').val())
								to = $.datepicker.parseDate('d. m. yy', $(input).parents('tr').eq(0).find('input[name*=Till]').val());

							var v;

							v =
							{
								minDate: $.datepicker.parseDate('yy-mm-dd', $('#projectstart').val()),
								maxDate: to
							};

							return v;
						}
					});

	$('body.admin .item-date-to').datepicker({ changeMonth: true, changeYear: true });
	$('body.client .item-date-to').datepicker(
					{
						changeFirstDay: false,
						dateFormat: 'd. m. yy',
						firstDay: 1,

						beforeShow: function(input) {
							var from = $.datepicker.parseDate('yy-mm-dd', $('#projectstart').val());

							if ($(input).parents('tr').find('input[name*=From]').val())
								from = $.datepicker.parseDate('d. m. yy', $(input).parents('tr').eq(0).find('input[name*=From]').val());

							var v;

							v =
							{
								minDate: from,
								maxDate: $.datepicker.parseDate('yy-mm-dd', $('#projectend').val())
							};

							return v;
						}
					});

	$('.checkbox-all-on').click(function() { $("input[type=checkbox]").attr("checked", true); });
	$('.checkbox-all-off').click(function() { $("input[type=checkbox]").attr("checked", false); });
	$('.checkbox-all-inv').click(function() { $("input[type=checkbox]").each(function() { $(this).attr('checked', !$(this).attr('checked')) }); });

	$("body.admin label:contains(Contracted)").prepend("<br />"); // move contracted to new line

	$('form:has(:file)').submit(function() {

		var f = $(this);
		var id = $('[name=NeatUpload_PostBackID]', this).val();

		setInterval(function() {
			$.ajax({
				url: 'NeatUpload/ProgressJsonHandler.ashx?PostBackID=' + id,
				success: function(data) {
					var d = eval('(' + data + ')');
					$('.file-upload-status', f).show();
					$('.file-upload-status span', f).html(d.SecsRemaining + ' second(s) remaining');
					$('.file-upload-status .slider', f).animate({ width: d.PercentComplete + '%' }, 500);
				}
			});
		}, 1000);
	});
});
