Difference between revisions of "MediaWiki:Common.js"
From Baloogan Campaign Wiki
								
												
				| (21 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
| + | /** | ||
| + |  * Collapsible tables | ||
| + |  * | ||
| + |  * @version 2.0.1 (2013-03-26) | ||
| + |  * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js | ||
| + |  * @author [[User:R. Koot]] | ||
| + |  * @author [[User:Krinkle]] | ||
| + |  * @deprecated Since MediaWiki 1.20: Use class="mw-collapsible" instead which | ||
| + |  * is supported in MediaWiki core. | ||
| + |  */ | ||
| + | |||
| + | var autoCollapse = 2; | ||
| + | var collapseCaption = 'hide'; | ||
| + | var expandCaption = 'show'; | ||
| + | |||
| + | function collapseTable( tableIndex ) { | ||
| + | 	var Button = document.getElementById( 'collapseButton' + tableIndex ); | ||
| + | 	var Table = document.getElementById( 'collapsibleTable' + tableIndex ); | ||
| + | |||
| + | 	if ( !Table || !Button ) { | ||
| + | 		return false; | ||
| + | 	} | ||
| + | |||
| + | 	var Rows = Table.rows; | ||
| + | |||
| + | 	if ( Button.firstChild.data == collapseCaption ) { | ||
| + | 		for ( var i = 1; i < Rows.length; i++ ) { | ||
| + | 			Rows[i].style.display = 'none'; | ||
| + | 		} | ||
| + | 		Button.firstChild.data = expandCaption; | ||
| + | 	} else { | ||
| + | 		for ( var i = 1; i < Rows.length; i++ ) { | ||
| + | 			Rows[i].style.display = Rows[0].style.display; | ||
| + | 		} | ||
| + | 		Button.firstChild.data = collapseCaption; | ||
| + | 	} | ||
| + | } | ||
| + | |||
| + | function createClickHandler( tableIndex ) { | ||
| + | 	return function ( e ) { | ||
| + | 		e.preventDefault(); | ||
| + | 		collapseTable( tableIndex ); | ||
| + | 	} | ||
| + | } | ||
| + | |||
| + | function createCollapseButtons() { | ||
| + | 	var tableIndex = 0; | ||
| + | 	var NavigationBoxes = {}; | ||
| + | 	var Tables = document.getElementsByTagName( 'table' ); | ||
| + | |||
| + | 	for ( var i = 0; i < Tables.length; i++ ) { | ||
| + | 		if ( $( Tables[i] ).hasClass( 'collapsible' ) ) { | ||
| + | 			/* only add button and increment count if there is a header row to work with */ | ||
| + | 			var HeaderRow = Tables[i].getElementsByTagName( 'tr' )[0]; | ||
| + | 			if ( !HeaderRow ) { | ||
| + | 				continue; | ||
| + | 			} | ||
| + | 			var Header = HeaderRow.getElementsByTagName( 'th' )[0]; | ||
| + | 			if ( !Header ) { | ||
| + | 				continue; | ||
| + | 			} | ||
| + | |||
| + | 			NavigationBoxes[tableIndex] = Tables[i]; | ||
| + | 			Tables[i].setAttribute( 'id', 'collapsibleTable' + tableIndex ); | ||
| + | |||
| + | 			var Button = document.createElement( 'span' ); | ||
| + | 			var ButtonLink = document.createElement( 'a' ); | ||
| + | 			var ButtonText = document.createTextNode( collapseCaption ); | ||
| + | |||
| + | 			Button.style.styleFloat = 'right'; | ||
| + | 			Button.style.cssFloat = 'right'; | ||
| + | 			Button.style.fontWeight = 'normal'; | ||
| + | 			Button.style.textAlign = 'right'; | ||
| + | 			Button.style.width = '6em'; | ||
| + | |||
| + | 			ButtonLink.style.color = Header.style.color; | ||
| + | 			ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex ); | ||
| + | 			$( ButtonLink ).on( 'click', createClickHandler( tableIndex ) ); | ||
| + | 			ButtonLink.appendChild( ButtonText ); | ||
| + | |||
| + | 			Button.appendChild( document.createTextNode( '[' ) ); | ||
| + | 			Button.appendChild( ButtonLink ); | ||
| + | 			Button.appendChild( document.createTextNode( ']' ) ); | ||
| + | |||
| + | 			Header.insertBefore( Button, Header.childNodes[0] ); | ||
| + | 			tableIndex++; | ||
| + | 		} | ||
| + | 	} | ||
| + | |||
| + | 	for ( var i = 0; i < tableIndex; i++ ) { | ||
| + | 		if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) || | ||
| + | 			( tableIndex >= autoCollapse && $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) ) | ||
| + | 		) { | ||
| + | 			collapseTable( i ); | ||
| + | 		} | ||
| + | 	} | ||
| + | } | ||
| + | |||
| + | $( createCollapseButtons ); | ||
| /* Any JavaScript here will be loaded for all users on every page load. */ | /* Any JavaScript here will be loaded for all users on every page load. */ | ||
| + | /** | ||
| + |  * Dynamic Navigation Bars. See [[Wikipedia:NavFrame]] | ||
| + |  *  | ||
| + |  * Based on script from en.wikipedia.org, 2008-09-15. | ||
| + |  * | ||
| + |  * @source www.mediawiki.org/wiki/MediaWiki:Gadget-NavFrame.js | ||
| + |  * @maintainer Helder.wiki, 2012–2013 | ||
| + |  * @maintainer Krinkle, 2013 | ||
| + |  */ | ||
| + | ( function () { | ||
| + | |||
| + | // Set up the words in your language | ||
| + | var collapseCaption = 'hide'; | ||
| + | var expandCaption = 'show'; | ||
| + | |||
| + | var navigationBarHide = '[' + collapseCaption + ']'; | ||
| + | var navigationBarShow = '[' + expandCaption + ']'; | ||
| + | |||
| + | /** | ||
| + |  * Shows and hides content and picture (if available) of navigation bars. | ||
| + |  * | ||
| + |  * @param {number} indexNavigationBar The index of navigation bar to be toggled | ||
| + |  * @param {jQuery.Event} e Event object | ||
| + |  */ | ||
| + | function toggleNavigationBar( indexNavigationBar, e ) { | ||
| + | 	var navChild, | ||
| + | 		navToggle = document.getElementById( 'NavToggle' + indexNavigationBar ), | ||
| + | 		navFrame = document.getElementById( 'NavFrame' + indexNavigationBar ); | ||
| + | |||
| + | 	// Prevent browser from jumping to href "#" | ||
| + | 	e.preventDefault(); | ||
| + | |||
| + | 	if ( !navFrame || !navToggle ) { | ||
| + | 		return false; | ||
| + | 	} | ||
| + | |||
| + | 	// If shown now | ||
| + | 	if ( navToggle.firstChild.data == navigationBarHide ) { | ||
| + | 		for ( navChild = navFrame.firstChild; navChild != null; navChild = navChild.nextSibling ) { | ||
| + | 			if ( hasClass( navChild, 'NavPic' ) ) { | ||
| + | 				navChild.style.display = 'none'; | ||
| + | 			} | ||
| + | 			if ( hasClass( navChild, 'NavContent' ) ) { | ||
| + | 				navChild.style.display = 'none'; | ||
| + | 			} | ||
| + | 		} | ||
| + | 		navToggle.firstChild.data = navigationBarShow; | ||
| + | |||
| + | 	// If hidden now | ||
| + | 	} else if ( navToggle.firstChild.data == navigationBarShow ) { | ||
| + | 		for ( navChild = navFrame.firstChild; navChild != null; navChild = navChild.nextSibling ) { | ||
| + | 			if ( $( navChild ).hasClass( 'NavPic' ) || $( navChild ).hasClass( 'NavContent' ) ) { | ||
| + | 				navChild.style.display = 'block'; | ||
| + | 			} | ||
| + | 		} | ||
| + | 		navToggle.firstChild.data = navigationBarHide; | ||
| + | 	} | ||
| + | } | ||
| + | |||
| + | /** | ||
| + |  * Adds show/hide-button to navigation bars. | ||
| + |  * | ||
| + |  * @param {jQuery} $content | ||
| + |  */ | ||
| + | function createNavigationBarToggleButton( $content ) { | ||
| + | 	var i, j, navFrame, navToggle, navToggleText, navChild, | ||
| + | 		indexNavigationBar = 0, | ||
| + | 		navFrames = $content.find( 'div.NavFrame' ).toArray(); | ||
| + | |||
| + | 	// Iterate over all (new) nav frames | ||
| + | 	for ( i = 0; i < navFrames.length; i++ ) { | ||
| + | 		navFrame = navFrames[i]; | ||
| + | 		// If found a navigation bar | ||
| + | 		indexNavigationBar++; | ||
| + | 		navToggle = document.createElement( 'a' ); | ||
| + | 		navToggle.className = 'NavToggle'; | ||
| + | 		navToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar ); | ||
| + | 		navToggle.setAttribute( 'href', '#' ); | ||
| + | 		$( navToggle ).on( 'click', $.proxy( toggleNavigationBar, null, indexNavigationBar ) ); | ||
| + | |||
| + | 		navToggleText = document.createTextNode( navigationBarHide ); | ||
| + | 		for ( navChild = navFrame.firstChild; navChild != null; navChild = navChild.nextSibling ) { | ||
| + | 			if ( $( navChild ).hasClass( 'NavPic' ) || $( navChild ).hasClass( 'NavContent' ) ) { | ||
| + | 				if ( navChild.style.display == 'none' ) { | ||
| + | 					navToggleText = document.createTextNode( navigationBarShow ); | ||
| + | 					break; | ||
| + | 				} | ||
| + | 			} | ||
| + | 		} | ||
| + | |||
| + | 		navToggle.appendChild( navToggleText ); | ||
| + | 		// Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) | ||
| + | 		for ( j = 0; j < navFrame.childNodes.length; j++ ) { | ||
| + | 			if ( $( navFrame.childNodes[j] ).hasClass( 'NavHead' ) ) { | ||
| + | 				navFrame.childNodes[j].appendChild( navToggle ); | ||
| + | 			} | ||
| + | 		} | ||
| + | 		navFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar ); | ||
| + | 	} | ||
| + | } | ||
| + | |||
| + | mw.hook( 'wikipage.content' ).add( createNavigationBarToggleButton ); | ||
| + | |||
| + | }()); | ||
| + | |||
| + |  /* | ||
| + |  * AutoSuggest | ||
| + |  * Copyright 2009-2010 Drew Wilson | ||
| + |  * www.drewwilson.com | ||
| + |  * code.drewwilson.com/entry/autosuggest-jquery-plugin | ||
| + |  * | ||
| + |  * Version 1.4   -   Updated: Mar. 23, 2010 | ||
| + |  * | ||
| + |  * This Plug-In will auto-complete or auto-suggest completed search queries | ||
| + |  * for you as you type. You can add multiple selections and remove them on | ||
| + |  * the fly. It supports keybord navigation (UP + DOWN + RETURN), as well | ||
| + |  * as multiple AutoSuggest fields on the same page. | ||
| + |  * | ||
| + |  * Inspied by the Autocomplete plugin by: Jšrn Zaefferer | ||
| + |  * and the Facelist plugin by: Ian Tearle (iantearle.com) | ||
| + |  * | ||
| + |  * This AutoSuggest jQuery plug-in is dual licensed under the MIT and GPL licenses: | ||
| + |  *   http://www.opensource.org/licenses/mit-license.php | ||
| + |  *   http://www.gnu.org/licenses/gpl.html | ||
| + |  */ | ||
| + | |||
| + | (function($){ | ||
| + | 	$.fn.autoSuggest = function(data, options) { | ||
| + | 		var defaults = {  | ||
| + | 			asHtmlID: false, | ||
| + | 			startText: "Database Search...", | ||
| + | 			emptyText: "No Results Found", | ||
| + | 			preFill: {}, | ||
| + | 			limitText: "No More Selections Are Allowed", | ||
| + | 			selectedItemProp: "value", //name of object property | ||
| + | 			selectedValuesProp: "value", //name of object property | ||
| + | 			searchObjProps: "value", //comma separated list of object property names | ||
| + | 			queryParam: "q", | ||
| + | 			retrieveLimit: false, //number for 'limit' param on ajax request | ||
| + | 			extraParams: "", | ||
| + | 			matchCase: false, | ||
| + | 			minChars: 3, | ||
| + | 			keyDelay: 400, | ||
| + | 			resultsHighlight: true, | ||
| + | 			neverSubmit: true, | ||
| + | 			selectionLimit: false, | ||
| + | 			showResultList: true, | ||
| + | 		  	start: function(){}, | ||
| + | 		  	selectionClick: function(elem){}, | ||
| + | 		  	selectionAdded: function(elem){}, | ||
| + | 		  	selectionRemoved: function(elem){ elem.remove(); }, | ||
| + | 		  	formatList: false, //callback function | ||
| + | 		  	beforeRetrieve: function(string){ return string; }, | ||
| + | 		  	retrieveComplete: function(data){ return data; }, | ||
| + | 		  	resultClick: function(data){}, | ||
| + | 		  	resultsComplete: function(){} | ||
| + | 	  	};   | ||
| + | 	 	var opts = $.extend(defaults, options);	 	 | ||
| + | |||
| + | 		var d_type = "object"; | ||
| + | 		var d_count = 0; | ||
| + | 		if(typeof data == "string") { | ||
| + | 			d_type = "string"; | ||
| + | 			var req_string = data; | ||
| + | 		} else { | ||
| + | 			var org_data = data; | ||
| + | 			for (k in data) if (data.hasOwnProperty(k)) d_count++; | ||
| + | 		} | ||
| + | 		if((d_type == "object" && d_count > 0) || d_type == "string"){ | ||
| + | 			return this.each(function(x){ | ||
| + | 				if(!opts.asHtmlID){ | ||
| + | 					x = x+""+Math.floor(Math.random()*100); //this ensures there will be unique IDs on the page if autoSuggest() is called multiple times | ||
| + | 					var x_id = "as-input-"+x; | ||
| + | 				} else { | ||
| + | 					x = opts.asHtmlID; | ||
| + | 					var x_id = x; | ||
| + | 				} | ||
| + | 				opts.start.call(this); | ||
| + | 				var input = $(this); | ||
| + | 				input.attr("autocomplete","off").addClass("as-input").attr("id",x_id).val(opts.startText); | ||
| + | 				var input_focus = false; | ||
| + | |||
| + | 				// Setup basic elements and render them to the DOM | ||
| + | 				input.wrap('<ul class="as-selections" id="as-selections-'+x+'"></ul>').wrap('<li class="as-original" id="as-original-'+x+'"></li>'); | ||
| + | 				var selections_holder = $("#as-selections-"+x); | ||
| + | 				var org_li = $("#as-original-"+x);				 | ||
| + | 				var results_holder = $('<div class="as-results" id="as-results-'+x+'"></div>').hide(); | ||
| + | 				var results_ul =  $('<ul class="as-list"></ul>'); | ||
| + | 				var values_input = $('<input type="hidden" class="as-values" name="as_values_'+x+'" id="as-values-'+x+'" />'); | ||
| + | 				var prefill_value = ""; | ||
| + | 				if(typeof opts.preFill == "string"){ | ||
| + | 					var vals = opts.preFill.split(",");					 | ||
| + | 					for(var i=0; i < vals.length; i++){ | ||
| + | 						var v_data = {}; | ||
| + | 						v_data[opts.selectedValuesProp] = vals[i]; | ||
| + | 						if(vals[i] != ""){ | ||
| + | 							add_selected_item(v_data, "000"+i);	 | ||
| + | 						}		 | ||
| + | 					} | ||
| + | 					prefill_value = opts.preFill; | ||
| + | 				} else { | ||
| + | 					prefill_value = ""; | ||
| + | 					var prefill_count = 0; | ||
| + | 					for (k in opts.preFill) if (opts.preFill.hasOwnProperty(k)) prefill_count++; | ||
| + | 					if(prefill_count > 0){ | ||
| + | 						for(var i=0; i < prefill_count; i++){ | ||
| + | 							var new_v = opts.preFill[i][opts.selectedValuesProp]; | ||
| + | 							if(new_v == undefined){ new_v = ""; } | ||
| + | 							prefill_value = prefill_value+new_v+","; | ||
| + | 							if(new_v != ""){ | ||
| + | 								add_selected_item(opts.preFill[i], "000"+i);	 | ||
| + | 							}		 | ||
| + | 						} | ||
| + | 					} | ||
| + | 				} | ||
| + | 				if(prefill_value != ""){ | ||
| + | 					input.val(""); | ||
| + | 					var lastChar = prefill_value.substring(prefill_value.length-1); | ||
| + | 					if(lastChar != ","){ prefill_value = prefill_value+","; } | ||
| + | 					values_input.val(","+prefill_value); | ||
| + | 					$("li.as-selection-item", selections_holder).addClass("blur").removeClass("selected"); | ||
| + | 				} | ||
| + | 				input.after(values_input); | ||
| + | 				selections_holder.click(function(){ | ||
| + | 					input_focus = true; | ||
| + | 					input.focus(); | ||
| + | 				}).mousedown(function(){ input_focus = false; }).after(results_holder);	 | ||
| + | |||
| + | 				var timeout = null; | ||
| + | 				var prev = ""; | ||
| + | 				var totalSelections = 0; | ||
| + | 				var tab_press = false; | ||
| + | |||
| + | 				// Handle input field events | ||
| + | 				input.focus(function(){			 | ||
| + | 					if($(this).val() == opts.startText && values_input.val() == ""){ | ||
| + | 						$(this).val(""); | ||
| + | 					} else if(input_focus){ | ||
| + | 						$("li.as-selection-item", selections_holder).removeClass("blur"); | ||
| + | 						if($(this).val() != ""){ | ||
| + | 							results_ul.css("width",selections_holder.outerWidth()); | ||
| + | 							results_holder.show(); | ||
| + | 						} | ||
| + | 					} | ||
| + | 					input_focus = true; | ||
| + | 					return true; | ||
| + | 				}).blur(function(){ | ||
| + | 					if($(this).val() == "" && values_input.val() == "" && prefill_value == ""){ | ||
| + | 						$(this).val(opts.startText); | ||
| + | 					} else if(input_focus){ | ||
| + | 						$("li.as-selection-item", selections_holder).addClass("blur").removeClass("selected"); | ||
| + | 						results_holder.hide(); | ||
| + | 					}				 | ||
| + | 				}).keydown(function(e) { | ||
| + | 					// track last key pressed | ||
| + | 					lastKeyPressCode = e.keyCode; | ||
| + | 					first_focus = false; | ||
| + | 					switch(e.keyCode) { | ||
| + | 						case 38: // up | ||
| + | 							e.preventDefault(); | ||
| + | 							moveSelection("up"); | ||
| + | 							break; | ||
| + | 						case 40: // down | ||
| + | 							e.preventDefault(); | ||
| + | 							moveSelection("down"); | ||
| + | 							break; | ||
| + | 						case 8:  // delete | ||
| + | 							if(input.val() == ""){							 | ||
| + | 								var last = values_input.val().split(","); | ||
| + | 								last = last[last.length - 2]; | ||
| + | 								selections_holder.children().not(org_li.prev()).removeClass("selected"); | ||
| + | 								if(org_li.prev().hasClass("selected")){ | ||
| + | 									values_input.val(values_input.val().replace(","+last+",",",")); | ||
| + | 									opts.selectionRemoved.call(this, org_li.prev()); | ||
| + | 								} else { | ||
| + | 									opts.selectionClick.call(this, org_li.prev()); | ||
| + | 									org_li.prev().addClass("selected");		 | ||
| + | 								} | ||
| + | 							} | ||
| + | 							if(input.val().length == 1){ | ||
| + | 								results_holder.hide(); | ||
| + | 								 prev = ""; | ||
| + | 							} | ||
| + | 							if($(":visible",results_holder).length > 0){ | ||
| + | 								if (timeout){ clearTimeout(timeout); } | ||
| + | 								timeout = setTimeout(function(){ keyChange(); }, opts.keyDelay); | ||
| + | 							} | ||
| + | 							break; | ||
| + | 						case 9: case 188:  // tab or comma | ||
| + | 							tab_press = true; | ||
| + | 							var i_input = input.val().replace(/(,)/g, ""); | ||
| + | 							if(i_input != "" && values_input.val().search(","+i_input+",") < 0 && i_input.length >= opts.minChars){	 | ||
| + | 								e.preventDefault(); | ||
| + | 								var n_data = {}; | ||
| + | 								n_data[opts.selectedItemProp] = i_input; | ||
| + | 								n_data[opts.selectedValuesProp] = i_input;																				 | ||
| + | 								var lis = $("li", selections_holder).length; | ||
| + | 								add_selected_item(n_data, "00"+(lis+1)); | ||
| + | 								input.val(""); | ||
| + | 							} | ||
| + | 						case 13: // return | ||
| + | 							tab_press = false; | ||
| + | 							var active = $("li.active:first", results_holder); | ||
| + | 							if(active.length > 0){ | ||
| + | 								active.click(); | ||
| + | 								results_holder.hide(); | ||
| + | 							} | ||
| + | 							if(opts.neverSubmit || active.length > 0){ | ||
| + | 								e.preventDefault(); | ||
| + | 							} | ||
| + | 							break; | ||
| + | 						default: | ||
| + | 							if(opts.showResultList){ | ||
| + | 								if(opts.selectionLimit && $("li.as-selection-item", selections_holder).length >= opts.selectionLimit){ | ||
| + | 									results_ul.html('<li class="as-message">'+opts.limitText+'</li>'); | ||
| + | 									results_holder.show(); | ||
| + | 								} else { | ||
| + | 									if (timeout){ clearTimeout(timeout); } | ||
| + | 									timeout = setTimeout(function(){ keyChange(); }, opts.keyDelay); | ||
| + | 								} | ||
| + | 							} | ||
| + | 							break; | ||
| + | 					} | ||
| + | 				}); | ||
| + | |||
| + | 				function keyChange() { | ||
| + | 					// ignore if the following keys are pressed: [del] [shift] [capslock] | ||
| + | 					if( lastKeyPressCode == 46 || (lastKeyPressCode > 8 && lastKeyPressCode < 32) ){ return results_holder.hide(); } | ||
| + | 					var string = input.val().replace(/[\\]+|[\/]+/g,""); | ||
| + | 					if (string == prev) return; | ||
| + | 					prev = string; | ||
| + | 					if (string.length >= opts.minChars) { | ||
| + | 						selections_holder.addClass("loading"); | ||
| + | 						if(d_type == "string"){ | ||
| + | 							var limit = ""; | ||
| + | 							if(opts.retrieveLimit){ | ||
| + | 								limit = "&limit="+encodeURIComponent(opts.retrieveLimit); | ||
| + | 							} | ||
| + | 							if(opts.beforeRetrieve){ | ||
| + | 								string = opts.beforeRetrieve.call(this, string); | ||
| + | 							} | ||
| + | 							$.getJSON(req_string+"?"+opts.queryParam+"="+encodeURIComponent(string)+limit+opts.extraParams, function(data){  | ||
| + | 								d_count = 0; | ||
| + | 								var new_data = opts.retrieveComplete.call(this, data); | ||
| + | 								for (k in new_data) if (new_data.hasOwnProperty(k)) d_count++; | ||
| + | 								processData(new_data, string);  | ||
| + | 							}); | ||
| + | 						} else { | ||
| + | 							if(opts.beforeRetrieve){ | ||
| + | 								string = opts.beforeRetrieve.call(this, string); | ||
| + | 							} | ||
| + | 							processData(org_data, string); | ||
| + | 						} | ||
| + | 					} else { | ||
| + | 						selections_holder.removeClass("loading"); | ||
| + | 						results_holder.hide(); | ||
| + | 					} | ||
| + | 				} | ||
| + | 				var num_count = 0; | ||
| + | 				function processData(data, query){ | ||
| + | 					if (!opts.matchCase){ query = query.toLowerCase(); } | ||
| + | 					var matchCount = 0; | ||
| + | 					results_holder.html(results_ul.html("")).hide(); | ||
| + | 					for(var i=0;i<d_count;i++){				 | ||
| + | 						var num = i; | ||
| + | 						num_count++; | ||
| + | 						var forward = false; | ||
| + | 						if(opts.searchObjProps == "value") { | ||
| + | 							var str = data[num].value; | ||
| + | 						} else {	 | ||
| + | 							var str = ""; | ||
| + | 							var names = opts.searchObjProps.split(","); | ||
| + | 							for(var y=0;y<names.length;y++){ | ||
| + | 								var name = $.trim(names[y]); | ||
| + | 								str = str+data[num][name]+" "; | ||
| + | 							} | ||
| + | 						} | ||
| + | 						if(str){ | ||
| + | 							if (!opts.matchCase){ str = str.toLowerCase(); }				 | ||
| + | 							if(str.search(query) != -1 && values_input.val().search(","+data[num][opts.selectedValuesProp]+",") == -1){ | ||
| + | 								forward = true; | ||
| + | 							}	 | ||
| + | 						} | ||
| + | 						if(forward){ | ||
| + | 							var formatted = $('<li class="as-result-item" id="as-result-item-'+num+'"></li>').click(function(){ | ||
| + | 									var raw_data = $(this).data("data"); | ||
| + | 									var number = raw_data.num; | ||
| + | 									if($("#as-selection-"+number, selections_holder).length <= 0 && !tab_press){ | ||
| + | 										var data = raw_data.attributes; | ||
| + | 										input.val("").focus(); | ||
| + | 										prev = ""; | ||
| + | 										add_selected_item(data, number); | ||
| + | 										opts.resultClick.call(this, raw_data); | ||
| + | 										results_holder.hide(); | ||
| + | 									} | ||
| + | 									tab_press = false; | ||
| + | 								}).mousedown(function(){ input_focus = false; }).mouseover(function(){ | ||
| + | 									$("li", results_ul).removeClass("active"); | ||
| + | 									$(this).addClass("active"); | ||
| + | 								}).data("data",{attributes: data[num], num: num_count}); | ||
| + | 							var this_data = $.extend({},data[num]); | ||
| + | 							if (!opts.matchCase){  | ||
| + | 								var regx = new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + query + ")(?![^<>]*>)(?![^&;]+;)", "gi"); | ||
| + | 							} else { | ||
| + | 								var regx = new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + query + ")(?![^<>]*>)(?![^&;]+;)", "g"); | ||
| + | 							} | ||
| + | |||
| + | 							if(opts.resultsHighlight){ | ||
| + | 								this_data[opts.selectedItemProp] = this_data[opts.selectedItemProp].replace(regx,"<em>$1</em>"); | ||
| + | 							} | ||
| + | 							if(!opts.formatList){ | ||
| + | 								formatted = formatted.html(this_data[opts.selectedItemProp]); | ||
| + | 							} else { | ||
| + | 								formatted = opts.formatList.call(this, this_data, formatted);	 | ||
| + | 							} | ||
| + | 							results_ul.append(formatted); | ||
| + | 							delete this_data; | ||
| + | 							matchCount++; | ||
| + | 							if(opts.retrieveLimit && opts.retrieveLimit == matchCount ){ break; } | ||
| + | 						} | ||
| + | 					} | ||
| + | 					selections_holder.removeClass("loading"); | ||
| + | 					if(matchCount <= 0){ | ||
| + | 						results_ul.html('<li class="as-message">'+opts.emptyText+'</li>'); | ||
| + | 					} | ||
| + | 					results_ul.css("width", selections_holder.outerWidth()); | ||
| + | 					results_holder.show(); | ||
| + | 					opts.resultsComplete.call(this); | ||
| + | 				} | ||
| + | |||
| + | 				function add_selected_item(data, num){ | ||
| + | 					values_input.val(values_input.val()+data[opts.selectedValuesProp]+","); | ||
| + | 					var item = $('<li class="as-selection-item" id="as-selection-'+num+'"></li>').click(function(){ | ||
| + | 							opts.selectionClick.call(this, $(this)); | ||
| + | 							selections_holder.children().removeClass("selected"); | ||
| + | 							$(this).addClass("selected"); | ||
| + | 						}).mousedown(function(){ input_focus = false; }); | ||
| + | 					var close = $('<a class="as-close">×</a>').click(function(){ | ||
| + | 							values_input.val(values_input.val().replace(","+data[opts.selectedValuesProp]+",",",")); | ||
| + | 							opts.selectionRemoved.call(this, item); | ||
| + | 							input_focus = true; | ||
| + | 							input.focus(); | ||
| + | 							return false; | ||
| + | 						}); | ||
| + | 					org_li.before(item.html(data[opts.selectedItemProp]).prepend(close)); | ||
| + | 					opts.selectionAdded.call(this, org_li.prev());	 | ||
| + | 				} | ||
| + | |||
| + | 				function moveSelection(direction){ | ||
| + | 					if($(":visible",results_holder).length > 0){ | ||
| + | 						var lis = $("li", results_holder); | ||
| + | 						if(direction == "down"){ | ||
| + | 							var start = lis.eq(0); | ||
| + | 						} else { | ||
| + | 							var start = lis.filter(":last"); | ||
| + | 						}					 | ||
| + | 						var active = $("li.active:first", results_holder); | ||
| + | 						if(active.length > 0){ | ||
| + | 							if(direction == "down"){ | ||
| + | 							start = active.next(); | ||
| + | 							} else { | ||
| + | 								start = active.prev(); | ||
| + | 							}	 | ||
| + | 						} | ||
| + | 						lis.removeClass("active"); | ||
| + | 						start.addClass("active"); | ||
| + | 					} | ||
| + | 				} | ||
| + | |||
| + | 			}); | ||
| + | 		} | ||
| + | 	} | ||
| + | })(jQuery);  	 | ||
| + | |||
| + | |||
| + | |||
| + | |||
| jQuery( document ).ready( function( $ ) {   | jQuery( document ).ready( function( $ ) {   | ||
| − | |||
| $(function(){ | $(function(){ | ||
| − | + | //	$("input[type=text]").autoSuggest("https://wiki.baloogancampaign.com/search.php", {  | |
| − | 	$("input[ | + | 	$("input[id=bodySearchInput]").autoSuggest("https://wiki.baloogancampaign.com/search.php", {   | 
| 		resultClick: function(data){ | 		resultClick: function(data){ | ||
| 			window.location.href = data.attributes.name;    | 			window.location.href = data.attributes.name;    | ||
| Line 12: | Line 587: | ||
| 	}); | 	}); | ||
| }); | }); | ||
| − | + | ||
| + | $("img").error(function(){ | ||
| + |         $(this).hide(); | ||
| + | }); | ||
| + | |||
| }); | }); | ||
| − | + | ||
| /* Any JavaScript here will be loaded for users using the Vector skin */ | /* Any JavaScript here will be loaded for users using the Vector skin */ | ||
| Line 38: | Line 617: | ||
| document.getElementById('baloogan_image').onclick = handleClick; | document.getElementById('baloogan_image').onclick = handleClick; | ||
| − | |||
| − | |||
| − | |||
| − | |||
Latest revision as of 10:31, 17 August 2016
/**
 * Collapsible tables
 *
 * @version 2.0.1 (2013-03-26)
 * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js
 * @author [[User:R. Koot]]
 * @author [[User:Krinkle]]
 * @deprecated Since MediaWiki 1.20: Use class="mw-collapsible" instead which
 * is supported in MediaWiki core.
 */
 
