Event.observe(document, 'dom:loaded', function() {
	
		BrowserDetect.init();
		// Fix special divider in TAB menu
		FormatTabMenu.fixDivider(); 
		FormatTabMenu.fixUItabMenu();
		FormatTabMenu.addBrowserSpesificClass();
		// Move langs and heading
		
		// Organiserer bilder og bildetekst
		if (ntnu_ImageCaptionEnabler.notCollumnMaxIsPresent()) {
			ntnu_ImageCaptionEnabler.addCssSelectorToNonCaptionImages();				
			ntnu_ImageCaptionEnabler.wrapAllCaptionImages();
			ntnu_ImageCaptionEnabler.createNonLinkCaptionElement();	
			ntnu_ImageCaptionEnabler.createLinkImageCaptionElement();
			ntnu_ImageCaptionEnabler.addClearFloatElements();
		} 
		
		ImageScaling.doRightCollumn();
		
		// Funksjonalitet for søkefeltet
		_$('query').observe('focus', function(event) {
			_$('searchform').addClassName('focus');
			this.defaultText = this.value;
			this.value = '';
		})
		_$('query').observe('blur', function(event) {
			_$('searchform').removeClassName('focus');
			this.value = this.defaultText;
		})		
		
		
		// Forandrer plassering av kontrollpanel ikon 	
		// ActionIcons.changeLocation();	
		// legg til observer på bilder slik at imagepreview funker
		ShowOriginalImage.createImagePreviewObserver();	
		
		// Key listener for custom shortcut functionality.
		document.onkeyup = EventController.keyListener;
		
		BrowserDetect.init();
		
		// Kjører kun når man er i menyeditor
		if (_$('ntnu_manage_altUrl')) {
			var urlLister = new NTNU_AlternativeUrls();
				urlLister.listUrls(ntnu_url_groupId, ntnu_url_layoutId);
		}
		
		Ntnu_buttonMover.moveShowPageButton();
		// Makes FCKeditor visible - initially hidden to prevent firefox/xp-bugs
		FCKToggler.toggle();
});

