Kwo.Home = {

  onNavigate: function(elt) {
    elt = $(elt);
    var parent = elt.up();
    var is_prev = elt.hasClassName("prev");
    var offset = parent.readAttribute("data-offset").intval();
    var offset_max = parent.readAttribute("data-offset-max").intval();
    if (offset > offset_max) return ;
    if (is_prev) {
      if (offset < 1) return ;
      offset -= 1;
      if (offset < 1) elt.addClassName("off");
    }
    else {
      offset += 1;
      elt.previous().removeClassName("off");
    }
    parent.writeAttribute("data-offset", offset);
    var args = {offset: offset};
    Kwo.exec(parent.readAttribute("data-action"), args, 
             {container: elt.up(".box").down(".box-body")});
  }
};

Kwo.Home2 = {

  onNavigate: function(elt) {
    elt = $(elt);
    var parent = elt.up();
    var is_prev = elt.hasClassName("prev");
    var offset = parent.readAttribute("data-offset").intval();
    var offset_max = parent.readAttribute("data-offset-max").intval();
    if (offset > offset_max) return ;
    if (is_prev) {
      if (offset < 1) return ;
      offset -= 1;
      if (offset < 1) elt.addClassName("off");
    }
    else {
      offset += 1;
      elt.previous().removeClassName("off");
    }
    parent.writeAttribute("data-offset", offset);
    var args = {offset: offset};
    Kwo.exec(parent.readAttribute("data-action"), args,
             {container: elt.up(".box").down(".incoming"),
              callback: function () {
                window.setTimeout(function() {
                  elt.up(".box").down(".box-body").removeClassName("initial");
                  elt.up(".box").down(".box-body").addClassName("final");
                });
              }});
  }
};



Kwo.Scopalto = {

  onFeedSelect: function(elt) {
    elt = $(elt);
    var li = elt.up("LI").next();
    if (elt.getValue() < 1) {
      li.hide();
      return ;
    }
    var a = li.down("A");
    a.down("SPAN").update("flux " + elt.options[elt.selectedIndex].innerHTML);
    a.writeAttribute("data-url", "/scopalto/issues.feed?" + elt.name + "=" + elt.getValue());
    li.show();
  },

  onMessageCompose: function() {
    new Kwo.Dialog("/scopalto/message.compose", null, 
                   {"height": 410, "className": "layout-hbox"});
  },

  openPressReview: function() {
    new Kwo.Dialog("/scopalto/press-review", null,
                   {"height": 410, "className": "layout-hbox"});
  },

  onMessageSend: function(elt) {
    elt = $(elt);
    Kwo.exec("/scopalto/message.send", elt, 
             {callback: elt.down(".callback-container"),
              disable: elt});
  },

  onScroll: function(evt) {
    if (!("scrollctx" in window)) {
      var url = $(document.body).hasClassName("action-magazines")
              ? "/scopalto/magazines"
              : "/scopalto/issues";
      window["scrollctx"] = {processing: false, 
                             elt: $(document.body),
                             action: url,
                             offset: 0};
    }
    var elt = window["scrollctx"]["elt"];
    if (window["scrollctx"]["processing"] == true) {
      return ;
    }
    if ((document.documentElement.scrollHeight - 200) > (document.viewport.getHeight() + elt.cumulativeScrollOffset()["top"])) return ;
    window["scrollctx"]["processing"] = true;
    window["scrollctx"]["offset"]++;
    Kwo.exec(window["scrollctx"]["action"], [$("filters"), {offset: window["scrollctx"]["offset"]}],
             {callback: function (res) {
               if (res["result"]["metas"]["finished"] == true) {
                 Event.stopObserving(window, "scroll", Kwo.Scopalto.onScroll);
               }
               $$(".infinite-container")[0].insert(res["result"]["divs"], {position:"bottom"});
               window["scrollctx"]["processing"] = false;
             }});
  }

};

Kwo.Kiosk = {

  onEnter: function(elt) {
    if (!Kwo.isAuth()) {
      var auth = new Kwo.Class.Auth();
      auth.onCallback = Kwo.Kiosk.onEnter.curry(elt);
      return ;
    }
    Kwo.go("/kiosque");
  }
  
}

