(function($) {  
	var self = null;
	$.fn.news = function(feed, opt) {	
		return this.each(function(){ new $.news(this, feed, opt);});
	};
	
	
	$.news=function(el, feed, opt){    
		var self = this;
		self.el = $('<div class="items">').appendTo(el);
		self.s= $.extend(
			{
				type: 'json',
				view : 'inline',
				header: 'Fronter International News',
				more: 'Read more...',
				less: 'Hide...',
				animate: false,
				showdesc: false,
				limitdesc: 180,
				descend: ' ...',
				imgwidth: 149,
				imgheight: 112,
				newslimit: 30,
				open_ext: true,
				usage: 'single'
			}, 
		opt ); 
		
		

		self.s.myWidth = self.el.width();
		
		var feeded = 0;
		
		if(self.s.type === 'json'){

			if(typeof(feed)==='object'){
				// Just putting out the markup based on the feed
				
				if(self.s.usage === 'list'){
				
					$('<h1>Nyheter</h1>').prependTo(el);
					$('.nyheter').css("visibility","visible");
					$.each(feed, function(k,v){
									  
					
var dt = new Date(v.date_start * 1000);
  				
						
						
						
						if(v.title && (feeded<self.s.newslimit && self.s.newslimit !== 0)){
							newDay = dt.getDate();
						if (newDay < 10) { newDay = "0" + newDay};
							newMonth = dt.getMonth()+1;
						if (newMonth < 10) { newMonth = "0" + newMonth};
						
						var markup;
						var markup_backup;			
					    var d = v.news;
						var d1 = '';
						var d2 = '';
						var hasbreak = d.indexOf('<br />')
						if(hasbreak>0){
								d1 = d.substring(0,hasbreak) + '</p>';
								d2 = '<p>'+d.substring(hasbreak+6);
						}else{
							d1  = '<br />';
							d2 	= d;
						}
						
					
					
						var abstract
						if(hasbreak > -1){
							abstract = '<div class="rss-single-item-desc"><h3>'+d1+'</h3></div>';
						}else{
							abstract = ''}
						
						
						var desc2 = '<div class="rss-single-item-desc">'+d2+'</div>';
						var title = '<div class="rss-single-item-title">'+v.title+'</div>';
						var date = '<div class="rss-single-item-date">'+dt.getDate()+'.'+(dt.getMonth()+1)+'.'+dt.getFullYear()+'</div>';
							
						
						
						var markup = '<li class="news-item" style="list-style-type: none;" id="'+(v.id ? v.id : 'id'+k) +'"><a href="#'+(v.id ? v.id : 'id'+k) +'" class="text">'+v.title+' ['+newDay+'.'+newMonth+'.'+(dt.getFullYear())+']</a>'+
						'<div class="news-container" id="news'+(v.id ? v.id : 'id'+k) +'">';
						
						
						title = '<h3 class="news-header" style="display:none;">'+v.title+'</h3><div class="news-content clearfix">';
						
						
						var id = v.id?v.id:'id'+k;			
						var	spic ='<div class="news-image-full" id="sp_' +id +'"></div>'; 
						var end = '</div></div></li>';
						
						markup = markup + title + spic + abstract + desc2 + end;
						
						$(markup).appendTo(self.el);
						
						if(v.image){
								
								var img = new Image();
								img.onload = function() {
									newWidth = img.width;
									newHeight = img.height;
								
									if (img.width > self.s.imgwidth){
										newWidth = self.s.imgwidth;
										newHeight = (img.height/img.width) * newWidth;
									}
									if (img.height > self.s.width && newHeight > self.s.width){
										newHeight = self.s.imgwidth;
										newWidth = (img.width/img.height) * newHeight;
									}	
									
				
									$('#sp_'+ id).empty().append('<div class="img-holder"><img width="' + newWidth + '" height="' + newHeight + '" src="'+img.src+'"></div>');

								};
								
								img.src = v.image;
							} else{
								$('#sp_'+ id).empty().append('<div class="img-holder"><img src="../noimage.gif" height="225" width="300" /></div>');
								
							}
						
						feeded++;

						
					}	
					
				});	
				
				
				} else if(self.s.usage === 'single'){
				
					
					$.each(feed, function(k,v){
						if(v.id == self.s.curId){
							
						
							var dt = new Date(v.date_start * 1000);
						
						    var d = v.news;
							var d1 = '';
							var d2 = '';
							var hasbreak = d.indexOf('<br />')
							if(hasbreak>0){
									d1 = d.substring(0,hasbreak) + '</p>';
									d2 = '<p>'+d.substring(hasbreak+6);
							}else{
								d1  = '<br />';
								d2 	= d;
							}
							
						
						
							var markup = '<div class="rss-single-item">';
							var abstract
							if(hasbreak > -1){
								abstract = '<div class="rss-single-item-desc"><h3>'+d1+'</h3></div>';
							}else{
								abstract = ''}
							
							
							var desc2 = '<div class="rss-single-item-desc">'+d2+'</div>';
							var title = '<div class="rss-single-item-title">'+v.title+'</div>';
							var date = '<div class="rss-single-item-date">'+dt.getDate()+'.'+(dt.getMonth()+1)+'.'+dt.getFullYear()+'</div>';
							
							var id = v.id?v.id:'id'+k;
							
							var	spic ='<div class="news-image-full" id="sp_' +id +'"></div>'; 
							
							
							
							markup = markup + title + date + spic + abstract + desc2 + '</div>';	
							
							
							$(markup).appendTo(self.el);
							
							
							if(v.image){
								
								var img = new Image();
								img.onload = function() {
									newWidth = img.width;
									newHeight = img.height;
								
									if (img.width > self.s.imgwidth){
										newWidth = self.s.imgwidth;
										newHeight = (img.height/img.width) * newWidth;
									}
									if (img.height > self.s.width && newHeight > self.s.width){
										newHeight = self.s.imgwidth;
										newWidth = (img.width/img.height) * newHeight;
									}
									
									
				
									$('#sp_'+ id).empty().append('<div class="img-holder"><img width="' + newWidth + '" height="' + newHeight + '" src="'+img.src+'"></div>');
									
									
									
								};
								
								img.src = v.image;
							} else{
								$('#sp_'+ id).empty().append('<div class="img-holder"><img src="../noimage.gif" height="225" width="300" /></div>');
								
							}
							
							
							
							
							
							
						}
					});
				} else if(self.s.usage === 'frontpage'){
				
					var teller = 0;
					$.each(feed, function(k,v){
						
						if (teller == 0){
							
						self.el2 = $('<div>').appendTo(self.el);
						teller++;
						} else{
							if (teller == (self.s.per_page - 1) ){
								teller = 0;	
							} else{
							teller++;	
							}
						}
						if(self.s.per_page == 1){
							teller = 0;
						}
						if(v.title && (feeded<self.s.newslimit && self.s.newslimit !== 0)){
							var id = v.id?v.id:'id'+k;
		
							var markup = '';
							var desc   = '';
							var show   = false; // Should we use Read more / Hide text..( also used in long description to maybe show "HIDE"
							// Check if we need descriptions for the news:
							if ( self.s.showdesc || self.s.limitdesc > 0 ){
								// Special handling of <p> and </p> tags, should give at least 1 space, #112490
								
								desc = v.news.replace(/<\/?p/ig, " $&");
								var hasbreak = desc.indexOf('<br />')
								
								
								if(hasbreak>0){
									
									desc = desc.substring(0,hasbreak) + '</p>';	
								}
								
								desc = strip_tags(desc, '<a></a>');
								
							
				
								var tmp_element = document.createElement("div");
	    						tmp_element.innerHTML = desc;
	    						//desc =  tmp_element.innerHTML; 
								desc_min = $(tmp_element).text(); 					
								desc_length = desc_min.length;
								
								
								if (desc_length > self.s.limitdesc){
									show  = true;
									shortdesc = desc.substring(0, self.s.limitdesc);
									
									var tmp_element2 = document.createElement("div");
	    							tmp_element2.innerHTML = shortdesc;
	    							shortdesc_min = $(tmp_element2).text().length; 
									
									desc = desc.substring(0, self.s.limitdesc + (self.s.limitdesc -shortdesc_min));
									
									
									
									
									var lsp= desc.lastIndexOf(' ');
									var last_start_a = desc.lastIndexOf('<a');
									var last_end_a = desc.lastIndexOf('/a>');
									
									if ((last_start_a > -1 && last_start_a < lsp) && (lsp < last_end_a || last_end_a == -1)){
										desc = desc.substring(0, last_start_a);
									} else{
										desc = desc.substring(0, lsp);
									}
									
									desc = desc + self.s.descend +'<p style="clear: both; line-height: 0px;">&nbsp;</p><div style="clear: both;"><a  href="aktuelt/nyhet.shtml#'+id+'">'+self.s.more+'</a></div>';
									
									
								} else if(hasbreak > 0){
									desc = desc +'<p style="clear: both; line-height: 0px;">&nbsp;</p><div style="clear: both;"><a  href="aktuelt/nyhet.shtml#'+id+'">'+self.s.more+'</a></div>';
								}
								
								desc = '<div class="news-desc">'+ desc +'</div>';
								
								
								
								
							}
							
							
							var	spic ='<div class="news-image-short" id="sp_' +id +'"></div>'; 
							
							var dt = new Date(v.date_start * 1000);
							
							
							var shorttext = '<div class="news-text-short"><h3>' + v.title +'</h3><div class="news-date">'+dt.getDate()+'.'+(dt.getMonth()+1)+'.'+dt.getFullYear()+'</div>' + desc +'</div>';
							var shortnews = '<div class="news-short">'+ spic + shorttext +'</div>';
		
	
							
							var markup =  '<div class="item"><div class="news-container" id="news_'+ id + '">' + shortnews + '</div></div>' ; // removed fullnews 
							$(markup).appendTo(self.el2);
						
							if(v.image){
								var img = new Image();
								img.onload = function() {
									
								
									
									
									var x = resizeThumb( img.src, img.width, img.height, self.s.imgwidth , self.s.imgheight);
									var newWidth = Math.round(x.nw); 
									var newHeight = Math.round(x.nh); 
									var adjustLeft = Math.round(x.adjL);
									var adjustTop = Math.round(x.adjT);
								
									$('#sp_'+ id).empty().append('<div class="img-holder"><img width="' + newWidth + '" height="' + newHeight + '" src="'+img.src+'" style="top: ' + adjustTop * -1 + 'px; left: ' + adjustLeft * -1 + 'px;"></div>');
									
									
									
								};
								
								img.src = v.image;
							} else{
								$('#sp_'+ id).empty().append('<div class="img-holder"><img src="noimage.gif" height="112" width="149" /></div>');
								
							}
	
							// Make a callback using the load javascript..
							feeded++;
						}
					});
				
				}
				

			} 

		}

		$(".news-item:odd").addClass('odd');
		// So we have news, what happens with the news ?
		//self.s.view
			switch(self.s.view){
			
				case 'inlinelist':
					$('#NewsArea .news-content').hide();    //Harald: skjuler hele nyheten, hvis ingress er med      
					if(!self.s.open_ext){
					$('#NewsArea .news-item').css('cursor', 'pointer').click(function(e){
						if($(this).find('.news-content:hidden').length){
							$('#NewsArea .news-selected').removeClass('news-selected');
							$('#NewsArea .news-content:visible').hide(self.s.animate);
							$(this).addClass('news-selected');
							$(this).find('.news-content').slideDown('slow');
						}else{                                                     
							$('#NewsArea .news-selected').removeClass('news-selected');
							$(this).find('.news-content').hide(self.s.animate);
						}
						//return false;
					});                  
					}
					break;
			
				case 'inline':
					$('#NewsArea .news-content').hide(); 
					$('.news-full').hide(); 
					$('.news-short').show();
	
					if(!self.s.open_ext){
					$('.news-item').css('cursor', 'pointer').click(function(e){
						if($(this).find('.news-full:hidden').length){
							// Compact all others NEWS that are shown in full format; if any are.
							var prev = $('.news-selected');
							prev.removeClass('news-selected');
							prev.find('.news-full:visible').hide(self.s.animate);
							prev.find('.news-short:hidden').show();
	
							$(this).addClass('news-selected');
							$(this).find('.news-short').hide();
							$(this).find('.news-full').show(self.s.animate);
						}else{
							// If you pressed an elements allready selected, then just "compact" that element
							$('.news-selected').removeClass('news-selected');
							$(this).find('.news-short').show();
							$(this).find('.news-full').hide(self.s.animate);
						}
					});
					}
					break;
				
				default:
					
			}
		// Check for directly linked news
		if(document.location.hash && document.location.hash.substring(0,5)==='#news'){
			if(self.s.view === 'inline'){
				$(document.location.hash).addClass('news-selected').find('.news-content').show();
			}else{
				$('[href="'+document.location.hash+'"]').trigger('click');
			}
		}
		
	};
	
	
	 $.news.fn = $.news.prototype = {
			news: '0.0.1'
		};
		$.news.fn.extend = $.news.extend = $.extend;
		$.news.fn.extend({
			xml: function(strXML){
				if (window.DOMParser) {
					try {
						// seems to fail in some of the newer firefox version (3)
						return jQuery(new DOMParser().parseFromString(strXML, "text/xml"));
					} catch (ex) {
						return jQuery(strXML);
					}
				} else if (window.ActiveXObject) {
					var doc = new ActiveXObject("Microsoft.XMLDOM");
					doc.async = "false";
					doc.loadXML(strXML);
					return jQuery(doc);
				} else {
					return jQuery(strXML);
				}   
		 	   
			}
		});
		
		
})(jQuery);




function  resizeThumb(image, ow, oh, cw, ch){
	
	var newImg = new Image();
	newImg.src = image;
	
	var dw = cw; // Display width
	var dh = ch; // Display height
	var iw = ow; // Image width
	var ih = oh; // Image height	
	var nw;
	var nh;
	var adjT;
	var adjL;
	var ratio = iw / ih;
	
	if (ratio < ( dw / dh)){ // portrait
		
		nw = dw;
		nh = nw / ratio;
		
	} else{ // landscape
		
		nh = dh
		nw = nh * ratio;
		
	};
	
	adjT = (nh - dh) / 2;
	adjL = (nw - dw) / 2;
	
	return{ nw: nw, nh: nh, adjL: adjL, adjT: adjT};
}


function strip_tags (input, allowed) {

   allowed = (((allowed || "") + "")
      .toLowerCase()
      .match(/<[a-z][a-z0-9]*>/g) || [])
      .join(''); 
	  // making sure the allowed arg is a string containing only tags in lowercase (<a><b><c>)           
	  var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi,
       commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
   return input.replace(commentsAndPhpTags, '').replace(tags, function($0, $1){
      return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
   });        
}




