var ActsLikeGoogleMap = Behavior.create();

Object.extend(ActsLikeGoogleMap.prototype, {
  initialize:function(options) {
        var address = this.element.next().getElementsBySelector('.address')[0].innerHTML;
        var info_html = this.element.next().getElementsBySelector('.info_window')[0].innerHTML;
        var map = new GMap2(this.element);
    var geocoder = new GClientGeocoder();
       geocoder.getLatLng(
          address,
          function(point) {
            if (!point) {
              alert(address + " not found");
            } else {
              map.setCenter(point, 15);
                          map.addControl(new GSmallMapControl());
              map.addControl(new GMapTypeControl());
              var marker = new GMarker(point);
              map.addOverlay(marker);
              marker.openInfoWindowHtml(info_html);
            }
          }
        );
  }
});

var ActsLikeNewSlideShow = Behavior.create();
Object.extend(ActsLikeNewSlideShow.prototype, {
        initialize:function() {
           
            new Transition(this.element,
                           {slide_class:      'din_slide',
                            play_button_class:'din_slideshow_play',
                            stop_button_class:'din_slideshow_stop'});
        }
});

var FormTextResize = Behavior.create();
Object.extend(FormTextResize.prototype, {
  initialize:function(options) {
      //this.element.setStyle({fontSize:(this.getFontSizePercent() + '%')});
      //this.element.up().up().setStyle({height:(this.element.getHeight())});
  },
  getFontSizePercent: function() {
        //alert("hello " + this.element.width);
    if(this.element.getWidth() < 500) {
          return (Math.round((this.element.getWidth()/500) * 20)) + 80 ;
        }
  }
});

var ActsLikeBiggableImage = Behavior.create();
Object.extend(ActsLikeBiggableImage.prototype, {
  initialize:function(options) {
      var images = $A($(this.element).getElementsByClassName('image_holder'));
      images.each(function(image) { this.wrap_image_with_anchor(image); }.bind(this));
          // this reinitializes the lightbox library if it has already loaded
          // if is hasn't then the onload handler ofr the lightbox library will do it
          if (window.myLightbox) {
                myLightbox.updateImageList();
          }
          //initLightbox();
  },
  wrap_image_with_anchor:  function(image_el) {
      var html_content = image_el.up().innerHTML;
      var el =  new Insertion.After(image_el, '<a href="' + this.get_large_url(image_el) + '" rel="lightbox">' + html_content + '</a>' );
      image_el.remove();
  },
  get_large_url:function (image_el) {
      return  $(image_el).getElementsBySelector('.data .largeurl')[0].innerHTML.strip();
  }
});

var ActsOpacity = Behavior.create();
Object.extend(ActsOpacity.prototype, {
    initialize:function(options) {
                options = Object.extend({duration:0.5, from:1.0, to:0.7}, options);
                new Effect.Opacity(this.element,options)
        }
});

var OutlineSitemapHome = Behavior.create();
Object.extend(OutlineSitemapHome.prototype, {
    initialize:function(options) {
                this.element.down().addClassName('din_homepage');
                new Insertion.After(this.element.getElementsByClassName('name')[0],'<span class="the_homepage">(homepage)</span>');
        }
});

var ToolNubbins = Behavior.create();
ToolNubbins.zIndex = 800;
ToolNubbins.getZIndex = function () {
    ToolNubbins.zIndex = ToolNubbins.zIndex - 1;
    return ToolNubbins.zIndex;
}

