﻿function darkbox(options) {
  this.options = {
		DefaultWidth:				options.DefaultWidth || "400px",
		DefaultHeight:				options.DefaultHeight || "auto",
		OverlayOpacity:			options.OverlayOpacity || 90,
		OverlayBackgroundColor:	options.OverlayBackgroundColor || "#222222",
		HideBodyOverlay:			options.HideBodyOverlay || true,

		PadDigits:			options.PadDigits || false,
		PadChar:				options.PadChar || "0",
		PadTotalLength:	options.PadTotalLength || 2,
		DecimalPlaces:		options.DecimalPlaces || 2
	};
  
  this.prefix = "darkbox";
  this.overlay = null;
  this.box = null;

  //this.prepare = function () {
  	var instance = this;
  	var jDiv = $('<div id="' + this.prefix + 'overlay" style="position:absolute;top:200px;left:100px;width:300px;height:300px;'
							+ 'background-color:' + this.options.OverlayBackgroundColor + ';z-index:9997;display:none;'
							+ '">&nbsp;</div>').css('opacity', this.options.OverlayOpacity / 100);

  	$('body').append(jDiv);
  	this.overlay = jDiv;

	// the box
  	var jConfirm = $('<div id="' + this.prefix + 'confirmer" style="position:absolute;top:150px;width:400px;height:150px;'
							+ 'background:#ffffff;padding:20px;z-index:9999;border:solid 1px #000000;'
							+ 'display:none;overflow:auto;;">&nbsp;</div>');

  	$('body').append(jConfirm);
  	this.box = jConfirm;
  	this.overlay.bind('click', function () { instance.hide(); });

	// bind darkbox to all elments that have class name darkbox
	$(".darkbox").each(function(index, obj) {
		var t = $(this);
		var butes = "";
		switch(this.nodeName.toLowerCase()) {
			case "a":
				if(t.attr('href').indexOf('#darkbox?') > -1) {
					butes = t.attr('href');
					butes = butes.substring(butes.indexOf("#darkbox?") + 9).split("&");
				}
				break;
			case "img":
					if(t.attr('darkbox') != "")
						butes = t.attr('darkbox').split("&");
				break;
		}
		
		var displayOptions = { width: null, height: null, inlineid: null, img: null, caption: null };
		for(var i = 0; i < butes.length; i++) {
			if(butes[i].indexOf("=") > -1) {
				var pair = butes[i].split("=");
				
				switch(pair[0]) {
					case "width":
						displayOptions.width = pair[1];
						break;
					case "height":
						displayOptions.height = pair[1];
						break;
					case "inlineid":
						displayOptions.inlineid = pair[1];
						break;
					case "img":
						displayOptions.img = pair[1];
						break;
					case "caption":
						displayOptions.caption = pair[1];
						break;
				}
			} // if
		} // for
		t.bind("click", function() { darkbox.show(displayOptions); });
	});

  	$(document).bind('keyup', function (event) { instance.keyup(event); });
  //} // prepare

  this.show = function (displayOptions) {
	
	if(this.options.HideBodyOverlay)
  		$('body').css('overflow', 'hidden');

	var scrollTop = $(document).scrollTop();

  	//this.overlay.css({ top: scrollTop, left: "0px", width: $(window).width(), height: $(window).height() });
	this.overlay.css({ top: scrollTop, left: "0px", width: 1920, height: 1920 });

	if(displayOptions.inlineid != null) {
		this.box.html("<div onclick=\"darbox.hide();\" style=\"width:100%;\"><a style=\"cursor:pointer;\"></a><br /><br /></div>" + 
							$("#" + displayOptions.inlineid).html());
	} else if(displayOptions.img != null) {
		this.box.html("<div onclick=\"darkbox.hide();\" style=\"width:100%;\"><a style=\"cursor:pointer;\"></a><br /><br /></div>");
		var image = $('<img>');
		image.attr('src', displayOptions.img);
		image.load(function() { darkbox.reposition(); } );
		this.box.append(image);
	}

	this.box.css('width', displayOptions.width || this.options.DefaultWidth);
	this.box.css('height', displayOptions.height || this.options.DefaultHeight);

	this.reposition();
  	this.overlay.fadeIn(300);
	this.box.fadeIn(600);
	
  	setTimeout(function () { $(document).scrollTop(scrollTop); }, 50);
  }
	
	this.reposition = function() {
		// make sure it doesn't exceed window bounds
		if(this.options.DefaultHeight == "auto" || displayOptions.height == "auto") {
			if(this.box.height() > $(window).height())
				this.box.css('height', $(window).height() - 100);
		}
		this.box.css({ left: ($(window).width() / 2) - (this.box.width() / 2), top: $(document).scrollTop() + ($(window).height() / 2) - (this.box.height() / 2),  });
	}

	this.hide = function(instance) {
		$('body').css('overflow', 'auto');
		this.box.fadeOut(300);
		this.overlay.fadeOut(600);
	}
	
	this.keyup = function(event) {
		var evt = event || window.event;
		if(evt.keyCode == 27) { // escape key
			this.hide(this);
		}
	}
}

$(document).ready(function() {
	darkbox = new darkbox({});
});