var ntnu_ImageCaptionEnabler = {
	// Wrapper alle bilder uten caption og legger på css selector
	// i samsvar med align attributtet i img tag
	addCssSelectorToNonCaptionImages : function()  {
		jQuery('img').each(function(index){			
			if((jQuery(this).attr('txtcaption') == undefined || jQuery(this).attr('txtcaption') == '') && !jQuery(this).hasClass('icon')) {
				if(!ntnu_ImageCaptionEnabler.isInIgnoreList(this)) {
					jQuery(this).wrap(jQuery('<div></div>'));
					ntnu_ImageCaptionEnabler.addCSSFloatStyles(jQuery(this).parent(), jQuery(this).attr('align'));
					ntnu_ImageCaptionEnabler.addCssWidthValuesToParentElement(jQuery(this));
				}
			} 
		
		})
	},

/*
Finner alle bilder med caption attributt
lager span element og legger caption inn
*/	
	wrapAllCaptionImages : function() {
	// Wrap bildeelement i DIV tag
	jQuery('img').parent().find('*[txtcaption]').each(function(index){
		if(jQuery(this).parent().attr('href')!== undefined){
			if (!jQuery(this).parent().parent().hasClass('imageCaptionWithLink')) {
				jQuery(this).parent().wrap(jQuery('<div></div>').attr('class','imageCaptionWithLink'));
				ntnu_ImageCaptionEnabler.addCSSFloatStyles(jQuery(this).parent().parent(), jQuery(this).find('p:first').attr('align'));
			}
		} else {
			if (!jQuery(this).parent().hasClass('imageCaption')) {			
				jQuery(this).wrap(jQuery('<div></div>').attr('class','imageCaption'));
				ntnu_ImageCaptionEnabler.addCSSFloatStyles(jQuery(this).parent(), jQuery(this).attr('align'));
			}
		}
	});
	},
	
	createNonLinkCaptionElement : function () {
		// Les txtcaption attribute, fyll span element med txtcaption
		// sett float selector i samsvar med bildeattributtet align
		jQuery('.imageCaption img').each(function(){
			ntnu_ImageCaptionEnabler.addCssWidthValuesToParentElement(jQuery(this));   		   		 		
	   		if (jQuery(this).attr("txtcaption") !== undefined) {
	   			var imageCaption = jQuery(this).attr('txtcaption'); 			   			
				jQuery(this).removeAttr('txtcaption');
		   		jQuery(this).after('<div></div>');
		   		jQuery(this).next().attr('class', 'captionTextDiv');
				jQuery(this).next().html(imageCaption);				
	   		}
	   		
		});
	},
	createLinkImageCaptionElement : function() {
		jQuery('.imageCaptionWithLink img').each(function(){
			ntnu_ImageCaptionEnabler.addCssWidthValuesToParentElement(jQuery(this), 2);
   			
			if (jQuery(this).attr("txtcaption") !== undefined) {
   				var imageCaption = jQuery(this).attr('txtcaption'); 			   			
				jQuery(this).removeAttr('txtcaption');
	   			jQuery(this).parent().after('<div></div>');
	   			jQuery(this).parent().next().attr('class', 'captionTextDiv');
				jQuery(this).parent().next().html(imageCaption);				
			}
			
		});	
	},
		
	addCssWidthValuesToParentElement : function(_element, _levelsup) {
		var elementWidth = '';
   		var elementHeight = '';
   				
   		if (_element.attr('width') !== undefined && _element.attr('height') !== undefined) { // Hvis bildeElementet har en bredde attributt
   			elementWidth = _element.attr('width');
   			elementHeight = _element.attr('height');   
			if (_levelsup && _levelsup == 2) {					
				_element.parent().parent().css('width', elementWidth+'px');
			} else {
				_element.parent().css('width', elementWidth+'px');
			}
   		}		
	},
	
	addClearFloatElements : function () {
		jQuery('.imageCaptionWithLink a').each(function(){
			jQuery(this).after('<div></div>');
			jQuery(this).next().attr('class', 'clear');
		})
		
		jQuery('.imageCaption img').each(function(){
			jQuery(this).after('<div></div>');
			jQuery(this).next().attr('class', 'clear');
		})
	},
	
	addCSSFloatStyles : function(_element, _alignment) {			
			if (_alignment !== undefined) {			
	   			switch(_alignment.toLowerCase()) {
					case 'right':
						_element.addClass('artImageRight');
					break;
					case 'left':
						_element.addClass('artImageLeft');	
					break;
					case 'middle':
						_element.addClass('artImageCenter');	
					break;
					case 'inline':
						_element.addClass('artImageInline');	
					break;
					default:
						_element.addClass('artImageCenter');
				}  			
	   		} else {
	   			_element.addClass('artImageCenter');
	   		}		
	},
	
	notCollumnMaxIsPresent : function() {
		if (!(jQuery('div.columns-max').length>0)) {
			return true
		} else {
			return false;	
		}
	},
	
	isInIgnoreList : function(_element) {
		var IgnoreClassArray = new Array('feed', 'graphix');
		if (_$(_element) != null) {
			if (_$(_element).hasClassName('feed') || _$(_element).hasClassName('graphix')) {
				return true
			}
		//
		// FIX denne koden slik at den fungerer og er generisk				
		var ancestors = _$(_element).ancestors();
		if (ancestors != null) {
			var alignAttr = '';			
			for (var anElement in ancestors) {
			if (_$(anElement) != null) {	
				alignAttr = _$(anElement).readAttribute('align');	
			}
			try {
				for (var selector in IgnoreClassArray) {				
					if (_$(anElement).hasClassName(selector) || alignAttr == 'inline') {
						return true;
					}
				}
				} catch (e){
					if (_$(anElement) != null) {
						_$(anElement).hasClassName('feed');
					}
					//return true;
				}
			}
			return false;
		}
	}
	return false;
	}	
}

var FCKToggler = {
	toggle : function () {
		if (_$('fckeditorHiddenBodyDiv') != null) {
			window.setTimeout("_$('fckeditorHiddenBodyDiv').toggle();",10);
			window.setTimeout("_$('fckeditorHiddenIngressDiv').toggle();",10);
		}
	}
}