Kwo.Issue = {

  onAdd: function () {
    Kwo.Issue.onEdit();
  },

  onDelete: function (id) {
    Kwo.exec("issue.delete", {id: id},
             {callback: Kwo.Issue.onList, 
              confirm: "êtes vous sûr de vouloir supprimer ce numéro ?"});
  },

  onDownload: function(elt) { 
    elt = $(elt);
    if (!Kwo.hasClickExpired(elt)) return false;
    if (!Kwo.isAuth()) {
      var auth = new Kwo.Class.Auth();
      auth.onCallback = Kwo.Issue.onDownload.curry(elt);
      return ;
    }
    Kwo.go("/scopalto/issue.download", 
           {item_key: elt.readAttribute("data-item-key")});
  },

  onWarn: function(elt) {
    elt = $(elt);
    if (!Kwo.isAuth()) {
      var auth = new Kwo.Class.Auth();
      auth.onCallback = Kwo.Issue.onWarn.curry(elt);
      return ;
    }
    Kwo.exec("/scopalto/issue.warn",
             {item_key: elt.readAttribute("data-item-key")},
             {callback: function(res) { 
               alert('Votre demande a bien été prise en compte. Merci !'); 
             }});
  },

  onEdit: function (id) {
    var args = Object.isUndefined(id) ? null : {id: id};
    Kwo.go("issue.edit", args);
  },

  onList: function () {
    Kwo.go("issue.list");
  },

  onOverview: function (id) {
    if (/iPhone|iPod/i.test(navigator.userAgent)) {
      Kwo.go("/scopalto/issue", {"id": id});
      return ;
    }
    var d = Kwo.getDialog("issue");
    if (d) {
      Kwo.exec("/scopalto/issue", {"id": id},
               {container: d.support})
      return ;
    }
    new Kwo.Dialog("/scopalto/issue", {"id": id},
                   {width: 800, height: 520, name: "issue"});
  },

  onDomLoaded: function(elt) {
    elt = $(elt);
    if (window["FB"]) {
      FB.XFBML.parse(elt.up("TABLE").down("DIV.issue-fb-button"));
    }
    if (window["gapi"]) {
      gapi.plusone.go("issue-shares");
    }
  },

  onNavigate: function (id) {
//    console.log(window["_gaq"]);
    if (window["_gaq"]) {
//      console.log(id);
      window["_gaq"].push(["_trackEvent", "issue.navigate", "issue" + id]);
    }
    Kwo.Issue.onOverview(id);
  },

  onSearch: function (elt) {
    var container = $$(".infinite-container")[0];
    if ("scrollctx" in window) {
      window["scrollctx"]["offset"] = 0;
    }
    container.update('<img src="/app/scopalto/pix/wait.gif" />');
    Event.observe(window, "scroll", Kwo.Scopalto.onScroll);
    Kwo.exec("/scopalto/issues", elt, 
             {callback: function (res) {
               if (res["result"]["metas"]["finished"] == true) {
                 Event.stopObserving(window, "scroll", Kwo.Scopalto.onScroll);
               } 
               container.update(res["result"]["divs"]);
             }});
  },

  onSubmit: function (args) {
    Kwo.exec("issue.store", args,
             {disable:true, callback:Kwo.Issue.onCallback});
  },

  onCallback: function (res) {
    if (Kwo.hasError(res)) return Kwo.error(res);
    if ("id" in res["result"]) {
      Kwo.Issue.onEdit(res["result"]["id"]);
    }
  }

};

Kwo.Magazine = {

  onIssueSearch: function (args) {
    $("last-issues").update('<img src="/app/scopalto/pix/wait.gif" />');
    Kwo.exec("/scopalto/magazine.issues", args,
             {container: $("last-issues"),
              callback: function () { 
                new SlideShow('slide-issues', 
                              {next: 'slide-next',
                               prev: 'slide-prev', 
                               nav: 'slide-nav'}); }
             });
    return false;
  },

  onSearch: function (elt) {
    var container = $$(".infinite-container")[0];
    if ("scrollctx" in window) {
      window["scrollctx"]["offset"] = 0;
    }
    container.update('<img src="/app/scopalto/pix/wait.gif" />');
    Event.observe(window, "scroll", Kwo.Scopalto.onScroll);
    Kwo.exec("/scopalto/magazines", elt, 
             {callback: function (res) {
               if (res["result"]["metas"]["finished"] == true) {
                 Event.stopObserving(window, "scroll", Kwo.Scopalto.onScroll);
               } 
               container.update(res["result"]["divs"]);
             }});
  },

  onDisplay: function(url) {
    Kwo.go(url);
  }

};

