/*
UI Nano rotation using jQuery, jQuery Cycle Plugin, and jQuery Brokenimage Plugin

HISTORY:
	090327
	Replaced popup with Lightbox functionality for promotions
HISTORY:
	090513
		Updated for Mattresses and Furniture sections
	090828
		Removed force hiding of SiteMap, BrandSource and Your Community, Join BrandSource, Members Only
		Removed BrandSOurce USA on subsites
	090909
		Removed BrandSOurce and Your Community on subsites
*/

$(document).ready(function ()
{
	// crossdomain
	$(document).domain = "brandsource.ca";
});



// Shadowbox
Shadowbox.init({
	players: ["img", "iframe"], 
	handleOversize: "drag"
});

function openModal(content, title, w, h){
	// Player based on file extension
	var type = "iframe";
	var re = /([^\/\\]+)[\.](\w+)$/;
	var ext = content.match(re);
	if(re.test(content))
	{
		switch(ext[2].toLowerCase())
		{
			case "gif": case "jpg": case "jpeg": case "png": case "bmp":
				type = "img";
				break;
			//case "iframe": case "frame":	// NOT NEEDED
				//type = "iframe";
				//break;
		}
	}
	// Open lightbox based on type
	var typeObj = {
		content: content, 
		title: (title != undefined) ? unescape(title) : "", 
		player: type
	};
	switch(type)
	{
		case "img":
			// Nothing special
			break;
		default:
			typeObj.width = w || 740;
			typeObj.height = h || 550;
	}
 	Shadowbox.open(typeObj);
}


// Get banners
function uinano(name, loc, obj)
{
	// Default variables
	var defaults = {
		delay : 7500, 
		speed : 500, 
		timeout : 20000, 
		pause : true, 
		categories : "", 
		brands : "", 
		dealer : "", 
		package : "", 
		strict : false, 
		dataDivCategories : "uinano_categories", 
		dataDivBrands : "uinano_brands", 
		dataDivDealer : "uinano_dealer", 
		dataDivPackage : "uinano_package", 
		dataDivStrict : "uinano_strict", 
		brokenimage : "http://images.brandsource.ca/_layouts/images/UINano/broken_image.png", 
		xmlfault : "http://images.brandsource.ca/_layouts/images/UINano/broken_image.png", 
		//proxy : "/proxy.aspx?url=", 
		proxy : "", 
		method : "GET", 
		contentype : "text/xml", 
		dataformat : "xml", 
		cache : false, 
		datesplit : "/", 
		catOrig : "", 
		banners : [], 
		rigMySource: "/_layouts/IMAGES/Brandsource/uinano/lid_mysource_rig.xml", 
		rigExpert: "/_layouts/IMAGES/Brandsource/uinano/lid_expert_rig.xml", 
		test: false
	}
	// Pull in text from divs
	defaults.categories = jQuery.trim($("#" + defaults.dataDivCategories).text().toLowerCase());
	defaults.brands = jQuery.trim($("#" + defaults.dataDivBrands).text().toLowerCase());
	defaults.dealer = jQuery.trim($("#" + defaults.dataDivDealer).text().toLowerCase());
	defaults.package = jQuery.trim($("#" + defaults.dataDivPackage).text().toLowerCase());
	defaults.strict = jQuery.trim($("#" + defaults.dataDivStrict).text().toLowerCase());
	// Fix strict mode
	defaults.strict = (defaults.strict == "1" || defaults.strict == "true") ? true : false;
	// Origional Categories
	defaults.catOrig = defaults.categories;
	// Default object in case nothing is passed
	obj = obj || {};
	// Apply new values
	jQuery.each(obj, function(i, val)
	{
		defaults[i] = val;
	});
	// Fix the navigation for the dealers
	$(document).ready(function ()
	{
		package(defaults.package, defaults.categories, defaults.catOrig, defaults.dealer);
	});
	// Add div and location to defaults
	defaults.div = name;
	defaults.location = defaults.proxy + loc;
	// Rig the MySource and Experts lids for Basic and Bronze
	var pkg = defaults.package.split(",");
	var basicbronze = (jQuery.inArray("basic", pkg) != -1 || jQuery.inArray("bronze", pkg) != -1) ? true : false;
	var riggedMySource = (loc.toLowerCase() != defaults.rigMySource.toLowerCase()) ? false : true;
	var riggedExpert = (loc.toLowerCase() != defaults.rigExpert.toLowerCase()) ? false : true;
	// Basic or Bronze MySource
	if(loc.toLowerCase().indexOf("/lid_mysource") != -1 && basicbronze && !riggedMySource)
	{
		uinano(name, defaults.rigMySource, obj);
	}
	// Basic or Bronze Expert
	else if(loc.toLowerCase().indexOf("/lid_expert") != -1 && basicbronze && !riggedExpert)
	{
		uinano(name, defaults.rigExpert, obj);
	}
	// Continue on like normal
	else
	{
		// Load XML
		uinano_call(defaults);
	}
}


