var validation_success = false;

function validate(form)
{
	var validation_fields = ['input', 'textarea', 'select'];
	var error_fields = [];
	var error_message = [];
	var no_errors = true;
	var ok_fields = [];
	for(var i=0; i < validation_fields.length; i++)
	{
		var flds = form.getElementsByTagName(validation_fields[i]);
		for(var j=0; j < flds.length; j++)
		{
			if(flds[j].type == 'button' || flds[j].type == 'submit' || flds[j].type == 'reset')
				continue;
			var description = flds[j].getAttribute('opis');
			var validation = flds[j].getAttribute('validation');
			var opis = description ? description : flds[j].name;
			if(validation)
			{
				eval('var success = validate_' + validation + '(flds[j]);');
				if(!success)
				{
					no_errors = false;
					var evl = 'var tmp = new String(message_'+validation+'); tmp = tmp.replace("%s", "'+opis+'"); ';
// 					alert(evl);
					eval(evl);
					flds[j].setAttribute("err_message", tmp);
					error_fields[error_fields.length] = flds[j];
				}
			}
			var required = flds[j].getAttribute('required');
			if(required)
			{
				if(!flds[j].value.length)
				{
					no_errors = false;
					var evl = 'var tmp = new String(message_required); tmp = tmp.replace("%s", "'+opis+'"); ';
// 					alert(evl);
					eval(evl);
					flds[j].setAttribute("err_message", tmp);
					error_fields[error_fields.length] = flds[j];
					
				}
			}
			
			if(!in_array(flds[j], error_fields))
				ok_fields[ok_fields.length] = flds[j];
		}
	}
	
	for(var i = 0; i < error_fields.length; i++)
	{
		if(i == 0)
			error_fields[i].focus();
		error_fields[i].className = "error";
		var err_field = document.getElementById(error_fields[i].getAttribute('error_field'));
		err_field.innerHTML = error_fields[i].getAttribute('err_message');
		err_field.style.display = 'inline';
	}
	for(var i = 0; i < ok_fields.length; i++)
	{
		if(!ok_fields[i].readonly)
			ok_fields[i].className = "normal";
		var err_field = document.getElementById(ok_fields[i].getAttribute('error_field'));
		if(err_field)
		{
			err_field.value = '';
			err_field.style.display = 'none';
		}
	}
// 	return false;
	return no_errors;
}

var captcha_ajax_field = null;
function validate_ajax_captcha(fld)
{
	var url = fld.getAttribute('ajaxurl');
	fld.setAttribute('err_message', message_ajax_captcha);
	post_ajax(url, null, document.getElementById(form_id), null, false);
	captcha_ajax_field = fld;
	return true;
}


function in_array(element, array)
{
	for(var i = 0; i < array.length; i++)
		if(element == array[i])
			return true;	
	return false;
}


function post_ajax(url, indicator_field, form, population_field)
{
	if(indicator_field != null && indicator_field != undefined && indicator_field != '')
		indicator_field.style.display = 'block';
	
	ajax_population_field = population_field;
	ajax_indicator = indicator_field;
	
	url += '&ajax=1';
	if (form != undefined && form != null)
		var post_body = get_form_values(form);
	else
		var post_body = '';

	new ajax(url, { postBody:post_body, onComplete: process_ajax});
}

function process_ajax(req)
{
	if(ajax_population_field != null)
		ajax_population_field.innerHTML = req.responseText;
	else eval(req.responseText);
	
	if(ajax_indicator != null && ajax_indicator != undefined && ajax_indicator != '')
		ajax_indicator.style.display = 'none';
}

function finish_validation(captcha_ok)
{
	if(captcha_ok != '1')
	{
		captcha_ajax_field.className = "error";
		var err_field = document.getElementById(captcha_ajax_field.getAttribute('error_field'));
		err_field.innerHTML = captcha_ajax_field.getAttribute('err_message');
		err_field.style.display = 'inline';
	}
	else
	{
		if(!captcha_ajax_field.readonly)
			captcha_ajax_field.className = "normal";
		var err_field = document.getElementById(captcha_ajax_field.getAttribute('error_field'));
		if(err_field)
		{
			err_field.value = '';
			err_field.style.display = 'none';
		}
		if(validation_success)
			document.getElementById(form_id).submit();
	}
}



function get_form_values(form)
{
	var types = ['input', 'select'];
	var fval = [];
	for(var i = 0; i < types.length; i++)
	{
		var els = form.getElementsByTagName(types[i]);
		for(var j = 0; j < els.length; j++)
		{
			if(types[i] == 'select')
			{
				fval[fval.length] = els[j].name+'='+els[j].options[els[j].selectedIndex].value;
			}
			else if(types[i] == 'input')
			{
				if((els[j].type == 'checkbox' || els[j].type == 'radio'))
				{
					if(els[j].checked == true)
						fval[fval.length] = els[j].name+'='+els[j].value;
				}
				else if(els[j].value != '' && els[j].type != 'submit')
					fval[fval.length] = els[j].name+'='+els[j].value;
			}	
		}
	}
	fval = fval.join('&');
	
	return fval;
}