/*
 * RhytonBox 1.0 - One Box For Asp.net
 * By Cody Lindley (http://www.codylindley.com)
 * Copyright (c) 2010 Rhyton
 * Developer Mohsen Vafa
*/

;(function($) {	
    var opts, busy, elem = false;    	
   	var ieQuirks = null, IE6 = $.browser.msie && $.browser.version.substr(0,1) == 6 && !window.XMLHttpRequest, oldIE = IE6 || ($.browser.msie && $.browser.version.substr(0,1) == 7);
   	var isInit = false;
    $.fn.rayhtonbox = function(o) {
		var settings		= $.extend({}, $.fn.rayhtonbox.defaults, o);
				
		function _initialize() {
			elem = this;
			opts = $.extend({}, settings);		
			
			_start();
			_finish();
			isInit = true;
			return false;
		}; 
		
		function _start() {
		    //alert(opts.frameWidth);
			if (opts.overlayShow) {
				if (IE6) {					
					$("#fancy_overlay").css('height', $(document).height());
				}

				$("#fancy_overlay").css({
					'background-color'	: opts.overlayColor,
					'opacity'			: opts.overlayOpacity
				}).fadeIn("fast");
				
				if (IE6) {
				$('embed, object, select').css('visibility', 'hidden');
			    }   
				
				_show_content();
			}		   
		}
		
		function _finish() {

		    if (opts.overlayShow && opts.hideOnOverlayClick) {
			    $("#fancy_overlay").bind("click", $.fn.rayhtonbox.close);
		    }
		    
		    var cid  = "#" + opts.contentid;	
		    var html = "<div class='fancy_header' style='display:none;'><table border='0' cellpadding='2' cellspacing='5' width='100%'><tr><td nowrap='nowrap'>{title}</td><td width='100%'></td><td nowrap='nowrap'>{close}</td></tr></table></div>";
		    var htmlClose = "";
		    var htmlTitle = "";
		    
		    if (opts.showCloseButton) {
		           var closeHTml = "<div class='fancy_close' style='display:none;'><span class='txtLight' ><a href='#' title='Close' class='imgLnkClose'>Close</a></span></div>";				
		    	   html = html.replace('{close}',closeHTml); 				            
		    }
		    
		    if (opts.showTitle) {
		           var titleHTml = "<div class='fancy_title' style='display:none;'><span class='txtDark' >" + elem.title + "</span></div>";				
		    	   html = html.replace('{title}',titleHTml); 				            
		    }		    
		    
	        if(!isInit){
	           $(html).prependTo(cid);
	        }
	        
	        if (opts.showCloseButton) {
		        $("div.fancy_close").bind("click", $.fn.rayhtonbox.close);			    
    		}
    		
		    $(document).bind("keydown.fb", function(e) {
			    if (e.keyCode == 27 && opts.enableEscapeButton) {
				    $.fn.rayhtonbox.close();

			    } else if(e.keyCode == 37 && opts.itemCurrent !== 0) {
				    $(document).unbind("keydown.fb");
				    opts.itemCurrent--;
				    _change_item();
    				

			    } else if(e.keyCode == 39 && opts.itemCurrent != (opts.itemArray.length - 1)) {
				    $(document).unbind("keydown.fb");
				    opts.itemCurrent++;
				    _change_item();
			    }
		    });		   
		}		
		
		function _show_content() {			
			busy = true;
			
			if(!opts.contentid || opts.contentid == ''){
			    alert('Content id has not been set.');
			    return false;
			}
			
			if(!document.getElementById(opts.contentid)){
			    alert('Content could not be found.');
			    return false;
			}			
			
			var cid  = "#" + opts.contentid;
			
			//Set Padding and size of content
			var w = $.fn.rayhtonbox.getViewport();

			$(cid).css({
				'width'		: 'auto',
				'height'	: opts.frameHeight + 'px'
			});            
            
			var contentTop	    = ((w[1] + w[3]) - $(cid).height())/2 - 10;
			var contentLeft	    = ((w[0] + w[2]) - $(cid).width())/2;
            if($(cid).height() > (w[1] + w[3]))
            {
                contentTop = 0;
            }
            
            if($(cid).width() > (w[0] + w[2]))
            {
                contentLeft = 0;
            }
                        
			$(cid).css({
				'top'		: '5px',
				'left'		: contentLeft + 'px'
			});
	
		    $(cid).css("z-index", "100");			
		    $(cid).css("position", opts.frameposition);			
			$(cid).show();
												
		}
		
		return this.unbind('click.fb').bind('click.fb', _initialize);		
    }
    
	$.fn.rayhtonbox.build = function() {
		var html = '';

		html += '<div id="fancy_overlay"></div>';
		$(html).appendTo("body");				

		$("div#fancy_overlay").css("position", "fixed");			
		$("div#fancy_overlay").css("top", "0");			
		$("div#fancy_overlay").css("left", "0");			
		$("div#fancy_overlay").css("width", "100%");			
		$("div#fancy_overlay").css("height", "100%");			
		$("div#fancy_overlay").css("display", "none");			
		$("div#fancy_overlay").css("z-index", "30");
								
		if (IE6) {
			$("div#fancy_overlay").css("position", "absolute");			
		}
	};

	$.fn.rayhtonbox.close = function() {
		
		$(document).unbind("keydown.fb");
		$(window).unbind("resize.fb scroll.fb");
		$("#fancy_overlay, #fancy_content, div.fancy_header, div.fancy_close, div.fancy_title").unbind();			
		
		if ($("#fancy_overlay").is(':visible')) {
			$("#fancy_overlay").fadeOut("fast");
		}		
		
	    var cid  = "#" + opts.contentid;
		$(cid).fadeOut("fast");		
		
	    if (IE6) {
	        $('embed, object, select').css('visibility', 'visible');
        }
        isInit = false;
	};
	
	$.fn.rayhtonbox.getViewport = function() {
		return [$(window).width(), $(window).height(), $(document).scrollLeft(), $(document).scrollTop() ];
	};	
    
	$.fn.rayhtonbox.defaults = {
		contentid			:	'',
		padding				:	10,
		frameposition		:	'absolute',
		frameWidth			:	560,
		frameHeight			:	340,
		overlayShow			:	true,
		overlayOpacity		:	0.8,
		overlayColor		:	'#000',		
		enableEscapeButton	:	true,
		showTitle   		:	true,
		showCloseButton		:	true,
		hideOnOverlayClick	:	true,
		hideOnContentClick	:	true,
		centerOnScroll		:	true,
		callbackOnStart		:	null,
		callbackOnShow		:	null,
		callbackOnClose		:	null
	};
	
	$(document).ready(function() {
		ieQuirks = $.browser.msie && !$.boxModel;
        $.fn.rayhtonbox.build();
		
	});	
})(jQuery);