Event.observe(window, 'load', function(event) {
	setHint();

	$$('.date').each(function(item) {
		Event.observe(item, 'change', function(event) {
			fieldDateSeparation(item);
		});
		new Insertion.After(item, '<input type="button" class="date_button" value="..." id="' + item.id + '_picker" />');
		Event.observe(item.id + '_picker', 'click', function(event){
			displayDatePicker(item.name);
		});
	});

	/*$$('input').each(function(item){
		item.writeAttribute('autocomplete', 'off');
	});*/
	
	$$('input.number').each(function(item){
		var formatted = new Element('input', {type: "text"});
		item.insert({before: formatted})
		formatted.formatter = new NumberFormat();
		
		formatted.formatter.setInputDecimal('.');
		formatted.formatter.setPlaces('0', false);
		formatted.formatter.setCurrencyValue('HUF');
		formatted.formatter.setCurrency(false);
		formatted.formatter.setNegativeRed(false);
		formatted.formatter.setSeparators(true, ' ', '.');
		
		formatted.formatter.setNumber(item.value); // obj.value is '-1000.247'
		formatted.value = formatted.formatter.toFormatted();
		var hidden = new Element("input", {type: "hidden", id: item.id, name: item.name, value: item.value});
		item.remove();
		formatted.insert({after: hidden});
		item = hidden;
		formatted.original = item;
	    formatted.observe('keyup', function(event){
	        setErrorMessage(this.original.id, "");
	        var value = $F(this).gsub(/ /, "");
	        this.original.value = value;
	        if (value) {
	        	if (isNaN(value)) {
	                setErrorMessage(this.original.id, "csak szamot lehet ide beirni");
	            } else {
					this.formatter.setNumber(value); // obj.value is '-1000.247'
	            	this.value = this.formatter.toFormatted();
	            }
	        }
	    });
	    formatted.observe('change', function() {
	    	this.original.fire('hidden:change');
	    });
	});
	
	$$('*[dependsOn]').each(function(item) {
		var dependsOn = item.readAttribute('dependsOn').strip();

		dependsOn.split(/\s+/).each(function(dep) {
			var obj = $(dep.split(':')[0]);
			try {
				if ($(obj).readAttribute('type') == 'radio' || $(obj).readAttribute('type') == 'checkbox' ) {
					Event.observe(obj, 'click', function(event) {
						item.doupdate();
					});
				} else {
					Event.observe(obj, 'change', function(event) {
						item.doupdate();
					});
				}
				if (!$(obj).dependants) {
					$(obj).dependants = new Array();
				}
				$(obj).dependants[obj.dependants.length] = item;
			} catch (e) {
//				alert('failed: ' + obj);
			}
			if (dep.split(':')[2] == "required") {
				$(obj).addClassName('required');
			}
		});
		
		item.doupdate = function(processors, startup) {
			var params = {'_this_': this.id};
			var dependsOn = this.readAttribute('dependsOn').strip();
			var has_empty_required = false;
			
			dependsOn.split(/\s+/).each(function(dep) {
				var value = $F(dep.split(':')[0]);
				var required = dep.split(':')[2] == 'required';
				has_empty_required = has_empty_required || required && (!value || value.blank());
				if (value && ((value.length && value.length > 0) || (value.blank && !value.blank()))) {
					params[dep.split(':')[1]] = $F(dep.split(':')[0]);
					params[dep.split(':')[1] + '_id_'] = dep.split(':')[0];
					if ($(dep.split(':')[0] + '_error')) {
						$(dep.split(':')[0] + '_error').hide();
					}
				}
			})
						
			if (!has_empty_required) {
				var updater = this.readAttribute('updater');
				if (updater.startsWith('url://') && !startup) {
					new Ajax.Request(updater.replace(/url:\/\//, '') + '.ajax', {parameters: params, onSuccess: function(request) {
						if (processors && processors.preProcess) {
							processors.preProcess();
						}
						request.responseText.evalScripts();
						if (processors && processors.postProcess) {
							processors.postProcess();
						}
						if (item.dependants) {
							for (var i=0; i < item.dependants.length; i++) {
								item.dependants[i].doupdate();
							}
						}
						
					}
					});
				} else if (updater.startsWith('script://')) {
					eval(updater.replace(/script:\/\//, ''));
					if (item.dependants) {
						for (var i=0; i < item.dependants.length; i++) {
							item.dependants[i].doupdate();
						}
					}
				}
			}
		};
		
		item.doupdate({}, true);
	});
	
});

function LeapYear(intYear) {
	return ((intYear % 100 == 0) && (intYear % 400 == 0)) || ((intYear % 4) == 0)  
}

var mnth_31 = {'1': 1, '01': 1, '3': 3, '03': 3, '5': 5, '05': 5, '7': 7, '07': 7, '8': 8, '08': 8, '10': 10, '12': 12};

function fieldDateSeparation(field) {
	var value = $F(field);
	var error = "";
	if (value) {
		value = value.replace(/[ -\.\/]/g, '');
		if (value.length != 8) {
			error += 'Az évet 4 számjeggyel, a hónapot és napot pedig vezet\u0151 0-val kérjük megadni!<br/>';
		}
		if (!value.match(/^\d*$/)) {
			error += 'Dátum mez\u0151be csak számot lehet megadni!';
			return;
		}
		var year = value.substring(0, 4);
		var mnth = value.substring(4, 6);
		var day  = value.substring(6, 8);
		if (mnth > 12 || mnth < 1) {
			error += 'A hónap minimum 1 maximum 12 lehet!';
		}
		
		if (mnth in mnth_31) {
			if (day > 31) {
				error += 'Az adott hónapban a napok száma nem lehet nagyobb 31-nél!';
				day = 31;
			}
		} else if (mnth != 2) {
			if (day > 30) {
				error += 'Az adott hónapban a napok száma nem lehet nagyobb 30-nál!';
				day = 30;
			}
		} else if (LeapYear(year) && mnth == 2 && day > 29) {
			error += 'Az adott év februárjában a napok száma nem lehet nagyobb 29-nél!';
			day = 29;
		}  else if (!LeapYear(year) && mnth == 2 && day > 28) {
			error += 'Az adott év februárjában a napok száma nem lehet nagyobb 28-nál!';
			day = 28;
		}
		field.value = year + "-" + mnth + "-" + day;
		setErrorMessage(field.id, error);
	}
}

function hideElement(item){
	$(item).ancestors()[0].hide();
}
function showElement(item){
	$(item).ancestors()[0].show();
}

function setHint(){
	if (!$('hint')) {
		new Insertion.Bottom(document.body, '<div id="hint"></div>');
	}
	$$('*[hint]').each(function(item) {
		Event.observe(item, 'mouseover', function(event) {
			szoveg = item.readAttribute('hint').strip();
			$('hint').show();
			getHint(event,szoveg);
		});
		Event.observe(item, 'mousemove', function(event) {
			positionHint(event);
		});
		Event.observe(item, 'mouseout', function(event) {
			$('hint').hide();
		});
	});
	$('hint').hide();
}

function getHint(event,szoveg){
	$('hint').innerHTML=szoveg;
	positionHint(event);
}

function positionHint(event){
	var hint_width = Element.getDimensions($('hint')).width;
	var hint_height = Element.getDimensions($('hint')).height;
	var paddingX = 15;
	var paddingY = 15;
	var contX = Element.getDimensions($('container')).width;
	var contY = Element.getDimensions($('container')).height;
	
	var siteX = Element.getDimensions($('site')).width;
	var siteY = Element.getDimensions($('site')).height;
	
	var fixX = siteX > contX ? (siteX - contX)/2 : 0;
	var fixY = siteY > contY ? siteY - contY : 0;
	
	hint_posX = hint_width + paddingX +  Event.pointerX(event);
	hint_posY = hint_height + paddingY +  Event.pointerY(event);
	
	if(hint_posX > contX+fixX){
		$('hint').style.left= (Event.pointerX(event)-hint_width - paddingX) + "px";
	}
	else{
		$('hint').style.left=(Event.pointerX(event)+paddingX)+"px";
	}
	
	if(hint_posY > contY + fixY){
		$('hint').style.top= (Event.pointerY(event)-hint_height - paddingY) + "px";
	}
	else{
		$('hint').style.top=(Event.pointerY(event)+paddingY)+"px";
	}
}

function setErrorMessage(id, message) {
	if ($(id + '_error')) {
		$(id + '_error').innerHTML = message;
		$(id + '_error').show();
	} else {
		new Insertion.Bottom($(id).up(), "<div class='error' id='" + id + "_error'>" + message + "</div>");
	}
}

function clearOptions(selectId) {
	var select = $(selectId);
	while(select.options[0]) {
		select.options[0] = null;
	}
}

function addOption(selectId, value, label, selected) {
	$(selectId).options[$(selectId).options.length] = new Option(label, value, selected);
}

function setValue(inputId, value) {
	$(inputId).value = value;
}

function createRow() {
	paramName = arguments[0];
	paramValue = arguments[1];
	var obj = document.createElement("tr");
	Element.extend(obj);
	if(paramName && paramValue){
		obj.writeAttribute(paramName,paramValue);
	}
	return obj;
}

function createCell(className) {
	obj = document.createElement("td");
	obj.className = className;
	return obj;
}

function clearTable(table) {
	while(table.rows[0]) {
		table.deleteRow(0);
	}
}

function updateAjanlat(result){

	var i=0;
	var tbody = $('table_eredmeny_body');
	clearTable(tbody);
	while(result[i]){
		var j = 0;
		
		if(result[i]["hint"]){
			var row = createRow("hint",result[i]["hint"]);
		}
		else{
			var row = createRow();
		}
		var cell = createCell("biztositoId");
		cell.innerHTML = '<input type="checkbox" name="biztositoId" id="'+result[i]["bizositoId"]+'" value="'+result[i]["bizositoId"]+'" />';
		row.appendChild(cell);
		
		while(result['keys'][j]) {
			var cell = createCell(result['keys'][j]);
			cell.innerHTML = result[i][result['keys'][j]];
			row.appendChild(cell);
		
			j++;
		}
		tbody.appendChild(row);
		i++;
	}
	
	setHint();
}

