/*
 * Some general functions
 */
 
function refresh_sortable_form() {
  Sortable.serialize_to('report_column_order', 'column_order_list');
}

function toggleTwisty(_twisty, _target, state) {
  twisty = $(_twisty);
  target = $(_target);
  
  // Decide how to set the state
  current_state = Element.visible(target);
  if (state == null) {
    state = !current_state
  }
  else if (state == current_state) {
    return;
  }
  
  twisty.innerHTML = state ? '&#9660;' : '&#9658;';
  new Effect[state ? 'BlindDown' : 'BlindUp'](target, {duration:.2, fps:50, queue:'end'});
}

function addContribTag(_target, _remove, tag) {
  target = $(_target);
  remove = $(_remove);
  
  if(target.value == '') {
    target.value = tag;
  } else {
    target.value += ' ' + tag;
  }

  new Effect.Fade(remove, {duration:.2, fps:50});
}

function unhideAll(_target) {
  target = $(_target);
  $A(target.getElementsByTagName('li')).each(function(item) {item.style.display = '';});
}

/*
 * Some prototype extensions
 */

Object.extend(Event, {
	wheel:function (event){
		var delta = 0;
		if (!event) event = window.event;
		if (event.wheelDelta) {
			delta = event.wheelDelta/120; 
			if (window.opera) delta = -delta;
		} else if (event.detail) { delta = -event.detail/3;	}
		return Math.round(delta); //Safari Round
	}
});
 
Element.addMethods ({
  switch_to: function(element, switch_with) {
    Element.hide(element);
    Element.show(switch_with);
  }
});

Object.extend(Form, {
  submit_to: function(form, action) {
    form = $(form);
    form.action = action;
    form.submit();
  }
});

Object.extend(Sortable, {
  sequence_simple: function(element) {
    element = $(element);
    var options = Object.extend(this.options(element), arguments[1] || {});
    
    return $(this.findElements(element, options) || []).map( function(item) {
      return item.style.display != 'none' ? item.id : null;
    }).compact();
  },

  serialize_to: function(form_element, element) {
    element = $(element);
    form_element = $(form_element);
    var options = Object.extend(Sortable.options(element), arguments[1] || {});

    form_element.value = '[ ' + Sortable.sequence_simple(element, arguments[1]).join(', ') + ' ]';
  }
});

/*
 * Some behaviour extensions
 */
 
var general_rules = {
	'.hover_highlightable' : function(element) {
		element.onmouseover = function() {
			element.className = element.className.replace(/hover_highlightable/, 'hover_highlightable hover_active');
		}

		element.onmouseout = function() {
			element.className = element.className.replace(/hover_highlightable hover_active/, 'hover_highlightable');
		}
	}
};

Behaviour.register(general_rules);
