(function($){
	$.fn.BadBox = function(settings) {
		var fn = new Object();
		
		settings = jQuery.extend({
			width: 640,
			height: 480,
			setup: false,
			btnBar: null,
			bgClick: true,
			callback: null,
			image: null,
			html: null,
			close:false,
			id: null,
			movie: null,
			upload: null,
			ajaxURL: null,
			ajaxParams: null,
			bgOpacity: 0.8,
			flashVars: null,
			animate: true,
			hideFlashInFFMac: true,
			userName:null, // Added to support video uploader
			passWord:null, //Added to support video uploader
			helpUrl:null, //Added to support video uploader
			postUrl:null, //Added to support video uploader
			type:null, //Added to support video uploader
			payType:null //Added to support video uploader

		}, settings);
		
		if (typeof(this) != 'function') {settings.id = this;}
		
		fn.setup = function() {
			var BBHTML = '<div id="BBContainer"><div id="BBOverlay"></div><div id="BBModalOutside"><div id="BBModalInside"><div id="BBContent"></div><div id="BBBtnBar"></div></div></div></div>';
			$('body').append(BBHTML);
			if ($.browser.msie && $.browser.version < 7) {
				$('#BBContainer').prepend('<iframe id="BBIframe" frameborder="0" tabindex="-1" src="javascript:false" />');
				$('#BBOverlay').css('opacity',settings.bgOpacity);	
			} else {
				if ((navigator.appVersion.indexOf("Mac")!=-1) && $.browser.mozilla && settings.hideFlashInFFMac) $('embed').css('visibility','hidden');
				$('#BBOverlay').css('opacity',0).animate({opacity:settings.bgOpacity},'fast');
			}
			if (settings.bgClick) {
				$('#BBOverlay').bind('click',fn.removeModal);
			}
			fn.createLoading();
			fn.routeType();
		};
		
		fn.routeType = function() {
			if (settings.html) {
				fn.displayHTML();
			} else if (settings.image) {
				fn.displayImage();
			} else if (settings.movie) {
				fn.displayMovie();
			} else if (settings.ajaxURL) {
				fn.getAJAX();
			} else if (settings.id) {
				fn.displayId();
			} else if (settings.mapTo) {
				fn.displayMap();
			} else if (settings.flash) {
				fn.displayFlash();
			} else if (settings.upload) {
			    fn.displayUploader()
			}    
		};

		fn.revealBtnBar = function(callback) {
			if (settings.btnBar) {
				if (!settings.setup) {
					$('#BBBtnBar').append(settings.btnBar);
					$('#BBBtnBar').css('bottom','-' + fn.btnBarSize() + 'px');
					$('#BBBtnBar').animate({bottom:0},'fast');
					settings.setup = true;
					if (callback) {
						callback.call();
					}
				}
			}
		};

		fn.createLoading = function() {
			if (!($.browser.msie && $.browser.version < 7)) { 
				$('#BBModalOutside').animate({opacity:1}, 'fast');
			}
			$('#BBContent').append('<span id="BBLoading"><div id="BBLoadingImage"></div>Loading</span>');
		};

		fn.displayHTML = function() {
		
			
			if(settings.close == true)
			{
			    settings.btnBar = '<a href="javascript:void;" class="btn close"><span>Close</span></a>';
			    var bindActions = function() {
				$('#BBBtnBar').find('.close').bind('click', function(event) {
					fn.removeModal();
				});
			};
			
			    fn.removeLoading();
			    fn.resizeModal(settings.width, settings.height, function() {
				$('#BBContent').append(settings.html);
				fn.revealBtnBar(bindActions);
			});
			}
			else
			{
				fn.removeLoading();
			    fn.resizeModal(settings.width, settings.height, function() {
				$('#BBContent').append(settings.html);
				fn.revealBtnBar();
			});
			}
		};

		fn.displayId = function() {
			var elementClone;
			if (typeof(settings.id) == 'string') {
				elementClone = $('#'+settings.id).clone(true).attr('id','inlineClone');
			} else {
				elementClone = settings.id.clone(true).attr('id','inlineClone');
			}
			var cloneHeight = elementClone.css('height');
			settings.height = parseInt(cloneHeight.slice(0, cloneHeight.length-2));
			var cloneWidth = elementClone.css('width');
			settings.width = parseInt(cloneWidth.slice(0, cloneWidth.length-2));
			
			fn.removeLoading();
			fn.resizeModal(settings.width, settings.height, function() {
				$('#BBContent').append(elementClone);
				fn.revealBtnBar();
			})
		};

		fn.displayImage = function() {
			$('body').append('<img src="' + settings.image +'" id="BBModalImage" / style="position:absolute;top:0;left:0">');
			$('#BBModalImage').css('position','absolute')
				.bind('load', function(){
					if (settings.imageRel) {
						settings.btnBar = '<span id="BBImageCount"></span><a href="javascript:void;" class="btn" id="BBPrev"><span>Previous</span></a>&nbsp;<a href="javascript:void;" class="btn" id="BBClose"><span>Close</span></a>&nbsp;<a href="javascript:void;" class="btn" id="BBNext"><span>Next</span></a>';
						settings.curIndex = $('.badBox').index(settings.currentImage.get(0));
					} else {
						settings.btnBar = '<a href="javascript:void;" class="btn" id="BBClose"><span>Close</span></a>';
					}
					fn.removeLoading();
					fn.resizeModal($(this).width(), $(this).height(), function() {
						fn.showHideButtons();
						$('#BBModalImage').appendTo($('#BBContent')).css('position', 'relative');
						$('#BBModalImage').hide().css('opacity',1).fadeIn('fast');
						var bindActions = function() {
							$('#BBPrev').bind('click', function(event) {
								settings.curIndex--;
								fn.changeImage();
								return false;
							});
							$('#BBNext').bind('click', function(event) {
								settings.curIndex++;
								fn.changeImage();
								return false;
							});
							$('#BBClose').bind('click', fn.removeModal);
							fn.showHideButtons();
						};
						fn.revealBtnBar(bindActions);
					});
				});
		};

		fn.changeImage = function() {
			settings.currentImage = $($('.badBox').get(settings.curIndex));
			$('#BBPrev, #BBNext, #BBClose, #BBImageCount').hide();
			settings.image = settings.currentImage.attr('href');
			$('#BBModalImage').remove();
			fn.createLoading();
			fn.displayImage();
		};
		
		fn.displayMap = function() {
			settings.btnBar = '<a href="javascript:void;" class="btn" id="BBFullMap"><span>Full Map</span></a>&nbsp;<a href="javascript:void;" class="btn" id="BBClose"><span>Close</span></a>';
			fn.removeLoading();
			fn.resizeModal(settings.width, settings.height, function() {
				$('#BBContent').append('<div id="BBMap"></div>');
				$('#BBMap').width(settings.width).height(settings.height);
				$('#BBMap').jmap({language:"en"});
				$('#BBMap').jmap({mapCenter: [34.033614,-118.395081], mapControlSize: "large", mapEnableScrollZoom: true});
				$('#BBMap').createMarkerManager();
				$('#BBMap').createGeoCache();
				var fullMap = new String();
				var lat, lng, toAddress, fromAddress;
				toAddress = settings.mapTo.replace(/ /g,"+");
				var geocoder = new GClientGeocoder();
				geocoder.getLatLng(settings.mapTo, function(point) {
					lat = point.lat();
					lng = point.lng();
				});
				if (!settings.mapFrom) {
					var testing = $('#BBMap').searchAddress({
						address: settings.mapTo,
						cache: $.jmap.GGeoCache
					});
					fullMap = 'http://maps.google.com/maps?f=q&hl=en&geocode=&time=&date=&ttype=&q=' + toAddress + '&sll=&sspn=0.006588,0.007596&ie=UTF8&ll=' + lat + ',' + lng + '&spn=&z=15&iwloc=addr&om=1';
				} else {
					$('#BBMap').searchDirections({
	        			fromAddress: settings.mapFrom,
	        			toAddress: settings.mapTo,
	        			directionsPanel: "directions"
					});
					var fromAddress = settings.mapFrom.replace(/ /g,"+");
					fullMap = 'http://maps.google.com/maps?f=d&hl=en&geocode=&time=&date=&ttype=&saddr=' + fromAddress + '&daddr=' + toAddress + '&sll=' + lat + ',' + lng + '&sspn=&ie=UTF8&z=5&om=1';
				}
				var bindActions = function() {
					$('#BBClose').bind('click', fn.removeModal);
					$('#BBFullMap').bind('click', function() {
						window.open(fullMap,'gMapWindow','width=1024,height=768,resizable=yes,resizable=yes');
						return false;
					});
				};
				fn.revealBtnBar(bindActions);
			});
		};
		
		fn.displayMovie = function() {
			settings.btnBar = '<a href="javascript:void;" class="btn close"><span>Close</span></a>';
			var bindActions = function() {
				$('#BBBtnBar').find('.close').bind('click', function(event) {
					fn.removeModal();
				});
			};
			fn.removeLoading();
			if (settings.movie.indexOf('videoegg') != -1) {
			    settings.width = 350;
			    settings.height = 295;
			}
			var callback = function() {
				$('#BBContent').InsertObject({
					width: settings.width,
					height: settings.height,
					src: settings.movie
				});
				fn.revealBtnBar(bindActions);
			};
			fn.resizeModal(settings.width, settings.height, callback);
		};
		
		//Added to support Video Uploader
		fn.displayUploader = function() {
			settings.btnBar = '<a href="javascript:void;" class="btn close"><span>Close</span></a>';
			var bindActions = function() {
				$('#BBBtnBar').find('.close').bind('click', function(event) {
					fn.removeModal();
				});
			};
			fn.removeLoading();
			settings.width = 700;
			settings.height = 480;
			
			var callback = function() {
				$('#BBContent').InsertObject({
				type:settings.type,
				classid:'CLSID:72BAD4E3-2C09-4369-8138-9EF2375D9282',
				width:500,height:480,
				other:{AccountUserName:settings.userName,
				AccountPassword:settings.passWord,
				uploadURL:settings.postUrl,
				HelpURL:settings.helpUrl,
				PaymentType:settings.payType,
				append:true}
				 });
				 
				$('#BBContent').css("position","relative").append('<div style="position:absolute;right:10px;top:10px" > <div  id="fileTypeBox">' +
		'<h2 class="fileTypeTop">Preferred File Types*</h2>' +
			 '<ul class="fileTypesPC">' +
				'<li class="PC">PC</li>' +
				
				'<li>.mov</li>' +
				'<li>.mp4</li>' +
				'<li>.avi</li>' +
				'<li>.3gp</li>' +
				'<li>.dv</li>' +
				'<li>.m4v</li>'+
			'</ul>' +
			'<ul class="fileTypesMac">' +
				'<li class="mac">MAC</li>'+
			
				'<li>.mov</li>'+
				'<li>.mp4</li>'+
				'<li>.avi</li>'+
				'<li>.3gp</li>'+
				'<li>.dv</li>'+
				'<li>.m4v</li>'+

			'</ul>'+

	'</div>'+
	
	'<div id="notIncludeBox">'+
		'<h2 class="notIncludeTop">Videos May Not Include </h2>'+
			'<ul class="notInclude">'+
				'<li>Personal or agent contact info </li>' +
				'<li>(such as websites, email, phone number, etc.)</li>'+
				'<li>Inappropriate content</li>'+
				'<li>Actor slates</li>'+
				'<li>Web ads</li>'+

			'</ul>'+
	'</div> </div>');

				
				fn.revealBtnBar(bindActions);
			};
			fn.resizeModal(settings.width, settings.height, callback);
		};
		fn.displayFlash = function() {
			settings.btnBar = '<a href="javascript:void;" class="btn close"><span>Close</span></a>';
			var bindActions = function() {
				$('#BBBtnBar').find('.close').bind('click', function(event) {
					fn.removeModal();
				});
			};
			fn.removeLoading();
			var callback = function() {
				var wmode = 'transparent';
				var bgcolor = '#ffffff';
				if ((navigator.appVersion.indexOf("Mac")!=-1) && $.browser.mozilla) {
					bgcolor = fn.convertToHex($('#BBModalInside').css('background-color'));
					wmode = 'window';
				}
				$('#BBContent').InsertObject({
					width: settings.width,
					height: settings.height,
					src: settings.flash,
					flashVars: settings.flashVars,
					wmode: wmode,
					bgcolor: bgcolor
				});
				fn.revealBtnBar(bindActions);
			};
			fn.resizeModal(settings.width, settings.height, callback);
		};
		
		fn.convertToHex = function(strBGColor) {
			var DecToHex = function(intDec, intPlaces) {
				var strHexDef = new String("0123456789ABCDEF");

				var strHex = strHexDef.substr(intDec & 15, 1);

				while(intDec > 15) {
					intDec >>= 4;
					strHex = strHexDef.substr(intDec & 15, 1) + strHex;
				}

				for (var intX = strHex.length; intX < intPlaces; intX++) {
					strHex = '0' + strHex;
				}

				return strHex;
			}
			
			if (strBGColor.indexOf('rgb(') == 0) {
				var strTempColorAry = strBGColor.replace(/ /g, '').substring(4, strBGColor.length - 1).split(',');
				var strRed = DecToHex(parseInt(strTempColorAry[0]), 2);
				var strGreen = DecToHex(parseInt(strTempColorAry[1]), 2);
				var strBlue = DecToHex(parseInt(strTempColorAry[2]), 2);

				return '#' + strRed + strGreen + strBlue;
			} else {
				return strBGColor.toUpperCase();
			}
		}
		
		fn.showHideButtons = function() {
			$('#BBImageCount').text(settings.curIndex + 1 + ' of ' + $('.badBox').size()).show();
			settings.curIndex != 0 ? $('#BBPrev').show() : $('#BBPrev').hide();
			settings.curIndex + 1 != $('.badBox').size() ? $('#BBNext').show() : $('#BBNext').hide();
			$('#BBClose').show();
		};
		
		fn.btnBarSize = function() {
			var paddingTop = $('#BBBtnBar').css('paddingTop');
			var paddingTopLength = paddingTop.length;
			var paddingTopNumber = parseInt(paddingTop.substring(0,paddingTopLength-2));
			return ($('#BBBtnBar').height() + paddingTopNumber);
		};

		fn.resizeModal = function(width,height,callback) {
			width += fn.getTotalSpacing('Left');
			height += fn.getTotalSpacing('Top');
			if (settings.btnBar) {
				height += fn.btnBarSize();
			}
			var animObject = {
				width: width,
				height: height,
				marginLeft: -width/2
			};
			if (!($.browser.msie && $.browser.version < 7)) {
				animObject.marginTop = (-height/2);
			}
			var speed = 'fast';
			if (!settings.animate) {
				speed = 1;
			}
			$('#BBModalOutside').animate(animObject, speed, function() {
				if (callback) {callback.call()}
			});
		};
		
		fn.getTotalSpacing = function(side) {
			var total = 0;
			var containers = [$('#BBModalOutside'), $('#BBModalInside'), $('#BBContent')];
			var types = ['padding'];
			for (x in containers) {
				for (y in types) {
					var stringValue = containers[x].css(types[y] + side);
					var intValue = parseInt(stringValue.substring(0,stringValue.length-2));
					if (intValue > 0) {total += intValue}
				}
			}
			return total;
		};

		fn.getAJAX = function() {
			settings.ajaxParams = settings.ajaxParams || null;
			$.get(settings.ajaxURL, settings.ajaxParams, function(data){
				fn.removeLoading();
				fn.resizeModal(settings.width, settings.height, function() {
					$('#BBContent').html($(data).html());
					fn.revealBtnBar();
				});
			});
		};
		
		fn.removeLoading = function() {
			$('#BBLoading').remove();
		};

		fn.removeModal = function(e, callback) {
		    if (callback) {
				settings.callback = callback;
			}
			if (settings.movie || settings.upload) {document.getElementById('BBContent').innerHTML = ' '};
			$('#BBContainer, #BBModalImage').remove();
			if ((navigator.appVersion.indexOf("Mac")!=-1) && $.browser.mozilla && settings.hideFlashInFFMac) {
				$('embed').each(function() {
					$(this).css('visibility', 'visible').width($(this).width());
				});
			}
			if (settings.callback) {
				settings.callback.call();
			}

			return false;
		};
		
		fn.setup.call();
		$.BadBox.close = fn.removeModal;	
	};

	$.BadBox = $.fn.BadBox;
	$(function() {
		$('.badBox').click(function() {
			var imageUrl = $(this).attr('href');
			var imageRel = $(this).attr('rel');
			$.BadBox({image:imageUrl,imageRel:imageRel,currentImage:$(this)});
			return false;
		});
	});
})(jQuery);

function badBox(o) {$.BadBox(o);};
