var lastTarget;

function addListeners(){
	lastTarget = null;
	var field = document.getElementsByTagName('input');
	for(var i = 0 ; i < field.length ; i++){
		if(field[i].type == 'text')
			field[i].onblur = waitAndValidate;
	}
	document.getElementById('first').focus();
}

function waitAndValidate(e){
	var targ;
	if (!e) var e = window.event;
	if (e.target) targ = e.target;
	else if (e.srcElement) targ = e.srcElement;
	if (targ.nodeType == 3)
		targ = targ.parentNode;
	lastTarget = targ;
	var t = setTimeout("validateEl()", 10);
}

//do wyświetlania ostrzeżeń
function setLabel(t, text){
	var e = document.getElementById('alerts');
	if(e!= 'undefined' && e != null) e.innerHTML = text;
	lastTarget = null;
}

//waliduj wszystkie pola, wypisz błąd ostatniego
function validateAll(){
	var field = document.getElementsByTagName('input');
	for(var i = 0 ; i < field.length ; i++){
		if(field[i].type == 'text'){
			lastTarget = field[i];
			if (!validateEl(true)) return false;
		}
	}
	
	return true;
}

function checkNIP(num){
	if(num.length != 10) return false;
	var arrSteps = new Array(6, 5, 7, 2, 3, 4, 5, 6, 7);
	var intSum = 0;
	for (var i = 0; i < 9; i++){
		intSum += arrSteps[i] * num.charAt(i);
	}
	var init = intSum % 11;
 
	intControlNr = (init == 10) ? 0 : init;
	if(intControlNr == num.charAt(9)) return true;
	return false;
}

/**
 * Waliduje wszystkie inputy na podstawie atrybutu name
 * @param {Object} all - dla true nie wypisuje potwierdzeń o poprawnych danych,
 * jedynie błędy (po wciśnięciu przycisku submit)
 */
function validateEl(all){
	if(all == 'undefined' || all == null) all = false;
	var t = lastTarget;
	//console.log(t.name + ' ' + t.value + '\n');
	if(!t) return false;
	else if(t.name == 'phone'){
		var re = /^\+?([0-9 -]){7,}$/;
		if (re.test(t.value)) {
			if(!all)setLabel(t, 'Telefon wpisany OK');
			return true;
		}
		else{
			setLabel(t, 'Popraw numer telefonu.');
			return false;
		}
	}
	else if(t.name == 'firstname' || t.name == 'lastname'){
		if(t.value != ''){
			setLabel(t, '');
			return true;
		}
		else{
			setLabel(t, 'Wpisz swoje imię i nazwisko.');
			return false;
		}
	}
	else if(t.name == 'city'){
		if(t.value != ''){
			setLabel(t, '');
			return true;
		}
		else{
			setLabel(t, 'Wpisz miasto, w którym działasz.');
			return false;
		}
	}
	else if(t.name == 'nip'){
		if (checkNIP(t.value)) {
			setLabel(t, 'NIP wpisany OK');
			return true;
		}
		else{
			setLabel(t, 'Popraw numer NIP.');
			return false;
		}
	}
	else if(t.name == 'date'){
		var re = /^([0-9]){1,2}(\.|-)([0-9]){1,2}(\.|-)([0-9]){2,4}$/;
		if (re.test(t.value)) {
			if(!all)setLabel(t, 'Data wpisana OK.');
			return true;
		}
		else{
			setLabel(t, 'Zapisz datę w formacie: dd.mm.rrrr');
			return false;
		}
	}
	else if(t.name == 'email'){
		var re = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
		if (re.test(t.value)) {
			if(!all)setLabel(t, 'E-mail wpisany OK');
			return true;
		}
		else {
			setLabel(t, 'Popraw adres e-mail.');
			return false;
		}
	}
}