// Retrieve XML
function uinano_call(obj)
{
	// Get XML
	jQuery.ajax({
		cache: obj.cache, 
		timeout: obj.timeout, 
		contentType: obj.contenttype, 
		type: obj.method, 
		url: obj.location,
		dataType: obj.dataformat, 
		error: function(xhrObj, textStatus, errorThrown)
		{
			uinano_fault(obj.div, obj.xmlfault, xhrObj, textStatus, errorThrown);
		}, 
		success: function(data)
		{
			uinano_result(obj, data);
		}
	});
}


// Fault
function uinano_fault(div, img, xhrObj, textStatus, errorThrown)
{
	// Clear the div
	$("#" + div).empty();
	// Background image
	uinano_background(div, img);
}


// Result
function uinano_result(obj, data)
{
	// Root
	var root = $(data).find("content");
	// Items
	var items = $(data).find("item");
	// Parse data to array collection
	jQuery.each(items, function(i, val)
	{
		var b = {};
			b.image = uinano_node($(val), "image");
			b.location = uinano_node($(val), "location");
			b.alt = uinano_node($(val), "alt");
			b.startdate = uinano_node($(val), "startdate");
			b.enddate = uinano_node($(val), "enddate");
			b.brand = uinano_node($(val), "brand");
			b.category = uinano_node($(val), "category");
			b.dealer = uinano_node($(val), "dealer");
		obj.banners.push(b);
	});
	// Valid dates
	uinano_date(obj.banners, obj.datesplit);
	// Valid categories
	uinano_categories(obj.banners, obj.categories);
	// Valid brands
	uinano_brands(obj.banners, obj.brands);
	// Valid dealer
	uinano_dealer(obj.banners, obj.strict, obj.dealer);
	// Shuffle the banner array
	obj.banners = uinano_shuffle(obj.banners);
	// Empty div
	$("#" + obj.div).empty();
	// No banners
	if(obj.banners.length == 0)
	{
		$("#" + obj.div).append("All content filtered out");
	}
	// Has banners
	else
	{
		// If delay is 0, only add first banner in order to save bandwidth
		if(obj.delay == 0)
		{
			uinano_add(obj.div, obj.banners[0], obj.dealer);
		}
		// If delay is not 0, add all banners
		else
		{
			jQuery.each(obj.banners, function(i, val)
			{
				uinano_add(obj.div, val, obj.dealer);
			});
			// Create rotation
			$("#" + obj.div).cycle(
			{
				next: "#" + obj.div + "_next", 
				prev: "#" + obj.div + "_prev", 
				timeout: obj.delay, 
				speed: obj.speed, 
				pause: obj.pause 
			});
		}
		// Replace broken images
		uinano_replace(obj.div, obj.brokenimage, obj.timeout);
	}
}


// Validate dates
function uinano_date(b, sp)
{
	var remove = [];
	// Current date/time
	var now = new Date();
	// Loop to find items to remove
	jQuery.each(b, function(i, val)
	{
		var s = (val.startdate == undefined) ? "" : val.startdate;
		var startSplit = s.split(sp);
			var start = (s.length == 0) ? now : new Date(startSplit[2], uinano_month(startSplit[1]), startSplit[0]);
		var e = (val.enddate == undefined) ? "" : val.enddate;
		var endSplit = e.split(sp);
			var end = (e.length == 0) ? now : new Date(endSplit[2], uinano_month(endSplit[1]), endSplit[0], 23, 59, 59);
		if(now.getTime() < start.getTime() || now.getTime() > end.getTime())
		{
			remove.push(i);
		}
	});
	
	// Remove banners
	jQuery.each(remove.reverse(), function(i, val)
	{
		b.remove(val);
	});
}


