/*
    Dependencies:
--------------------------------------------
    wun.common.js
*/

var undefined;

var wun = ( wun == undefined ) ? {} : wun;

/*
	wun.tooltip css sample:
--------------------------------------------	

	.wunTooltip {
		background: #fff;
		border: 1px solid #ccc;
	}
	
	.wunTooltip .wunWrap3 {
		padding: 10px 10px 10px 10px;
	}
	
	.wunTooltip .wunButton {
		background-image: url(../images/popup_close.gif);    
		background-color: #000;
	    background-repeat: no-repeat;
	    background-position: center center;
	    cursor: pointer;
	    height: 39px;
	    left: 458px;
	    position: absolute;
	    top: -9px;
	    width: 102px;
	}

*/

wun.tooltip = function(options) {

    this.defaultOptions = {
        cssClass: 'wunTooltip',
        align: '',
        valign: '',
        offsetX: 20,
        offsetY: 20,
        draggable: false,
        closeable: false
    };

    this.elements = {};
    this.events = {};
    this.options = {};

    this.dragging = false;
    this.dragOffset;

    this.create = function() {

        this.elements.tooltip = jQuery('<div></div>')
        	.addClass(this.options.cssClass)
        	.css('position', 'absolute');

        this.elements.div1 = jQuery('<div></div>')
        	.addClass('wunWrap1');

        this.elements.div2 = jQuery('<div></div>')
        	.addClass('wunWrap2');

        this.elements.div3 = jQuery('<div></div>')
        	.addClass('wunWrap3');

        if (this.options.closeable) {

            this.elements.btn = jQuery('<div></div>')
        	    .addClass('wunButton')
        	    .css('position', 'absolute');

            this.elements.reldiv = jQuery('<div></div>')
        	    .css('position', 'relative');

            this.elements.reldiv.append(this.elements.btn);
            this.elements.tooltip.append(this.elements.reldiv);

            $(this.elements.btn).bind('click', { sender: this }, function(event) {
                event.data.sender.hide();
            });
        }

        if (this.options.draggable) {

            $(this.elements.tooltip).bind('mousedown', { sender: this }, function(event) {
                wun.common.saveHtmlAttributes(event);
                event.data.sender.dragging = true;
                event.data.sender.dragOffset = {
                    x: parseInt(event.data.sender.elements.tooltip.css('left')) - wun.common.cursor.x,
                    y: parseInt(event.data.sender.elements.tooltip.css('top')) - wun.common.cursor.y
                };
                
            });

            $(document).bind('mouseup', { sender: this }, function(event) {
                if (event.data.sender.dragging)
                    event.data.sender.dragging = false;
            });

            $(document).bind('mousemove', { sender: this }, function(event) {
                if (event.data.sender.dragging)
                    wun.common.move(event.data.sender.elements.tooltip, event, event.data.sender.dragOffset.x, event.data.sender.dragOffset.y, event.data.sender.options.align, event.data.sender.options.valign);
            });
        }

        this.elements.div2.append(this.elements.div3);
        this.elements.div1.append(this.elements.div2);
        this.elements.tooltip.append(this.elements.div1);

        this.hide();

        jQuery(document.body).append(this.elements.tooltip);
    };

    this.setContent = function(content) {
        this.elements.div3.html(content);
        //this.position();
    };

    this.setImage = function(imageUrl) {
        this.elements.div3.html('<img src="' + imageUrl + '" alt="" />');
        //this.position();
    };

    /*
    options {
    cssClass:       (string),
    align:          (string),
    valign:         (string),
    offsetX: 		(int),
    offsetY: 		(int),
    zIndex:			(int)
    }
    */
    this.applyOptions = function(options) {
        if (options != undefined) {
            this.options.cssClass = (options.cssClass != undefined) ? options.cssClass : this.defaultOptions.cssClass;
            this.options.align = (options.align != undefined) ? options.align : this.defaultOptions.align;
            this.options.valign = (options.valign != undefined) ? options.valign : this.defaultOptions.valign;
            this.options.offsetX = (options.offsetX != undefined) ? options.offsetX : this.defaultOptions.offsetX;
            this.options.offsetY = (options.offsetY != undefined) ? options.offsetY : this.defaultOptions.offsetY;
            this.options.draggable = (options.draggable != undefined) ? options.draggable : this.defaultOptions.draggable;
            this.options.closeable = (options.closeable != undefined) ? options.closeable : this.defaultOptions.closeable;

            if (options.zIndex != undefined) this.setDepth(options.zIndex);
        }
    };

    this.isVisible = function() {
        return this.elements.tooltip.is(':visible');
    };

    this.show = function() {
        this.elements.tooltip.show();
    },

    this.hide = function() {
        this.elements.tooltip.hide();
    };

    this.toggle = function() {
        if (this.isVisible())
            this.hide();
        else
            this.show();
    };

    this.setDepth = function(index) {
        this.elements.tooltip.css('z-index', (typeof index == 'string' ? index : index.toString()));
    };

    this.position = function(event) {
        this.show();
        wun.common.move(this.elements.tooltip, event, this.options.offsetX, this.options.offsetY, this.options.align, this.options.valign);
    };

    if (options != undefined)
        this.applyOptions(options);
    else
        this.applyOptions(this.defaultOptions);

    this.create();
};
