// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults
document.observe('dom:loaded', function() {
  setTimeout(hideFlashes, 5000);
      var container = $(document.body)

//  if (container) {
//    var img = new Image
//    img.src = '/images/ajax-loader.gif'
//
//    function createSpinner() {
//      return new Element('img', { src: img.src, 'class': 'spinner' })
//    }
//
//    container.observe('click', function(e) {
//      var el = e.element()
//      if (el.match('.pagination a')) {
//        el.up('.pagination').insert(createSpinner())
//        new Ajax.Request(el.href, { method: 'get' })
//        e.stop()
//      }
//    })
//  }
});

var hideFlashes = function() {
  $$('.notice', '.warning', '.error').each(function(e) {
    if (e) Effect.Fade(e, { duration: 2.0 });
  })
}



function onRequestSuccess(obj_name, request){
	parseResponse(obj_name, request);
	updateFlashes();
	setTimeout(hideFlashes, 5000);
}

function parseResponse(obj_name, request){
	var formElements = $(obj_name + '_form').getElements();
	
    for (var i = 0, inputs = [], length = formElements.length; i < length; i++) {
		var input = formElements[i];
		if ((input.type == "submit") || (input.type == "button")) continue;
		inputs.push(Element.extend(input));
	}

	
	var response = eval("(" + request.responseText + ')');
	
	for (var i=0;i<inputs.length; i++) {
		clearInvalid(inputs[i]);
		hideErrorBlock(inputs[i]);
	}
	
	if (response.success == true) {
		inputs.invoke('clear');
		return;
	}
	
	var errors = response.errors;
	if (!errors) return;
	
	for (var i=0;i<errors.length; i++) {
		markInvalid($(obj_name + '_' + errors[i][0]));
		showErrorBlock($(obj_name + '_' + errors[i][0]), errors[i][1]);
	} 
}

function markInvalid(field){
	if (!field) return;
	field.addClassName('field-invalid');
}

function clearInvalid(field){
	if (!field) return;
	field.removeClassName('field-invalid');
}

function showErrorBlock(field, err_txt){
	if (!field) return;
	var fld = $(field.id + '_error');
	if (!fld) return;
	
	fld.innerHTML = err_txt;
	fld.style.display = "block";
}

function hideErrorBlock(field){
	if (!field) return;
	var fld = $(field.id + '_error');
	if (!fld) return;
	
	fld.innerHTML = "";
	fld.style.display = "none";
}

function updateFlashes(){
  $('wrapper').select('[class="flash"]').each(function(e) {
    if (e) {
		new Ajax.Updater(e.id, '/flash', {
			onSuccess: function(request) {
				e.childElements().invoke('remove');
				
				var flash = eval("(" + request.responseText + ')');
				
				for (var key in flash) {
					var item = new Element('div', { 'class': 'message ' + key, 'style': 'display:none' });
					item.update("<p>" + flash[key] + "</p>");
					e.appendChild(item);
				}
				
				showFlashes();
			}
		});
	}
  })
	
}

function showFlashes() {
  $$('.notice', '.warning', '.error').each(function(e) {
    if (e) Effect.Appear(e);
  })
}