// Validate categories
function uinano_categories(b, vals)
{
	// Remove white space from items
	vals = vals.split(",");
	jQuery.each(vals, function(i, val)
	{
		vals[i] = jQuery.trim(val);
	});
	// Array
	var remove = [];
	// Loop to find items to remove
	jQuery.each(b, function(i, val)
	{
		var c = (val.category == undefined) ? "" : val.category;
		if(vals.toString().length != 0 && c.length != 0 && jQuery.inArray(c.toLowerCase(), vals) == -1)
		{
			remove.push(i);
		}
	});
	// Remove banners
	jQuery.each(remove.reverse(), function(i, val)
	{
		b.remove(val);
	});
}

// Validate brands
function uinano_brands(b, vals)
{
	// Remove white space from items
	vals = vals.split(",");
	jQuery.each(vals, function(i, val)
	{
		vals[i] = jQuery.trim(val);
	});
	// Array
	var remove = [];
	// Loop to find items to remove
	jQuery.each(b, function(i, val)
	{
		var c = (val.brand == undefined) ? "" : val.brand;
		if(vals.toString().length != 0 && c.length != 0 && jQuery.inArray(c.toLowerCase(), vals) == -1)
		{
			remove.push(i);
		}
	});
	// Remove banners
	jQuery.each(remove.reverse(), function(i, val)
	{
		b.remove(val);
	});
}

// Validate dealer
function uinano_dealer(b, strict, vals)
{
	var remove = [];
	// Loop to find items to remove
	jQuery.each(b, function(i, val)
	{
		var d = (val.dealer == undefined) ? "" : val.dealer;
		// Strict mode
		if(strict && jQuery.inArray(d.toLowerCase(), vals.split(",")) == -1)
		{
			remove.push(i);
		}
		// Not strict mode
		else
		{
			var common = ((vals == "" && d == "national") || (vals != "" && d == "dealers")) ? false : true;
			if(d.length != 0 && jQuery.inArray(d.toLowerCase(), vals.split(",")) == -1 && common)
			{
				remove.push(i);
			}
		}
	});
	// Remove banners
	jQuery.each(remove.reverse(), function(i, val)
	{
		b.remove(val);
	});
}


// Get Month number
function uinano_month(m)
{
	var monthArray = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
	return jQuery.inArray(m, monthArray);
}


// Apply banners
function uinano_add(div, banner, dlr, w, h)
{
	// No location
	if(banner.location == undefined)
	{
		banner.location = "";
	}
	// Rig the link for the testing pages
	banner.location = uinano_testing(banner.location, dlr);
	// Replace space in url with %20
	banner.location = banner.location.replace(" ", "%20");
	// Make (or don't make) clicks
	var linkClick = (banner.location.toLowerCase().indexOf("/promotional%20pages/") == -1) ? "" : "onClick=\"javascript:openModal('" + banner.location + "'); return false;\" target=\"_blank\"";
	// Target
	var linkTarget = (banner.location.toLowerCase().indexOf("gemoneyredirect.htm") != -1) ? "target='_blank'" : "";
	// Make (or don't make) links
	var linkStart = (banner.location.length == 0) ? "" : "<a href=\"" + banner.location + "\" " + linkClick + " " + linkTarget + ">";
	var linkEnd = (banner.location.length == 0) ? "" : "</a>";
	// Create the div
	var data = "<div>" + linkStart + "<img src='" + banner.image + "' alt='" + banner.alt + "' title='" + banner.alt + "' border='0'>" + linkEnd + "</div>";
	$("#" + div).append(data);
}


// CSS background image
function uinano_background(div, img)
{
	$("#" + div).css("background-image", "url(" + img + ")"); 
}


// Replace broken images
function uinano_replace(div, img, to)
{
	//$("#" + div + " img").brokenImage({replacement:img, timeout: to});
}


// Get appropriate namespace
function uinano_node(scope, name)
{
	return scope.find(name).text();
}


