/*
 * jqComm - Various Common jQuery plugins
 *
 * Copyright (c) 2008 Milan Andrejevic <milan.andrejevic@gmail.com>
 * Licensed under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 */
(function($) {
	/*
	 * toggleNextDiv - Toggle next div, hide others
	 * $Version: 2008.05.30
	 *
	 * Example: $("#ShowCFTInfo").toggleNextDiv();
	 *          $(".Envelope").toggleNextDiv();
	 */
	$.fn.toggleNextDiv = function(options) {
		var collection = $(this).next("div");
		collection.hide();
		
		return this.each(function() {
			$(this).click(function() {			
				var current = $(this).next("div"); 
//				$(collection).not(current).hide();
				current.toggle();
			})
		});
	};
	 
	/*
	 * showHideMenu - Add Show / Hide Menu
	 * $Version: 2008.05.26
	 *FROM HERE
	 * Example: $('#Content').showHideMenu([images url]);
	 */
	$.fn.showHideMenu = function(options) {
		return this.each(function() {
            var cookie = $.cookie("persistent.menu");
			var cntx = $(this);
			var menu = $('#Navigation');
			var url = (options !== undefined) ? options : "."
			var hideIMG = '<img src="' + url + '/images/bg_hider_hide.gif" alt="Hide Menu"/>';
			var showIMG = '<img src="' + url + '/images/bg_hider_show.gif" alt="Show Menu" />';
			var showHideTrigger = $('<a id="ShowHideMenu" href="javascript:void(null);"></a>');
			var navi = IsNavigationHidden();

			$(showHideTrigger).append(hideIMG);
			$(cntx).before(showHideTrigger);

            if (navi == true) {
                $(cntx).parents("body").addClass("Bigger");
            }
			if ($(cntx).parents("body").hasClass("Bigger")){
				$(showHideTrigger).html(showIMG);
				$(menu).hide();
			} else {
				$(showHideTrigger).html(hideIMG);
				$(menu).show();
			}

			$(showHideTrigger).click(function(){
				if ($(menu).is(':visible')) {
					$(cntx).parents("body").addClass('Bigger');
					$(showHideTrigger).html(showIMG);
				} else {
					$(cntx).parents("body").removeClass('Bigger');
					$(showHideTrigger).html(hideIMG);
				}
				$(menu).toggle();
                PersistMenu();
			})
		});
	};

	/*TILL HERE
	 * showHideBox - Add Show / Hide Box
	 * $Version: 2008.05.27
	 *
	 * Example: $('.Menu').showHideBox();
	 */
	$.fn.showHideBox = function(options) {
		var minBox = function(el){
			el.removeClass('Maximize').addClass('Minimize').attr("title", 'Minimize Box').html('<span>Minimize Box</span>');
		};
		var maxBox = function(el){
			el.removeClass('Minimize').addClass('Maximize').attr("title", 'Maximize Box').html('<span>Maximize Box</span>');
		};
		
		return this.each(function() {

            var disp = PersistentMenus($(this).find(".MenuContent").attr("id"));
            //alert($(this).find(".MenuContent").attr("id"));
			var cntx = $('.MenuContent', this);
			var minMaxTrigger = $('<a href="javascript:void(null);"></a>');
            //alert(disp);
            if (disp == "none") {
                $(cntx).hide();
            } 

            if ($(cntx).is(':visible')) {
                minBox($(minMaxTrigger));
            } else {
                maxBox($(minMaxTrigger));
            }
			
			//minBox($(minMaxTrigger));
			$("p:first-child span", this).prepend(minMaxTrigger);
            //alert($(this).find("div").attr("id"));

			$(minMaxTrigger).click(function(){
				if ($(cntx).is(':visible')) {
					maxBox($(this));
				} else {
					minBox($(this));
				}
				$(cntx).toggle();
                PersistMenu();
			})
		});
	};

	/*
	 * tabify - Tabify divs
	 * original work: http://www.barelyfitz.com/projects/tabber/
	 * $Version: 2008.06.16
	 *
	 * Example: $('.tabber').tabify();
	 */
	$.fn.tabify = function(options) {
		return this.each(function() {
			var extraClass = (options != undefined) ? options :'.tabbertab';
			var cntx = $(this).children(extraClass);
			var menu = $('<ul class="tabbernav"></ul>');
			var _default = $(cntx).index($('.tabbertabdefault')[0]);
			var _disabled = $(cntx).index($('.tabbertabdisabled')[0]);
			_default = _default == -1? 0: _default;
			_disabled = _default == _disabled? -1: _disabled;
			
			$(cntx).each(function(i) {
				var headline = $(':header:first', this).hide();
				txt = headline.text();
				var item = $('<li><a href="javascript:void(null);" title="' + txt + '">' + txt + '</a></li>');
				
				if (i == _default) {
					$(item).addClass('tabberactive');
				} else if (i == _disabled) {
					$(item).addClass('tabberdisabled');
					$(this).hide();
				} else {
					$(this).hide();
				}
				
				$(menu).append(item);
			});
			
			$(this).prepend(menu);
			
			$('li', menu).click(function(){
				index = $('li', menu).index(this);
				if (index != _disabled) {
					$(cntx).each(function(i) {
						if (i == index) {
							$('li', menu).eq(i).addClass('tabberactive');
							$(this).show();
						} else {
							$('li', menu).eq(i).removeClass('tabberactive');
							$(this).hide();
						}
					});
				}
			})
		});
	};
	
	/*
	 * toggleCfTVisibility - Toggle menu
	 * $Version: 2008.06.02
	 *
	 * Example: $('#ToggleSubmenu').toggleVisibility();
	 */

	$.fn.toggleCfTVisibility = function(){
		var element = $(".Submenu");
		var bgColor = "#c48e00";
		$(element).hide();
		
		return this.each(function() {
			var trigger = $(this);

			$(trigger).click(function(ev){
				// Create iframe element to eliminate the problem in IE with select elements
				//if (($.browser.msie == true) && ($.browser.version <= 6)){
				$(element).css("width", "190px")
					if (parseInt($(element).find("iframe").length) == 0){
						var elPadd = parseInt($(element).css("padding"));
						var elWidth = parseInt($(trigger).width());
						var elWidthPadd = parseInt($(trigger).width()) + parseInt($(element).css("padding-left")) + parseInt($(element).css("padding-right"));
						//if ($.browser.msie == true){
							var elHeightPadd = $(element).outerHeight();
						//} else {
							//var elHeightPadd = $(element).height() - ($(element).outerHeight() - $(element).height());
						//}

						var IFR = document.createElement("iframe");
						$(IFR)
							.attr("frameborder", 0)
							.css("width", elWidthPadd)
							.css("height", elHeightPadd);
						$(element)
							.css("padding", 0)
							.css("width", elWidthPadd)
							.wrapInner("<div></div>")
							.prepend(IFR)
							.css("height", elHeightPadd)
							.removeClass("Submenu");

						$(element)
							.find("div")
							.addClass("Submenu")
							.css("position","absolute")
							.css("background-color", bgColor)
							.css("width", elWidth)
							.css("padding", parseInt(elPadd))
							.css("left", 0)
							.css("top", 0)
						//var ttt = $(element).find("div");
					}
				//}
				
				var offset = $(this).offset();
				//console.log("coords ( " + offset.left + ", " + offset.top + " )");
				if ($(element).css("display") == "none"){
					/* TEST CODE for IE Bugs.
					alert(offset.top + " : " + offset.left + " | ");*/
					var newEl = element;
					$(element).remove();
					$("#Content").append(newEl);
					element = newEl;
					//if (($.browser.msie == true) && ($.browser.version <= 6)){
						//$(element).css("width", $(this).width() + (elPadd * 2));
					//} else {
					//	$(element).css("width", $(this).width());
					//}
					$(element)
						.css("top", (offset.top + $(trigger).height() + 5))
						.css("left", offset.left)//((offset.left + $(trigger).width()) - ($(this).width() - 10)))
						.css("position","absolute")
						.css("clear","none")
						.slideDown();
					//$("object, embed").hide();
					$(this).html("Hide CfT Menu");
				} else {
					$(element).slideUp();
					//$("object, embed").show();
					$(this).html("Show CfT Menu");
				}
				return false;
			});
		});
	}

	/*
	 * retrieveCftMenu - Retrive the Menu of the page with AJAX
	 * $Version: 2008.07.09
	 *
	 * Example: $('#Submenu').retrieveCftMenu("/ceproc/common/commonAjaxCall.do", "requestType=cftMenu&resourceId=2392");
	 */
	$.fn.retrieveCftMenu = function(urlGET, data){
		var isCftMenuLoaded = false;
		
		return this.each(function(){
			if ((urlGET !== undefined) && (data !== undefined)){
				var isCftMenuLoaded = true;
				var containerElement = $(this);
				$.ajax({
					type:"GET",
					url: urlGET,
					data: data,
					success: function(menu){
						$(containerElement).find("ul").replaceWith(menu);
						$('#ToggleSubmenu').toggleCfTVisibility();
						$('#ToggleSubmenu').trigger("click");
					},
					error: function(){
						$(containerElement).find("ul").replaceWith('<ul><li><a href="">Error contacting server</a></li></ul>');
						$(containerElement).find("a").each(function(){$(this).click(function(){return false;})});
						$('#ToggleSubmenu').toggleCfTVisibility();
						$('#ToggleSubmenu').trigger("click");
					}
				})
			}
		});
	}
	
		$.fn.retrieveCalendar = function(urlGET, data){
		//var isCftMenuLoaded = false;
		//depoly again
		return this.each(function(){
			if ((urlGET !== undefined) && (data !== undefined)){
				//var isCftMenuLoaded = true;
				var containerElement = $(this);
				//alert("ok1" + containerElement);
				$.ajax({
					type:"GET",
					url: urlGET,
					data: data,
					success: function(ret){
					//alert("ret" + ret);
					//alert("ok");
						$(containerElement).find("table").replaceWith(ret);
						//$('#ToggleSubmenu').toggleCfTVisibility();
						//$('#ToggleSubmenu').trigger("click");
					},
					error: function(){
					//alert("not ok");
						//$(containerElement).find("ul").replaceWith('<ul><li><a href="">Error contacting server</a></li></ul>');
						//$(containerElement).find("a").each(function(){$(this).click(function(){return false;})});
						//$('#ToggleSubmenu').toggleCfTVisibility();
						//$('#ToggleSubmenu').trigger("click");
					}
				})
			}
		});
	}
	

	/*
	 * textCountdown - CountDown
	 * $Version: 2008.06.02
	 *
	 * Example: $('.countdown').textCountdown();
	 */	
	$.fn.textCountdown = function(){
		var countdown = {
	        init: function() {
	            countdown.remaining = countdown.max - $(countdown.obj).val().length;
	            if (countdown.remaining <= 0) {
	                $(countdown.obj).val($(countdown.obj).val().substring(0,(countdown.max-1)));
	            }
	            $(countdown.obj).siblings(".remaining").html((countdown.remaining-1) + " characters remaining.");
	        },
	        max: null,
	        remaining: null,
	        obj: null
	    };
	    return this.each(function() {
	        $(this)
				.focus(function() {
		            var c = $(this).attr("class");
		            countdown.max = parseInt(c.match(/limit_[0-9]{1,}_/)[0].match(/[0-9]{1,}/)[0]);
		            countdown.obj = this;
		            iCount = setInterval(countdown.init,100);
		        }).blur(function() {
		            countdown.init();
		            clearInterval(iCount);
		        });
	    });
	}	

	/*
	 * hideAlert - Close the alert box
	 * $Version: 2008.06.02
	 *
	 * Example: $('button#MClose').hideAlert(el);
	 */
	$.fn.hideAlert = function(el){
		var closingElement = $(el);
		return this.each(function() {
			$(this).click(function() {
				$(closingElement).hide();
				if (($(".Submenu").css("display") != "none") && ($(".Submenu").length > 0)){
					var offset = $('#ToggleSubmenu').offset();
					$(".Submenu")
						.parent("div")
						.animate({"top": ((offset.top + $('#ToggleSubmenu').height() + 5) - $(closingElement).outerHeight(true)) + "px"}, "fast");
				}
				return false;
			});
		});
	}

	/*
	 * PopUp - Open a poup Window
	 * $Version: 2008.06.02
	 *
	 * Example: $(".popup").click(function(){
				$(this).PopUp($(this).attr("href"), {opts})
				return false;
			});
	 */
	$.fn.PopUp = function(url, options){
		var opts = $.extend({}, PopUpDefaults, options);
		var url = url;
		var wname = opts.windowname;
		var winLeft = (screen.width - opts.width) / 2;
		var winTop = (screen.height - opts.height) / 4;
		var params = 'height='+ opts.height +',width='+ opts.width +',left='+ winLeft +',top='+ winTop +',scrollbars='+ opts.scroll +',resizable=' + opts.resizable;
		return this.each(function() {
			var newWindow = window.open(url, wname, params);
			newWindow.focus();
		});
	}
	
	PopUpDefaults = {
		windowname: 'popupwindow',
		width:		810,
		height:		500,
		scroll:		1,
		resizable:	0
	};
	
})(jQuery);

// Functions added for persisting the left menus
function PersistMenu() {
    var propArray = new Array (
        "Navigation="          + $j("div [@id='Navigation']").css("display"),
        "LoginMenuContent="    + $j("div [@id='LoginMenuContent']").css("display"),
        "AdminMenuContent="    + $j("div [@id='AdminMenuContent']").css("display"),
        "InfoMenuContent="     + $j("div [@id='InfoMenuContent']").css("display"),
        "Calendar="            + $j("div [@id='Calendar']").css("display")
    )

    $j.cookie("persistent.menu", propArray.join(";"));
}

function IsNavigationHidden() {
    var nav = ($j.cookie("persistent.menu") || "").split(";")[0].split("=");
    
    return (nav[1] == "none") ? true : false;
}

function PersistentMenus(el) {

    var nav = ($j.cookie("persistent.menu") || "").split(";");

    for (var i = 0; i < nav.length; i++) {
        var item = nav[i].split("=");

        if (item[0] == el) {
            return item[1];
        }
    }
}


