var events = new Array();
var years = new Array();
var registrations = new Array();
var n;
var p;
var s;
var d = 1;
var r = new Array();
var t = new Array();

r[1] = /(^[0-9]{1,2})([a-z.,: ]+)([0-9]{2})([a-z ]*)$/i;
r[2] = /(^[0-9]{1,2})([a-z.,:" ]+)([0-9]{2})([a-z ]*)$/i;
r[3] = /(^[0-9]{1,2})([a-z.,:' ]+)([0-9]{2})([a-z.,:" ]+)([0-9]{2})([a-z ]*)$/i;
r[4] = /^(([0-9]{1,2})([a-z.,:' ]+))?([0-9]{2})([a-z.,:" ]+)([0-9]{2})([a-z ]*)$/i;

function fillSelect(select, options, disabled) {
	for(var i = 0; i < options.length ; i++){
		var disable = disabled ? options[i][2] : "false";
		addOption(select, options[i][0], options[i][1], disable);
	}
};

function addOption(list, value, text, disabled){
	var optn = document.createElement("OPTION");
	optn.value = value;
	optn.text = text;
	optn.disabled = (disabled=="true");
	list.options.add(optn);
};

function enableYearSelection(source) {
	$(source).parent().children(".yeardropdown").removeAttr("disabled");
};

function disableYearSelection(source) {
	$(source).parent().children(".yeardropdown").attr("disabled", "true").val("");
};

function enableInput(source, pb, sb) {
	if(pb && sb) {
		$(source).parent().children(".sb, .pb").removeAttr("readonly").unbind("change");
	} else {
		$(source).parent().children(".sb").val($(source).parent().children(".pb").first().removeAttr("readonly").change(function(){
			$(source).parent().children(".sb").val($(this).val());
		}).val());
	} addRegExpTester($(source).parent());
};

function disableInput(source) {
	$(source).parent().children(".sb, .pb").attr("readonly", "true");
};

function addEvent(refill){
	var max = $("#count").val() >= events.length;
	var allfilled = true;
	$(".eventdropdown").map(function(){
		if($(this).val() == "") allfilled = false;
	});
	var add = (!max && allfilled);
	if(refill || add){
		$("#count").val(++n);
		
		var div = $(getEvent());
		$(div).insertBefore($("fieldset#events").children().last());
		
		fillSelect(document.getElementById("ev"+n), events, true);
		addEventListener(div);
		
		fillSelect(document.getElementById("yr"+n), years, false);
		addYearListener(div);
	
		addRemoveListener(div);
	}
};

function addEventListener(item){
	$(item).children().filter(".eventdropdown").first().focus(function(){
		p = $(this).val();
	}).change(function(){
		s = $(this).val();
		if(s != ""){
			enableYearSelection($(this));
		} else {
			disableYearSelection($(this));
			$(this).parent().children(".yeardropdown, .sb, .pb").val("");
		}
		selectEvent(this, s);
		deselectEvent(this, p);
	}).blur(function(){
		p = null;
	});
}

function addRemoveListener(item){
	$(item).children().filter(".button-removeevent").first().click(function(){
		if(n > 0) {
			var item = $(this).parent();
			var dropdown = $(item).children(".eventdropdown").first();
			var value = $(dropdown).val();
			deselectEvent(dropdown, value);
			$("#form").first().append($("<input type='hidden' name='delete["+ d++ +"]' value='"+ value +"' />"));
			$(item).remove();
		}
	});
}

function addYearListener(item){
	$(item).children().filter(".yeardropdown").first().change(function(){
		if($(this).val() == "") {
			disableInput(this);
			$(this).parent().children(".sb, .pb").val("");
		} else if ($(this).val() == 2011) {
			enableInput(this, true, false);
			$(this).parent().children(".sb").val($(this).parent().children(".pb").val());
		} else {
			enableInput(this, true, true);
		}
	});
}

function addRegExpTester(item) {
	$(item).children().filter(".sb, .pb").change(function() {
		var input = $(this).val();
		var eventid = $(item).children().filter(".eventdropdown").val();
		var string;
		for(var i = 0; i < events.length; i++) {
			if(events[i][0] == eventid){
				string = events[i][3];
			}
		}
		if(input == "" || r[string].test(input)) {
			$(this).next(".tooltip").removeClass("error").html("");
		} else {
			if($(item).children().filter(".yeardropdown").val() == "2011"){
				$(item).children().filter(".sb, .pb").val("");
			} else {
				$(this).val("");	
			}
			var error = ERR_FORMAT;
			$(this).next(".tooltip").addClass("error").html(error);
		}
	});
}

function addTooltip(item) {
	var event = $(item).children().filter(".eventdropdown").val();
	for(var i = 0; 1 < events.length; i++) {
		if(events[i][0] == event){
			$(item).children().filter(".sb, .pb").next(".tooltip").html(t[events[i][3]]);
		}
	}
}


function selectEvent(dropdown, index) {
	for(var i = 0; i < events.length; i++) {
		if(events[i][0] == index) {
			events[i][2] = "true";
		}
	}
	$(".eventdropdown").not($(dropdown)).children().filter("[value="+index+"]").attr("disabled", "true");
	$(dropdown).parent().children().filter(".sb, .pb").change();
	addTooltip($(dropdown).parent());
}

function deselectEvent(dropdown, index){
	for(var i = 0; i < events.length; i++) {
		if(events[i][0] == index) {
			events[i][2] = "false";
		}
	}
	$(".eventdropdown").children().filter("[value="+index+"]").removeAttr("disabled");
}

function refillEvents(){
	n = 0;
	for(var i = 0; i < registrations.length; i++){
		addEvent(true);
		var es = $("#ev"+(i+1));
		var ys = $("#yr"+(i+1));
		var pi = $("#pb"+(i+1));
		var si = $("#sb"+(i+1));
		
		es.val(registrations[i][0]);
		for(var event in events) {
			if(event[0]==registrations[i][0]) {
				event[2] = "true";
				selectEvent(es,event[0]);
			}
		}
		
		ys.val(registrations[i][3]);
		pi.val(registrations[i][2]);
		si.val(registrations[i][1]);
		
		enableYearSelection(es);
		enableInput(ys, true, registrations[i][3] != "2011");
	}
};

function getEvent(){
	var div = 
			'<!-- EVENT '+ n +' -->'
		 + 	'<div class="event">'
		 + 		'<label class="new-event newline left line-element" for="ev'+ n +'">'+ LBL_EVENT +'</label>'
		 + 		'<select class="single-item line-element eventdropdown" id="ev'+ n +'" name="ev'+ n +'">'
		 + 			'<option value="">- '+ BOX_EVENT +' -</option>'
		 + 		'</select>'
		 + 		'<label class="newline left line-element" for="yr'+ n +'">'+ LBL_PB +'</label>'
		 + 		'<select class="single-item line-element yeardropdown" id="yr'+ n +'" name="yr'+ n +'" disabled="true">'
		 + 			'<option value="">- '+ BOX_YEAR +' -</option>'
		 + 		'</select>'
		 + 		'<label class="newline left line-element" for="pb'+ n +'">'+ LBL_PB +'</label>'
		 + 		'<input class="single-item line-element pb" id="pb'+ n +'" name="pb'+ n +'" type="text" readonly="true" />'
		 +		'<span class="tooltip line-element"></span>'
		 + 		'<label class="newline left line-element" for="sb'+ n +'">'+ LBL_SB +'</label>'
		 + 		'<input class="single-item line-element sb" id="sb'+ n +'" name="sb'+ n +'" type="text" readonly="true" />'
		 +		'<span class="tooltip line-element"></span>'
		 + 		'<label class="newline left line-element" for="rm'+ n +'">'+ LBL_REMARK +'</label>'
		 + 		'<input class="single-item line-element" id="rm'+ n +'" name="rm'+ n +'" type="text" />'
		 +		'<span class="newline left line-element">'+ LBL_DELETE +'</span>'
		 +		'<span class="single-item line-element button-removeevent">'+ BTN_DELETE +'</span>'
		 + 	'</div>';
	return div;
}