var ActionIcons = {
	changeLocation : function () {
	try {
		var container = $$('div.portlet-borderless-container');

		if (container != null && container.size()>0) {
			for (var x=0; container.length>x; x++) {
				var source = '';
				var target = '';
				source = container[x].select('div[class~="icon-actions"]');
				target = container[x].select('div[class~="ntnu_cmd_configpanel"]');
				
				if (source.length>0 && target.length>0) {
					source[0].removeClassName('icon-actions');
					var spans = source[0].select('span');					
					var ul = target[0].select('ul[class~="ntnu_cms_portlet_bar"]')
					
					for (var y=0; spans.length>y; y++) {					
						var title = spans[y].down().down().readAttribute('title'); 
						var link = spans[y].down();
						link.update(title);

						spans[y].appendChild(link);
						
						// Skjul select WebContent
						if (spans[y].hasClassName('ntnu_selectWebContent')) {
							spans[y].hide();
						}
						var li = new Element('li', {'class':'nr'+y}).update(spans[y]);
						
							li.addClassName('ntnu_cms_action_icons');
							if (y == 2) {
								li.hide();
							}
						ul[0].appendChild(li);
					}					
				}
			} 
		}
	} catch (ex) {
		ActionIcons.actionLog(msg);
	}
	},
	actionLog : function(msg) {
//		if (console) {
//			console.log('Error changeLocation: ' + msg);
//		}
	}
}

var EventController = {
	thisname : 'econtroller',
	keyListener : function (e) {
		if( !e ) {
    		if( window.event ) {
				e = window.event;
			} else {
				return;
			}
 		 }
		if( typeof( e.keyCode ) == 'number'  ) {
			e = e.keyCode;
		} else if( typeof( e.which ) == 'number' ) {
			e = e.which;
		} else if( typeof( e.charCode ) == 'number'  ) {
			e = e.charCode;
		} else {
			return;
		}
		EventController.lookUpRegisteredActions(e);
	},
		
	lookUpRegisteredActions : function (e) {
		/*
		35 = shift+1
		40 = Shift+2
		34 = Shift+3 
		37 = Shift+4
		12 = Shift+5
		113 = F2
		13 = Enter
		39 = Shift+6
		*/
		if (e == 113) {
			EventController.togglePortletControls();
		} else {
			// do nothing
		}		
	},
	
	togglePortletControls : function() {
		var body = $$('body');
			body = body[0];
		if (body.hasClassName('controls-visible')) {
			body.removeClassName('controls-visible');
			body.addClassName('controls-hidden');
				
		} else if (body.hasClassName('controls-hidden')) {
				   body.removeClassName('controls-hidden');
				   body.addClassName('controls-visible');
		} else {return;}
	}
}



/**
 * ModalWindow: Viser DOM object i et vindu som tar over hele skjermen
 * 
 */
function ModalWindow(_options) {
	if (_$('modalWindowholder')) {
		_$('modalWindowholder').remove();
	}
	this.modalWindowholder = new Element('div',{'id':'modalWindowholder'}) 
	this.modalWindowholder.hide();
	this.backgroundClass = 'modalWindow_background';
	this.backClose = true;
	document.body.appendChild(this.modalWindowholder);
	Object.extend(this,_options);
}

/**
 * show
 * 
 */
ModalWindow.prototype.show = function(content){
	try {
		var mwindow = this;
				
		var background = new Element('div',{'id':this.backgroundClass,'class':'clickable'});
		this.modalWindowholder.appendChild(background);
		
		var ntnu_window;
		if (this.modalImageWidth) {
			ntnu_window = new Element('div',{'id':'modalWindow'});
			ntnu_window.setStyle({'width':this.modalImageWidth});
		} else {
			ntnu_window = new Element('div',{'id':'modalWindow'});
		}
		
		this.modalWindowholder.appendChild(ntnu_window);

		if (this.showHeader){
			var header = new Element('div',{'class':'clickable header'});
			if (this.headerclass) header.addClassName(this.headerclass);
			var closeLink = new Element('span',{'class':'clickable close'}).update("lukk");
			header.appendChild(closeLink);
			ntnu_window.appendChild(header);
			closeLink.observe('click', function(event){
				mwindow.close();
			});
			header.observe('click', function(event){
				mwindow.close();
			});
		}
		
		var contentholder = new Element('div',{'id':'modalWindow_contentholder'});
		ntnu_window.appendChild(contentholder);
		contentholder.appendChild(content);
		
		if (this.backClose) {
			background.observe('click', function(event){
				mwindow.close();
			});
		}
		this.modalWindowholder.show();
	} catch(e){
		// nothing todo
	}
}

/**
 * show
 * 
 */
ModalWindow.prototype.close = function(){
	try {
		this.modalWindowholder.hide();
	} catch(e){
		// nothing todo
	}
}

