var highlight = {
  initialize : function(){
    highlight.zoom.init();
  }
};

highlight.zoom = {
  container:null,
  showDelay:0.1,
  hideDelay:0.3,
  showDuration:0.2,
  hideDuration:0.1,
  showTransition:YAHOO.util.Easing.easeIn,
  hideTransition:YAHOO.util.Easing.easeIn,
  showAttributes:{
    opacity:{to:1}
  },
  hideAttributes:{
    opacity:{to:0}
  },
  init:function(startNode){
    highlight.zoom.container = document.getElementsByTagName("body")[0];
    var imageZooms = yuiDom.getElementsBy(function(image){
      var zoomSrc = image.getAttribute("zoomsrc");
      return (zoomSrc!=null && zoomSrc!="");
    },"img",startNode);
    imageZooms.forEach(function(thumb){
      if(!thumb.zoomConfig){
        highlight.zoom.initThumb(thumb);
      }
    });
  },
  initThumb:function(thumb){
    var img,animIn,animOut,propertyId;
    propertyId = thumb.getAttribute("propertyid");
    img = document.createElement("img");
    yuiDom.addClass(img,"zoomImage");
    yuiDom.addClass(thumb,"zoomThumb");
    animIn = new yuiAnim(img,highlight.zoom.showAttributes,highlight.zoom.showDuration,highlight.zoom.showTransition);
    animIn.onStart.subscribe(function(){
      yuiDom.setStyle(img,"opacity",0);
      yuiDom.addClass(img,"zoomImageShowing");
    });
    animOut = new yuiAnim(img,highlight.zoom.hideAttributes,highlight.zoom.hideDuration,highlight.zoom.hideTransition);
    animOut.onComplete.subscribe(function(){
      yuiDom.removeClass(img,"zoomImageShowing");
    });
    highlight.zoom.container.appendChild(img);
    yuiEvent.addListener(thumb,"mouseover",highlight.zoom.setShow);
    yuiEvent.addListener(thumb,"mouseout",highlight.zoom.setHide);
    yuiEvent.addListener(img,"mouseover",highlight.zoom.clearHide);
    yuiEvent.addListener(img,"mouseout",highlight.zoom.setHide);
    yuiEvent.addListener(img,"click",highlight.zoom.openHighightAndHide);
    var zoomConfig = {
      src:thumb.getAttribute("zoomsrc"),
      thumb:thumb,
      image:img,
      propertyId:propertyId,
      highlight:yuiDom.get("highlight_"+propertyId),
      isShowing:false,
      isOver:false,
      animIn:animIn,
      animOut:animOut,
      showTimeout:null,
      hideTimeout:null,
      x:0,
      y:50,
      highlightConfig:thumb.configItem
    };
    thumb.zoomConfig = zoomConfig;
    img.zoomConfig = zoomConfig;
  },
  show:function(){
    if(this.zoomConfig.highlight && yuiDom.hasClass(this.zoomConfig.highlight,"detailsHighlightOpen")){
      return;
    }
    if(this.zoomConfig.isOver && !this.zoomConfig.isShowing){
      this.zoomConfig.isShowing = true;
      yuiDom.setStyle(this.zoomConfig.image,"top",this.zoomConfig.y +"px");
      yuiDom.setStyle(this.zoomConfig.image,"left",this.zoomConfig.x +"px");
      this.zoomConfig.animIn.animate();
    }
  },
  hide:function(){
    this.zoomConfig.isShowing = false;
    this.zoomConfig.animOut.animate();
  },
   hideNow:function(){
     yuiDom.removeClass(this.zoomConfig.image,"zoomImageShowing");
     yuiDom.setStyle(this.zoomConfig.image,"opacity",0);
     this.zoomConfig.isShowing = false;
  },
  setShow:function(e){
    var self = this;
    this.zoomConfig.isOver = true;
    highlight.zoom.clearHide.apply(this);
    if(this.zoomConfig.image.src == ""){
      this.zoomConfig.image.src = this.zoomConfig.src;
    }
    if(!this.zoomConfig.isShowing){
//      var coords = yuiEvent.getXY(e); // mouse coords
      var coords = yuiDom.getXY(yuiEvent.getTarget(e));

//      this.zoomConfig.x = coords[0] + 10;
//      this.zoomConfig.y = coords[1] + 0;
      this.zoomConfig.x = coords[0] + 20;
      this.zoomConfig.y = coords[1] + 12;
      this.zoomConfig.showTimeout = setTimeout(function(){
        highlight.zoom.show.apply(self);
      },highlight.zoom.showDelay*1000);
    }
  },
  setHide:function(e){
    var self = this;
    this.zoomConfig.isOver = false;
    if(this.zoomConfig.isShowing){
      clearTimeout(this.zoomConfig.showTimeout);
      this.zoomConfig.showTimeout = null;
      this.zoomConfig.hideTimeout = setTimeout(function(){
        highlight.zoom.hide.apply(self);
      },highlight.zoom.hideDelay*1000);
    }
  },
  clearHide:function(e){
    if(this.zoomConfig.hideTimeout){
      clearTimeout(this.zoomConfig.hideTimeout);
      this.zoomConfig.hideTimeout = null;
    }
  },
  openHighightAndHide:function(e){
    highlight.zoom.hideNow.apply(this);
    if(this.zoomConfig.highlight && !yuiDom.hasClass(this.zoomConfig.highlight,"detailsHighlightOpen")){
    /*  var item = {
        propertyId:this.zoomConfig.propertyId,
        link:document.getElementById('md_'+this.zoomConfig.propertyId),
        container:document.getElementById('highlight_'+this.zoomConfig.propertyId)
      };*/
      highlight.show(this.zoomConfig.highlightConfig);
    }
  }
};
yuiEvent.onDOMReady(highlight.initialize);