/**
 *	De Form JavaScript functions worden gebruikt door de Form en FormElements PHP
 *	classes. Deze functions geven de formulieren en de elementen hiervoor extra
 *	functionaliteit.
 *
 *	@author		Roel Schut
 *	@version	0.1.6 - 2009.01.26
 *	@package	Form
 */

if(typeof(Form) == 'undefined') var Form = {};

Form.displayInfo = function($element, $styleClass)
{
	if(!$element.toolTip)
	{
		// info tooltip en text div
		var $info	= JSX.Element.create('div');
		var $body	= JSX.Element.create('div', $info);
		
		var $div1	= JSX.Element.create('div', $body);
		var $div2	= JSX.Element.create('div', $body);
		var $div3	= JSX.Element.create('div', $body);
		
		var $text	= JSX.Element.create('div', $div3);
		
		
		$div1.className = 'div1';
		$div2.className = 'div2';
		$div3.className = 'div3';
		
		$element.toolTip	= $info;
		$info.toolTipText	= $text;
		
		$text.className	= 'text';
		$info.className	= 'mailformToolTip';
		$body.className = 'body';
		
		if($styleClass != '')
		{
			$body.className += ' '+ $styleClass;
		}
		
		
		$text.innerHTML	= $element.title;
		$element.title = '';
		
		$info.style.position	= 'absolute';
		$text.style.cursor		= 'default';
		
		JSX.Event.attach($element, 'onmouseout', function()
		{
			$info.style.display = 'none';
		});
	}
	
	var $info = $element.toolTip;
	var $text = $info.toolTipText;
	
	$info.style.display	= 'block';
	
	var $position	= JSX.Element.getPosition($element);
	var $window 	= JSX.Browser.getSize();
	
	$position.x += 15;
	var $w = $text.offsetWidth;
	var $h = $text.offsetHeight;
	
	if(($position.x + $w) > $window.width)	$position.x = ($window.width - $w);
	if(($position.y + $h) > $window.height)	$position.y = ($window.height - $h);
	
	
	$info.style.left	= $position.x;
	$info.style.top		= $position.y;
}

/*****************************************************************************************
 *	Verzend een formulier met de aangegeven naam.
 *
 *	@param string	$form	De naam van het formulier dat moet worden verzonden
 *	@return void
 */
Form.buttonSubmit = function($form)
{
	document.forms[$form].submit();
};

/*****************************************************************************************
 *	Deze functie gaat vanaf het element waarvan die wordt uitgevoerd, telkens naar de
 *	parentNode op zoek naar het eerste element met de 'form' tag. Daarna zal op dat
 *	element de submit() actie worden uitgevoerd om het formulier te verzenden.
 *
 *	@param object	$parent	Het element waarvan de submit actie wordt uitgevoerd
 *	@return void
 */
Form.buttonSubmitParent = function($parent)
{
	do
	{
		$parent = $parent.parentNode;
		if($parent.tagName == undefined) break;
		var $tag = $parent.tagName.toLowerCase();
	}
	while($tag != 'form')
	if($tag == 'form') $parent.submit();
};

/*****************************************************************************************
 *	Vernieuwd een formulier met de aangegeven naam.
 *
 *	@param string	$form	De naam van het formulier dat moet worden vernieuwt
 *	@return void
 */
Form.buttonReset = function($form)
{
	document.forms[$form].reset();
};

/*****************************************************************************************
 *	Deze functie gaat vanaf het element waarvan die wordt uitgevoerd, telkens naar de
 *	parentNode op zoek naar het eerste element met de 'form' tag. Daarna zal op dat
 *	element de reset() actie worden uitgevoerd om het formulier te vernieuwen.
 *
 *	@param object	$parent	Het element waarvan de reset actie wordt uitgevoerd
 *	@return void
 */
Form.buttonResetParent = function($parent)
{
	do
	{
		$parent = $parent.parentNode;
		if($parent.tagName == undefined) break;
		var $tag = $parent.tagName.toLowerCase();
	}
	while($tag != 'form')
	if($tag == 'form') $parent.reset();
};