Kwo.Class.Subscription = Class.create(Kwo.Dialog, {

  initialize: function($super, elt) {
    this.name = "subscription";
    this.className = "layout-hbox";
    this.width = 700;
    this.height = 500;
    this.args = {item_key: $(elt).readAttribute("data-item-key")};
    $super(this.onDisplay, this.args);
  },

  onDisplay: function(args) {
    Kwo.exec("/scopalto/subscription.prompt", args,
             {container: this.support});
  },

  onSave: function(elt) {
    if (!Kwo.isAuth()) {
      var auth = new Kwo.Class.Auth();
      auth.onCallback = this.onSave.bind(this).curry(elt);
      return ;
    }
    Kwo.exec("/scopalto/subscription.save", this.args,
             {callback: elt});
  }

});

Kwo.Report = {

  onArrange: function (elt) { 
    Kwo.exec("/account/scopalto/report.arrange", 
             {nodes: Sortable.sequence("reports").join(","), 
              issue_id: $F("issue_id")});
    var i = 1;
    $("reports").select(".handle").each(function (item) {
      item.update(i++);
    })
  },

  onDelete: function (id) {
    Kwo.exec("report.delete", {"id": id},
             {callback: Kwo.Report.onList, 
              confirm:" êtes vous sûr de vouloir supprimer ce dossier ?"});
  },

  onEdit: function (id) {
    var args = Object.isUndefined(id) ? null : {"id": id};
    Kwo.exec("report.edit", args, 
             {container: "report-box"});
  },

  onList: function () {
    Kwo.exec("report.list", {"id": $F("issue_id")}, 
             {container: "report-box"});
  },

  onSubmit: function (args) {
    Kwo.exec("report.store", [args, {issue_id: $F("issue_id")}],
             {disable: args, 
              callback: Kwo.Report.onCallback});
  },

  onCallback: function (res) {
    if (Kwo.hasError(res)) return Kwo.error(res);
    Kwo.Report.onList();
  }

};

