AJS.toInit(function(){AJS.$("table.attachments tr").each(function(A,B){AJS.$(B).find("td.attachment-actions a").each(function(C,D){if(AJS.$(D).attr("href").indexOf("/plugins/gliffy/view")!=-1){AJS.$(B).find("td.filename-column span").removeClass("icon-file-xml").addClass("gliffy-document-icon").attr("title","Gliffy File").text("Gliffy File")
}})
})
});
AJS.toInit(function(){if(AJS.version>="3.0"){var A=AJS.$("#poweredby:visible");
if(A!=null){A.before(AJS.template.load("gliffy-footer-webpanel"))
}}});
(function(A){A.fn.gliffyMacroView=function(){return this.each(function(){var C=A(this);
var D=C.find(".gliffy-image");
var B=C.find(".gliffy-chrome");
D.one("load",function(){B.width(D.outerWidth()).height(D.outerHeight()+5);
C.hover(function(){B.stop().css("opacity","").hide().fadeIn("fast")
},function(){B.stop().css("opacity","").show().fadeOut("fast")
})
}).each(function(){if(this.complete){A(this).load()
}});
C.find(".gliffy-icon-full").closest("a").fancybox({padding:0,zoomSpeedIn:200,zoomSpeedOut:200,overlayShow:true,overlayOpacity:0.5,onComplete:function(){B.stop().css("opacity","").hide();
var E=A("#fancybox-content").width();
var G=C.find("map.gliffy-dynamic");
var H=E/parseInt(C.data("fullwidth"),10);
var F=AJS.format("{0}/rest/gliffy/1.0/ceo/{1}/diagrams/{2}/map?name={3}&scale={4}",AJS.Confluence.getContextPath(),C.data("ceoid"),encodeURIComponent(C.data("filename")),G.attr("name"),H);
G.load(F+" area");
A("#fancybox-img").attr("usemap","#"+G.attr("name"))
}})
})
};
AJS.toInit(function(){A("span.gliffy-container").gliffyMacroView()
})
})(AJS.$);
/**
 * Cookie plugin
 *
 * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 */

/**
 * Create a cookie with the given name and value and other optional parameters.
 *
 * @example $.cookie('the_cookie', 'the_value');
 * @desc Set the value of a cookie.
 * @example $.cookie('the_cookie', 'the_value', {expires: 7, path: '/', domain: 'jquery.com', secure: true});
 * @desc Create a cookie with all available options.
 * @example $.cookie('the_cookie', 'the_value');
 * @desc Create a session cookie.
 * @example $.cookie('the_cookie', null);
 * @desc Delete a cookie by passing null as value.
 *
 * @param String name The name of the cookie.
 * @param String value The value of the cookie.
 * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
 * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
 *                             If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
 *                             If set to null or omitted, the cookie will be a session cookie and will not be retained
 *                             when the the browser exits.
 * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
 * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
 * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
 *                        require a secure protocol (like HTTPS).
 * @type undefined
 *
 * @name $.cookie
 * @cat Plugins/Cookie
 * @author Klaus Hartl/klaus.hartl@stilbuero.de
 */

/**
 * Get the value of a cookie with the given name.
 *
 * @example $.cookie('the_cookie');
 * @desc Get the value of a cookie.
 *
 * @param String name The name of the cookie.
 * @return The value of the cookie.
 * @type String
 *
 * @name $.cookie
 * @cat Plugins/Cookie
 * @author Klaus Hartl/klaus.hartl@stilbuero.de
 */
