/* - - - - - - - - - - - - - - - - - - - - - - -
 * Create doors from background of parent
 * Open/Close the doors when mouseover/mouseout
 *
 * Autor: Raducu Ioan-Nisi
 *
 * Monday, September 27, 2010 10:41:59 AM
 *
 * http://www.arcasu.ro
 - - - - - - - - - - - - - - - - - - - - - - - */

(function($) {
    $.fn.extend({
        bgdoor: function(settings) {
            return this.each( function() {

     var $this = $(this), parent = $this.parent();

     var bgi = parent.css("background-image");
     if (!bgi) return;

     var bgp = parent.css("background-position"), bgleft, bgtop;
     if (bgp) {
        bgp    = bgp.split(" ");
        bgleft = parseInt(bgp[0]);
        bgtop  = parseInt(bgp[1]);
     } else {
        bgleft = parseInt(parent.css("background-position-x"));
        bgtop  = parseInt(parent.css("background-position-y"));
     }

     var offsetx, offsety, elWidth, elHeight;

     offsetx  = bgleft - parseInt($this.css("left")) - parseInt($this.css("border-left-width"));
     offsety  = bgtop  - parseInt($this.css("top"))  - parseInt($this.css("border-top-width"));

     elWidth  = parseInt($this.css("width")) + parseInt($this.css("padding-left")) + parseInt($this.css("padding-right"));
     elHeight = parseInt($this.css("height")) + parseInt($this.css("padding-top")) + parseInt($this.css("padding-bottom"));

     var $door = [], map = settings.map, areas = map.length;  // top, right, bottom, left, angle, duration
     for (area in map) {
         for (var i=0; i<4; i++) {
             if (i%2 == 0) {
                map[area][i] = parseInt(map[area][i]*elHeight);
             } else {
                map[area][i] = parseInt(map[area][i]*elWidth);
             }
         }
         map[area].css = {
             left: map[area][3]+"px", top: map[area][0]+"px",
             width: map[area][1]-map[area][3]+1+"px",
             height: map[area][2]-map[area][0]+1+"px",
             backgroundPosition: (offsetx-map[area][3])+"px "+(offsety-map[area][0])+"px",
             position: "absolute", backgroundImage: bgi}; // , opacity: 0.8

         map[area].prop = {
             left: "+="+parseInt(Math.cos(map[area][4]*Math.PI)*(map[area][1]-map[area][3]+1)),
             top:  "+="+parseInt(Math.sin(map[area][4]*Math.PI)*(map[area][0]-map[area][2]-1))};
     }

     for (var i=0; i<areas; i++) {
         $this.append($door[i] = $("<div></div>").css(map[i].css));
     }

     function aniTo1() {
              for (var i=0; i<areas; i++) {
                  $door[i].stop(true, false).animate(map[i].prop, map[i][5]);
              }
     }

     function aniTo0() {
              for (var i=0; i<areas; i++) {
                  $door[i].stop(true, false).animate({left: map[i][3]+"px", top: map[i][0]+"px"}, map[i][5]);
              }
     }

     $this.css({overflow: "hidden"}).hover(aniTo1, aniTo0);

            })
        }
    })

})(jQuery);