var autoCollapse = 2;
var collapseCaption = 'hide';
var expandCaption = 'show';
 
function collapseTable( tableIndex ) {
	var Button = document.getElementById( 'collapseButton' + tableIndex );
	var Table = document.getElementById( 'collapsibleTable' + tableIndex );
 
	if ( !Table || !Button ) {
		return false;
	}
 
	var Rows = Table.rows;
 
	if ( Button.firstChild.data == collapseCaption ) {
		for ( var i = 1; i < Rows.length; i++ ) {
			Rows[i].style.display = 'none';
		}
		Button.firstChild.data = expandCaption;
	} else {
		for ( var i = 1; i < Rows.length; i++ ) {
			Rows[i].style.display = Rows[0].style.display;
		}
		Button.firstChild.data = collapseCaption;
	}
}
 
function createClickHandler( tableIndex ) {
	return function ( e ) {
		e.preventDefault();
		collapseTable( tableIndex );
	}
}
 
function createCollapseButtons() {
	var tableIndex = 0;
	var NavigationBoxes = {};
	var Tables = document.getElementsByTagName( 'table' );
 
	for ( var i = 0; i < Tables.length; i++ ) {
		if ( $( Tables[i] ).hasClass( 'collapsible' ) ) {
			/* only add button and increment count if there is a header row to work with */
			var HeaderRow = Tables[i].getElementsByTagName( 'tr' )[0];
			if ( !HeaderRow ) {
				continue;
			}
			var Header = HeaderRow.getElementsByTagName( 'th' )[0];
			if ( !Header ) {
				continue;
			}
 
			NavigationBoxes[tableIndex] = Tables[i];
			Tables[i].setAttribute( 'id', 'collapsibleTable' + tableIndex );
 
			var Button = document.createElement( 'span' );
			var ButtonLink = document.createElement( 'a' );
			var ButtonText = document.createTextNode( collapseCaption );
 
			Button.style.styleFloat = 'right';
			Button.style.cssFloat = 'right';
			Button.style.fontWeight = 'normal';
			Button.style.textAlign = 'right';
			Button.style.width = '6em';
 
			ButtonLink.style.color = Header.style.color;
			ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );
			$( ButtonLink ).on( 'click', createClickHandler( tableIndex ) );
			ButtonLink.appendChild( ButtonText );
 
			Button.appendChild( document.createTextNode( '[' ) );
			Button.appendChild( ButtonLink );
			Button.appendChild( document.createTextNode( ']' ) );
 
			Header.insertBefore( Button, Header.childNodes[0] );
			tableIndex++;
		}
	}
 
	for ( var i = 0; i < tableIndex; i++ ) {
		if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) ||
			( tableIndex >= autoCollapse && $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) )
		) {
			collapseTable( i );
		}
	}
}
 