// Shuffle array
function uinano_shuffle(arr)
{
	for(var j, x, i = arr.length; i; j = parseInt(Math.random() * i), x = arr[--i], arr[i] = arr[j], arr[j] = x);
	return arr;
}


// Unique values
Array.prototype.uinano_unique = function()
{
	var o = new Object();
	var i, e;
	for(i = 0; e = this[i]; i++)
	{
		o[e] = 1
	};
	var a = new Array();
	for(e in o)
	{
		a.push (e)
	};
	return a;
}


// Remove item from array
Array.prototype.remove = function(from, to)
{
	var rest = this.slice((to || from) + 1 || this.length);
	this.length = from < 0 ? this.length + from : from;
	return this.push.apply(this, rest);
}


// Rig for testing pages
function uinano_testing(loc, dealer)
{
	if(loc.slice(0, 1) == "/" && loc.toLowerCase().indexOf("/dealers/") == -1 && dealer.length != 0 && document.location.toString().toLowerCase().indexOf("www.") != -1)
	{
		return "/Dealers/" + dealer + loc;
	}
	return loc;
}






/*
* Filter navigation based on package
*/

// Package
function package(pkg, cat, catOrig, dlr)
{
	// Hide appliances, mattresses, furniture, or electronics if nessisary
	var a = {div:"head_appliances", category:"appliances", divider:"head_divider_1"};
	var m = {div:"head_Mattresses", category:"mattresses", divider:"head_divider_2"};
	var f = {div:"Div3", category:"furniture", divider:"Div2"};
	var e = {div:"head_electronics", category:"electronics", divider:"head_divider_4"};
	package_category(catOrig, a, m, f, e);
	// Hide sitemap
	if(pkg.length != 0)
	{
		// Hide sitemap
		//$("#footer_sitemap").hide();
			//$("#footer_divider_1").hide();
		// Hide BrandSource and Your Community
		$("#footer_community").hide();
			$("#footer_divider_2").hide();
		// Hide store locator
		$("#head_locatestore").hide();
		// Hide 'Content Your Nearest Store' in MySource
		$(".rightnav_link_01:last").hide();
	}
	// Hide navigation based on package
	switch(pkg)
	{
		case "basic": 
			// Header nav
			$("#head_toolsandinspiration").hide();
				$("#head_divider_3").hide();
			$("#head_aboutus").hide();
				$("#head_divider_5").hide();
			$("#head_mysourcesignin").hide();
				$("#head_divider_6").hide();
			// Footer nav
			$("#footer_customerservice").hide();
				$("#footer_divider_4").hide();
			$("#footer_contactus").hide();
				$("#footer_divider_6").hide();
			$("#footer_websitehelp").hide();
				$("#footer_divider_6").hide();
			//$("#footer_joinbrandsource").hide();
				//$("#footer_divider_7").hide();
			//$("#footer_membersonly").hide();
				//$("#footer_divider_8").hide();
			break;
		case "bronze": 
			// Header nav
			$("#head_toolsandinspiration").hide();
				$("#head_divider_3").hide();
			$("#head_mysourcesignin").hide();
				$("#head_divider_6").hide();
			// Footer nav
			$("#footer_websitehelp").hide();
				$("#footer_divider_6").hide();
			//$("#footer_joinbrandsource").hide();
				//$("#footer_divider_7").hide();
			//$("#footer_membersonly").hide();
				//$("#footer_divider_8").hide();
			break;
		case "silver":
			// Header nav
			// Footer nav
			$("#footer_websitehelp").hide();
				$("#footer_divider_6").hide();
			//$("#footer_joinbrandsource").hide();
				//$("#footer_divider_7").hide();
			//$("#footer_membersonly").hide();
				//$("#footer_divider_8").hide();
			break;
		case "gold": 
			// Header nav
			// all visible
			// Footer nav
			$("#footer_websitehelp").hide();
				$("#footer_divider_6").hide();
			//$("#footer_joinbrandsource").hide();
				//$("#footer_divider_7").hide();
			//$("#footer_membersonly").hide();
				//$("#footer_divider_8").hide();
			break;
		default:  
			// National site. Display everything
	}
}