/*****************************************************************************************
 *	Deze functie wordt toegevoegd met de addSelectInput() functie in de Form PHP class en
 *	zorgt ervoor dat het dropdown select element, wanneer de laatste waarde wordt
 *	geselecteerd, het input tekst element actief maakt.
 *
 *	@param object	$selectField	Het select element die reageert op veranderingen
 *	@param string	$inputField		Het tekst element dat moet worden geactiveerd
 *	@param string	$lastValue		De waarde waarop het select element reageert
 *	@return bool
 */
Form.selectInputChange = function($selectField, $inputField, $lastValue)
{
	var $f = document.getElementById($inputField);
	var $l = ($selectField.options.length - 1);
	var $d = ($selectField.selectedIndex != $l);
	
	$f.disabled = $d;
	if(!$d)
	{
		if($f.value == $lastValue) $f.select();
		else $f.focus();
	}
};

Form.groupInputActivate = function($selectField, $inputField, $lastValue)
{
	var $f = document.getElementById($inputField);
	var $d = !$selectField.checked;
	
	$f.disabled = $d;
	if(!$d)
	{
		if($f.value == $lastValue) $f.select();
		else $f.focus();
	}
};

Form.groupInputDisable = function($inputField)
{
	document.getElementById($inputField).disabled = true;
};

Form.selectValue = function($this, $value)
{
	if($this.value == $value) $this.select();
};

Form.maxLength = function($this, $length)
{
	var $value = $this.value;
	var $length = parseInt($length);
	if($value.length > $length) $this.value = $value.substr(0, $length);
};

// zorgt ervoor dat $d het maximaal aantal dagen (van de
// geselecteerde maand $m in jaar $y) als select options in zich krijgt
Form.dateChange = function($y, $m, $d, $maxDate, $minDate)
{
	// html elementen
	var $y = document.getElementById($y);
	var $m = document.getElementById($m);
	var $d = document.getElementById($d);
	
	var $i = 0;
	var $l = 31;
	
	// geselecteerde waardes
	var $dpY = $y.value;
	var $dpM = ($m.value-1);
	var $dpD = $d.value;
	
	var $dp = new Date($dpY, $dpM, $dpD, 0, 0, 0);
	
	// max waarde toewijzen
	if(typeof($maxDate) != 'undefined' && $dp.getTime() > $maxDate.getTime())
	{
		$y.value = $maxDate.getFullYear();
		$m.selectedIndex = $maxDate.getMonth();
	}
	// min waarde toewijzen
	else if(typeof($minDate) != 'undefined' && $dp.getTime() < $minDate.getTime())
	{
		$y.value = $minDate.getFullYear();
		$m.selectedIndex = $minDate.getMonth();
	}
	
	// zoek hoogste laatste dag van de maand
	do
	{
		var $ldm = new Date();
			$ldm.setUTCMinutes(0, 0, 0);
			$ldm.setUTCDate($i);
			$ldm.setUTCFullYear($dpY, $dpM);
		
		$l = $ldm.getDate();
		$i--;
	}
	while($ldm.getMonth() != $dpM);
	
	// huidige dagen lijst legen
	// en nieuwe dagen lijst maken
	$d.innerHTML = '';
	for($i=1; $i<=$l; $i++)
	{
		var $option = document.createElement('option');
			$option.setAttribute('value', $i);
			$option.innerHTML = $i;
		
		if($i == $dpD) $option.setAttribute('selected', 'selected');
		$d.appendChild($option);
	}
};

Form.openColorPicker = function($target)
{
	if(!$target.colorPicker)
	{
		$target.colorPicker = new jsx.ColorPicker($target);
	}
	
	var $pos = JSX.Element.getPosition($target);
	$target.colorPicker.setPosition($pos.x, ($pos.y + $target.offsetHeight + 2));
	$target.colorPicker.open();
};
