// ------------------------------------------------------------
// Check formulars

String.prototype.trim = function() { return this.replace(/(^\s*)|(\s*$)/g, ""); }

function checkEMail(string) 
{
	if (string.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1)
		return true;
	else
		return false;
}

function checkFormElements(formObject, formName, color){
	var ac    = -1;
	var error = '';
	var formField, textField, fieldObject, separator, multiField, indexField, errorField;
	
	while(need[formName][++ac]){
		formField = need[formName][ac];
		textField = text[formName][ac];

		if (formField.charAt(0) == '@') { // check e-mail
		
			formField = formField.substring(1);
			formObject.elements[formField].value = formObject.elements[formField].value.trim();
			
			if (! checkEMail(formObject.elements[formField].value)) {
				error += "\n -  (" + textField + ")";
				fieldObject	= document.getElementById(formField);
				if (fieldObject != null) fieldObject.style.backgroundColor = color;
			}
			
		} else if (formField.charAt(0) == '!') { // check select 

			formField = formField.substring(1);
			formObject.elements[formField].value = formObject.elements[formField].value.trim();
			
			if ( formObject.elements[formField+selectSuffix] != null ) {
				formObject.elements[formField+selectSuffix].value = formObject.elements[formField+selectSuffix].value.trim();
				if (formObject.elements[formField].value == '0' && formObject.elements[formField+selectSuffix].value == '') {
					error += "\n - " + textField;
					fieldObject	= document.getElementById(formField);
					if (fieldObject != null) fieldObject.style.backgroundColor = color;
				}
			} else {
				if (formObject.elements[formField].value == '0') {
					error += "\n - " + textField;
					fieldObject	= document.getElementById(formField);
					if (fieldObject != null) fieldObject.style.backgroundColor = color;
				}
			}
			
        } else {
			separator = formField.indexOf('|');
			if (separator != -1) { // multi element validation (separator is |)
				multiField	= formField.split('|');
				errorField	= true;
				switch (multiField[0]) {
					case 'OR' : // one field must be filled
						for (indexField=1; indexField < multiField.length; indexField++) {
							formObject.elements[multiField[indexField]].value = formObject.elements[multiField[indexField]].value.trim();
							if (formObject.elements[multiField[indexField]].value != '') errorField	= false;
						}
						break;	
					case 'NOR' : // only one filed must be filled or nothing
						var filled = 0;
						for (indexField=1; indexField < multiField.length; indexField++) {
							formObject.elements[multiField[indexField]].value = formObject.elements[multiField[indexField]].value.trim();
							if (formObject.elements[multiField[indexField]].value != '') filled++;
						}
						if (filled <= 1) errorField	= false;
						break;	
					case 'AND' : // all fields must be filled
						errorField	= false;
						for (indexField=1; indexField < multiField.length; indexField++) {
							formObject.elements[multiField[indexField]].value = formObject.elements[multiField[indexField]].value.trim();
							if (formObject.elements[multiField[indexField]].value == '') errorField	= true;
						}
						break;	
					case 'NAND' : // all fields must be filled or nothing
						var filled = 0;
						for (indexField=1; indexField < multiField.length; indexField++) {
							formObject.elements[multiField[indexField]].value = formObject.elements[multiField[indexField]].value.trim();
							if (formObject.elements[multiField[indexField]].value != '') filled++;
						}
						if (filled == 0 || filled == multiField.length-1) errorField = false;
						break;
				}
				
				if (errorField) {
					error += "\n - " + textField;
					for (indexField=0; indexField < multiField.length; indexField++) {
						fieldObject	= document.getElementById(multiField[indexField]);
						if (fieldObject != null) fieldObject.style.backgroundColor = color;
					}
				}
			
			} else { // default: text fiels
				
				formObject.elements[formField].value = formObject.elements[formField].value.trim();
				if (formObject.elements[formField].value == '') {
					error += "\n - " + textField;
					fieldObject	= document.getElementById(formField);
					if (fieldObject != null) fieldObject.style.backgroundColor = color;
				}
				
			}
		}
	}
	
	return error;
}

function checkForm(formObject, formName, color){
	var error = checkFormElements(formObject, formName, color);
	
    if(error){
        alert(error);
        return false;
    } else 
		return true;
}

function checkFormReturn(formObject, formName, color){
	return checkFormElements(formObject, formName, color);
}