// Package categories
function package_category(catOrig, a, m, f, e)
{
	// Remove white space from items
	catOrig = catOrig.split(",");
	jQuery.each(catOrig, function(i, val)
	{
		catOrig[i] = jQuery.trim(val);
	});
	// Remove navigation
	jQuery.each(new Array(a, m, f, e), function(i, val)
	{
		if(catOrig.toString().length != 0 && jQuery.inArray(val.category, catOrig) == -1)
		{
			$("#" + val.div).hide();
			if(val.divider)
			{
				$("#" + val.divider).hide();
			}
		}
	});
}






/*
* Modals
*/

//function openModal(value)
//{
	//$.floatbox({
        //content: "<iframe id='bs_" + new Date().getTime() + "' src='" + value + "' width='740' height='550' scrolling='auto' frameborder='0'></iframe>", 
		//boxConfig : {
			//width: "740px",
			//marginLeft: "-370px"
		//}
    //});
//}

function videoWindow(value, options)
{
	var now = new Date().getTime();
	$.floatbox({
		content: "<div id='bs_" + now + "' class='player'></div>", 
		boxConfig : {
			width: "400px",
			marginLeft: "-200px"
		}
	});
	// Add video
	var opt = $.extend({}, { video: value }, options);
	$("#bs_" + now).videoplayer(opt);
}






/*
* jQuery URL Parser 1.0
* http://projects.allmarkedup.com/jquery_url_parser/
*/

jQuery.url=function(){var segments={};var parsed={};var options={url:window.location,strictMode:false,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}};var parseUri=function(){str=decodeURI(options.url);var m=options.parser[options.strictMode?"strict":"loose"].exec(str);var uri={};var i=14;while(i--){uri[options.key[i]]=m[i]||""}uri[options.q.name]={};uri[options.key[12]].replace(options.q.parser,function($0,$1,$2){if($1){uri[options.q.name][$1]=$2}});return uri};var key=function(key){if(!parsed.length){setUp()}if(key=="base"){if(parsed.port!==null&&parsed.port!==""){return parsed.protocol+"://"+parsed.host+":"+parsed.port+"/"}else{return parsed.protocol+"://"+parsed.host+"/"}}return(parsed[key]==="")?null:parsed[key]};var param=function(item){if(!parsed.length){setUp()}return(parsed.queryKey[item]===null)?null:parsed.queryKey[item]};var setUp=function(){parsed=parseUri();getSegments()};var getSegments=function(){var p=parsed.path;segments=[];segments=parsed.path.length==1?{}:(p.charAt(p.length-1)=="/"?p.substring(1,p.length-1):path=p.substring(1)).split("/")};return{setMode:function(mode){strictMode=mode=="strict"?true:false;return this},setUrl:function(newUri){options.url=newUri===undefined?window.location:newUri;setUp();return this},segment:function(pos){if(!parsed.length){setUp()}if(pos===undefined){return segments.length}return(segments[pos]===""||segments[pos]===undefined)?null:segments[pos]},attr:key,param:param}}();






/*
* jQuery Floatbox Plugin 1.0.7
* 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(true, {
			bg : "floatbox-background",
			box : "floatbox-box",
			content : "",
			button: "<div style='padding:3px; text-align:right;'><a role='button' href='javascript:void(0);' class='close-floatbox' title='Close window'>Close</a></div>",
			desc: "This is a popup box, press esc key to close.",
			fade : false,
			ajax: null,
			bgConfig : {
				position: ($.browser.msie) ? "absolute" : "fixed",
				zIndex: 8000,
				width: "100%",
				height: "100%",
				top:  "0px",
				left: "0px",
				backgroundColor: "#000",
				opacity: "0.75",
				display: "none"
			},
			boxConfig : {
				position : ($.browser.msie) ? "absolute" : "fixed",
				zIndex: 8001,
				width: getWidth() + "px",
				marginLeft: "-" + (getWidth() / 2) + "px",
				height: "auto",
				top: "50%",
				left: "50%",
				backgroundColor: "#fff",
				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();
						
					},
					complete: function (XMLHttpRequest, textStatus) {
						if (settings.ajax.finish) {
							settings.ajax.finish(XMLHttpRequest, textStatus);
						}
					},
					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);