var errors = new Array("empty", "valid_email", "duplicate", "short", "error"); // possible input errors

function ajaxify(e, target, ok) {
		
		var url = $(target).getAttribute("action");
		new Ajax.Request(
				url,
				{
						method: "post",
						parameters: $(target).serialize() + '&ajax=true', // ajax parameter if js disabled
						onLoading: $(target + "_loading").show(),
						onComplete: function(transport) {
//alert(transport.responseText);
								var response = eval('(' + transport.responseText + ')'); // get JSON response
								var properties = new Array();
								var i = 0;
								for (property in response) { //get object properties
									properties[i] = property;
									i++;
									}
								var state = "ok"; // control variable
								for (i = 0; i < properties.length; i++) {
									if (in_array(eval("response." + properties[i]), errors)) { //if current field has error
										if (state == "ok") { // switch control variable
											state = "error";
											$(properties[i]).focus(); // focus first error input
											}
										if ($(properties[i]).up("td")) {
											$(properties[i]).up("td").next("td").childElements()[0].addClassName('error'); // colorize info span
											}
										} else {
											$(properties[i]).up("td").next("td").childElements()[0].removeClassName('error') // decolorize info span
											}
									}
								$(target + "_loading").hide();
								if (state == "ok") { // success
									successSlide(target, ok);
									}
							}
					}
				);
		Event.stop(e);
		}


function successSlide(target, ok) { // slide ajaxify() response

	$(target).disable();

	if ($("upload")) {
		$("upload").disable();
		}

	if ($(ok).tagName == "FORM") { // if new form comming up (multiple step submission)
		new Effect.toggle(ok, 'slide'); // show success with some cool effects :)
		Event.observe(ok, 'submit', function(e) {ajaxify(e, ok, 'success')}); // succcess = id of final div
		} else {
			new Effect.ScrollTo(ok, {offset: -1, duration: 0.5});
			new Effect.toggle(ok, 'appear'); // show success with some cool effects :)
			}

	}

function getOrase(e) {

	var element = Event.element(e); // get element
	var parent = element.getAttribute("id"); // get select ID
	var id_judet = element.getValue(); // get value of select

	var form = element.up("form").getAttribute("id");
		
	var target = "oras";
	
	if (id_judet == "0" || id_judet == "all") { // disable child select if parent select not selected
		$(target).disable();
		}
	
	if (id_judet != "0" && id_judet != "all") { // else 
		new Ajax.Request(
				root_ + "get-orase-ajax",
				{
						method: "post",
						parameters: 'id_judet=' + id_judet,
						onLoading: $(parent + "_loading").show(), // show loading image
						onComplete: function(transport) {
								$(parent + "_loading").hide(); // hide loading image
								var orase = eval('(' + transport.responseText + ')'); // get JSON response
								
								var update = '<option value="0">orasul</option>';
								update += '<option value="0" disabled="disabled">&nbsp;</option>';
								if (form != "register" && form != "add-event") {
									update += id_judet == 10 ? '<option value="all">Toate sectoarele</option>' : '<option value="all">Toate orasele</option>';
									}
								
								for (var i = 0; i < orase.length; i++) { // format response
									update += '<option value="' + orase[i].id + '">' + orase[i].nume + '</option>\n';
									}
								$(target).update(update);
								$(target).enable(); // enable previous disabled child select
								}                     
				}
				);
		}
	Event.stop(e);
	}

function changeDate(e) {
	
	var element = Event.element(e);
	var target = element.up("div").getAttribute("id");
	if (element.up("ul").getAttribute("class") == "calendar_year") {
		var an = element.getAttribute("title");
		var luna = $F(target + "_luna");
		$(target + "_an").setAttribute("value", an);
		} else {
			var an = $F(target + "_an");
			var luna = element.getAttribute("rel");
			$(target + "_luna").setAttribute("value", luna);
			}


	new Ajax.Request(
			root_ + "change-date-ajax",
			{
					method: "post",
					parameters: "an=" + an + "&luna=" + luna + "&target=" + target,
					onLoading: function() {
								$(target + "_current_date").hide();
								$(target + "_loading").show();
										},
					onComplete: function(transport) {
							$(target).update(transport.responseText);
							$$('.calendar_year li a, .calendar_month li a').each(function(e) {
								Event.observe(e, 'click', changeDate);
								});
							if (target == "select_date_output") {
								$$('#' + target + ' table a').each(function(e) {
									Event.observe(e, 'click', addDate);
									});
								} else {
								$$('#' + target + ' table a').each(function(e) {
									Event.observe(e, 'click', getEvents);
									});
									}
							$(target + "_loading").hide();
							$(target + "_current_date").show();
							}
				}
				);
	Event.stop(e);
	}

function getEvents(e) {
	
	var element = Event.element(e);
	var data = element.getAttribute("rel");

	new Ajax.Request(
			root_ + "get-event-ajax",
			{
					method: "post",
					parameters: "data=" + data,
					onLoading: function() {
								$("calendar_events_current_date").hide();
								$("calendar_events_loading").show();
										},
					onComplete: function(transport) {
							var evenimente = eval('(' + transport.responseText + ')'); // get JSON response
								var update = '<ul>';
								for (var i = 0; i < evenimente.length; i++) { // format response
									update += '<li' + ((i + 1) == evenimente.length ? ' class="last"' : "") + '><a href="' + evenimente[i].url + '" title="' + evenimente[i].title + '">' + evenimente[i].title + '</a></li>\n';
									}
								update += '</ul>';

							$("sidebar_events").update(update);
							
							$$('#calendar_events table a').each(function(e) {
								Event.observe(e, 'click', getEvents);
								});
							
							$("calendar_events_loading").hide();
							$("calendar_events_current_date").update(evenimente[0].ro_data);
							$("calendar_events_current_date").show();
							}
				}
				);
	Event.stop(e);
	}

function rate(e) {
	
	var element = Event.element(e);
	var nota = element.getAttribute("title").split("/")[0];
	var url = element.getAttribute("href");
		
	new Ajax.Request(
			url,
			{
					method: "post",
					parameters: "nota=" + nota,
					onComplete: function(transport) {
							$("star-rating").update(transport.responseText);
							}
				}
				);
	Event.stop(e);
	}

onloadQueue(function() { 
	$$(".judete_select").each(function(e) {
		Event.observe(e, 'change', getOrase);
		});
	});