var _resizableHandles = {};

function changeNewPropertyField(selectEl)
{
	if (selectEl == null)
		return;
	
	// Show new input
	var oldValue = findCurValue(selectEl);
	var newEl = processPropFields('Field', selectEl);
	if (newEl != null)
	{
		newEl.style.display = 'block';
		newEl.name = 'value[]';
		if (newEl.id.substring(newEl.id.length - 4) != 'Date')
			newEl.style.width = '100%';
		newEl.value = oldValue;
		
		var permEl = document.getElementById('lock_NEW');
		if (permEl && selectEl.options[selectEl.selectedIndex] && selectEl.options[selectEl.selectedIndex].attributes['perm'])
		{
			var permLevel = selectEl.options[selectEl.selectedIndex].attributes['perm'].value;
			if (permLevel >= 0 && permLevel < permEl.options.length)
				permEl.selectedIndex = selectEl.options[selectEl.selectedIndex].attributes['perm'].value;
		}
		
		if (newEl.parentNode.nodeName == 'DIV')
		{
			newEl.parentNode.style.display = 'block';
			
			// TODO: Support resizable textboxes
//			if (newEl.parentNode.className.indexOf('yui-resize') < 0)
//				_resizableHandles[newEl.parentNode] = yuiResize(newEl.parentNode);
		}
	}
	
	// Show new desc
	var newDescEl = processPropFields('Desc', selectEl);
	if (newDescEl != null)
	{
		newDescEl.style.display = 'block';
	}
}
function findCurValue(selectEl)
{
	var newPropFields = getElementsByClassName('newPropField', document);
	for (var i = 0; i < newPropFields.length; ++i)
	{
		if (newPropFields[i].style.display != 'none')
			return newPropFields[i].value;
	}
	return null;
}
function processPropFields(type, selectEl)
{
	// Hide current
	var newEl = null;
	var newPropFields = getElementsByClassName('newProp' + type, document);
	for (var i = 0; i < newPropFields.length; ++i)
	{
		if (newPropFields[i].id == type.toLowerCase() + '_' + selectEl.value)
		{
			newEl = newPropFields[i];
		}
		else if (newPropFields[i].style.display != 'none')
		{
			if (newPropFields[i].parentNode.nodeName == 'DIV')
			{
				newPropFields[i].parentNode.style.display = 'none';
				
				// Support resizable textboxes
				if (newPropFields[i].parentNode.className.indexOf('yui-resize') >= 0 && _resizableHandles[newPropFields[i].parentNode])
					_resizableHandles[newPropFields[i].parentNode].destroy();
			}
			
			newPropFields[i].style.display = 'none';
			newPropFields[i].name = '';
		}
	}
	return newEl;
}

addToOnload(function() {
	changeNewPropertyField(document.getElementById('newProp'));
});


var Event = YAHOO.util.Event, Dom = YAHOO.util.Dom;
var oCalendarMenu, oCalendar;

function showCalendar(el, notPast, notFuture)
{
	if (!oCalendarMenu)
		oCalendarMenu = document.getElementById('calendarcontainer');
	
	if (oCalendar)
		hideCalendar();
	
	// Show and position
	oCalendarMenu.style.position = 'absolute';
	var pos = offsetPos(el);
	oCalendarMenu.style.top = pos.Y + 'px';
	oCalendarMenu.style.left = (pos.X + el.offsetWidth) + 'px';
	oCalendarMenu.style.display = 'block';
	
	// Current value (yyyy-mm?-dd?)
	var y = 0, m = 1, d = 0;
	if (el.value.length == 4)
	{
		y = el.value;
	}
	else if (el.value.length == 7)
	{
		y = el.value.substring(0, 4);
		m = el.value.substring(5, 7);
	}
	else if (el.value.length == 10)
	{
		y = el.value.substring(0, 4);
		m = el.value.substring(5, 7);
		d = el.value.substring(8, 10);
	}
	if (isNaN(y)) y = 0;
	if (isNaN(m)) m = 1;
	if (isNaN(d)) d = 0;
	
	config = { title: el.id.substring(6), navigator: true, close: true };
	if (notPast)
		config.mindate = new Date();
	else if (notFuture)
		config.maxdate = new Date();
	if (y > 0)
		config.pagedate = m + '/' + y;
	
	// Create a Calendar instance and render it into the body 
	// element of the Overlay.
	oCalendar = new YAHOO.widget.Calendar('calendar', oCalendarMenu.id, config);
	oCalendar.select(m + '/' + d + '/' + y);
	oCalendar.render();
	
	// Subscribe to the Calendar instance's "select" event to 
	// update the month, day, year form fields when the user
	// selects a date.
	oCalendar.selectEvent.subscribe(function (type, args, obj) {
		var dates = args[0];
		var date = dates[0];
		var year = date[0], month = '0' + date[1], day = '0' + date[2];

		el.value = year + '-' + month.substring(month.length - 2) + '-' + day.substring(day.length - 2);
		
		hideCalendar();
	});
}

function hideCalendar()
{
	if (oCalendar)
		oCalendar.hide();
	var cal = document.getElementById('calendar');
	if (cal)
		cal.parentNode.removeChild(cal);
	if (oCalendarMenu)
		oCalendarMenu.style.display = 'none';
}

function showReviewForm()
{
	var el = document.getElementById('review_form');
	fadeElement(el, 100, 500);
}
