/**
 * Form processor
 *
 * @version 1.4
 *
 * Version Control
 *
 * 1.4		Functions getCheckboxes(), checkAll() and getCheckedBoxes() added
 * 1.3.2	Function getParameters() - updated replace function
 * 1.3.1	Function getParameters() - converts '+' to '&plus;'
 * 1.3		Function getParameters() - added check if element exists
 * 1.2		Added functions setLanguageVisibility() and setEditLanguage(), added class variable obj_lib_ajax
 *			Added function setFlags()
 * 1.1		Added functions limitLength() and limitLengthLang()
 */
function lib_FormProcessor()
{
	/**
	 * Class variables
	 */
	this.obj_lib_ajax = new lib_Ajax();




	/****************************************************************************************************
	 * Input parsing
	 ****************************************************************************************************/


	/**
	 * Get parameters
	 *
	 * @param string sFormID
	 *
	 * @return string parameters
	 */
	this.getParameters = function(sFormID)
	{
		var parameters = '';

		if(document.getElementById(sFormID))
		{
			//get form elements
			var elem = document.getElementById(sFormID).elements;

			//loop each element in the form
			for(var i=0; i<elem.length; i++)
			{
				//check if element has to be submitted
				if(elem[i].className.search('send') > -1)
				{
					//check if element exists
					if(document.getElementById(elem[i].id))
					{
						//check if element is checkbox
						if(document.getElementById(elem[i].id).type == 'checkbox')
						{
							//use value if checkbox is checked, or empty if not
							if(document.getElementById(elem[i].id).checked == true)	{parameters += '&' + elem[i].id + '=' + escape(elem[i].value);}
							else													{parameters += '&' + elem[i].id + '=';}
						}
						else
						{
							parameters += '&' + elem[i].id + '=' + escape(elem[i].value.replace(/\+/g, '&plus;'));
						}
					}
				}
			}
		}

		//return parameters
		return parameters;
	}


	/****************************************************************************************************
	 * END Input parsing
	 ****************************************************************************************************/




	/****************************************************************************************************
	 * Input length
	 ****************************************************************************************************/


	/**
	 * Limit length of string in textarea for each installed language
	 *
	 * @param string sElement
	 * @param integer iMaxLength
	 */
	this.limitLengthLang = function(sElement, iMaxLength)
	{
		var strLanguages = document.getElementById('languages').value;
		var arrLanguages = strLanguages.split("-");

		for(var i=0; i<arrLanguages.length; i++)
		{
			obj_lib_formprocessor.limitLength(sElement+'_'+arrLanguages[i], iMaxLength);
		}

		obj_lib_formprocessor.limitLength(sElement, iMaxLength);
	}




	/**
	 * Limit length of string in textarea
	 *
	 * @param string sElement
	 * @param integer iMaxLength
	 */
	this.limitLength = function(sElement, iMaxLength)
	{
		if(document.getElementById(sElement))
		{
			var elTextarea = document.getElementById(sElement);
			var iLength = elTextarea.value.length;

			if(iLength > iMaxLength)
			{
				elTextarea.value = elTextarea.value.substring(0, iMaxLength);
				iLength = iMaxLength;
			}

			if(document.getElementById(sElement+'Counter'))
			{
				document.getElementById(sElement+'Counter').innerHTML = iLength;
			}
		}
	}


	/****************************************************************************************************
	 * END Input length
	 ****************************************************************************************************/




	/****************************************************************************************************
	 * Language
	 ****************************************************************************************************/


	/**
	 * Set visibility of input fields for given language
	 *
	 * @param string sLanguage
	 */
	this.setEditLanguage = function(sLanguage)
	{
		if(sLanguage == '')	{if(document.getElementById('editLanguage')){sLanguage = document.getElementById('editLanguage').value;}}

		obj_lib_formprocessor.setLanguageVisibility(sLanguage);
		obj_lib_formprocessor.setFlags(sLanguage);

		var parameters = 'act=' + 'setEditLanguage'
					   + '&language=' + sLanguage;

		obj_lib_formprocessor.obj_lib_ajax.postAjax('setlanguage.php', parameters, this.setEditLanguage_callbackAjax);
	}

	this.setEditLanguage_callbackAjax = function()
	{
		obj_lib_formprocessor.obj_lib_ajax.callbackAjax('div_setLanguage', 3, 1);

		if(document.getElementById('hidden_language_set'))
		{
			if(document.getElementById('editLanguage'))
			{
				document.getElementById('editLanguage').value = document.getElementById('hidden_language_set').value;
			}
		}
	}




	/**
	 * Set visibility of input fields for given language
	 *
	 * @param string sLanguage
	 */
	this.setLanguageVisibility = function(sLanguage)
	{
		if(sLanguage == '')	{sLanguage = document.getElementById('editLanguage').value;}

		var elements = new Array();
		elements = document.getElementsByTagName('*');

		for(var i=0; i<elements.length; i++)
		{
			if(elements[i].className.search('lang_') > -1)
			{
				if(elements[i].className.search('lang_'+sLanguage) > -1)
				{
					elements[i].style.display = '';
				}
				else
				{
					elements[i].style.display = 'none';
				}
			}
		}
	}




	/**
	 * Set flags
	 *
	 * @param string sLanguage
	 */
	this.setFlags = function(sLanguage)
	{
		if(sLanguage == '')	{sLanguage = document.getElementById('editLanguage').value;}

		var strLanguages = document.getElementById('languages').value;
		var arrLanguages = strLanguages.split("-");

		for(var i=0; i<arrLanguages.length; i++)
		{
			if(document.getElementById('flag_'+arrLanguages[i]))
			{
				document.getElementById('flag_'+arrLanguages[i]).className = 'flagbutton';
			}
		}

		if(document.getElementById('flag_'+sLanguage))
		{
			document.getElementById('flag_'+sLanguage).className = 'flagbutton_selected';
		}
	}


	/****************************************************************************************************
	 * END Language
	 ****************************************************************************************************/




	/****************************************************************************************************
	 * Checkboxes
	 ****************************************************************************************************/


	/**
	 * Get checkbox elements
	 *
	 * @param string strPrefix
	 *
	 * @return element array arrCheckboxes
	 */
	this.getCheckboxes = function(strPrefix)
	{
		var arrElements = new Array();
		var arrElements = document.getElementsByTagName('input');

		var intStringlength = strPrefix.length;
		var arrCheckboxes = new Array();

		for(var i=0; i<arrElements.length; i++)
		{
			if(arrElements[i].type == 'checkbox' && arrElements[i].id.substring(0, intStringlength) == strPrefix && arrElements[i].id != strPrefix + 'all')
			{
				arrCheckboxes.push(arrElements[i]);
			}
		}

		return arrCheckboxes;
	}




	/**
	 * (Un)Check all checkboxes
	 *
	 * @param string strPrefix
	 */
	this.checkAll = function(strPrefix)
	{
		if(document.getElementById(strPrefix + 'all').checked == true)	{var checked = true;}
		else															{var checked = false;}

		var arrCheckboxes = obj_lib_formprocessor.getCheckboxes(strPrefix);

		for(var i=0; i<arrCheckboxes.length; i++)
		{
			arrCheckboxes[i].checked = checked;
		}
	}


	/**
	 * Get checked checkbox elements
	 *
	 * @param string strPrefix
	 * @param string strParameterName
	 * @param string strFormat
	 *
	 * @return string strParameters
	 */
	this.getCheckedBoxes = function(strPrefix, strParameterName, strFormat)
	{
		var strParameters	= '';
		var intCount		= 0;
		var arrCheckboxes	= obj_lib_formprocessor.getCheckboxes(strPrefix);

		for(var i=0; i<arrCheckboxes.length; i++)
		{
			if(arrCheckboxes[i].checked == true)
			{
				intCount++;

				if(strFormat == 'parameters')
				{
					strParameters += '&' + strParameterName + i + '=' +arrCheckboxes[i].value;
				}
				else if(strFormat == 'values')
				{
					strParameters += '-' + arrCheckboxes[i].value;
				}
			}
		}

		if(intCount > 0)
		{
			if(strFormat == 'parameters')
			{
				strParameters += '&' + strParameterName + '_count=' + intCount;
			}
		}

		return strParameters;
	}


	/****************************************************************************************************
	 * END Checkboxes
	 ****************************************************************************************************/




	/**
	 * Check form
	 *
	 * @param string formID
	 *
	 * @return boolean result
	 */
	 /*
	this.checkForm = function(formID)
	{
		var result = true;

		//get form elements
		var elem = document.getElementById(formID).elements;

		//loop each element in the form
		for(var i=0; i<elem.length; i++)
		{
			//check if input is required
			if(elem[i].className.search('required') > -1)
			{
				//check if no input has been entered
				if(elem[i].value == '')
				{
					//set error styling to element
					if(elem[i].className.search('inputError') == -1)
					{
						elem[i].className += ' inputError';
					}

					//set error flag
					result = false;
				}
			}
		}

		//return result
		return result;
	}
	*/
}

