/*
* jQuery Floatbox Plugin 1.0.4
* Copyright (c) 2008 Leonardo Rossetti (motw.leo@gmail.com)
* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/


(function ($) {

    $.floatbox = function (options) {

		//support for jquery 1.0 request by christoph@breidert.net

		var getWidth = function () {

			var version = parseInt($.prototype.jquery.match(/\d/gim)[1]);

			var width;

			if (version > 1) {

				width = $(window).width();

			} else {

				width = document.body.scrollWidth ? document.body.scrollWidth : document.documentElement.scrollWidth;

			}

			return width / 2;
		};

        var settings = $.extend({

            bg : "floatbox-background",

            box : "floatbox-box",

            content : "",

			button: "<p><a role='button' href='javascript:void(0);' class='close-floatbox'>Fermer</a></p>",

			desc: "Cliquez ici pour fermer la fen&ecirc;tre",

            fade : false,

			ajax: null,

            bgConfig : {

                position: ($.browser.msie) ? "absolute" : "fixed",

                zIndex: 8,

                width: "100%",

                height: "100%",

                top:  "0px",

                left: "0px",

                backgroundColor: "#000",

                opacity: "0.75",

                display: "none"

            },

            boxConfig : {

                position : ($.browser.msie) ? "absolute" : "fixed",

                zIndex: 9,

                width: getWidth() + "px",

                marginLeft: "-" + (getWidth() / 2) + "px",

                height: "auto",

                top: "10%",

                left: "50%",

                display: "none"

            }

        }, options);



        //inserts floatbox and sets its content

        var showBox = function () {

			var content = typeof settings.content === "string" ? settings.content : settings.content.clone();

            //inserts the background element in the document

            $("<div></div>")

                .bind("click", function () {

                    closeBox();

                })

                .attr("id", settings.bg)

                .css(settings.bgConfig)

                .width(($.browser.msie) ? document.body.clientWidth : "100%")

                .height(($.browser.msie) ? document.body.clientHeight : "100%")

                .appendTo("body");

            //inserts the floating box in the document

            $("<div></div>")

                .attr({id: settings.box, role: "alertdialog"}) 

                .html(content)

                .append(settings.button)

                .css(settings.boxConfig)

                .appendTo("body")

                .css("margin-top", "-" + $("#" + settings.box).height() / 2 + "px")

                .find(".close-floatbox").bind("click", function () {

                    closeBox();

                })

                .end();

            //checks if it needs to fade or not

            if (settings.fade) {

                $("#" + settings.bg)

                .fadeIn(200, function () {

                    $("div#" + settings.box).fadeIn(200);

                });

            } else {

                $("#" + settings.bg)

                .show()

                .parent().find("#" + settings.box).show();

            }

			//sets if ajax is needed(already detectets if it is POST or GET)

			if (settings.ajax) {

				$.ajax({

					type: settings.ajax.params === "" ? "GET" : "POST",

					url: settings.ajax.url,

					data: settings.ajax.params,

					

					beforeSend: function () {

						$("#" + settings.box).html(settings.ajax.before);

					},

					

					success: function (data) {

						$("#" + settings.box)

							.html(data)

							.append(settings.button)

							.find(".close-floatbox").bind("click", function () {

								closeBox()

							})

						.end();

						if (settings.ajax.finish) {

							settings.ajax.finish();

						}

					},

					contentType: "html"

				});

			}

        };

        //hides floatingbox and background

        var closeBox = function () {

            if (settings.fade) {

                $("#" + settings.box).fadeOut(200, function () {

                     $("#" + settings.bg).fadeOut(200, function () {

						$("#" + settings.box).remove();

						$("#" + settings.bg).remove();

                    });

                });

            } else {

				//for opera issues hide first and a timeout is needed to remove the elements

				$("#" + settings.box + ",#" + settings.bg).hide();

				setTimeout(function () {

					$("#" + settings.box).remove();

					$("#" + settings.bg).remove();

				}, 500);

            }

        };

        //inits the floatbox

        var init = function () {

            //shows box

            showBox();

			//adds cross browser event to esc key to hide floating box

            $(document).one("keypress", function (e) {

                var escKey = $.browser.mozilla ? 0 : 27;

                if (e.which === escKey) {

                    closeBox();

                }

            })

			.one("keydown", function (e) {

                var escKey = $.browser.mozilla ? 0 : 27;

                if (e.which === escKey) {

                    closeBox();

                }

            });

			//if msie6, adds event to browser scroll to keep floatbox ina fixed position and uses css hack for full background size

	        if ($.browser.msie) {

	            $("body, html").css({height: "100%", width: "100%"});

	            $(window).bind("scroll", function () {

	                $("#" + settings.box).css("top", document.documentElement.scrollTop +  ($(window).height() / 2) + "px");

	            });

	        }

        };

        //starts the plugin

        init();

    };

})(jQuery);