
if (!Kwo) var Kwo = {};

Kwo.Rating = {

  "container": {},
  "isBinded": false,
  "registry": {},


  "onClick": function(event) {
    event = event || window.event;
    Kwo.Rating.container = Event.element(event);
    var arr = Kwo.Rating.container.id.split("-");
    if (Kwo.Rating.registry[arr[0] + "-" + arr[1] + "-" + arr[2] + "-" + arr[3]] == true) return ;
    Kwo.Rating.registry[arr[0] + "-" + arr[1] + "-" + arr[2] + "-" + arr[3]] = true;
    Kwo.exec("/rating/ping", 
             {"model_id": arr[2], "record_id": arr[3], "note": arr[4]}, 
             {"callback": Kwo.Rating.onCallback});
  },

  "onMove": function(event) {
    event = event || window.event;
    var arr = Event.element(event).id.split("-");
    if (Kwo.Rating.registry[arr[0] + "-" + arr[1] + "-" + arr[2] + "-" + arr[3]] == true) return ;
    var sig = arr[0] + "-" + arr[1] + "-" + arr[2] + "-" + arr[3] + "-";
    var i = 1;
    if (event.type.endsWith("out")) {
      while (i < 6) {
        if (!$(sig + i)) break;
        var s = $(sig + i).src.match("off") ? "off" : "on";
        $(sig + i).src = $(sig + i).src.preg_replace(s, $(sig + i).className); 
        i++;
      }
    }
    else {
      var num = parseInt(arr[4]);      
      for (i = 1; i <= num; i++) {
        $(sig + i).src = $(sig + i).src.preg_replace("off", "on");
      }
      while (i < 6) {
        if (!$(sig + i)) break;
        $(sig + i).src = $(sig + i).src.preg_replace("on", "off"); 
        i++;
      }
    }
  },

  "onLeave": function(arg) {
    alert(arg.tagName);
    $(arg).select("IMG").each(function (elt) {
      elt.src = elt.src.preg_replace("off", elt.className);
    });
  },

  "onCallback": function(h) {
    if (h["error"] >= 1) {
      Kwo.error(h["result"]["msg"]); 
    }
    else {
      Kwo.Rating.container.up("div").update(h["result"]["msg"])
                                    .stopObserving("click", Kwo.Rating.onClick, true);
    }
  },

  "onDomLoaded": function() {
    if (Kwo.Rating.isBinded === true) return false;
    Kwo.Rating.isBinded = true;
    $$(".kwo-rate-box").each(function (element) {
      Event.observe(element, "click", Kwo.Rating.onClick, true);
    });
    $$(".kwo-rate-box IMG").each(function (element) {
      Event.observe(element, "mouseout", Kwo.Rating.onMove, true);
      Event.observe(element, "mouseover", Kwo.Rating.onMove, true);
    });
  }

};