/***** ポップアップ *****/

var setPopupAnchors = Class.create();

setPopupAnchors.prototype = { 
  initialize: function(target) {
    this.targetElement = target;
  },

  pageOpen: function(){
    this.set();
    if($$('._popup_jack')[0]){
      this.jackElement = $$('._popup')[0];
      var popupOpen = new setPopupAnchors("");
      popupOpen.action("", 'jack', 'jack');
    }
  },

  set: function() { // ページが開かれた時に、ポップアップをセットする
    this.anchors = Element.select(this.targetElement,'._popup');
    if(this.anchors[0]){
      this.anchors.each(function(anchor) {
        this.anchorName = anchor.rel;
        anchor.setAttribute('href', "javascript: void(0);");
        anchor.observe(
          'click'
          , (
            function(event) {
              var popupOpen = new setPopupAnchors("");
              popupOpen.action(event, this.rel, this);
            }
          )
        )
      });
    };
  },

  action: function(event, name, target) { // 開く・閉じるの判定
    this.name = name;
    if(!$("_popup_box_" + name)) {
      this.open(event, name, target);
    } else {
      this.close(name);
    }
    quickOpen('open');
  },

  open: function(event, name, target) { // 開くときの動作
    var popupArea = new Element(
      'div',
      {
        id: '_popup_box_' + name
      }
    );
    
    var iframeBox = new Element(
      'iframe',
      {
        id: '_popup_iframe_' + this.name,
        src: 'javascript: false;',
        frameborder: 0
      }
    )

    var content = $$('._popup_' + name)[0].cloneNode(true);

    Element.setStyle(content,{
      display: 'block',
      visibility: 'hidden'
    })
    
    popupArea.insert({bottom: content});
    document.body.appendChild(popupArea);

    this.popupSize = Element.getDimensions(content);
    this.displaySize = document.viewport.getDimensions();
    if (name != "jack") {
      this.clickPosition = Event.pointer(event);
    }else{
      this.clickPosition = {
        x: 0,
        y: 0
      }
    }
    var popupPosition = this.position(event, name, target);

    Element.setStyle(popupArea, {
      position: "absolute",
      visibility: "hidden",
      left: popupPosition['x'] + 'px',
      top: popupPosition['y']  + 'px',
      visibility: "visible",
      zIndex: '20'
    });

    Element.setStyle(iframeBox, {
      position: "absolute",
      width: this.popupSize.width + 'px',
      height: this.popupSize.height + 'px',
      left: popupPosition['x'] + 'px',
      top: popupPosition['y']  + 'px',
      padding: '0px',
      margin: '0px',
      border: 'none',
      zIndex: '10'
    });


    document.body.appendChild(popupArea);
    document.body.appendChild(iframeBox);

    Element.setStyle(content,{
      visibility: "visible"
    })

    Element.setStyle(popupArea,{
      visibility: "visible"
    })
    if(!document.all){
      var setPopup = new setPopupAnchors(popupArea);
      setPopup.set();
    }
    this._click(name, target)
    event.cancelBubble = true;
  },

  _click: function(name, target){
    this.bodyClick = function(event){
      closeClickPosition = Event.pointer(event);
      Position.prepare();
      popupClosse = Position.withinIncludingScrolloffsets($('_popup_box_' + name), closeClickPosition['x'], closeClickPosition['y']);
      var closePopup = new setPopupAnchors();
      if(target != Event.element(event) && popupClosse == false){
        closePopup.close(name);
        quickOpen('open');
      }
    }
    
    if(name != "jack"){
      Event.observe(document.body, 'click', this.bodyClick, false);
    }

/*
    Event.observe(document.body, 'click', function(event){
      closeClickPosition = Event.pointer(event)
      popupClosse = Position.within($('_popup_box_' + name), closeClickPosition['x'], closeClickPosition['y']);
      var closePopup = new setPopupAnchors();
      if(target != Event.element(event) && popupClosse == false){
        closePopup.close(name);
      }
    } ,false);
*/
  },

  close: function(name) { // 閉じる時の動作
    Element.remove($('_popup_box_' + name));
    Element.remove($('_popup_iframe_' + name));
    Event.stopObserving(document.body, 'click', this.bodyClick ,false);
  },
  
  position: function(event, name, target) { // 位置決定
    if (name == "jack") {
      var classNameArray = new Array();
      classNameArray[0] = ("_popup_windowcenter");
    }else{
      var classNameArray = $A(target.classNames());
      clickElement = Event.element(event);
      this.popupPosition = {
        x: (Position.cumulativeOffset(Event.element(event))[0]),
        y: (Position.cumulativeOffset(Event.element(event))[1] -  Position.realOffset(Event.element(event))[1] - 0 > this.popupSize.height ? Position.cumulativeOffset(Event.element(event))[1] - this.popupSize.height - 10 :  Position.cumulativeOffset(Event.element(event))[1] + Element.getHeight(clickElement) +  10)
      }




    }

    for(var i = 0; i < classNameArray.length; i++){ //  _popup_以下がある時の処理
      if(classNameArray[i].substring(0, 7) == "_popup_"){
        this.getStyle = classNameArray[i].split("_");
        for(var j = 0; j < this.getStyle.length; j++){
          this.type = this.getStyle[j];
          switch(this.type){
            case "left":
              this.popupPosition["x"] = Position.cumulativeOffset(Event.element(event))[0] - this.popupSize.width + Element.getDimensions(Event.element(event)).width 
              break;

            case "center":
              this.popupPosition["x"] = Position.cumulativeOffset(Event.element(event))[0] - (this.popupSize.width/2) + (Element.getDimensions(Event.element(event)).width / 2)
            break;

            case "right":
              this.popupPosition["x"] = Position.cumulativeOffset(Event.element(event))[0] + Element.getDimensions(Event.element(event)).width
              break;

            case "top":
              this.popupPosition["y"] = Position.cumulativeOffset(Event.element(event))[1] - this.popupSize.height - 10
              break;

            case "middle":
              this.popupPosition["y"] = Position.cumulativeOffset(Event.element(event))[1] - (this.popupSize.height / 2) + (Element.getDimensions(Event.element(event)).height / 2)
              break;

            case "bottom":
              this.popupPosition["y"] = Position.cumulativeOffset(Event.element(event))[1] + Element.getDimensions(Event.element(event)).height +10
              break;

            case "windowcenter":
              this.popupPosition = {
                x: (this.displaySize.width / 2) - (this.popupSize.width / 2),
                y: (this.displaySize.height / 2) - (this.popupSize.height / 2)
              }
              break;
            case "anchor": {
              clickElement = Event.element(event);
              this.popupPosition = {
                x: (this.displaySize.width - Position.cumulativeOffset(Event.element(event))[0] > this.popupSize.width ? Position.cumulativeOffset(Event.element(event))[0] : Position.cumulativeOffset(Event.element(event))[0] - this.popupSize.width),
                y: (Position.cumulativeOffset(Event.element(event))[1] -  Position.realOffset(Event.element(event))[1] - 0 > this.popupSize.height ? Position.cumulativeOffset(Event.element(event))[1] - this.popupSize.height - 10 :  Position.cumulativeOffset(Event.element(event))[1] + Element.getHeight(clickElement) +  10)
              }
              break;
            }
            case "click":{
              this.popupPosition = {
                x: (this.displaySize.width < (this.clickPosition['x'] + this.popupSize.width) && this.clickPosition['x'] > this.popupSize.width) ? this.clickPosition['x'] - this.popupSize.width : this.clickPosition['x'],
                y: (this.displaySize.height < (this.clickPosition['y'] + this.popupSize.height) && this.clickPosition['y'] > this.popupSize.height) ? this.clickPosition['y'] - this.popupSize.height - 5 : this.clickPosition['y'] + 10
              }
              break;
            }
            case "x":{
              this.popupPosition = {
                x: this.getStyle[3],
                y: this.getStyle[5]
              }
              break;
            }
          }
        }
      };
    };
    return this.popupPosition;
  }
};


Event.observe(window, 'load', startPopup, false);

function startPopup(){
  var setPopup = new setPopupAnchors(document.body);
  setPopup.pageOpen();
}





/***** ログイン後のクイックリンク ****/

function quickOpen() {
  if($('quick_link')){
    var qText = $('quick_link').innerHTML;
    if($("_popup_box_link")) {
      qText = qText.replace('開く','閉じる');
    } else {
      qText = qText.replace('閉じる','開く');
    }
    $('quick_link').innerHTML = qText;
  }
}
