/**
* Connects a link element to a pane element, enabling the link to toggle
* the visibility of the pane. Mulitiple links can be connected to the same pane.
*
* Usage:
* panelink_args = { active_state: 'highlighted' }
* var nav_panelink = new FloatingPaneLink(["email-link"], "email-box", panelink_args),
*/
	
var FloatingPaneLink = Class.create({
    
    initialize: function (link_ids, pane_id, args) {
        var self = this;

    	this.link_nodes = [];
        this.pane_node = $(pane_id);
    	this.active_state = "";
        
	    Object.extend(this, args);
        
        if (this.pane_node) {
            //
            // there can be multiple links that open the same pane.
            link_ids.each(function (link_id) {
                var lnk = $(link_id);
                if (lnk) {
                    self.link_nodes.push(lnk);
                    //
                    // Toggle pane view state if link is clicked.    
                    lnk.observe('click', function(evt) {
						
						// this link takes care of itself
						if (lnk.id=="cart-link") return;
						
						// reposition boxes	
						lnk_left = lnk.positionedOffset().left+lnk.getWidth();
						pane_width = self.pane_node.getWidth();
						pane_left = ((pane_width-lnk_left)*-1)+'px';
						self.pane_node.setStyle({right: ''});
						self.pane_node.setStyle({left: pane_left});

                        self.pane_node.toggle();
						var frm = self.pane_node.down('form');
						if (frm) {
							// frm.focusFirstElement(); //
						}
						// $('form-helper').hide();
                        lnk.toggleClassName(self.active_state);
                    });
                    //
                    // add event listener to body. Close pane if anything
                    // unrelated to the link or the pane is clicked.    
                    Event.observe(document.body, 'click', function(evt){
                        var clicked = Event.element(evt);
                        if (!(clicked.descendantOf(self.pane_node))
                           && (clicked !== lnk)
                           && (clicked !== self.pane_node) ) {
                            self.pane_node.hide();
							var frm = self.pane_node.down('form');
							if (frm) {
								// $('form-helper').hide();
								// frm.findDefinition('FormHandler').validation.reset();
							}
                            lnk.removeClassName(self.active_state);
                        }
                    });
                }
            });
        }
    }
});