Kwo.World = {

  onDisplay: function(url) {
    if ($("world_search").value.length >= 3 && window.worlds_selected >= 1) {
      window.top.location.hash = $("world_search").value;
    }
    Kwo.go(url);
  },

  onLoad: function() {
    if (window.top.location.hash.length >= 3) {
      $("world_search").value = window.top.location.hash.substring(1);
      this.onFilter($("world_search"));
    }
  },

  onFilter: function(elt) {
    elt = $(elt);
    if (elt.value.length <= 3) {
      for (var i = 0; i < worlds.length; i++) {
        $("world-" + i).setOpacity(1).removeClassName("on");
      }
      return ;
    }
    var opacity = 1, classname;
    window.worlds_selected = 0;
    var reg = new RegExp(elt.value.stripAccents(), "gi");
    for (var i = 0; i < worlds.length; i++) {
      opacity = 0.2;
      classname = "off";
      if (worlds[i].match(reg)) {
        opacity = 1;
        window.worlds_selected++;
        classname = "on";
      }
      $("world-" + i).setOpacity(opacity).addClassName(classname);
    }
  },

  onReset: function(elt) {
    elt = $(elt);
    $("world_search").value = "";
    window.location = window.location.href.replace(/#.*/, "");
    this.onFilter($("world_search"));
  }

};

Kwo.Class.About = Class.create(Kwo.Dialog, {

  initialize: function($super) {
    this.name = "about";
    this.className = "layout-hbox";
    this.width = 600;
    this.height = 400;
    $super(this.onDisplay);
  },

  onDisplay: function() {
    Kwo.exec("/scopalto/about", {},
             {container: this.support});
  }

});

String.prototype.stripAccents = function() {
  var exps = [ /[\xC0-\xC2]/g, /[\xE0-\xE2]/g,
               /[\xC8-\xCA]/g, /[\xE8-\xEB]/g,
               /[\xCC-\xCE]/g, /[\xEC-\xEE]/g,
               /[\xD2-\xD4]/g, /[\xF2-\xF4]/g,
               /[\xD9-\xDB]/g, /[\xF9-\xFB]/g ];

  var chars = ['A','a','E','e','I','i','O','o','U','u'];

  var s = this;

  for (var i=0; i < exps.length; i++) s = s.replace(exps[i],chars[i]);

  return s;
}



SlideShow = Class.create({
  "timeout": null,
  "mask": null,
  "nav": null,
  "count": 0,
  "pos": 0,
  "z": 1,
  "slides": [],
  "initialize": function (id, opts) {
    this.pos = 0;
    this.mask = $(id);
    this.width = this.mask.getWidth();
    this.slides = this.mask.childElements();
    this.slides.invoke('setStyle',{left:'0px',zIndex:this.z++});
    this.slides[this.pos].setStyle({zIndex:this.z});
    if (this.slides.length > 1) {
      if (opts.prev && $(opts.prev)) {
        $(opts.prev).observe('click', this.prev.curry(null).bind(this));
        $(opts.prev).observe('mouseover', $(opts.prev).setOpacity.curry(0.65));
        $(opts.prev).observe('mouseout', $(opts.prev).setOpacity.curry(1));
      }
      if (opts.next && $(opts.next)) {
        $(opts.next).observe('click', this.next.curry(null).bind(this));
        $(opts.next).observe('mouseover', $(opts.next).setOpacity.curry(0.65));
        $(opts.next).observe('mouseout', $(opts.next).setOpacity.curry(1));
      }
      if (opts.nav && $(opts.nav)) {
        this.nav = opts.nav;
        $(this.nav).childElements().each(function(s, index) {
          $(s).observe('click', this.view.curry(index).bind(this));
        }, this);
      }
      this.pagination();
    }
    this.slides[0].down('img').observe('load', this.resize.curry(opts).bind(this));
    this.resize(opts);
  },
  "resize": function (opts) {
    var height = this.slides[0].childElements()[0].getHeight();
    height = (2*height) + 25;
    this.mask.setStyle({height:height+"px"});
    this.slides.each(function(s, index) { $(s).setStyle({height:(height)+"px"}); }, this);
    if (opts.prev && $(opts.prev)) $(opts.prev).setStyle({marginTop:(height)+"px"});
    if (opts.next && $(opts.next)) $(opts.next).setStyle({marginTop:(height)+"px"});
    if (opts.nav && $(opts.nav)) $(opts.nav).setStyle({marginTop:(height)+"px"});
  },
  "view": function (pos) {
    if (pos > this.pos) {
      this.next(pos);
    } else if (pos < this.pos) {
      this.prev(pos);
    }
  },
  "next": function (pos) {
    if (this.slides[this.pos] && (this.slides[this.pos].style.left == '0px' || this.slides[this.pos].style.left == this.width+'px' || this.slides[this.pos].style.left == '-'+this.width+'px')) {
      emile(this.slides[this.pos].setStyle({left:'0px',zIndex:this.z++}), 'left:-'+this.width+'px', {duration: 400});
      if (Object.isNumber(pos) && pos >= 0) this.pos = pos;
      else this.pos++;
      if (this.pos > this.slides.length - 1) this.pos = 0;
      if (this.pos < 0) this.pos = this.slides.length - 1;
      if (this.slides[this.pos] && (this.slides[this.pos].style.left == '0px' || this.slides[this.pos].style.left == this.width+'px' || this.slides[this.pos].style.left == '-'+this.width+'px')) {
        emile(this.slides[this.pos].setStyle({left:this.width+'px',zIndex:this.z++}), 'left:0px', {duration: 400});
      }
      this.pagination();
    }
  },
  "prev": function (pos) {
    if (this.slides[this.pos] && (this.slides[this.pos].style.left == '0px' || this.slides[this.pos].style.left == this.width+'px' || this.slides[this.pos].style.left == '-'+this.width+'px')) {
      emile(this.slides[this.pos].setStyle({left:'0px',zIndex:this.z++}), 'left:'+this.width+'px', {duration: 400});
      if (typeof pos == 'number' && pos >= 0) this.pos = pos;
      else this.pos--;
      if (this.pos > this.slides.length - 1) this.pos = 0;
      if (this.pos < 0) this.pos = this.slides.length - 1;
      if (this.slides[this.pos] && (this.slides[this.pos].style.left == '0px' || this.slides[this.pos].style.left == this.width+'px' || this.slides[this.pos].style.left == '-'+this.width+'px')) {
        emile(this.slides[this.pos].setStyle({left:(this.width*(-1))+'px',zIndex:this.z++}), 'left:0px', {duration: 400});
      }
      this.pagination();
    }
  },
  "pagination": function () {
    var list = $(this.nav).select('*');
    list.each(function(s) { s.addClassName("selected"); });
    list[this.pos].removeClassName("selected"); 
  }
});

