/**
 * flavorpill subscription choose-publication functionality.
 *
 * @author Husani S. Oakley
 * @version 1.0
 */

/**
 * constructor
 *
 * @param {String} ddform_id
 *		DOM id of main dropdowm form element.
 * @param {String} trigger_id
 *		DOM id of clickable element that toggles dropdown form visibility.
 */
function DropdownForm(ddform_id, trigger_id){
    /** variables */
    this.ddform_id = ddform_id;
    this.ddform_element = document.getElementById(this.ddform_id);
    this.trigger_id = trigger_id;
    this.toggle_status = false;
    this.cursor_status = false;

    /** method assignments */
    this.toggle = doToggle;
    this.cursor = setCursorStatus;
    this.click = clickHandler;

    /** allows us to refer to this object inside event handling mechanism */
    var self;

    /**
     * turn on and off both ddform visibility and window-wide click event capturing
     */
    function doToggle(){    
	if(!this.toggle_status){
	    //ddform is hidden.  show it and set event handler
	    this.ddform_element.className = "on";
	    this.toggle_status = true;
	    self = this;
	    document.onclick = this.click;
	} else {
	    //ddform is visible.  hide it and reset event handler
	    this.ddform_element.className = "off";
	    this.toggle_status = false;
	    document.onclick = null;
	}
    }

    /**
     * set cursor_status property based on cursor position
     *
     * @param {Boolean} status
     *		is cursor over dropdown form?
     */
    function setCursorStatus(status){
	this.cursor_status = status;
    }

    /**
     * capture event, run methods based on clicked element
     *
     * @param {Object} e
     *		Event object.
     */
    function clickHandler(e){
	//get ID of event trigger
	var targ;
	if (!e) var e = window.event;
	if (e.target) trigger_id = e.target.id;
	else if (e.srcElement) trigger_id = e.srcElement.id;
	
	//toggle logic
	switch(trigger_id){
	case self.ddform_id:
	    self.toggle();
	    break;
	case self.trigger_id:
	    break;
	default:
	    //is cursor over ddform?
	    if(!self.cursor_status){
		//no -- close ddform
		self.toggle();
	    }
	    break;
	}
    }
}
