function $(id)
{
	return document.getElementById(id);
}

function dollar(id)
{
	return document.getElementById(id);
}

////////////////////////////////////////////////////////////////////////////////
// AJAX
////////////////////////////////////////////////////////////////////////////////
var ajax_population_field = null;
var ajax_indicator = null;

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 alert('Wrong population field given, AJAX cannot execute correctly!');
	
	if(ajax_indicator != null && ajax_indicator != undefined && ajax_indicator != '')
		ajax_indicator.style.display = 'none';
}

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;
}

function newsletter_additional(data)
{
	if (data == true)
		document.getElementById('additional').style.display = 'block';
	else
		document.getElementById('additional').style.display = 'none';
}

function newsletter_validation()
{
	var reg = /([a-z,0-9,_]{1,64})@([a-z,0-9,_]{1,64})\.([a-z]{1,6})/;
	var counter = 0;
	
	if (reg.exec(document.getElementById('newsletter_email').value) == null)
	{
		alert('Vaša e-mail adresa nije pravilno upisana.');
		counter++;
	}
	else if (document.getElementById('newsletter_newsletter').checked == false && document.getElementById('newsletter_preporuke').checked == false)
	{
		alert('Niste odabrali ni primanje newslettera ni preporuka.');
		counter++;
	}
	else if (document.getElementById('newsletter_preporuke').checked == true)
	{
		var podrucja = document.getElementById('podrucja');
		var podrucja_chk = podrucja.getElementsByTagName('input');
		var counter_podrucja = 0;
		
		for (var i = 0; i < podrucja_chk.length; i++)
			if (podrucja_chk[i].checked == true) counter_podrucja++;
		
		var zupanije = document.getElementById('zupanije');
		var zupanije_chk = zupanije.getElementsByTagName('input');
		var counter_zupanije = 0;
		
		for (var i = 0; i < zupanije_chk.length; i++)
			if (zupanije_chk[i].checked == true) counter_zupanije++;
		
		if (counter_podrucja == 0)
		{
			alert('Nije odabrano nijedno područje.');
			counter++;
		}
		else if (counter_zupanije == 0)
		{
			alert('Nije odabrano nijedna županija.');
			counter++;
		}
	}
	
	if (counter > 0)
		return false;
	else
		return true;
}




function isRealNumber(value)
{
	return !isNaN(value);
}

function isInteger(value)
{
	return !isNaN(value);
}

function dump(obj){
	var string = '';

	for(x in obj){
		try{
			if(typeof(obj[x]) != 'function')
				string += x + '=' + obj[x] + "\n";
		} catch(e){
		}
	}
		alert(string);
}

function go_report_print(url)
{
	if($('reports_all').checked)
		url += '&data[all]=1';
		
	var reports_user = $('reports_user');
	url += '&data[user]='+reports_user.options[reports_user.selectedIndex].value;
	var reports_car = $('reports_car');
	url += '&data[car]='+reports_car.options[reports_car.selectedIndex].value;
	url += '&data[date][from]='+$('reports_time_from').value;
	url += '&data[date][to]='+$('reports_time_to').value;
	
	window.open(url);
}


function validate(form)
{
	var validation_fields = ['input', 'textarea'];
	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++)
		{
			var description = flds[j].getAttribute('description');
			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;
					error_fields[error_fields.length] = flds[j];
					var evl = 'var tmp = new String(message_'+validation+'); error_message[error_message.length] = tmp.replace("%s", "'+opis+'"); ';
// 					alert(evl);
					eval(evl);
				}
			}
			var required = flds[j].getAttribute('required');
			if(required)
			{
				if(!flds[j].value.length)
				{
					no_errors = false;
					error_fields[error_fields.length] = flds[j];
					var evl = 'var tmp = new String(message_required); error_message[error_message.length] = tmp.replace("%s", "'+opis+'"); ';
// 					alert(evl);
					eval(evl);
				}
			}
			var required_special = flds[j].getAttribute('required_special');
			if(required_special)
			{
				eval('var success = required_' + required_special + '(flds[j]);');
				if(!success)
				{
					no_errors = false;
					error_fields[error_fields.length] = flds[j];
					var evl = 'var tmp = new String(message_required_' + required_special + '); error_message[error_message.length] = tmp.replace("%s", "'+opis+'"); ';
// 					alert(evl);
					eval(evl);
				}
			}
			
			if(!in_array(flds[j], error_fields))
				ok_fields[ok_fields.length] = flds[j];
		}
	}
	if(error_message.length > 0)
	{
		alert(error_message.join("\n"));
	}
	
	for(var i = 0; i < error_fields.length; i++)
	{
		if(i == 0)
			error_fields[i].focus();
// 		error_fields[i].style.border = "1px solid red";
	}
	for(var i = 0; i < ok_fields.length; i++)
	{
		if(!ok_fields[i].readonly);
// 			ok_fields[i].style.border = "1px solid black";
	}