var ShowOriginalImage = {
	serviceUrl : 'http://' + window.location.host + '/html/js/editor/fckeditor/editor/filemanager/browser/liferay/getlargeImageUrl.jsp',
	getImageID : function(_imageSourceUrl) {
		var paramObject = _imageSourceUrl.toQueryParams();
		var url = ShowOriginalImage.serviceUrl + '?imageid=' + paramObject['i_id'] + '&version=' + paramObject['version'];
		ShowOriginalImage.ntnu_liferay_logger(url);
		new Ajax.Request(url, {
  			method: 'get',
  			onSuccess: function(transport) {
		   		if (transport.responseText) {
		   			ShowOriginalImage.ntnu_liferay_logger(transport.responseText);
		   			var jsonObject = eval('(' + transport.responseText.strip() + ')');
		      		ShowOriginalImage.loadInModalWindow(ShowOriginalImage.createImageDomObject(jsonObject));
		   		} else {
		   			ShowOriginalImage.loadInModalWindow(ShowOriginalImage.createErrorResponse());
		   		}
  			}
		});
	},
	
	ntnu_liferay_logger : function(_input) {
		try {
		//	console.log(_input);
		} catch (e) {}
	},
	
	createImageDomObject : function (jsonImage) {
		var url = '/image/image_gallery?i_id=' + jsonImage.imageid;
		var image = new Element('img', {'src':url, 'id':'ntnu_modalImage', 'height':+jsonImage.height, 'width':+jsonImage.width});
		return image;
	},
	
	loadInModalWindow : function (domObject) {
		var modal;
		if (domObject.width && domObject.width>0) {
			modal = new ModalWindow({'showHeader':true, 'modalImageWidth':domObject.width+'px'});	
		} else {
			modal = new ModalWindow({'showHeader':true})
		}
		modal.show(domObject);	
		// Fix for IE
		this.setHeightOnModalWindow();	
	},
	
	createErrorResponse : function () {
		var div = new Element('div');
		var head = new Element('h1').update('Feildmelding:');
		var para = new Element('p').update('Lastingen av bilde feilet.');
		div.appendChild(head);
		div.appendChild(para);
		return div;
	},
	
	createImagePreviewObserver : function() {
		if (_$('column-3') || _$('column-4')) {
		var images = $$('img');
			images.each(function(image) {
				if (this.isNotLinkImage(image)) {
					if (image.readAttribute('imgmagnifier') && image.readAttribute('imgmagnifier').length>0) {
						
						var link = new Element('a', {'href':'javascript:void(0);'}).setStyle({'position':'relative', 'float':'left', 'margin':'0px'});
						var zoomIcon = new Element('span');
							zoomIcon.addClassName('imageHotSpot');
						image.wrap(link);
						image.insert({before: zoomIcon});
						var srcUrl = image.readAttribute('src');
							
						zoomIcon.observe('click', function(event) {
							Event.stopObserving(event);
							ShowOriginalImage.getImageID(srcUrl);
						})
					}
				}						
			}.bind(this))
		}
	},
	// Fix for IE
	setHeightOnModalWindow : function() {
		var dimensions = _$('ntnu_modalImage').getDimensions();
			var imageHeight = dimensions.height;
			var imageWidth = dimensions.width;
			var factor = 1;
			var browserViewPort = document.viewport.getDimensions();
			if (imageHeight>browserViewPort.height) {
				factor = (browserViewPort.height-100)/imageHeight;
				imageHeight = imageHeight*factor;
				imageWidth = imageWidth*factor;
			}
		_$('modalWindow').setStyle({'height':imageHeight+27+'px', 'width':imageWidth+'px'});
		_$('ntnu_modalImage').setStyle({'height':imageHeight+'px', 'width':imageWidth+'px'});
	},
	
	isNotLinkImage : function(image) {
			var hasNotLink = true;
			var ancestorElements = image.ancestors();
				ancestorElements.each(function(element){
					if (element.hasClassName('imageCaptionWithLink')) {
						hasNotLink = false;
					}
				})
			return hasNotLink;
	}
}

