/**
 * Dialog
 *
 * @author Boz
 * @constructor
 * @classDescription This is the MDP JavaScript app template.  It contains most all elements of our coding style preferences.
 **/

mdp.app.Dialog = function(msg, options) {
    /* ---[ CLASS VARIABLES ]--- */
    var options = options || {};
    var settings = {
        position:"center",
        offsetX:0,
        offsetY:0,
        width:200,
        height:200,
        coverAllFull: false,
        coverAll:false,
	    onClose: function(){
		    _self.close();
	    },
        specialClass:null,
        onShow:function() {
        }
    };
    $.extend(settings, options);
    settings.onShow = options.onShow || function() {
    };

    var _self = this;

    this.close = function() {
        $("#mdpdialog").remove();
    }

	var _self = this;

	this.close = function(){
		$("#mdpdialog").remove();
	}

    /* public */

    /* private */

    /* ---[ CONSTRUCTOR ]--- */
    function dialog() {

        var mdpdialog = $("#mdpdialog").length > 0 ? $("#mdpdialog") : $("<div>").attr({"id":"mdpdialog","class":"share-dialog"});
        mdpdialog.addClass("activated");
        if (settings.specialClass != null) {
            mdpdialog.addClass(settings.specialClass);
        }
        if (settings.coverAll) {
            mdpdialog.addClass("coverall");
        }

        var offsetX = settings.offsetX;
        var offsetY = settings.offsetY;

        if (navigator.userAgent.match(/iPad/i) != null) {
            offsetX += window.pageXOffset;
            offsetY += window.pageYOffset;
        }

        var coords;
        switch (settings.position) {
            case "center":
                coords = {
                    x:Math.ceil(($(window).width() / 2) - (settings.width / 2) + offsetX),
                    y:Math.ceil(($(window).height() / 2) - (settings.height / 2) + offsetY)
                };
                break;
            case "left":
                coords = {
                    x:offsetX,
                    y:Math.ceil(($(window).height() / 2) - (settings.height / 2) + offsetY)
                };
                break;
            case "right":
                coords = {
                    x:Math.ceil(($(window).width()) - (settings.width) + offsetX),
                    y:Math.ceil(($(window).height() / 2) - (settings.height / 2) + offsetY)
                };
                break;
            case "bottom":
                coords = {
                    x:Math.ceil(($(window).width() / 2) - (settings.width / 2) + offsetX),
                    y:Math.ceil(($(window).height()) - (settings.height) + offsetY)
                };
                break;
            case "bottom-left":
                coords = {
                    x:offsetX,
                    y:Math.ceil(($(window).height()) - (settings.height) + offsetY)
                };
            break;
            case "bottom-left":
                coords = {
                    x:settings.offsetX,
                    y:Math.ceil(($(window).height()) - (settings.height) + settings.offsetY)
                };
                break;
            case "top":
                coords = {
                    x:Math.ceil(($(window).width() / 2) - (settings.width / 2) + offsetX),
                    y:offsetY
                };
                break;
        }
        if (mdp.util.log) {
            mdp.util.log("x:" + coords.x + " , y:" + coords.y);
        }
        mdpdialog.html('<div class="dialog-fixed"><div style="top:' + coords.y + 'px; left:' + coords.x + 'px; width:' + settings.width + 'px; height:' + settings.height + 'px;" class="dialog-wrapper"><div id="dialogclose"><span>X</span></div><div class="dialog-border"><div id="dialogmsg" class="dialog-msg"></div></div></div></div>');

        $(document.body).append(mdpdialog);

        $('#dialogclose').click(function(){
            settings.onClose();
        });

        mdp.sharebarItems = $('body:first').find('div[id^=sb]');
        mdp.dialogParent = $('.dialog-fixed:first');

        $('body:first').unbind("click").click(function(e) {
            if ($('#mdpdialog').length > 0) {
                var isparent = $(e.target).parents().is('#mdpdialog');

                if (!isparent && $('#mdpdialog') != $(e.target)) {
                    var closeDialog = true;
                    var target = e.target;
                    if (target == undefined) target = event.srcElement;
                    var hasThisChild = $.contains(mdp.dialogParent[0], target);

                    var mdpdialog = $("#mdpdialog");

                    if (!hasThisChild[0]) {
                        if (mdpdialog.hasClass("activated")) {
                            mdpdialog.removeClass("activated");
                        } else {
                            settings.onClose();
                        }
                    }
                }
            }
        });

        var msgdiv = $("#dialogmsg");
        if (typeof(msg) == "string") {
            msgdiv.html(msgdiv.html() + msg);
        }
        else {
            msgdiv.append(msg);
        }

        settings.onShow.call(_self);
    }

    /* ---[ RUN ]--- */
    dialog();
};

