/**
 * Processes forms on client side
 *
 */
function BxForms()
{
}


/**
 * Validate specified form
 *
 * @param	object	form
 * @return	bool	true if valid; false otherwise
 */
BxForms.prototype.validateForm = function(form)
{
	var valid = true;
	
	if(form == null)
		return valid;
		
	var list = form.childNodes;
	var tmpNode = null;

	for(var i = 0; i < list.length; i++)
	{
		if(isVal(list[i].id))
		{
			tmpNode = document.getElementById(list[i].id);
			
			if(isVal(tmpNode.getAttribute('valtype')))
			{
				if(isVal(tmpNode) && tmpNode.type == 'radio')
					notifElement = tmpNode.parentNode;
				else
					notifElement = tmpNode;
				
				if(!this.isValid(tmpNode))
				{
					valid = false;
					this.showNotif(notifElement);
				}
				else
					this.hideNotif(notifElement);
			}
			else
			{
				if(!this.validateForm(tmpNode))
					valid = false;
			}
			
		}
		else
		{
			if(!this.validateForm(tmpNode))
				valid = false;
		}
	}
	
	if(isVal(form.getAttribute('sRichEdit')))
		this.getEditedText(form.getAttribute('sRichEdit'), form.getAttribute('sContainerItemId'));
	
	return valid;
}


/**
 * Detect is specified field filled correctly or not
 *
 * @param	object	el
 * @return	bool	true if fields valid false otherwise
 */
BxForms.prototype.isValid = function(el)
{
	var type = el.getAttribute('valtype');
	var value = el.value;
	var maxSize = el.getAttribute('valsize');
	var required = el.getAttribute('required');
	
	if(isVal(el.getAttribute('type')) && el.getAttribute('type') == 'radio')
	{
		if(isVal(required))
		{
			var i = 0;
			var name = String(el.name).match(/([a-zA-Z]*)$/);
			var rb;
			var oneChecked = false;
			while(document.getElementById(name[0]+i))
			{
				if(document.getElementById(name[0]+i).checked)
					oneChecked = true;
				i++;
			}
			
			if(!oneChecked)
				return false;
		}
	}
	
	
	if(isVal(required) && !isVal(value))
		return false;
		
	switch(type)
	{
		case 'text':
			if(isVal(maxSize))
				if(String(value).length > maxSize)
					return false;
			return true;
			
		case 'int':
			if(isVal(maxSize))
				if(String(value).length > maxSize)
					return false;
			return true;
			
		default:
			return false;
	}
}


/**
 * Show notification
 *
 * @param	object	element
 * @return	bool	true if success
 */
BxForms.prototype.showNotif = function(element)
{
	element.style.backgroundColor = '#955';
	return true;
}


/**
 * Hide notification
 *
 * @param	object	element
 * @return	bool	true in success
 */
BxForms.prototype.hideNotif = function(element)
{
	element.style.backgroundColor = '#FFF';
	return true;
}


/**
 * Put edited in rich editor text into form textarea
 *
 * @param	string	sRichEdit			rich editor ID
 * @param	variant	vContainer			text area's parent element
 * @return	string
 */
BxForms.prototype.getEditedText = function(sRichEdit, vContainer)
{
	aRichEdit = String(sRichEdit).split(';');
	
	iLen = aRichEdit.length;
	
	for(i = 0; i < iLen; i++)
	{
		aPair = String(aRichEdit[i]).split(':');
		getElementById(vContainer, aPair[0]).value = gBxEditor.getTextById(vContainer, aPair[1]);
	}
}


gScriptLoader.scriptLoaded();