
function buy_valid() {
	
	function scrollTo() {
		var ava = document.getElementById('buy');
		var invalid = ava.getElementsByTagName('h6');
		for(var i=0; i<invalid.length; i++) {
			var zawartosc = invalid[i].textContent;
			if(zawartosc) {
				var elem = invalid[i].parentNode;
			//	elem.scrollIntoView(true);
			//	var label = elem.offsetTop;
			//	window.scrollTo(0, label+300);
				var top = 0;
				if(elem.offsetParent) {
					do {
					 // left += elem.offsetLeft;
					  top += elem.offsetTop;
					} while(elem = elem.offsetParent)
				}
				window.scrollTo(0, top);
				return;
			}
		} 
	}
	
	function isValid(pole, regex){
		
		if(pole.value == "" && (pole.id == 'name'  || 
								pole.id == 'alternative_object' ||
								pole.id == 'number_people' ||
								pole.id == 'cont_message'))
		{
			return true;
		}else if(pole.value == "") {
			style(pole, false);
			return false;
		}else {
			if(regex.test(pole.value)){
				style(pole, true);
				document.getElementById("i"+pole.id).innerHTML = "";
				return true;
			}else{
				style(pole, false);
				document.getElementById("i"+pole.id).innerHTML = 'Niepoprawne dane!';
				return false;
			}
		}
	}

	function isInvalid(pole, regex){
		if(regex.test(pole.value)){
			style(pole, false);
			document.getElementById("i"+pole.id).innerHTML = "Pole zawiera niedozwolone znaki!";
			return false;
		}else{
			style(pole, true);
			document.getElementById("i"+pole.id).innerHTML = "";
			return true;
		}
	}

	function isLenght(pole, min_liczba, max_liczba) {
		var len = pole.value.length;
		var text = '';
		if(len < min_liczba) {
			style(pole, false);
			if(pole.id == 'number_people') text = 'Uzupełnij to pole!';
			document.getElementById("i"+pole.id).innerHTML = text;
			return false;
		}else if(len > max_liczba) {
			style(pole, false);
			if(pole.id == 'number_people') text = 'Maksymalna ilośś obób to 999';
			document.getElementById("i"+pole.id).innerHTML = text;
			return false;
		}else{
			style(pole, true);
			document.getElementById("i"+pole.id).innerHTML = "";
			return true;
		}
	}

	function isNotEmpty(pole){
		if(pole.value == "" || pole.value == "undefined"){
			style(pole, false);
			return false;
		}else{
			style(pole, true);
			return true;
		}
	}

	function isNumber(pole){
		if(isNotEmpty(pole)){
			if(isNaN(pole.value)){
				style(pole, false);
				document.getElementById("i"+pole.id).innerHTML = "To pole musi być liczbą!";
				return false;
			}else{
				style(pole, true);
				document.getElementById("i"+pole.id).innerHTML = "";
				return true;
			}
		}else{
			return false;
		}
	}

	function isCheckedAddress(pole){
		var street2 = document.getElementById("street2");
		var city2 = document.getElementById("city2");
		var zip_code2 = document.getElementById("zip_code2");
		zip_code2Reg = /^[0-9\- ]{6,20}$/;
		if(pole.checked == true){
			if(	isNotEmpty(street2) && isNotEmpty(city2) && isNotEmpty(zip_code2) && isValid(zip_code2, zip_code2Reg) ) {
				return true;
			}
		}else{
			return true;
		}
	}

	function isChecked(pole){
		if(pole.checked == false){
			style(pole, false);
			document.getElementById("i"+pole.id).innerHTML = "Proszę wyrazić zgodę";
			return false;
		}else{
			style(pole, true);
			return true;
		}
	}
	
	
	function isSelected(pole){
		var radio = document.getElementsByName(pole);
		for(var i=0; i<radio.length; i++){
			if(radio[i].checked == true){
				document.getElementById("i" + pole).innerHTML = "";
				return true;
			}
		}
		document.getElementById("i" + pole).innerHTML = "Ta wartość musi być liczbą!";
		return false;
	}


	function style(pole, status){	
		if(status){
			document.getElementById("i"+pole.id).innerHTML = "";
		//	pole.className = "";
			pole.style.border = '1px solid #AAAAAA';
		}else{
			var text = "To pole jest wymagane!";
			if(pole.id == 'program') {
				text = "Wybierz program";
			}
			document.getElementById("i"+pole.id).innerHTML = text;
		//	pole.className = "error";
			pole.style.border = '1px solid #DB1212';
		}
	}

	function testa() {

		var programs_list = document.getElementById('programs-list');
		var tbody = programs_list.getElementsByTagName('tbody')[0];
		var program_single = tbody.getElementsByTagName('tr');

		for(i=0; i<program_single.length; i++) {
			
			var pc = program_single[i].firstChild;
			var ch = pc.getElementsByTagName('input')[0];
			var id = ch.getAttribute('id');
			
			if(ch.checked == true) {
				
				var numLicence = document.getElementById('num_licens['+ id +']');
				var numLicenceValue = numLicence.value;
				var version = document.getElementById('version['+ id +']');
				var versionValue = version.value;
				var countEmp = document.getElementById('count_emp['+ id +']');
				
				validLicence(id, numLicence);
				numLicence.onchange = function() {
					validLicence(false, this);
				}

				validVersion(id, version, 'version');
				version.onchange = function() {
					validVersion(false, this, 'version');
				}
				if(countEmp) {
					validVersion(id, countEmp, 'count_emp');
					countEmp.onchange = function() {
						validVersion(false, this, 'count_emp');
					}
				}
			}
		}
	}
	
	
	function validLicence(id, numLicence) {
	
		if(id == false) {
			id = numLicence.id;
			id = id.replace('num_licens\[', '');
			id = id.replace('\]', ''); 
		}
		numLicenceValue = numLicence.value;
		
		var td = numLicence.parentNode;
		var existspan = td.getElementsByTagName('h6')[0];
		if(!existspan) {
			var span = document.createElement('h6');
			span.className = 'wrong';
			span.id = "note[" +id + "]";
			span.innerHTML = 'Podaj liczbę wersji';
			td.appendChild(span);
		}
		
		var span = document.getElementById("note[" + id + "]");
		var wrongBorder = '1px solid #DB1212';
		var okBorder = '1px solid #AAAAAA';
		var inputMargin = '4px';
		if(numLicenceValue != '') {
			if(isNaN(numLicenceValue)) {
				span.innerHTML = 'To pole musi być liczbą';
				numLicence.style.border = wrongBorder;
				numLicence.style.marginBottom = inputMargin;
			}else{
				span.innerHTML = '';
				numLicence.style.border = '';
				numLicence.style.marginBottom = '';
				numLicence.style.border = okBorder;
			//	numLicensHidden.value = numLicensHidden.value + id + ":" + numLicenceValue + ',';
				insertHidden('num_licence', numLicenceValue, id);
			}

		}else{
			span.innerHTML = 'Podaj liczbę wersji';
			numLicence.style.border = wrongBorder;
			numLicence.style.marginBottom = inputMargin;
			removeHidden('num_licence', id);
		} 
		
	} 

	function validVersion(id, pole, string) {

		if(id == false) {
			id = pole.id;
			id = id.replace(string + '\[', '');
			id = id.replace('\]', ''); 
		}

		poleValue = pole.value;
		var td = pole.parentNode;
		var existspan = td.getElementsByTagName('h6')[0];
		if(!existspan) {
			var span = document.createElement('h6');
			span.className = 'wrong';
			span.id = "note_"+string+"[" +id + "]";
			span.innerHTML = 'Wybierz wersję';
			td.appendChild(span);
		}
		
		var span = document.getElementById("note_"+string+"[" + id + "]");
		var wrongBorder = '1px solid #DB1212';
		var okBorder = '1px solid #AAAAAA';
		var inputMargin = '4px';
		if(poleValue != '') {
			span.innerHTML = '';
			pole.style.border = okBorder;
			pole.style.marginBottom = '';
			insertHidden(string, poleValue, id);
		}else{
			span.innerHTML = 'Wybierz wersję';
			pole.style.border = wrongBorder;
			pole.style.marginBottom = inputMargin;
			removeHidden(string, id);
		}
	} 
	
	function removeHiddenProgram(pole, id) {
		var value = pole.value.split(',');
		var newValue = '';
		for(j in value) {
			if(value[j] != id && value[j] != '') {
				newValue += value[j] + ',';
			}
		}
		return newValue;
	}
	
	function removeHidden(pole, id) {
		
		var hidden = document.getElementById(pole);
		var hiddenV = hidden.value;
		var len = hiddenV.length;
		var reg = /,$/;
		if(reg.test(hiddenV)) {
			hiddenV = hiddenV.substring(0, len-1);
		} 
		
		if(len>0) {
			var tab = hiddenV.split(',');		
			for(j=0; j<tab.length; j++) {
				var item = tab[j].split(':');
				if(item[0] == id) {
					tab[j] = '';
				} 
			}
			tab.sort();
			var cost = '';
			for(k=0; k<tab.length; k++) {
				if(tab[k] != '') {
					cost += tab[k] + ',';
				}
			}
			hidden.value = cost;
		}
	}
	
	
	function insertHidden(pole, poleValue, id) {
		var hidden = document.getElementById(pole);

		var len = hidden.value.length;
		if(len>0) {
			var tablica = hidden.value.substr(0, len-1);
			var tab = tablica.split(',');		
			for(j=0; j<tab.length; j++) {
				var item = tab[j].split(':');
				if(item[0] == id) {
					tab[j] = '';
				} 
			}
			//alert(eval(tab));
			tab.push(id + ":" + poleValue);
			tab.sort();
			var cost = '';
			for(k=0; k<tab.length; k++) {
				if(tab[k] != '') {
					cost += tab[k] + ',';
				}
			}
			hidden.value = cost;
		}else{
			hidden.value = id + ":" + poleValue + ','; 
		}
	/* 	var hl = hidden.value;
		hidden.value = hl.substr(0, hl.length-1); */
	}

	function removeWrongInfo(pole, id, inputName) {
		var dele = document.getElementById(pole + '[' + id + ']');
		if(dele) {
			var rodz = dele.parentNode;
			rodz.removeChild(dele);
		}
		var input = document.getElementById(inputName + '[' + id + ']');
		if(input) {
			input.style.border = '1px solid #AAAAAA';
		}
	}
	
	
	function isProgramValid() {
	
		var programV = program.value;
	 	var reg = /,$/;
		if(reg.test(programV)) {
			programV = programV.substring(0, programV.length-1);
		} 

		var numLicenceV = numLicensHidden.value;
		var versionV = versionHidden.value;

		var tabProg = programV.split(',');
		tabProg.sort();
		var tabNum = numLicenceV.split(',');
		var tabVer = versionV.split(',');
		
		var countNum = 0;
		var countVer = 0;
		
	//	var countEmpHidden = document.getElementById('count_emp');
		if(countEmpHidden) {
			var countEmpV = countEmpHidden.value;
			var tabEmp = countEmpV.split(',');
			var countEmp = 0;
		}
		
		for(i=0; i<tabProg.length; i++) {
		
			if(tabNum[i]) {
				var num = tabNum[i].split(':');
				if(num[0] == tabProg[i] && num[1] != '') {
					countNum++;
				} 
			}
			if(tabVer[i]) {
				var ver = tabVer[i].split(':');
				if(ver[0] == tabProg[i] && ver[1] != '') {
					countVer++;
				} 
			}
			if(countEmpHidden) {
				if(tabEmp[i]) {
					var emp = tabEmp[i].split(':');
					if(emp[0] == tabProg[i] && emp[1] != '') {
						countEmp++;
					} 
				}
			}
		}
		var len = tabProg.length;
	//	alert(len + ',' + countNum + ',' + countVer + ',' + countEmp);
		if(!countEmpHidden) {
			countEmp = len;
		}
		
		if(countNum == len && countVer == len && countEmp == len) {
			return true;
		}else{
			return false;
		}
	}
		
	
	function onSubmit(form){
		testa();
		if(
	 		isNotEmpty(form.program) &&
		//	testa() &&
			isProgramValid() &&
			isNotEmpty(form.company_name) && 
		 	isNotEmpty(form.telephone) && isValid(form.telephone, telephoneReg) &&
			isNotEmpty(form.nip) && isValid(form.nip, nipReg) &&
			isNotEmpty(form.email) && isValid(form.email, emailReg) &&
			isNotEmpty(form.street) && 
			isNotEmpty(form.city) && 
			isNotEmpty(form.zip_code) && isValid(form.zip_code, zip_codeReg) &&
			isCheckedAddress(form.different_address/* , form.street2, form.city2, form.zip_code2, zip_codeReg */) &&
			isNotEmpty(form.payment_form) && 
			isNotEmpty(form.payment_method) && 
			isChecked(form.consent_message) && 
			isChecked(form.consent_data)  
		) {
			return true;
		//	alert('tak');
		}else{
			scrollTo();
		//	alert('nie');			
			return false;
		}
	}

 
	var program = document.getElementById('program');
	var numLicensHidden = document.getElementById('num_licence');
	var versionHidden = document.getElementById('version');
	var countEmpHidden = document.getElementById('count_emp');
	

	var progl = document.getElementById('programs-list');
	var progtbody = progl.getElementsByTagName('tbody')[0];
	var program_check = progtbody.getElementsByTagName('tr');
	for(i=0; i<program_check.length; i++) {
	
		var fc = program_check[i].firstChild;
		var checkbox = fc.getElementsByTagName('input')[0];
		//alert('num_licens['+ checkbox.id +']');
		var num_licens = document.getElementById('num_licens['+ checkbox.id +']');
		var version = document.getElementById('version['+ checkbox.id +']');
		var count_emp = document.getElementById('count_emp['+ checkbox.id +']');

		num_licens.onblur = function() {
			id = this.id;
			id = id.replace('num_licens\[', '');
			id = id.replace('\]', ''); 
			if(program.value.search(id) >= 0) {
				validLicence(false, this);
			}
		}

		version.onblur = function() {
			id = this.id;
			id = id.replace('version\[', '');
			id = id.replace('\]', ''); 
			if(program.value.search(id) >= 0) {
				validVersion(false, this, 'version');
			}
		}
		
		if(count_emp) {
			count_emp.onblur = function() {
				id = this.id;
				id = id.replace('count_emp\[', '');
				id = id.replace('\]', ''); 
				if(program.value.search(id) >= 0) {
					validVersion(false, this, 'count_emp');
				}
			}
		}
		
		checkbox.onclick = function() {
			if(this.checked == true) {
			//	if(program.value) { var mark = ','; } else { mark = ''; }
			//	program.value = program.value + mark + this.id; 
				program.value = program.value + this.id + ','; 
			}else{
				program.value = removeHiddenProgram(program, this.id);
				removeHidden('num_licence', this.id);
				removeHidden('version', this.id);
				removeWrongInfo('note', this.id, 'num_licens');
				removeWrongInfo('note_version', this.id, 'version');

				if(countEmpHidden) {
					removeHidden('count_emp', this.id);
					removeWrongInfo('note_count_emp', this.id, 'count_emp');
				}
			}
		} 
		
	}   
	
	var company_name = document.getElementById("company_name");
	company_name.onblur = function(){
		isNotEmpty(this);
	} 
		
	var nip = document.getElementById("nip");
	nipReg = /^[0-9\-\+ ]{9,30}$/;
	nip.onblur = function(){
//		isNotEmpty(this);
		isValid(this, nipReg);
	}	
		
	var telephone = document.getElementById("telephone");
	telephoneReg = /^[0-9\-\+ ]{9,22}$/;
	telephone.onblur = function(){
//		isNotEmpty(this);
		isValid(this, telephoneReg);
	}

	var email = document.getElementById("email");
//	emailReg = /^(\w[._-]?)+@\w+[.]\w+/;
	//emailReg = /^\w+@\w+[.]\w+/;
	emailReg = /@/;
	email.onblur = function(){
	//	isNotEmpty(this);
		isValid(this, emailReg);
	}
	
	var different_address = document.getElementById("different_address");
	different_address.onclick = function(){
		var street2 = document.getElementById("street2");
		var city2 = document.getElementById("city2");
		var zip_code2 = document.getElementById("zip_code2");
		zip_code2Reg = /^[0-9\- ]{6,20}$/;
		if(this.checked == true) {
		
			street2.disabled = '';
			city2.disabled = '';
			zip_code2.disabled = '';
			
			street2.onblur = function(){
				isNotEmpty(this);
			} 	
			
			city2.onblur = function(){
				isNotEmpty(this);
			} 
			
			zip_code2.onblur = function(){
				isValid(this, zip_code2Reg);
			}
		}else{
			street2.disabled = 'disabled';
			city2.disabled = 'disabled';
			zip_code2.disabled = 'disabled';
			style(street2, true);
			style(city2, true);
			style(zip_code2, true);
		}
	}
	
	var street = document.getElementById("street");
	street.onblur = function(){
		isNotEmpty(this);
	} 
	
	var city = document.getElementById("city");
	city.onblur = function(){
		isNotEmpty(this);
	} 

	var zip_code = document.getElementById("zip_code");
	zip_codeReg = /^[0-9\-_ ]{6,20}$/;
	zip_code.onblur = function(){
		isValid(this, zip_codeReg);
	}
	
	var payment_form = document.getElementById("payment_form");
	payment_form.onblur = function(){
		isNotEmpty(this);
	} 
	
	var payment_method = document.getElementById("payment_method");
	payment_method.onblur = function(){
		isNotEmpty(this);
	} 
	
	var consent_message = document.getElementById("consent_message");
	consent_message.onclick = function(){
		isChecked(this);
	}
	 
	var consent_data = document.getElementById("consent_data");
	consent_data.onclick = function(){
		isChecked(this);
	}
	 
	document.forms["buy"].onsubmit = function(){
		return onSubmit(this);
	}
	
}