jQuery.cookie = function(name, value, options) {
    if (typeof value != 'undefined') { // name and value given, set cookie
        options = options || {};
        if (value === null) {
            value = '';
            options.expires = -1;
        }
        var expires = '';
        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
            var date;
            if (typeof options.expires == 'number') {
                date = new Date();
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
            } else {
                date = options.expires;
            }
            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
        }
        var path = options.path ? '; path=' + options.path : '';
        var domain = options.domain ? '; domain=' + options.domain : '';
        var secure = options.secure ? '; secure' : '';
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
    } else { // only name given, get cookie
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
};
/*
 * jQuery.splitter.js - two-pane splitter window plugin
 *
 * version 1.51 (2009/01/09) 
 * 
 * Dual licensed under the MIT and GPL licenses: 
 *   http://www.opensource.org/licenses/mit-license.php 
 *   http://www.gnu.org/licenses/gpl.html 
 */

/**
 * The splitter() plugin implements a two-pane resizable splitter window.
 * The selected elements in the jQuery object are converted to a splitter;
 * each selected element should have two child elements, used for the panes
 * of the splitter. The plugin adds a third child element for the splitbar.
 * 
 * For more details see: http://methvin.com/splitter/
 *
 *
 * @example $('#MySplitter').splitter();
 * @desc Create a vertical splitter with default settings 
 *
 * @example $('#MySplitter').splitter({type: 'h', accessKey: 'M'});
 * @desc Create a horizontal splitter resizable via Alt+Shift+M
 *
 * @name splitter
 * @type jQuery
 * @param Object options Options for the splitter (not required)
 * @cat Plugins/Splitter
 * @return jQuery
 * @author Dave Methvin (dave.methvin@gmail.com)
 */
 ;(function($){
 
 $.fn.splitter = function(args){
	args = args || {};
	return this.each(function() {
		var zombie;		// left-behind splitbar for outline resizes
		function startSplitMouse(evt) {
			if ( opts.outline )
				zombie = zombie || bar.clone(false).insertAfter(A);
			panes.css("-webkit-user-select", "none");	// Safari selects A/B text on a move
			bar.addClass(opts.activeClass);
			A._posSplit = A[0][opts.pxSplit] - evt[opts.eventPos];
			$(document)
				.bind("mousemove", doSplitMouse)
				.bind("mouseup", endSplitMouse);
		}
		function doSplitMouse(evt) {
			var newPos = A._posSplit+evt[opts.eventPos];
			if ( opts.outline ) {
				newPos = Math.max(0, Math.min(newPos, splitter._DA - bar._DA));
				bar.css(opts.origin, newPos);
			} else 
				resplit(newPos);
		}
		function endSplitMouse(evt) {
			bar.removeClass(opts.activeClass);
			var newPos = A._posSplit+evt[opts.eventPos];
			if ( opts.outline ) {
				zombie.remove(); zombie = null;
				resplit(newPos);
			}
			panes.css("-webkit-user-select", "text");	// let Safari select text again
			$(document)
				.unbind("mousemove", doSplitMouse)
				.unbind("mouseup", endSplitMouse);
		}
		function resplit(newPos) {
			// Constrain new splitbar position to fit pane size limits
			newPos = Math.max(A._min, splitter._DA - B._max, 
					Math.min(newPos, A._max, splitter._DA - bar._DA - B._min));
			// Resize/position the two panes
			bar._DA = bar[0][opts.pxSplit];		// bar size may change during dock
			bar.css(opts.origin, newPos).css(opts.fixed, splitter._DF);
			A.css(opts.origin, 0).css(opts.split, newPos).css(opts.fixed,  splitter._DF);
			B.css(opts.origin, newPos+bar._DA)
				.css(opts.split, splitter._DA-bar._DA-newPos).css(opts.fixed,  splitter._DF);
			// IE fires resize for us; all others pay cash
			if ( !$.browser.msie )
				panes.trigger("resize");
		}
		function dimSum(jq, dims) {
			// Opera returns -1 for missing min/max width, turn into 0
			var sum = 0;
			for ( var i=1; i < arguments.length; i++ )
				sum += Math.max(parseInt(jq.css(arguments[i])) || 0, 0);
			return sum;
		}
		
		// Determine settings based on incoming opts, element classes, and defaults
		var vh = (args.splitHorizontal? 'h' : args.splitVertical? 'v' : args.type) || 'v';
		var opts = $.extend({
			activeClass: 'active',	// class name for active splitter
			pxPerKey: 8,			// splitter px moved per keypress
			tabIndex: 0,			// tab order indicator
			accessKey: ''			// accessKey for splitbar
		},{
			v: {					// Vertical splitters:
				keyLeft: 39, keyRight: 37, cursor: "e-resize",
				splitbarClass: "vsplitbar", outlineClass: "voutline",
				type: 'v', eventPos: "pageX", origin: "left",
				split: "width",  pxSplit: "offsetWidth",  side1: "Left", side2: "Right",
				fixed: "height", pxFixed: "offsetHeight", side3: "Top",  side4: "Bottom"
			},
			h: {					// Horizontal splitters:
				keyTop: 40, keyBottom: 38,  cursor: "n-resize",
				splitbarClass: "hsplitbar", outlineClass: "houtline",
				type: 'h', eventPos: "pageY", origin: "top",
				split: "height", pxSplit: "offsetHeight", side1: "Top",  side2: "Bottom",
				fixed: "width",  pxFixed: "offsetWidth",  side3: "Left", side4: "Right"
			}
		}[vh], args);

		// Create jQuery object closures for splitter and both panes
		var splitter = $(this).css({position: "relative"});
		var panes = $(">*", splitter[0]).css({
			position: "absolute", 			// positioned inside splitter container
			"z-index": "0",					// splitbar is positioned above
			"-moz-outline-style": "none"	// don't show dotted outline
		});
		var A = $(panes[0]);		// left  or top
		var B = $(panes[1]);		// right or bottom

		// Focuser element, provides keyboard support; title is shown by Opera accessKeys
		var focuser = $('<a href="javascript:void(0)"></a>')
			.attr({accessKey: opts.accessKey, tabIndex: opts.tabIndex, title: opts.splitbarClass})
			.bind($.browser.opera?"click":"focus", function(){ this.focus(); bar.addClass(opts.activeClass) })
			.bind("keydown", function(e){
				var key = e.which || e.keyCode;
				var dir = key==opts["key"+opts.side1]? 1 : key==opts["key"+opts.side2]? -1 : 0;
				if ( dir )
					resplit(A[0][opts.pxSplit]+dir*opts.pxPerKey, false);
			})
			.bind("blur", function(){ bar.removeClass(opts.activeClass) });
			
		// Splitbar element, can be already in the doc or we create one
		var bar = $(panes[2] || '<div></div>')
			.insertAfter(A).css("z-index", "10").append(focuser)
			.attr({"class": opts.splitbarClass, unselectable: "on"})
			.css({position: "absolute",	"user-select": "none", "-webkit-user-select": "none",
				"-khtml-user-select": "none", "-moz-user-select": "none"})
			.bind("mousedown", startSplitMouse);
		// Use our cursor unless the style specifies a non-default cursor
		if ( /^(auto|default|)$/.test(bar.css("cursor")) )
			bar.css("cursor", opts.cursor);

		// Cache several dimensions for speed, rather than re-querying constantly
		bar._DA = bar[0][opts.pxSplit];
		splitter._PBF = $.boxModel? dimSum(splitter, "border"+opts.side3+"Width", "border"+opts.side4+"Width") : 0;
		splitter._PBA = $.boxModel? dimSum(splitter, "border"+opts.side1+"Width", "border"+opts.side2+"Width") : 0;
		A._pane = opts.side1;
		B._pane = opts.side2;
		$.each([A,B], function(){
			this._min = opts["min"+this._pane] || dimSum(this, "min-"+opts.split);
			this._max = opts["max"+this._pane] || dimSum(this, "max-"+opts.split) || 9999;
			this._init = opts["size"+this._pane]===true ?
				parseInt($.curCSS(this[0],opts.split)) : opts["size"+this._pane];
		});
		
		// Determine initial position, get from cookie if specified
		var initPos = A._init;
		if ( !isNaN(B._init) )	// recalc initial B size as an offset from the top or left side
			initPos = splitter[0][opts.pxSplit] - splitter._PBA - B._init - bar._DA;
		if ( opts.cookie ) {
			if ( !$.cookie )
				alert('jQuery.splitter(): jQuery cookie plugin required');
			var ckpos = parseInt($.cookie(opts.cookie));
			if ( !isNaN(ckpos) )
				initPos = ckpos;
			$(window).bind("unload", function(){
				var state = String(bar.css(opts.origin));	// current location of splitbar
				$.cookie(opts.cookie, state, {expires: opts.cookieExpires || 365, 
					path: opts.cookiePath || document.location.pathname});
			});
		}
		if ( isNaN(initPos) )	// King Solomon's algorithm
			initPos = Math.round((splitter[0][opts.pxSplit] - splitter._PBA - bar._DA)/2);

        var resizeHandler = function(){
            var top = splitter.offset().top;
            var footer = $("#footer").height();
            if (!footer)
                footer = 24;
            var wh = $(window).height()-footer;
            splitter.css("height", Math.max(wh-top-splitter._hadjust, splitter._hmin)+"px");
            if ( !$.browser.msie ) splitter.trigger("resize");
        };
        args.update = function (isBound) {
            splitter._hadjust = dimSum(splitter, "borderTopWidth", "borderBottomWidth", "marginBottom");
            splitter._hmin = Math.max(dimSum(splitter, "minHeight"), 20);
            isBound && $(window).bind("resize", resizeHandler);
            resizeHandler();
        };
		// Resize event propagation and splitter sizing
		if ( opts.anchorToWindow ) {
			// Account for margin or border on the splitter container and enforce min height
            args.update(true);
		}
		else if ( opts.resizeToWidth && !$.browser.msie )
			$(window).bind("resize", function(){
				splitter.trigger("resize"); 
			});

		// Resize event handler; triggered immediately to set initial position
		splitter.bind("resize", function(e, size){
			// Custom events bubble in jQuery 1.3; don't Yo Dawg
			if ( e.target != this ) return;
			// Determine new width/height of splitter container
			splitter._DF = splitter[0][opts.pxFixed] - splitter._PBF;
			splitter._DA = splitter[0][opts.pxSplit] - splitter._PBA;
			// Bail if splitter isn't visible or content isn't there yet
			if ( splitter._DF <= 0 || splitter._DA <= 0 ) return;
			// Re-divvy the adjustable dimension; maintain size of the preferred pane
			resplit(!isNaN(size)? size : (!(opts.sizeRight||opts.sizeBottom)? A[0][opts.pxSplit] :
				splitter._DA-B[0][opts.pxSplit]-bar._DA));
		}).trigger("resize" , [initPos]);
	});
};

})(jQuery);
jQuery.cookie=function(B,I,L){if(typeof I!="undefined"){L=L||{};
if(I===null){I="";
L.expires=-1
}var E="";
if(L.expires&&(typeof L.expires=="number"||L.expires.toUTCString)){var F;
if(typeof L.expires=="number"){F=new Date();
F.setTime(F.getTime()+(L.expires*24*60*60*1000))
}else{F=L.expires
}E="; expires="+F.toUTCString()
}var K=L.path?"; path="+L.path:"";
var G=L.domain?"; domain="+L.domain:"";
var A=L.secure?"; secure":"";
document.cookie=[B,"=",encodeURIComponent(I),E,K,G,A].join("")
}else{var D=null;
if(document.cookie&&document.cookie!=""){var J=document.cookie.split(";");
for(var H=0;
H<J.length;
H++){var C=jQuery.trim(J[H]);
if(C.substring(0,B.length+1)==(B+"=")){D=decodeURIComponent(C.substring(B.length+1));
break
}}}return D
}};
(function(A){var B=4;
A.fn.splitter=function(C){C=C||{};
return this.each(function(){var P;
function K(U){if(D.outline){P=P||O.clone(false).insertAfter(H)
}Q.css("-webkit-user-select","none");
O.addClass(D.activeClass);
H._posSplit=H[0][D.pxSplit]-U[D.eventPos];
A(document).bind("mousemove",M).bind("mouseup",S)
}function M(U){var V=H._posSplit+U[D.eventPos];
if(D.outline){V=Math.max(0,Math.min(V,E._DA-O._DA));
O.css(D.origin,V)
}else{N(V)
}}function S(U){O.removeClass(D.activeClass);
var V=H._posSplit+U[D.eventPos];
if(D.outline){P.remove();
P=null;
N(V)
}Q.css("-webkit-user-select","text");
A(document).unbind("mousemove",M).unbind("mouseup",S)
}function N(U){U=Math.max(H._min,E._DA-G._max,Math.min(U,H._max,E._DA-O._DA-G._min));
O._DA=O[0][D.pxSplit];
O.css(D.origin,U).css(D.fixed,E._DF);
H.css(D.origin,0).css(D.split,U).css(D.fixed,E._DF);
G.css(D.origin,U+O._DA).css(D.split,E._DA-O._DA-U).css(D.fixed,E._DF);
if(!A.browser.msie){Q.trigger("resize")
}}function R(X,W){var V=0;
for(var U=1;
U<arguments.length;
U++){V+=Math.max(parseInt(X.css(arguments[U]))||0,0)
}return V
}var L=(C.splitHorizontal?"h":C.splitVertical?"v":C.type)||"v";
var D=A.extend({activeClass:"active",pxPerKey:8,tabIndex:0,accessKey:""},{v:{keyLeft:39,keyRight:37,cursor:(A.browser.msie)?"e-resize":"ew-resize",splitbarClass:"vsplitbar",outlineClass:"voutline",type:"v",eventPos:"pageX",origin:"left",split:"width",pxSplit:"offsetWidth",side1:"Left",side2:"Right",fixed:"height",pxFixed:"offsetHeight",side3:"Top",side4:"Bottom"},h:{keyTop:40,keyBottom:38,cursor:(A.browser.msie)?"n-resize":"ns-resize",splitbarClass:"hsplitbar",outlineClass:"houtline",type:"h",eventPos:"pageY",origin:"top",split:"height",pxSplit:"offsetHeight",side1:"Top",side2:"Bottom",fixed:"width",pxFixed:"offsetWidth",side3:"Left",side4:"Right"}}[L],C);
var E=A(this).css({position:"relative"});
var Q=E.children().css({position:"absolute","-moz-outline-style":"none"});
var H=A(Q[0]);
var G=A(Q[1]);
var F=A('<a href="javascript:void(0)"></a>').attr({accessKey:D.accessKey,tabIndex:D.tabIndex,title:D.splitbarClass}).bind(A.browser.opera?"click":"focus",function(){this.focus();
O.addClass(D.activeClass)
}).bind("keydown",function(W){var V=W.which||W.keyCode;
var U=V==D["key"+D.side1]?1:V==D["key"+D.side2]?-1:0;
if(U){N(H[0][D.pxSplit]+U*D.pxPerKey,false)
}}).bind("blur",function(){O.removeClass(D.activeClass)
});
var O=A(Q[2]||"<div></div>").insertAfter(H).css("z-index",B).append(F).attr({"class":D.splitbarClass,unselectable:"on"}).css({position:"absolute","user-select":"none","-webkit-user-select":"none","-khtml-user-select":"none","-moz-user-select":"none"}).bind("mousedown",K);
if(/^(auto|default|)$/.test(O.css("cursor"))){O.css("cursor",D.cursor)
}O._DA=O[0][D.pxSplit];
E._PBF=A.boxModel?R(E,"border"+D.side3+"Width","border"+D.side4+"Width"):0;
E._PBA=A.boxModel?R(E,"border"+D.side1+"Width","border"+D.side2+"Width"):0;
H._pane=D.side1;
G._pane=D.side2;
A.each([H,G],function(){this._min=D["min"+this._pane]||R(this,"min-"+D.split);
this._max=D["max"+this._pane]||R(this,"max-"+D.split)||9999;
this._init=D["size"+this._pane]===true?parseInt(A.curCSS(this[0],D.split)):D["size"+this._pane]
});
var T=H._init;
if(!isNaN(G._init)){T=E[0][D.pxSplit]-E._PBA-G._init-O._DA
}if(D.cookie){if(!A.cookie){alert("jQuery.splitter(): jQuery cookie plugin required")
}var J=parseInt(A.cookie(D.cookie));
if(!isNaN(J)){T=J
}A(window).bind("unload",function(){var U=String(O.css(D.origin));
A.cookie(D.cookie,U,{expires:D.cookieExpires||365,path:D.cookiePath||document.location.pathname})
})
}if(isNaN(T)){T=Math.round((E[0][D.pxSplit]-E._PBA-O._DA)/2)
}var I=function(W){var V=E.offset().top;
var X=A("#footer").height();
if(!X){X=24
}var U=A(window).height()-X;
E.css("height",Math.max(U-V-E._hadjust,E._hmin)+"px");
if(!W||W.target==window){E.trigger("resize")
}};
C.update=function(U){E._hadjust=R(E,"borderTopWidth","borderBottomWidth","marginBottom");
E._hmin=Math.max(R(E,"minHeight"),20);
U&&A(window).bind("resize",I);
I()
};
if(D.anchorToWindow){C.update(true)
}else{if(D.resizeToWidth&&!A.browser.msie){A(window).bind("resize",function(){E.trigger("resize")
})
}}E.bind("resize",function(V,U){if(V.target!=this){return 
}E._DF=E[0][D.pxFixed]-E._PBF;
E._DA=E[0][D.pxSplit]-E._PBA;
if(E._DF<=0||E._DA<=0){return 
}N(!isNaN(U)?U:(!(D.sizeRight||D.sizeBottom)?H[0][D.pxSplit]:E._DA-G[0][D.pxSplit]-O._DA))
}).trigger("resize",[T])
})
}
})(jQuery);
window.placeFocus=function(){var A=document.getElementById("splitter-content");
if(A&&AJS.$("#wysiwyg").length==0){A.focus()
}};
AJS.toInit(function(D){if(D("#com-atlassian-confluence").hasClass("theme-documentation")){var C=D("#quick-search-query");
var A=C.closest("form");
var B=D("fieldset input[name='spaceSearch']",A).val()==="true"?D("#confluence-space-key").attr("content"):"";
A.submit(function(){var E=C.val();
if(E.search(/all:/gi)>=0){C.val(D.trim(E.replace(/all:/gi,"")))
}});
AJS.log("Applying doc-theme quick search");
Confluence.QuickNav.setDropDownPostProcess(function(F){if(B){var E=D("a.search-for",F);
E.attr("href",E.attr("href")+"&where="+encodeURIComponent(B))
}});
Confluence.QuickNav.setMakeParams(function(E){var F={query:E};
if(F.query.search(/all:/gi)>=0){D("input[name='where']",A).val("");
F.query=D.trim(F.query.replace(/all:/gi,""));
if(!F.query){F.query="ALL"
}}else{if(B){F.spaceKey=B
}}return F
});
C.mouseover(function(){if(B){C.attr("title",D("input[name='tooltip']",A).val())
}})
}});
AJS.toInit(function(A){Confluence.KeyboardShortcuts&&Confluence.KeyboardShortcuts.Autoformat.push({action:"@",context:"autoformat.autocomplete",description:"Mention"})
});
if(Confluence.KeyboardShortcuts){Confluence.KeyboardShortcuts.Editor.push({context:"editor.actions",descKey:"Insert JIRA issue"+":",keys:[["Ctrl+Shift+J"]]})
};