Object.extend(ToolNubbins.prototype, {
        initialize:function(options) {
            if(this.has_nubbin()) {
                this.element.observe('mouseover', this.on_mouseover.bindAsEventListener(this));
                this.element.observe('mouseout', this.on_mouseout.bindAsEventListener(this));
                this.element.observe('mousedown', this.on_mousedown.bindAsEventListener(this));
                this.element.observe('mouseup', this.on_mouseup.bindAsEventListener(this));
                this.element.observe('mousemove', this.on_mousemove.bindAsEventListener(this));

                this.drag_to_tip  = this.get_drag_to_nubbin_text();

                this.nubbin_element = this.element.getElementsByClassName("din_nubbin")[0];
                this.z_index = ToolNubbins.getZIndex();
            }
        },
        is_image_insert_tool:function () {
            return this.element.hasClassName('image_send_insert');
        },
        has_nubbin:function () {
            //var nubbin_element = this.element.getElementsByClassName("din_nubbin")[0];
            //if(nubbin_element
            return this.element.getElementsByClassName("din_nubbin")[0];
        },
        mouse_down:false,
        in_drag:false,
        get_drag_to_nubbin_text:function () {
            var el = this.element.getElementsByClassName("drag_to_tip")[0];
            return (el ? el.innerHTML : "");
        },
        on_mouseover:function (event) {
           if (!this.in_drag) {
               this.nubbin_element.setStyle({display:'block'});
               // $('inner_image_controlbar').setStyle({overflowX:'visible'});
           }
        },
        on_mouseout:function (event) {
              this.element.getElementsByClassName("din_nubbin")[0].setStyle({display:'none'});
              //$('inner_image_controlbar').setStyle({overflowX:'scroll'});
        },
        on_mousedown:function (event) {
            this.mouse_down = true;
        },
        on_mouseup:function (event) {
            if(this.in_drag == true) {
                this.in_drag = false;
                this.on_drag_end(event);
            }
            this.mouse_down = false;
        },
        on_mousemove:function (event) {
            // we can change the nubbin content here
            if(this.mouse_down && this.in_drag == false) {
                this.on_drag_start(event);
                this.in_drag = true;
                //this.on_mouseout(event);
            }
        },
        on_drag_end:function(event) {
            this.remove_insert_nubbins();
            //var thisinstance = this;
            if(this.is_image_insert_tool()) {
              window.setTimeout(function () {
                    //                    alert('here');
                    this.element.setStyle({zIndex:"" + this.z_index});
              }.bind(this),500 );
            }
            //var el = this.element.getElementsByClassName("din_nubbin")[0];
            //  el.getElementsByClassName("din_message").each(function(el){el.toggleClassName('din_message_hide')});
        },
        on_drag_start:function (event) {
            this.on_mouseout(event);
            new PeriodicalExecuter(function(pe) {
                    $$(".page .temp_insert").each(function(el) {this.create_insert_nubbin(el)}.bind(this));
                    $$(".page .message_receiver_background").each(function(el) {this.create_edit_insert_nubbin(el)}.bind(this));
                    pe.stop();
            }.bind(this), 0.1);
            //    var el = this.element.getElementsByClassName("din_nubbin")[0];
            //    el.getElementsByClassName("din_message").each(function(el){el.toggleClassName('din_message_hide')});
        },
        create_insert_nubbin:function (element) {
      //new Insertion.Bottom(element,
      //                         '<div class="nubbin_holder" style="position:relative;"><div class="side_nubbin"><div class="right_side_nubbin_top"></div><div class="right_side_nubbin_heading"><div class="title">Drop Tool Here</div></div><div class="nubbin_message"><div class="text_area">'+ this.drag_to_tip +'</div></div><div class="right_side_nubbin_bottom"></div></div></div>');
        },
        remove_insert_nubbins:function () {
            $$('.nubbin_holder').each(function(el){el.remove()});
        },
        create_edit_insert_nubbin:function (element) {
            if(!element.up().hasClassName('din_slideshow_item_droppables') || element.hasClassName('image_position_gets_4')) {
              var title = this.is_image_insert_tool() ? "Drop Photo Here" : "Drop Tool Here";
              var drag_tip =  element.hasClassName('image_position_gets_4') ? 'to insert it into the slideshow' : this.drag_to_tip;
              //  new Insertion.Top(element,
              //                   '<div class="nubbin_holder" style="position:relative;"><div class="side_nubbin inplace_nubbin"><div class="right_side_nubbin_top"></div><div class="right_side_nubbin_heading"><div class="title">'+title+'</div></div><div class="nubbin_message"><div class="text_area">'+ drag_tip +'</div></div><div class="right_side_nubbin_bottom"></div></div></div>');
            }

        },
        remove_insert_nubbins:function () {
            $$('.nubbin_holder').each(function(el){el.remove()});
        }

});

var ActsLikeTwitterable = Behavior.create();
Object.extend(ActsLikeTwitterable.prototype, {
  initialize:function(options) {
      var el = this.element;
      var list = this.element.down('ul');
      var list_id = list.id;
      var name = this.element.down('.data_for_behavior').down('.name').innerHTML;
      var how_many = this.element.down('.data_for_behavior').down('.how_many').innerHTML;
      var twitter_item_id = this.element.down('.data_for_behavior').down('.twitter_item_id').innerHTML;
      // write script tag
      var body = $$('body')[0];
      eval("twitterCallback" + twitter_item_id + " = createTwitterCallback('twitter_update_list_" + twitter_item_id + "');");

this.node = document.createElement('SCRIPT');
this.node.type = 'text/javascript';
this.node.src = 'http://twitter.com/statuses/user_timeline/' + name + '.json?callback=twitterCallback' + twitter_item_id + '&count=' + how_many;
var head = document.getElementsByTagName('HEAD')[0];
head.appendChild(this.node);
//   body.insert({ bottom:'<script type="text/javascript" src="http://twitter.com/statuses/user_timeline/' + name + '.json?callback=twitterCallback' + twitter_item_id + '&amp;count=' + how_many +'"></script>'});
  }

  });