// 	return false;
	return no_errors;
}

function required_if_costs_are_cash(field)
{
	var selects = document.getElementsByTagName('select');
	for(var i = 0; i < selects.length; i++)
	{
		var check = selects[i].getAttribute('if_cash_napomena_required');
		if(check == '1')
		{
			if(selects[i].value == 'COMVC')
			{
				if(field.value.length == 0)
					return false;
			}
		}
	}
	
	return true;
}

function validate_integer(field)
{
	if(field.value.length > 0 && !isInteger(field.value))
		return false;
	return true;
}

function validate_date(field)
{
	var regex = /^([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{4})\.{0,1}$/;
	if(field.value.length > 0 && !regex.test(field.value))
		return false;
	return true;
}


function validate_date_less_than_now(field)
{
	var dt = new Date();
	var mon = dt.getMonth()+1;
	var gthan = dt.getDate()+'.'+mon+'.'+dt.getFullYear()+'.';
	var regex = /^([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{4})\.{0,1}$/;
	if(field.value.length > 0 && (!regex.test(field.value) || compareDates(field.value) >= 0))
	{
		message_date_less_than_now = message_date_less_than_now + ' (' + gthan + ')';
		return false;
	}
	return true;
}


function validate_float(field)
{
	if(field.value.length > 0 && !isRealNumber(field.value))
		return false;
	return true;
}

function validate_money(field)
{
	var regex = /^(((([1-9]{1})([0-9]{0,2})){0,1})|(0))(\.[0-9]{3})*(\,[0-9]{2}){0,1}$/;
	if(!regex.test(field.value))
		return false
	else
		return true;
}

function validate_integer_greater_than(field)
{
	var gthan = field.getAttribute('greater_than');
	if(field.value.length > 0 && (!isInteger(field.value) || (field.value*1) <= (gthan*1) ))
	{
		message_integer_greater_than = 'Polje "%s" mora sadržavati cijeli broj veći od ' + gthan;
		return false;
	}
	return true;
}


function validate_length(field)
{
	var smthan = field.getAttribute('length_limit');
	if(smthan && field.value.length > smthan)
	{
		var tmp = new String(field.value);
		field.value = tmp.substr(0,254);
		return false;
	}
	
	return true;
}

function validate_length(field)
{
	var smthan = field.getAttribute('length_limit');
	if(smthan && field.value.length > smthan)
	{
		var tmp = new String(field.value);
		field.value = tmp.substr(0,254);
		return false;
	}
	
	return true;
}

function validate_length_and_cash_required(field)
{
	var smthan = field.getAttribute('length_limit');
	if(smthan && field.value.length > smthan)
	{
		var tmp = new String(field.value);
		field.value = tmp.substr(0,254);
		return false;
	}
	
	return true;
}

function special_acc_approval_validation(form, field)
{
	var valid = true;
	if(!validate(form))
		valid = false;
	if(field.value.length < 1)
	{
		var tmp = new String(message_required); 
		alert(tmp.replace("%s", field.getAttribute('description')));
		field.style.borderColor="red";
		valid = false;
	}
	return valid;
}


function in_array(element, array)
{
	for(var i = 0; i < array.length; i++)
		if(element == array[i])
			return true;	
	return false;
}

function convToDate(strDate){
	var aryDate = new Array();
	var year = strDate.substring(6,10);
	var month = strDate.substring(3,5);
	month = month == '' ? 0 : month - 1;
	var day = strDate.substring(0,2);
	var hour = strDate.substring(12,14);
	hour = hour == '' ? 0 : hour;
	var min = strDate.substring(15,17);
	min = min == '' ? 0 : min;
	var second = strDate.substring(18,20);
	second = second == '' ? 0 : second;

	return new Date(year, month, day, hour, min, second);
}

function compareDates(dt1, dt2)
{
	var date1 = convToDate(dt1);
	if(dt2 != undefined)
	{
		var date2 = convToDate(dt2);
	}
	else
		var date2 = new Date();
		
	return date1.getTime() - date2.getTime();
}
