/**
  *
  *  Copyright 2007 Holiday Media
  *  Author: Wim Latour <dev@holiday.nl>
  *  Version: 1.0.0 (20070712)
  *
  **/

HM.PageCurl = Class.create();

HM.PageCurl.prototype = {

  initialize: function() {
    var object = this;
    this.element = $(arguments[0]);
    this.options = Object.extend({
      color: null,
      className: "pagecurl",
      classNameActive: "pagecurl_active"
    }, arguments[1] || {});

    Event.observe(this.element, "mouseover", this.onPageCurlMouseover.bindAsEventListener(this));
    Event.observe(this.element, "mouseout", this.onPageCurlMouseout.bindAsEventListener(this));

    if (this.options.onclick) {
      var isMSIE = /*@cc_on!@*/false;
      this.element.style.cursor = (isMSIE) ? "hand" : "pointer";
      Event.observe(this.element, "click", this.onPageCurlClick.bindAsEventListener(this));
    }
  },

  onPageCurlClick: function(event) {
    //if (Event.element(event||window.event) != this.element) return;
    if (Event.element(event||window.event).tagName.toUpperCase() == "A") return;
    if (Event.element(event||window.event).up("A")) return;
    (typeof this.options.onclick == "function") ? this.options.onclick.apply() : new Function("", this.options.onclick).apply();
  },
  onPageCurlMouseover: function(event) {
    if (this.element.hasClassName(this.options.classNameActive)) return;
    this.element.addClassName(this.options.classNameActive);
    this.startPageCurl();
  },
  onPageCurlMouseout: function(event) {
    if (! this.element.hasClassName(this.options.classNameActive)) return;

    // Don't execute for childNodes of the element that has the event handler registered (IE only).
    //var relatedTarget = $((event||window.event).relatedTarget || (event||window.event).toElement);
    var relatedTarget = $((event||window.event).toElement);
    if (relatedTarget && (this.element == relatedTarget || relatedTarget.descendantOf(this.element))) return;

    this.element.removeClassName(this.options.classNameActive);
    this.restorePageCurl();
  },

  startPageCurl: function() {
    this.element.style.backgroundImage = 'url(/images/curl_'+this.options.color+'.gif)';
  },
  restorePageCurl: function() {
    this.element.style.backgroundImage = 'url(/images/curl_'+this.options.color+'_back.gif)';
  },

  nop: function() {}
};