$( createCollapseButtons );
/* Any JavaScript here will be loaded for all users on every page load. */
/**
 * Dynamic Navigation Bars. See [[Wikipedia:NavFrame]]
 * 
 * Based on script from en.wikipedia.org, 2008-09-15.
 *
 * @source www.mediawiki.org/wiki/MediaWiki:Gadget-NavFrame.js
 * @maintainer Helder.wiki, 2012–2013
 * @maintainer Krinkle, 2013
 */
( function () {
 
// Set up the words in your language
var collapseCaption = 'hide';
var expandCaption = 'show';
 
var navigationBarHide = '[' + collapseCaption + ']';
var navigationBarShow = '[' + expandCaption + ']';
 
/**
 * Shows and hides content and picture (if available) of navigation bars.
 *
 * @param {number} indexNavigationBar The index of navigation bar to be toggled
 * @param {jQuery.Event} e Event object
 */
function toggleNavigationBar( indexNavigationBar, e ) {
	var navChild,
		navToggle = document.getElementById( 'NavToggle' + indexNavigationBar ),
		navFrame = document.getElementById( 'NavFrame' + indexNavigationBar );
 
	// Prevent browser from jumping to href "#"
	e.preventDefault();
 
	if ( !navFrame || !navToggle ) {
		return false;
	}
 
	// If shown now
	if ( navToggle.firstChild.data == navigationBarHide ) {
		for ( navChild = navFrame.firstChild; navChild != null; navChild = navChild.nextSibling ) {
			if ( hasClass( navChild, 'NavPic' ) ) {
				navChild.style.display = 'none';
			}
			if ( hasClass( navChild, 'NavContent' ) ) {
				navChild.style.display = 'none';
			}
		}
		navToggle.firstChild.data = navigationBarShow;
 
	// If hidden now
	} else if ( navToggle.firstChild.data == navigationBarShow ) {
		for ( navChild = navFrame.firstChild; navChild != null; navChild = navChild.nextSibling ) {
			if ( $( navChild ).hasClass( 'NavPic' ) || $( navChild ).hasClass( 'NavContent' ) ) {
				navChild.style.display = 'block';
			}
		}
		navToggle.firstChild.data = navigationBarHide;
	}
}
 
/**
 * Adds show/hide-button to navigation bars.
 *
 * @param {jQuery} $content
 */
function createNavigationBarToggleButton( $content ) {
	var i, j, navFrame, navToggle, navToggleText, navChild,
		indexNavigationBar = 0,
		navFrames = $content.find( 'div.NavFrame' ).toArray();
 
	// Iterate over all (new) nav frames
	for ( i = 0; i < navFrames.length; i++ ) {
		navFrame = navFrames[i];
		// If found a navigation bar
		indexNavigationBar++;
		navToggle = document.createElement( 'a' );
		navToggle.className = 'NavToggle';
		navToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar );
		navToggle.setAttribute( 'href', '#' );
		$( navToggle ).on( 'click', $.proxy( toggleNavigationBar, null, indexNavigationBar ) );
 
		navToggleText = document.createTextNode( navigationBarHide );
		for ( navChild = navFrame.firstChild; navChild != null; navChild = navChild.nextSibling ) {
			if ( $( navChild ).hasClass( 'NavPic' ) || $( navChild ).hasClass( 'NavContent' ) ) {
				if ( navChild.style.display == 'none' ) {
					navToggleText = document.createTextNode( navigationBarShow );
					break;
				}
			}
		}
 
		navToggle.appendChild( navToggleText );
		// Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked)
		for ( j = 0; j < navFrame.childNodes.length; j++ ) {
			if ( $( navFrame.childNodes[j] ).hasClass( 'NavHead' ) ) {
				navFrame.childNodes[j].appendChild( navToggle );
			}
		}
		navFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar );
	}
}
 