function prepareForm(formName, color) {
	var ac    = -1;
	var formField, fieldObject, separator, multiField, indexField, errorField;
	
	while(need[formName][++ac]) {
		formField = need[formName][ac];
		if (formField.charAt(0) == '@' || formField.charAt(0) == '!') { // e-mail field or selection field
			formField = formField.substring(1);
			fieldObject	= document.getElementById(formField);
			if (fieldObject != null) fieldObject.style.backgroundColor = color;
		} else { 
			separator = formField.indexOf('|');
			if (separator != -1) { // multi element (separator is |)
			
				multiField	= formField.split('|');
				for (indexField=0; indexField < multiField.length; indexField++) {
					fieldObject	= document.getElementById(multiField[indexField]);
					if (fieldObject != null) fieldObject.style.backgroundColor = color;
				}
			
			} else {
				
				fieldObject	= document.getElementById(formField);
				if (fieldObject != null) fieldObject.style.backgroundColor = color;
				
			}
		}
	}
	
	return true;
}

function checkFormColor(frmObject, frmName, colorValid, colorInvalid)
{
	prepareForm(frmName, colorValid);
	return checkForm(frmObject, frmName, colorInvalid);
}

function checkFormColorReturn(frmObject, frmName, colorValid, colorInvalid)
{
	prepareForm(frmName, colorValid);
	return checkFormReturn(frmObject, frmName, colorInvalid);
}

function checkPibColor(frmObject, frmName, colorValid, colorInvalid)
{
	var error = '';
	var fieldObject, fieldName, index, drzava, pib;
	frmName += 'Pib';
	for(var i=0; i < frmObject.elements.length; i++) {
		fieldObject = frmObject.elements[i];
		fieldName	= frmObject.elements[i].name;
		if ( (fieldObject.type == 'select' || fieldObject.type == 'select-one') && fieldName.length > 8 && fieldName.substring(0,8) == 'idDrzava') {
			index	= fieldName.substring(8);
			drzava	= fieldObject;
			
			if ( frmObject.elements['pib'+index] != null )
				pib = frmObject.elements['pib'+index];
			else
				pib = null;
				
			drzava.style.backgroundColor = colorValid;
			if(pib != null) pib.style.backgroundColor = colorValid;
			
			if (drzava.value == '0' || drzava.value == '') {
				error += "\n - " + text[frmName][0] + " (" + index + ".)";
				drzava.style.backgroundColor = colorInvalid;
			}
			
			if (pib == null || pib.value == '') {
				error += "\n - " + text[frmName][1] + " (" + index + ".)";
				if(pib != null) pib.style.backgroundColor = colorInvalid;
			}
		}
	}
	
	 if(error) {
        alert(error);
        return false;
    } else 
		return true;
}

function isNumeric(value)
{
	var validChars	= "0123456789.";
	var isNumber	= true;
	var currentChar;
	
	if (value != '') {
		for (var i=0; i < value.length && isNumber == true; i++) { 
			currentChar = value.charAt(i); 
			if (validChars.indexOf(currentChar) == -1) {
				isNumber = false;
			}
		}
	} else 
		isNumber = false;
	return isNumber;
}

function chkMaxNumberValue(field, maxNumber)
{
	if (isNumeric(field.value)) {
		if (parseFloat(field.value) > maxNumber) 
			field.value = maxNumber;
		else
			field.value = parseFloat(field.value);
	} else {
		field.value = maxNumber;
	}
	return true;
}

function chkMinNumberValue(field, minNumber)
{
	if (isNumeric(field.value)) {
		if (parseFloat(field.value) < minNumber) 
			field.value = minNumber;
		else
			field.value = parseFloat(field.value);
	} else {
		field.value = minNumber;
	}
	return true;
}

function chkNumberScope(field, minNumber, maxNumber)
{
	if (isNumeric(field.value)) {
		if (parseFloat(field.value) < minNumber) 
			field.value = minNumber;
		else if (parseFloat(field.value) > maxNumber) 
			field.value = maxNumber;
		else
			field.value = parseFloat(field.value);
	} else {
		field.value = minNumber;
	}
	return true;
}

function checkAllFields(frm)
{
	var error = '';
	for (var i=0; i<frm.length; i++)
		if (frm.elements[i].value == '') error += "line " + i + "\n";

	if (error != '') {
		alert(info['all_fields']);
		return false;
	} else {
		return true;
	}
		
}

function checkAllCheckbox(frm, status)
{
	for(var i=0; i < frm.elements.length; i++)
		if (frm.elements[i].type == 'checkbox') frm.elements[i].checked = status;
}

function checkLength(elementFrom, elementTo, length)
{
	if (elementFrom.value.length >= length) elementTo.focus();
	return true;
}