var FormatTabMenu = {
	fixDivider : function() {
		var index;
		if (_$('ntnu_tabs')) {
			var ntnu_tabs = _$('ntnu_tabs');
			var TabLIs = ntnu_tabs.select('li');
			for (var x = 0; TabLIs.length>x; x++) {
				if (TabLIs[x].hasClassName('selected')){
					index = x;
				}
			}
			if (TabLIs[index+1]) {
				var AnchorElement = TabLIs[index+1].select('a');
					AnchorElement[0].setStyle({'background':'transparent'});
			}
//			if (!(index+1)==x) {
//				var endAnchor = TabLIs[0].select('a');
//					endAnchor[0].setStyle({'background':'transparent'});
//			}
		}
	},
	fixBreadCrumbPosition : function() {
		if (_$('column-1')) {
			var rightHandTopElements = _$('rightHandTopElements');
			_$('column-1').appendChild(rightHandTopElements);
			rightHandTopElements.show();
		}
	},
	fixUItabMenu : function() {
		var OLtabItems = $$('ul.ui-tabs');
		for (var x=0; OLtabItems.length>x; x++) {
			var LIitems = OLtabItems[x].select('li');
			for (var y=0; LIitems.length>y; y++) {
				var element = '';
				if (LIitems[y].select('span').size) {
					if (LIitems[y].select('a')) {
						var a = LIitems[y].select('a');
						element = a[0].update(LIitems[y].down().innerHTML);	
						//console.log('ID' + LIitems[y].id);				
					} else {
						element = new Element('a', {'href':'#'}).update(LIitems[y].down().innerHTML);
						//console.log('ID no A' + LIitems[y].id);
					}
					
					LIitems[y].update(element);
				} else {
					//console.log('Ingen barn av LIitems[y]');
				}
			}
		}
	},
	addBrowserSpesificClass : function() {
			if (BrowserDetect.browser == 'Firefox') {
				_$('ntnu_navigation_wrapper').addClassName('ntnu_firefox');
			} else if (BrowserDetect.browser == 'Chrome') {
				_$('ntnu_navigation_wrapper').addClassName('ntnu_chrome');
			} else if (BrowserDetect.browser == 'Safari') {
				_$('ntnu_navigation_wrapper').addClassName('ntnu_safari');
			} else if (BrowserDetect.browser == 'Explorer') {
				_$('ntnu_navigation_wrapper').addClassName('ntnu_explorer');
			}
		}	
}

var Ntnu_templateChange = {
	submit : function(_elementID) {
		var answer = confirm("Er du sikker du vil endre templat?");
		if (_$(_elementID && answer)) {			
			_$(_elementID).submit();
		} else {
			// do nothing
		}
	}
}

var Ntnu_buttonMover = {
	moveShowPageButton : function(){
		if (_$('ntnu_show_selected_page')) {
			_$('ntnu_show_selected_page_hook').appendChild(_$('ntnu_show_selected_page'));
		}
	}
}

// Ntnu_kvalitetSjekk.checkImages(); 
// Ntnu_kvalitetSjekk.checkLinks();
var Ntnu_kvalitetSjekk = {
	objectRefs : false,
	enableObjectRefs : function(){
		Ntnu_kvalitetSjekk.objectRefs = true;
	},
	disableObjectRefs : function(){
		Ntnu_kvalitetSjekk.objectRefs = false;
	},
	checkImages : function() {
		var allImages = $$('img');
		var total = allImages.size();
		var hasNoAltAtr = 0;
		allImages.each(function(image){
			if (!image.readAttribute('alt')) {
				if (Ntnu_kvalitetSjekk.objectRefs) {
				//	console.log(image);
				}
				hasNoAltAtr++;
			}
		})
	//	console.log('Totalt antall bilde: ' + total);
	//	console.log('Bilder som ikke har alt attribute: ' + hasNoAltAtr);
	},
	checkLinks : function() {
		var allLinks = $$('a');
		var total = allLinks.size();
		var hasNoTitleAtr = 0;
		allLinks.each(function(link){
			if (!link.readAttribute('title')) {
				if (Ntnu_kvalitetSjekk.objectRefs) {
				//	console.log(link);
				}
				hasNoTitleAtr++;
			}
		})
	//	console.log('Totalt antall lenker: ' + total);
	//	console.log('Lenker som ikke har title attribute: ' + hasNoTitleAtr);
	}
}

var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{
			string: navigator.userAgent,
			subString: "Chrome",
			identity: "Chrome"
		},
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			   string: navigator.userAgent,
			   subString: "iPhone",
			   identity: "iPhone/iPod"
	    },
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};

	
var ImageScaling = {
	doRightCollumn : function() {
		if (_$('column-4')) {
			var images = _$('column-4').select('img');
			images.each(function(image) {
				if (image.readAttribute('width') == '229') {
					image.height = image.height * 0.94;
					image.width = 216;
					image.up().setStyle({'width':'216px'});
				}
			})
		}
	}
}		

	


