/**
 * NowNow helper on top of scriptaculous
 */
 
  // BEGIN stop following clicks during reorder
  var sortableReordered = false;
  function stopEventDuringReorder (event) {
    if (sortableReordered) {
         Event.stop(event);
         sortableReordered = false;
    }  	  
  }
  
  function makeLinksNotClickableInReorder(container) {
  	var items = container.getElementsByTagName('a');
    for (var i = 0; i < items.length; ++i) {
    	var item = items[i];
    	Event.observe(item, 'click', stopEventDuringReorder); 
  	}
  }
  // END stop following clicks during reorder

  // 
  var ORDER_ID_SEP = '~';
  
  /**
   *@return the id portion of an order-id string, which is in the form of <order>:<id>
   */
  function getIdFromOrderId(orderIdStr) {
  	var sepIdx = orderIdStr.indexOf(ORDER_ID_SEP);
  	// heuristics: the order portion should not exceed 3 digits
  	if (sepIdx >= 0 && sepIdx < 4) {
  		return orderIdStr.substring(sepIdx + 1);
  	}
  	else {
  		return orderIdStr;
  	}
  }
  
  function setItemsOrder(container, itemClassName) {
    items = document.getElementsByClassName(itemClassName, container);
    for (var i = 0; i < items.length; ++i) {
    	var item = items[i];
    	var itemOrderIdStr = item.value;
    	var itemId = getIdFromOrderId(itemOrderIdStr);
    	item.value = i + ORDER_ID_SEP + itemId;    	
    }
  }

  Effect.BoxPulsate = function(element) {
  element = $(element);
  var options    = arguments[1] || {};
  var oldOpacity = element.getInlineOpacity();
  var transition = options.transition || Effect.Transitions.sinoidal;
  var reverser   = function(pos){ return transition(1-Effect.Transitions.pulse(pos)) };
  reverser.bind(transition);
  return new Effect.Opacity(element, 
    Object.extend(Object.extend({  duration: 3.0, from: 0,
      afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
    }, options), {transition: reverser}));
  }

Effect.BlindLeft = function(element, callback) {
  element = $(element);
  element.makeClipping();
  return new Effect.Scale(element, 0,
    Object.extend({ scaleContent: false,
      scaleY: false,
      restoreAfterFinish: true,
      afterFinishInternal: function(effect) {
        effect.element.hide();
        effect.element.undoClipping();
      },
      afterFinish: function(effect)
          { callback(); }
    }, arguments[1] || {})
  );
}

Effect.BlindRight = function(element) {
  element = $(element);
    var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, 100, Object.extend({
    scaleContent: false,
    scaleY: false,
    scaleFrom: 0,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makeClipping();
      effect.element.setStyle({width: '0px'});
      effect.element.show();
    },
    afterFinishInternal: function(effect) {
      effect.element.undoClipping();
    }
  }, arguments[1] || {}));
}
