var JaS = {
	// Customization parameters
	imagePath : "",
	images : [
["welcome.gif","SDU screenshots<br>The welcome form which informs you when an update is available.<br>The update function is located under the Help menu<br><font style='font-size:9px'><i>FileInfo: welcome.gif, 11-08-2011 11:27:43</i></font>", ""],

["main_locked.gif","SDU screenshots<br>The main form. Note that Edit is disabled and that the database is downloaded from the website. Enabeling Edit also activates the Weblock in order to prevent other users from editing the same database.<br><font style='font-size:9px'><i>FileInfo: main_locked.gif, 11-08-2011 11:54:16</i></font>", ""],	
["main_file.gif","SDU screenshots<br>The main form with the File menu unfolded.<br>The menu item: Create New Database is explained in three separate screens at the end of this slideshow.<br><font style='font-size:9px'><i>FileInfo: main_file.gif, 11-08-2011 11:53:46</i></font>", ""],
["main_list.gif","SDU screenshots<br>The main form with the List menu unfolded.<br><font style='font-size:9px'><i>FileInfo: main_list.gif, 11-08-2011 11:53:20</i></font>", ""],
["main_tools.gif","SDU screenshots<br>The main form with the Tools menu unfolded.<br><font style='font-size:9px'><i>FileInfo: main_tools.gif, 11-08-2011 11:52:46</i></font>", ""],
["main_databases.gif","SDU screenshots<br>The main form with the Databases menu unfolded.<br><font style='font-size:9px'><i>FileInfo: main_databases.gif, 11-08-2011 11:50:34</i></font>", ""],
["main_help.gif","SDU screenshots<br>The main form with the Help menu unfolded.<br><font style='font-size:9px'><i>FileInfo: main_help.gif, 11-08-2011 11:50:09</i></font>", ""],

["main_compose_list.gif","SDU screenshots<br>This form is used to compose/create user defined record lists.<br>The list is displayed in a separate form including an option to export the list to an Excel spreadsheet as shown on the following screen.<br><font style='font-size:9px'><i>FileInfo: main_compose_list.gif, 11-08-2011 11:49:42</i></font>", ""],
["main_record_list.gif","SDU screenshots<br><font style='font-size:9px'><i>FileInfo: main_record_list.gif, 11-08-2011 11:29:11</i></font>", ""],
["main_search_results.gif","SDU screenshots<br><font style='font-size:9px'><i>FileInfo: main_search_results.gif, 11-08-2011 11:48:40</i></font>", ""],

["configurations_logfile.gif","SDU screenshots<br>The program log file is located on the configuration form and records some of the key operations performed by the user.<br><font style='font-size:9px'><i>FileInfo: configurations_logfile.gif, 11-08-2011 11:38:29</i></font>", ""],
["configurations_titles.gif","SDU screenshots<br>This and the following 11 screens describe how various aspects of the database layout can be configured<br><font style='font-size:9px'><i>FileInfo: configurations_titles.gif, 11-08-2011 11:38:05</i></font>", ""],
["configurations_images.gif","SDU screenshots<br><font style='font-size:9px'><i>FileInfo: configurations_images.gif, 11-08-2011 11:37:43</i></font>", ""],
["title_images.gif","SDU screenshots<br>Select one of the nine different images to personalise your database.<br>If you do not like any of the images you can make your own. Make sure that the format is gif and the size (WxH) is 360 x 270 px.<br><font style='font-size:9px'><i>FileInfo: title_images.gif, 11-08-2011 11:37:43</i></font>", ""],

["configurations_name.gif","SDU screenshots<br>Entering section titles and field names for the database fields.<br><font style='font-size:9px'><i>FileInfo: configurations_name.gif, 11-08-2011 11:36:21</i></font>", ""],
["configurations_address.gif","SDU screenshots<br>Entering section titles and field names for the database fields.<br><font style='font-size:9px'><i>FileInfo: configurations_address.gif, 11-08-2011 11:36:00</i></font>", ""],
["configurations_phone.gif","SDU screenshots<br>Entering section titles and field names for the database fields.<br><font style='font-size:9px'><i>FileInfo: configurations_phone.gif, 11-08-2011 11:35:37</i></font>", ""],
["configurations_electronic.gif","SDU screenshots<br>Entering section titles and field names for the database fields.<br>Note that the two fields intended for email addresses and the two for homepages are associated with your mail and browser programs respectively.<br><font style='font-size:9px'><i>FileInfo: configurations_electronic.gif, 11-08-2011 11:35:16</i></font>", ""],
["configurations_personal.gif","SDU screenshots<br>Entering section titles and field names for the database fields.<br><font style='font-size:9px'><i>FileInfo: configurations_personal.gif, 11-08-2011 11:34:52</i></font>", ""],
["configurations_customers.gif","SDU screenshots<br>Entering section titles and field names for the database fields.<br><font style='font-size:9px'><i>FileInfo: configurations_customers.gif, 11-08-2011 11:34:14</i></font>", ""],
["configurations_comments.gif","SDU screenshots<br>Entering section titles and field names for the database fields.<br><font style='font-size:9px'><i>FileInfo: configurations_comments.gif, 11-08-2011 11:33:45</i></font>", ""],

["configurations_keywords_inf.gif","SDU screenshots<br>A short description of keyword usage<br><font style='font-size:9px'><i>FileInfo: configurations_keywords_inf.gif, 11-08-2011 11:37:00</i></font>", ""],
["configurations_keywords.gif","SDU screenshots<br>Please note that keyword 1 and 2 are associated with the two last text field groups. Unless keyword 1 and/or 2 are checked the two corresponding groups will be disabled when creating new records. Also note that you set the default keyword for new records on this tab.<br><font style='font-size:9px'><i>FileInfo: configurations_keywords.gif, 11-08-2011 11:32:40</i></font>", ""],

["advanced_functions.gif","SDU screenshots<br><font style='font-size:9px'><i>FileInfo: advanced_functions.gif, 11-08-2011 11:32:01</i></font>", ""],
["advanced_administrator.gif","SDU screenshots<br><font style='font-size:9px'><i>FileInfo: advanced_administrator.gif, 11-08-2011 12:18:57</i></font>", ""],
["advanced_upload.gif","SDU screenshots<br><font style='font-size:9px'><i>FileInfo: advanced_upload.gif, 11-08-2011 12:18:44</i></font>", ""],
["advanced_duplicates.gif","SDU screenshots<br><font style='font-size:9px'><i>FileInfo: advanced_duplicates.gif, 11-08-2011 11:30:41</i></font>", ""],
["advanced_incomplete.gif","SDU screenshots<br><font style='font-size:9px'><i>FileInfo: advanced_incomplete.gif, 11-08-2011 11:30:06</i></font>", ""],
["advanced_disaster.gif","SDU screenshots<br><font style='font-size:9px'><i>FileInfo: advanced_disaster.gif, 11-08-2011 11:29:38</i></font>", ""],

["new_version_check.gif","SDU screenshots<br><font style='font-size:9px'><i>FileInfo: new_version_check.gif, 11-08-2011 11:28:18</i></font>", ""],

["new_db_instruction.gif","SDU screenshots<br><font style='font-size:9px'><i>FileInfo: new_db_instruction.gif, 11-08-2011 11:40:25</i></font>", ""],
["new_db_settings.gif","SDU screenshots<br><font style='font-size:9px'><i>FileInfo: new_db_settings.gif, 11-08-2011 11:39:55</i></font>", ""],
["new_db_templates.gif","SDU screenshots<br><font style='font-size:9px'><i>FileInfo: new_db_templates.gif, 11-08-2011 11:39:20</i></font>", ""]
],
	fadewrapperId : "jas-wrapper",
	imagewrapperId : "jas-image",
	imageTextwrapperId : "jas-image-text",
	previousLinkId : "previous-image",
	nextLinkId : "next-image",
	imageCounterId : "image-counter",
	startSlideShowId : "start-slideshow",
	stopSlideShowId : "stop-slideshow",	
	dimBackgroundOverlayId : "jas-dim-overlay",
	dimBackgroundId : "dim-background",
	noDimBackgroundId : "no-dim-background",
	thumbnailwrapperId: "jas-thumbnails",
	tagswrapperId: "jas-tags",
	tagsSelectAllId: "jas-select-all-tags",
	useImageText : true,
	useThumbnails : true,
	allowDimmedBackground : true,
	automaticallyDimBackgroundWhenSlideShow : true,
	useTags : true,
	useKeyboardShortcuts : true,	
	useFadingIn : true,
	useFadingOut : true,
	useFadeWhenNotSlideshow : false,
	useFadeForSlideshow : true,
	useFadeAtInitialLoad : false,
	fadeIncrement : 0.1,	
	fadeInterval : 100, // Milliseconds	
	timeForSlideInSlideshow : 1500, // Milliseconds	
	
	// JaS function parameters
	allImages : null,
	currentImages : null,
	fadewrapper : null,
	imagewrapper : null,
	imageTextwrapper : null,
	previousLink : null,
	nextLink : null,
	dimBackgroundOverlay : null,
	dimBackgroundLink : null,
	noDimBackgroundLink : null,
	dimmingActivated : false,
	imageCounter : null,
	startSlideShowLink : null,
	stopSlideShowLink : null,
	thumbnailwrapper : null,
	thumbnailCollection : [],
	currentThumbnailSelected : null,
	tagswrapper : null,
	tagsSelectAll : null,
	tagsList : null,
	tags : [],
	tagsCheckboxes : [],
	selectAllTags : true,
	imageText : null,
	imageText : "",
	imageSource : "",
	imageIndex : 0,
	fadingIn : true,
	fadeLevel : 0,
	fadeEndLevel : 1,
	fadeTimer : null,
	hasOpacitySupport : false,
	useMSFilter : false,
	useMSCurrentStyle : false,
	slideshowIsSupported : false,
	slideshowIsPlaying : false,
	functionAfterFade : null,
	isInitialLoad : false,
	
	init : function (){
    	if($){
			this.fadewrapper = $(this.fadewrapperId);
			this.imagewrapper = $(this.imagewrapperId);
			this.slideshowIsSupported = this.fadewrapper && this.imagewrapper;
			if(this.slideshowIsSupported){
				this.allImages = this.images;
				this.currentImages = this.images;
				if(this.useImageText){
					this.imageTextwrapper = $(this.imageTextwrapperId);
					if(!this.imageTextwrapper){
						this.useImageText = false;
					}
				}
				this.hasOpacitySupport = typeof this.fadewrapper.style.filter != "undefined" || typeof this.fadewrapper.style.opacity != "undefined";
				this.useMSFilter = typeof this.fadewrapper.style.filter != "undefined";
				this.useMSCurrentStyle = typeof this.fadewrapper.currentStyle != "undefined";
				
				this.previousLink = $(this.previousLinkId);
				this.previousLink.onclick = JaS.previousLinkClick;
				this.nextLink = $(this.nextLinkId);
				this.nextLink.onclick = JaS.nextLinkClick;
				this.imageCounter = $(this.imageCounterId);
				this.startSlideShowLink = $(this.startSlideShowId);
				if(this.startSlideShowLink){
					this.startSlideShowLink.style.display = "inline";
				}
				this.startSlideShowLink.onclick = JaS.startSlideShowClick;
				this.stopSlideShowLink = $(this.stopSlideShowId);
				if(this.stopSlideShowLink){
					this.stopSlideShowLink.style.display = "none";
				}
				this.stopSlideShowLink.onclick = JaS.stopSlideshowClick;
				
				if(this.allowDimmedBackground){
					this.dimBackgroundOverlay = $(this.dimBackgroundOverlayId);
					this.dimBackgroundLink = $(this.dimBackgroundId);
					this.noDimBackgroundLink = $(this.noDimBackgroundId);
					if(this.dimBackgroundOverlay && this.dimBackgroundLink && this.noDimBackgroundLink){
						this.dimBackgroundLink.onclick = JaS.dimBackgroundClick;
						this.noDimBackgroundLink.onclick = JaS.noDimackgroundClick;
						this.noDimBackgroundLink.style.display = "none";
						this.dimmingActivated = true;
					}
				}
				
				if(this.useKeyboardShortcuts){
					document.onkeydown = JaS.documentKeyDown;
				}
				
				this.thumbnailwrapper = $(this.thumbnailwrapperId);
				if(this.useThumbnails && this.thumbnailwrapper){
					this.createThumbnails();
				}
				
				this.tagswrapper = $(this.tagswrapperId);
				if(this.useTags && this.tagswrapper){
					this.tagsSelectAll = $(this.tagsSelectAllId);
					if(this.tagsSelectAll){
						this.tagsSelectAll.onclick = JaS.tagsSelectAllClick;
						this.createTagList();
					}
				}
				
				this.isInitialLoad = true;
				this.setImage();
				this.isInitialLoad = false;
			}
		}
	},
	
	previousLinkClick : function(oEvent){
		var oEvent = (typeof oEvent != "undefined")? oEvent : event;
		JaS.preventDefaultEventBehavior(oEvent);
		JaS.previousImage();
	},
	
	nextLinkClick : function(oEvent){
		var oEvent = (typeof oEvent != "undefined")? oEvent : event;
		JaS.preventDefaultEventBehavior(oEvent);
		JaS.nextImage();
	},
	
	startSlideShowClick : function(oEvent){
		var oEvent = (typeof oEvent != "undefined")? oEvent : event;
		JaS.preventDefaultEventBehavior(oEvent);
		JaS.startSlideshow();
	},
	
	stopSlideshowClick : function(oEvent){
		var oEvent = (typeof oEvent != "undefined")? oEvent : event;
		JaS.preventDefaultEventBehavior(oEvent);
		JaS.stopSlideshow();
	},
	
	dimBackgroundClick : function(oEvent){
		var oEvent = (typeof oEvent != "undefined")? oEvent : event;
		JaS.preventDefaultEventBehavior(oEvent);
		JaS.dimBackground();
	},
	
	documentKeyDown : function(oEvent){
		var oEvent = (typeof oEvent != "undefined")? oEvent : event;
		JaS.applyKeyboardNavigation(oEvent);
	},
	
	tagsSelectAllClick : function (oEvent){
		JaS.tagsSelectAll = this.checked;
		JaS.markAllTags();
	},
	
	noDimackgroundClick : function(oEvent){
		var oEvent = (typeof oEvent != "undefined")? oEvent : event;
		JaS.preventDefaultEventBehavior(oEvent);
		JaS.noDimBackground();
	},
	
	setImage : function (){
		if(this.currentImages.length > 0){
			this.imagewrapper.style.visibility = "visible";
			this.imageSource = this.currentImages[this.imageIndex][0];
			this.imageText = this.currentImages[this.imageIndex][1];
			if(this.useFadingOut && (this.slideshowIsPlaying && this.useFadeForSlideshow) || (!this.slideshowIsPlaying && this.useFadeWhenNotSlideshow) && (this.useFadeAtInitialLoad && this.isInitialLoad || !this.isInitialLoad)){
				this.fadeOut();
			}
			else{
				this.displayImageCount();
				this.imagewrapper.setAttribute("src", (this.imagePath + this.imageSource));
				this.setImageText();
				this.previousLink.style.visibility = (this.imageIndex > 0)? "visible" : "hidden";
				this.nextLink.style.visibility = (this.imageIndex < (this.currentImages.length - 1))? "visible" : "hidden";
				if((this.useFadeAtInitialLoad && this.isInitialLoad || !this.isInitialLoad) && ((this.slideshowIsPlaying && this.useFadeForSlideshow) || (!this.slideshowIsPlaying && this.useFadeWhenNotSlideshow))){
					this.fadeIn();
				}
			}
			if(this.useThumbnails){
				this.markCurrentThumbnail();
			}
		}
		else{
			this.imageSource = "";
			this.imageText = "";
			this.displayImageCount();
			this.imagewrapper.style.visibility = "hidden";
			this.setImageText();
		}
	},
	
	displayImageCount : function (){
    	if(this.imageCounter){
			this.imageCounter.innerHTML = (((this.currentImages.length > 0)? this.imageIndex : -1) + 1) + " / " + this.currentImages.length;
		}
	},
	
	nextImage : function (){
		if(this.imageIndex < (this.currentImages.length - 1)){
			++this.imageIndex;
			this.setImage();
		}
		else if(this.slideshowIsPlaying){
			this.stopSlideshow();
			this.imageIndex = 0;
			this.setImage();
		}
	},
	
	previousImage : function (){
		if(this.imageIndex > 0){
			--this.imageIndex;
			this.setImage();
		}         
	},

	setImageText : function (){
		this.imageTextwrapper.setAttribute("alt", this.imageText);
    	if(this.useImageText && typeof this.imageText == "string"){
			this.imageTextwrapper.innerHTML = this.imageText;
		}
	},
	
	setDimBackgroundSize : function(){
         var oDimBackground = this.dimBackgroundOverlay.style;
         var intWidth = document.body.offsetWidth;
         var intXScroll = (typeof window.pageXOffset != "undefined")? window.pageXOffset : document.body.scrollLeft;
         var intHeight = (typeof window.innerHeight != "undefined")? window.innerHeight : (document.documentElement)? document.documentElement.clientHeight : document.body.clientHeight;
         var intYScroll = (typeof window.window.pageYOffset != "undefined")? window.window.pageYOffset : (document.documentElement)? document.documentElement.scrollTop : document.documentElement.scrollTop;
         oDimBackground.width = intWidth + intXScroll + "px";
         oDimBackground.height = intHeight + intYScroll + "px";
	},
	
	dimBackground : function (){
         this.setDimBackgroundSize();
         this.dimBackgroundOverlay.style.display = "block";
		 this.noDimBackgroundLink.style.display = "inline";		
	},
	
	noDimBackground : function (fromStopSlideshow){
		this.dimBackgroundOverlay.style.display = "none";
		this.noDimBackgroundLink.style.display = "none";
		if(!fromStopSlideshow){
			this.stopSlideshow();
		}
	},
		
	startSlideshow : function (){
		if(this.currentImages.length > 0){
			this.startSlideShowLink.style.display = "none";
			this.stopSlideShowLink.style.display = "inline";
			this.slideshowIsPlaying = true;
			this.fadeTimer = setTimeout("JaS.nextImage()", JaS.timeForSlideInSlideshow);
			if(this.dimmingActivated  && this.automaticallyDimBackgroundWhenSlideShow){
				this.dimBackground();
			}
		}
	},
	
	stopSlideshow : function (){
		if(this.currentImages.length > 0){
			this.startSlideShowLink.style.display = "inline";
			this.stopSlideShowLink.style.display = "none";
			this.slideshowIsPlaying = false;
			this.setFadeParams(false, 1, 0);
			this.setFade();
			clearTimeout(this.fadeTimer);
			if(this.dimmingActivated && this.automaticallyDimBackgroundWhenSlideShow){
				this.noDimBackground(true);
			}
		}
	},
	
	fadeIn : function (){
		this.setFadeParams(true, 0, 1);
		this.functionAfterFade = null;
		this.fade();
		if(this.slideshowIsPlaying){
			this.functionAfterFade = "this.startSlideshow()";
		}
	},
	
	fadeOut : function (){
		this.setFadeParams(false, 1, 0);
		this.functionAfterFade = "this.fadeOutDone()";
		this.fade();
	},
	
	fadeOutDone : function (){
        this.displayImageCount();
		this.imagewrapper.setAttribute("src", (this.imagePath + this.imageSource));
		this.setImageText();
		if(this.useFadingIn){
			this.fadeIn();
		}
		else{
			this.fadeLevel = 1;
			this.setFade();
		}
	},
	
	fade : function (){
		if((this.fadingIn && this.fadeLevel < this.fadeEndLevel) || !this.fadingIn && this.fadeLevel > this.fadeEndLevel){
			this.fadeLevel = (this.fadingIn)? this.fadeLevel + this.fadeIncrement : this.fadeLevel - this.fadeIncrement;
			// This line is b/c of a floating point bug in JavaScript
			this.fadeLevel = Math.round(this.fadeLevel * 10) / 10;
			this.setFade();
			this.fadeTimer = setTimeout("JaS.fade()", this.fadeInterval);
		}
		else{
			clearTimeout(this.fadeTimer);
			if(this.functionAfterFade){
				eval(this.functionAfterFade);
			}
		}
	},
	
	setFade : function (){
		if(this.useMSFilter){
			this.fadewrapper.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=" + (this.fadeLevel * 100) + ")";
		}
		else{
			this.fadewrapper.style.opacity = this.fadeLevel;
		}
	},
	
	setFadeParams : function (bFadingIn, intStartLevel, intEndLevel){
		this.fadingIn = bFadingIn;
		this.fadeLevel = intStartLevel;
		this.fadeEndLevel = intEndLevel;
	},
	
	createThumbnails : function (){
		this.thumbnailwrapper.innerHTML = "";
		this.thumbnailCollection = [];
    	var oThumbnailsList = document.createElement("ul");
		var oListItem;
		var oThumbnail;
		var oCurrentImage;
		for(var i=0; i<this.currentImages.length; i++){
        	oCurrentImage = this.currentImages[i];
			oListItem = document.createElement("li");
			oThumbnail = document.createElement("img");
			oThumbnail.setAttribute("id", ("jas-thumbnail-" + i));
			oThumbnail.setAttribute("src", (this.imagePath + oCurrentImage[0]));
			//oThumbnail.setAttribute("alt", oCurrentImage[1]);
			//oThumbnail.setAttribute("title", oCurrentImage[1]);	disables display of title on mouseOver event swr 20.0407
			oThumbnail.onclick = JaS.thumbnailClick;
			this.thumbnailCollection.push(oThumbnail);
			oListItem.appendChild(oThumbnail);
			oThumbnailsList.appendChild(oListItem);			
        }
		this.thumbnailwrapper.appendChild(oThumbnailsList);
		if(this.thumbnailCollection.length > 0){
			this.markCurrentThumbnail();
		}
		if(this.slideshowIsPlaying){
			this.stopSlideshow();
		}
	},
	
	thumbnailClick : function (oEvent){
		JaS.imageIndex = parseInt(this.getAttribute("id").replace(/\D*(\d+)$/, "$1"), 10);
		JaS.setImage();
	},
	
	markCurrentThumbnail : function (){
		if(this.currentThumbnailSelected){
	        this.currentThumbnailSelected.className = "";
			// Sometimes, in IE, the image loses its reference to its parent
			if(this.currentThumbnailSelected.parentNode){
				this.currentThumbnailSelected.parentNode.className = "";
			}
		}
		this.currentThumbnailSelected = this.thumbnailCollection[this.imageIndex];
		this.currentThumbnailSelected.className = "selected";
		this.currentThumbnailSelected.parentNode.className = "selected-parent";
	},
	
	createTagList : function (){
		var strCurrentTag;
		var arrCurrentTag;
		var oRegExp;
		for(var i=0; i<this.images.length; i++){
			arrCurrentTag = this.images[i][2].replace(/\s*(,)\s*/,  "$1").split(",");
			for(var j=0; j<arrCurrentTag.length; j++){
            	strCurrentTag = arrCurrentTag[j];
				oRegExp = new RegExp(strCurrentTag, "i");
				if(this.tags.toString().search(oRegExp) == -1){
					this.tags.push(strCurrentTag);
				}
            }
        }
		this.tagsList = document.createElement("ul");
		var oListItem;
		var oTagCheckbox;
		var oLabel;
		for(var k=0; k<this.tags.length; k++){
			oTag = this.tags[k];
			oListItem = document.createElement("li");
			oTagCheckbox = document.createElement("input");
			oTagCheckbox.setAttribute("type", "checkbox");
			oTagCheckbox.setAttribute("id", ("jas-" + oTag));
			oTagCheckbox.setAttribute("value", oTag);
			oTagCheckbox.checked = true;
			oTagCheckbox.onclick = JaS.tagCheckboxClick;
			oLabel = document.createElement("label");
			oLabel.setAttribute("for", ("jas-" + oTag));
			oLabel.innerHTML = oTag;
			this.tagsCheckboxes.push(oTagCheckbox);
			oListItem.appendChild(oTagCheckbox);
			oListItem.appendChild(oLabel);
			this.tagsList.appendChild(oListItem);
		}
		this.tagswrapper.appendChild(this.tagsList);
		// This loop is necessary since IE can only mark checkboxes as checked after they've been added to the document
		for(var l=0; l<this.tagsCheckboxes.length; l++){
			this.tagsCheckboxes[l].checked = true;		
		}
	},
	
	tagCheckboxClick : function (oEvent){
		JaS.applyTagFilter();
	},
	
	applyTagFilter : function (){
		this.currentImages = [];
		var arrCurrentTags = [];
		var oCheckbox;
		for(var i=0; i<this.tagsCheckboxes.length; i++){
        	oCheckbox = this.tagsCheckboxes[i];
			if(oCheckbox.checked){
				arrCurrentTags.push(oCheckbox.value);
			}
        }
		var oRegExp;
		var oImage;
		for(var j=0; j<this.images.length; j++){
        	oImage = this.images[j];
			for(var k=0; k<arrCurrentTags.length; k++){
				oRegExp = new RegExp(arrCurrentTags[k], "i");
				if(oImage[2].search(oRegExp) != -1){
					this.currentImages.push(oImage);
					break;
				}
			}
        }
		
		if(this.useThumbnails){
			this.createThumbnails();
		}
		this.imageIndex = 0;
		this.setImage();
	},
	
	markAllTags : function (){
		for(var i=0; i<this.tagsCheckboxes.length; i++){
			this.tagsCheckboxes[i].checked = this.tagsSelectAll;
        }
		this.applyTagFilter();
	},
	
	closeSession : function (oEvent){
		JaS = null;
		delete JaS;
	},
	
	applyKeyboardNavigation : function (oEvent){
    	var intKeyCode = oEvent.keyCode;
    	if(!oEvent.altKey){
			switch(intKeyCode){
				case 32:
					this.slideshowIsPlaying = (this.slideshowIsPlaying)? false : true;
					if(this.slideshowIsPlaying){
						this.startSlideshow();
					}
					else{
						this.stopSlideshow();
					}
					this.preventDefaultEventBehavior(oEvent);
					break;
				case 37:
				case 38:
					this.previousImage();
					this.preventDefaultEventBehavior(oEvent);
					break;
				case 39:
				case 40:
					this.nextImage();
					this.preventDefaultEventBehavior(oEvent);
					break;
			}
		}
	},
	
	preventDefaultEventBehavior : function (oEvent){
		if(oEvent){
			oEvent.returnValue = false;
			if(oEvent.preventDefault){
				oEvent.preventDefault();
			}
		}
	}
};
// ---
addEvent(window, "load", function(){JaS.init();}, false);
addEvent(window, "unload", function(){JaS.closeSession();}, false);
// ---
// Utility functions
function addEvent(oObject, strEvent, oFunction, bCapture){
	if(oObject){
		if(oObject.addEventListener){
			oObject.addEventListener(strEvent, oFunction, bCapture);
		}
		else if(window.attachEvent){
			oObject.attachEvent(("on" + strEvent), oFunction)
		}
	}
}
// ---
function $(strId){
	return document.getElementById(strId);
}
// ---
if(typeof Array.prototype.push != "function"){
	Array.prototype.push = ArrayPush;
	function ArrayPush(value){
		this[this.length] = value;
	}
}
// ---
