/* Copyright (c) 2008 Kean Loong Tan http://www.gimiti.com/kltan
 * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * Version: 1.1 (March 26, 2008)
 * Requires: jQuery 1.2+
 */


 
(function($) {

	var dialogDisplayed = false;
	var currentPos = true;
	var alwaysLoad = false;
	

	$.fn.createDialog = function(options) {
		
		// Extend our default options with those provided.
		var opts = $.extend({}, $.fn.createDialog.defaults, options);
		alwaysLoad = opts.alwaysLoad;

		$(this).click(function(){
			var currentTarget = "tags";
			
			if(!$("#tags").is("input") && $($(this).parent().parent().children()[3]).attr("id")) {
				currentTarget = $($(this).parent().parent().children()[3]).attr("id");
			}
						
			var currentValue = "";
			
			if($('#tags').attr("value")) {
				currentValue= $('#tags').attr("value");				
			} 
			else if($($(this).parent().parent().children()[3]).attr("value")) {
				currentValue= $($(this).parent().parent().children()[3]).attr("value");	
			}
			
			if(($("#jDialogProgressBar").is("div")||$("#jDialogProgressBar").is("iframe")) && !opts.alwaysLoad) {
				currentPos = opts.center;
				overlayPos(1);
				$("#jDialogContainer, #jDialogOverlay").show();
				$("#targetId").attr("value",currentTarget);
				if (currentPos)
					reposition();
				

				compareData(currentValue);


			} else {

				currentPos = opts.center;
				if (!dialogDisplayed || opts.alwaysLoad) { //display dialog if none is there
					$("body").prepend('<div id="jDialogProgressBar"><img src="/images/ajax-loader.gif" /></div><div id="jDialogOverlay"></div><div id="jDialogContainer" class=""></div>');
					overlayPos(1);
					dialogDisplayed=true;
					if(opts.useIframe==true) {
						var iFrameClass = "DialogContainer";
						if (opts.wide==true) {
							iFrameClass += " DialogContainerWide"; 
						}
						$("#jDialogContainer").append("<iframe name='dialogFrame' class='"+iFrameClass+"' id='DialogContainer' style='height:90%;'></iframe>");
					}
				}
				
				if(opts.progress) {					
					$("#jDialogProgressBar").show();
				}			
				
				$.ajax({
					type: opts.method,
					data: opts.data,
					url: opts.addr,
					success: function(msg){
						//alert(msg);
						if($("#jDialogContainer").children(".DialogContainer").is("iframe")) {
							$("#jDialogContainer iframe").attr("src", opts.addr);
						} else {
							$("#jDialogContainer").html(msg);
						}
							
						if (currentPos)
							reposition();
						$("#jDialogProgressBar").fadeOut(900);
						if($('.chechboxGroup form').is("form")) {
							$('.chechboxGroup form').attr("id","tagAssume");
							$('#tagAssume').append("<input type='text' name='tagString' class='hidden' id='tagString'/>");
							$('#tagAssume').append("<input type='text' name='targetId'  class='hidden' id='targetId' value='"+ currentTarget + "' />");
						}
						if(currentValue){
							compareData(currentValue);
						}
						if ($('.JStrigger').is("div")) {
							$('.JStrigger').removeClass("JStrigger");
						}
							
						if ($('.JStriggerOff').is("div")) {
							$('.JStriggerOff').addClass("JStrigger");
						}
								
					}
				});			
			
			}

		
			//only IE6 needs this function
			if($.browser.msie && parseInt($.browser.version) < 7) {
				$(window).scroll(function(){
					if(dialogDisplayed==1) {
						overlayPos();
						if (currentPos)
							reposition();
					}
				});
			}
			$(window).resize(function(){
				if (dialogDisplayed==1) {
					overlayPos();
					if (currentPos)
						reposition();
				}
			});
			
			$(window).unload( function () {
				if (dialogDisplayed==1)
					$.closeDialog();
			});
			
			$(window).keydown(function(event){
				if (event.keyCode == 27) 
					$.closeDialog();
			});
			return false;

		});
		
		//private function
		function overlayPos(init){
			var left = 0;
			var top = 0;
			var overlayWidth = $(window).width();
			var overlayHeight = $(document).height();
			var winHeight =  $(window).height();
		
			if ($.browser.msie && parseInt($.browser.version) < 7) { //if IE6
				$("#jDialogOverlay").css({
									  top: 0, 
									  left: 0, 
									  width: overlayWidth, 
									  height: overlayHeight, 
									  position: "absolute",
									  display: "block",
									  color: opts.bg,
									  zIndex: opts.index
								  });
			}
			else { //other browsers
				$("#jDialogOverlay").css({
									  top: 0, 
									  left: 0, 
									  width: overlayWidth, 
									  height: winHeight, 
									  position: "fixed",
									  display: "block",
									  background: opts.bg,
									  zIndex: opts.index
								  }).show();
			}
			
			if (init==1) {
				$("#jDialogOverlay").css("opacity", 0);
				$("#jDialogOverlay").fadeTo(200, opts.opacity);
			}
		}
					
		//private function
		function compareData(currentValue){
			var tagInput = currentValue;
			
			$('#tagString').attr("value",currentValue);
			
			var tagArray = currentValue.replace(", ", ",");
			tagArray = tagArray.split(",");
			
			if(tagArray.length>0) {
				var checkArray  = new Array();
				$("input.check").each(function() {
				    checkArray.push($(this).val());
				});
			
				//var checkArray = $('input.check');

				$("input.check:checked","#DialogContainer").removeAttr("checked"); 
				
				$.each(tagArray, function(i,val) {
					if($.inArray(val,checkArray) > -1) {
						$('input.check[value='+ val + ']').attr("checked","checked")
						if(tagInput.indexOf(",") > 0) {
							tagInput = tagInput.replace(val + ",", "");
						} else {
							tagInput = tagInput.replace(val, "");
						}
						tagInput = tagInput.replace(", ", "");
					}					
				})

				$('#tagString').attr("value","");	
				$('#tagString').attr("value",tagInput);	

			}		
		}
		
		//private function
		function reposition(){ //calculate the position
			var left = 0;
			var top = 0;
			var winWidth = $(window).width();			
			var winHeight =  $(window).height();
			var dialogHeight = $("#jDialogContainer").children().height();
			var dialogWidth = $(".DialogContainer").width();		  
			if ($.browser.msie) {
				left = document.body.scrollLeft || document.documentElement.scrollLeft;
				top = document.body.scrollTop || document.documentElement.scrollTop;
			}
			else {
				left = window.pageXOffset;
				top = window.pageYOffset;
			}
		
			var topOff = top + winHeight/2 - dialogHeight/2; //offset for IE6
			var	leftOff = left + winWidth/2 - dialogWidth/2; //offset for IE6
			var topFixed = topOff - top;
			var	leftFixed = leftOff - left;
			
			if ($.browser.msie && parseInt($.browser.version) < 7) { // IE6
				//IE 6 fix
				$("select").hide();
				//IE 6 fix
				$("#jDialogContainer select").show();

				//IE6 doesn't support fixed position
				$("#jDialogContainer").children().css({
														  top: topOff,
														  left: leftOff,
														  position: "absolute",
														  zIndex: (opts.index+1)
													  }).show(); 
			}
			else{	// firefox and IE7
				$("#jDialogContainer").children().css({
														  top: topFixed, 
														  left: leftFixed, 
														  position: "fixed", 
														  zIndex: (opts.index+1)
													  }).show();
			}
		}
	};
	
	$.fn.createDialog.defaults = {
		progress: true,
		center: true,
		method: 'GET',
		data: '',
		opacity: 0.85,
		bg: '#FFFFFF',
		useIframe: false,
		alwaysLoad: false,
		wide: false,
		index: 2000
	};
	
	$.closeDialog = function(){
		dialogDisplayed=false;
		if($.browser.msie && parseInt($.browser.version) < 7) //IE6 bug
			$("select").show();
		//fade out and remove DOM nodes
		$("#jDialogOverlay").fadeTo(200, 0, function(){
			$("#jDialogContainer, #jDialogOverlay, #jDialogProgressBar").hide();
			if (alwaysLoad)
				$("#jDialogContainer, #jDialogOverlay, #jDialogProgressBar").remove();
		});
		
	};

})(jQuery);