mw.hook( 'wikipage.content' ).add( createNavigationBarToggleButton );
 
}());
 /*
 * AutoSuggest
 * Copyright 2009-2010 Drew Wilson
 * www.drewwilson.com
 * code.drewwilson.com/entry/autosuggest-jquery-plugin
 *
 * Version 1.4   -   Updated: Mar. 23, 2010
 *
 * This Plug-In will auto-complete or auto-suggest completed search queries
 * for you as you type. You can add multiple selections and remove them on
 * the fly. It supports keybord navigation (UP + DOWN + RETURN), as well
 * as multiple AutoSuggest fields on the same page.
 *
 * Inspied by the Autocomplete plugin by: Jšrn Zaefferer
 * and the Facelist plugin by: Ian Tearle (iantearle.com)
 *
 * This AutoSuggest jQuery plug-in is dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 */
(function($){
	$.fn.autoSuggest = function(data, options) {
		var defaults = { 
			asHtmlID: false,
			startText: "Database Search...",
			emptyText: "No Results Found",
			preFill: {},
			limitText: "No More Selections Are Allowed",
			selectedItemProp: "value", //name of object property
			selectedValuesProp: "value", //name of object property
			searchObjProps: "value", //comma separated list of object property names
			queryParam: "q",
			retrieveLimit: false, //number for 'limit' param on ajax request
			extraParams: "",
			matchCase: false,
			minChars: 3,
			keyDelay: 400,
			resultsHighlight: true,
			neverSubmit: true,
			selectionLimit: false,
			showResultList: true,
		  	start: function(){},
		  	selectionClick: function(elem){},
		  	selectionAdded: function(elem){},
		  	selectionRemoved: function(elem){ elem.remove(); },
		  	formatList: false, //callback function
		  	beforeRetrieve: function(string){ return string; },
		  	retrieveComplete: function(data){ return data; },
		  	resultClick: function(data){},
		  	resultsComplete: function(){}
	  	};  
	 	var opts = $.extend(defaults, options);	 	
		
		var d_type = "object";
		var d_count = 0;
		if(typeof data == "string") {
			d_type = "string";
			var req_string = data;
		} else {
			var org_data = data;
			for (k in data) if (data.hasOwnProperty(k)) d_count++;
		}
		if((d_type == "object" && d_count > 0) || d_type == "string"){
			return this.each(function(x){
				if(!opts.asHtmlID){
					x = x+""+Math.floor(Math.random()*100); //this ensures there will be unique IDs on the page if autoSuggest() is called multiple times
					var x_id = "as-input-"+x;
				} else {
					x = opts.asHtmlID;
					var x_id = x;
				}
				opts.start.call(this);
				var input = $(this);
				input.attr("autocomplete","off").addClass("as-input").attr("id",x_id).val(opts.startText);
				var input_focus = false;
				
				// Setup basic elements and render them to the DOM
				input.wrap('<ul class="as-selections" id="as-selections-'+x+'"></ul>').wrap('<li class="as-original" id="as-original-'+x+'"></li>');
				var selections_holder = $("#as-selections-"+x);
				var org_li = $("#as-original-"+x);				
				var results_holder = $('<div class="as-results" id="as-results-'+x+'"></div>').hide();
				var results_ul =  $('<ul class="as-list"></ul>');
				var values_input = $('<input type="hidden" class="as-values" name="as_values_'+x+'" id="as-values-'+x+'" />');
				var prefill_value = "";
				if(typeof opts.preFill == "string"){
					var vals = opts.preFill.split(",");					
					for(var i=0; i < vals.length; i++){
						var v_data = {};
						v_data[opts.selectedValuesProp] = vals[i];
						if(vals[i] != ""){
							add_selected_item(v_data, "000"+i);	
						}		
					}
					prefill_value = opts.preFill;
				} else {
					prefill_value = "";
					var prefill_count = 0;
					for (k in opts.preFill) if (opts.preFill.hasOwnProperty(k)) prefill_count++;
					if(prefill_count > 0){
						for(var i=0; i < prefill_count; i++){
							var new_v = opts.preFill[i][opts.selectedValuesProp];
							if(new_v == undefined){ new_v = ""; }
							prefill_value = prefill_value+new_v+",";
							if(new_v != ""){
								add_selected_item(opts.preFill[i], "000"+i);	
							}		
						}
					}
				}
				if(prefill_value != ""){
					input.val("");
					var lastChar = prefill_value.substring(prefill_value.length-1);
					if(lastChar != ","){ prefill_value = prefill_value+","; }
					values_input.val(","+prefill_value);
					$("li.as-selection-item", selections_holder).addClass("blur").removeClass("selected");
				}
				input.after(values_input);
				selections_holder.click(function(){
					input_focus = true;
					input.focus();
				}).mousedown(function(){ input_focus = false; }).after(results_holder);	
				var timeout = null;
				var prev = "";
				var totalSelections = 0;
				var tab_press = false;
				
				// Handle input field events
				input.focus(function(){			
					if($(this).val() == opts.startText && values_input.val() == ""){
						$(this).val("");
					} else if(input_focus){
						$("li.as-selection-item", selections_holder).removeClass("blur");
						if($(this).val() != ""){
							results_ul.css("width",selections_holder.outerWidth());
							results_holder.show();
						}
					}
					input_focus = true;
					return true;
				}).blur(function(){
					if($(this).val() == "" && values_input.val() == "" && prefill_value == ""){
						$(this).val(opts.startText);
					} else if(input_focus){
						$("li.as-selection-item", selections_holder).addClass("blur").removeClass("selected");
						results_holder.hide();
					}				
				}).keydown(function(e) {
					// track last key pressed
					lastKeyPressCode = e.keyCode;
					first_focus = false;
					switch(e.keyCode) {
						case 38: // up
							e.preventDefault();
							moveSelection("up");
							break;
						case 40: // down
							e.preventDefault();
							moveSelection("down");
							break;
						case 8:  // delete
							if(input.val() == ""){							
								var last = values_input.val().split(",");
								last = last[last.length - 2];
								selections_holder.children().not(org_li.prev()).removeClass("selected");
								if(org_li.prev().hasClass("selected")){
									values_input.val(values_input.val().replace(","+last+",",","));
									opts.selectionRemoved.call(this, org_li.prev());
								} else {
									opts.selectionClick.call(this, org_li.prev());
									org_li.prev().addClass("selected");		
								}
							}
							if(input.val().length == 1){
								results_holder.hide();
								 prev = "";
							}
							if($(":visible",results_holder).length > 0){
								if (timeout){ clearTimeout(timeout); }
								timeout = setTimeout(function(){ keyChange(); }, opts.keyDelay);
							}
							break;
						case 9: case 188:  // tab or comma
							tab_press = true;
							var i_input = input.val().replace(/(,)/g, "");
							if(i_input != "" && values_input.val().search(","+i_input+",") < 0 && i_input.length >= opts.minChars){	
								e.preventDefault();
								var n_data = {};
								n_data[opts.selectedItemProp] = i_input;
								n_data[opts.selectedValuesProp] = i_input;																				
								var lis = $("li", selections_holder).length;
								add_selected_item(n_data, "00"+(lis+1));
								input.val("");
							}
						case 13: // return
							tab_press = false;
							var active = $("li.active:first", results_holder);
							if(active.length > 0){
								active.click();
								results_holder.hide();
							}
							if(opts.neverSubmit || active.length > 0){
								e.preventDefault();
							}
							break;
						default:
							if(opts.showResultList){
								if(opts.selectionLimit && $("li.as-selection-item", selections_holder).length >= opts.selectionLimit){
									results_ul.html('<li class="as-message">'+opts.limitText+'</li>');
									results_holder.show();
								} else {
									if (timeout){ clearTimeout(timeout); }
									timeout = setTimeout(function(){ keyChange(); }, opts.keyDelay);
								}
							}
							break;
					}
				});
				
				function keyChange() {
					// ignore if the following keys are pressed: [del] [shift] [capslock]
					if( lastKeyPressCode == 46 || (lastKeyPressCode > 8 && lastKeyPressCode < 32) ){ return results_holder.hide(); }
					var string = input.val().replace(/[\\]+|[\/]+/g,"");
					if (string == prev) return;
					prev = string;
					if (string.length >= opts.minChars) {
						selections_holder.addClass("loading");
						if(d_type == "string"){
							var limit = "";
							if(opts.retrieveLimit){
								limit = "&limit="+encodeURIComponent(opts.retrieveLimit);
							}
							if(opts.beforeRetrieve){
								string = opts.beforeRetrieve.call(this, string);
							}
							$.getJSON(req_string+"?"+opts.queryParam+"="+encodeURIComponent(string)+limit+opts.extraParams, function(data){ 
								d_count = 0;
								var new_data = opts.retrieveComplete.call(this, data);
								for (k in new_data) if (new_data.hasOwnProperty(k)) d_count++;
								processData(new_data, string); 
							});
						} else {
							if(opts.beforeRetrieve){
								string = opts.beforeRetrieve.call(this, string);
							}
							processData(org_data, string);
						}
					} else {
						selections_holder.removeClass("loading");
						results_holder.hide();
					}
				}
				var num_count = 0;
				function processData(data, query){
					if (!opts.matchCase){ query = query.toLowerCase(); }
					var matchCount = 0;
					results_holder.html(results_ul.html("")).hide();
					for(var i=0;i<d_count;i++){				
						var num = i;
						num_count++;
						var forward = false;
						if(opts.searchObjProps == "value") {
							var str = data[num].value;
						} else {	
							var str = "";
							var names = opts.searchObjProps.split(",");
							for(var y=0;y<names.length;y++){
								var name = $.trim(names[y]);
								str = str+data[num][name]+" ";
							}
						}
						if(str){
							if (!opts.matchCase){ str = str.toLowerCase(); }				
							if(str.search(query) != -1 && values_input.val().search(","+data[num][opts.selectedValuesProp]+",") == -1){
								forward = true;
							}	
						}
						if(forward){
							var formatted = $('<li class="as-result-item" id="as-result-item-'+num+'"></li>').click(function(){
									var raw_data = $(this).data("data");
									var number = raw_data.num;
									if($("#as-selection-"+number, selections_holder).length <= 0 && !tab_press){
										var data = raw_data.attributes;
										input.val("").focus();
										prev = "";
										add_selected_item(data, number);
										opts.resultClick.call(this, raw_data);
										results_holder.hide();
									}
									tab_press = false;
								}).mousedown(function(){ input_focus = false; }).mouseover(function(){
									$("li", results_ul).removeClass("active");
									$(this).addClass("active");
								}).data("data",{attributes: data[num], num: num_count});
							var this_data = $.extend({},data[num]);
							if (!opts.matchCase){ 
								var regx = new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + query + ")(?![^<>]*>)(?![^&;]+;)", "gi");
							} else {
								var regx = new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + query + ")(?![^<>]*>)(?![^&;]+;)", "g");
							}
							
							if(opts.resultsHighlight){
								this_data[opts.selectedItemProp] = this_data[opts.selectedItemProp].replace(regx,"<em>$1</em>");
							}
							if(!opts.formatList){
								formatted = formatted.html(this_data[opts.selectedItemProp]);
							} else {
								formatted = opts.formatList.call(this, this_data, formatted);	
							}
							results_ul.append(formatted);
							delete this_data;
							matchCount++;
							if(opts.retrieveLimit && opts.retrieveLimit == matchCount ){ break; }
						}
					}
					selections_holder.removeClass("loading");
					if(matchCount <= 0){
						results_ul.html('<li class="as-message">'+opts.emptyText+'</li>');
					}
					results_ul.css("width", selections_holder.outerWidth());
					results_holder.show();
					opts.resultsComplete.call(this);
				}
				
				function add_selected_item(data, num){
					values_input.val(values_input.val()+data[opts.selectedValuesProp]+",");
					var item = $('<li class="as-selection-item" id="as-selection-'+num+'"></li>').click(function(){
							opts.selectionClick.call(this, $(this));
							selections_holder.children().removeClass("selected");
							$(this).addClass("selected");
						}).mousedown(function(){ input_focus = false; });
					var close = $('<a class="as-close">×</a>').click(function(){
							values_input.val(values_input.val().replace(","+data[opts.selectedValuesProp]+",",","));
							opts.selectionRemoved.call(this, item);
							input_focus = true;
							input.focus();
							return false;
						});
					org_li.before(item.html(data[opts.selectedItemProp]).prepend(close));
					opts.selectionAdded.call(this, org_li.prev());	
				}
				
				function moveSelection(direction){
					if($(":visible",results_holder).length > 0){
						var lis = $("li", results_holder);
						if(direction == "down"){
							var start = lis.eq(0);
						} else {
							var start = lis.filter(":last");
						}					
						var active = $("li.active:first", results_holder);
						if(active.length > 0){
							if(direction == "down"){
							start = active.next();
							} else {
								start = active.prev();
							}	
						}
						lis.removeClass("active");
						start.addClass("active");
					}
				}
									
			});
		}
	}
})(jQuery);  	
jQuery( document ).ready( function( $ ) { 
$(function(){
//	$("input[type=text]").autoSuggest("https://wiki.baloogancampaign.com/search.php", { 
	$("input[id=bodySearchInput]").autoSuggest("https://wiki.baloogancampaign.com/search.php", { 
		resultClick: function(data){
			window.location.href = data.attributes.name;  
//			console.log(data); 
		}
	});
});
$("img").error(function(){
        $(this).hide();
});
});
/* Any JavaScript here will be loaded for users using the Vector skin */
function handleClick()
{
           try{ TOGGLEA=(TOGGLEA % 2)}catch(e){
              TOGGLEA=0;
           }; // initialize TOGGLEA, HOLDX, and HOLDY
           switch(TOGGLEA){
           case 0: // this makes it four times as big as it was originally
//                   document.getElementById('baloogan_image').setAttribute('width' ,HOLDX*4);
document.getElementById('baloogan_image').className = "baloogan_big_image";
           break;
           case 1: // this sets to a original size
//                   document.getElementById('baloogan_image').setAttribute('width' ,HOLDX);
document.getElementById('baloogan_image').className = "baloogan_small_image";
           break;
           }
           TOGGLEA++;
}
document.getElementById('baloogan_image').onclick = handleClick;

