﻿(function($){$.fn.extend({dnews:function(options){var settings=$.extend({controls:false,switchInterval:4000,feedurl:'',showdetail:true,moretext:'[...]',controlsalwaysvisible:true,entries:10},options);return this.each(function(){var direction="forward";var wrapper=$(this);var interval;var prevIndex=0;var curIndex=0;var mode='auto';var next,prev,play,pause;var containerWidth;var left;var total;var allHeadlines;var controlbar;var previewWraper;var mouseEntered=0;function setPlayingStatus(isPlaying){if(isPlaying){play.css('display','none');pause.css('display','');}
else{play.css('display','');pause.css('display','none');}}
if(settings.showdetail){previewWraper=$('<div/>').attr('id',wrapper.attr('id')+'-'+'preview').addClass('preview-wrapper').css('opacity','0').css('visibility','hidden');previewWraper.append($('<div/>').addClass('preview')
.append($('<h4/>'))
.append($('<p/>'))).append($('<div/>').addClass('tip'));wrapper.before(previewWraper);}
if(settings.controls){controlbar=$('<div/>').addClass('control-bar').css('display','none');wrapper.after(controlbar);next=$('<div/>').addClass('next');prev=$('<div/>').addClass('prev');play=$('<div/>').addClass('play');pause=$('<div/>').addClass('pause');var left=$('.news',wrapper).width()/2-controlbar.width()/2;controlbar.css('left',left);controlbar.append($('<div/>').addClass('controls-wrapper').append(prev).append(pause).append(play).append(next));setPlayingStatus(true);next.click(function(){mode='manual';setPlayingStatus(false);stopAnimation();direction="forward";if(prevIndex>curIndex){var temp=curIndex;curIndex=prevIndex;prevIndex=temp;}switchNews();});prev.click(function(){mode='manual';setPlayingStatus(false);stopAnimation();direction="backward";if(prevIndex<curIndex){var temp=curIndex;curIndex=prevIndex;prevIndex=temp;}switchNews();});play.click(function(){mode='manual';setPlayingStatus(true);startAnimation();});pause.click(function(){mode='manual';setPlayingStatus(false);stopAnimation();});}
var id=0;var descriptions=new Array();if(settings.feedurl!=''){$('.news',wrapper).html('');google.setOnLoadCallback(function OnLoad(){var feed=new google.feeds.Feed(settings.feedurl);feed.setNumEntries(settings.entries);feed.setResultFormat(google.feeds.Feed.XML_FORMAT);feed.load(feedLoaded);});function feedLoaded(result){if(!result.error){$('.news',wrapper).html('');var chanels=$(result.xmlDocument).find('channel');var newsHome=$('>link',chanels).text();var newsDate=chanels.find('lastBuildDate').text();var allNews=chanels.find('item');allNews.each(function(index,news){id++;var headlintext=$(news).find('title').text();if(headlintext.length>100)
headlintext=headlintext.substr(0,100)+' ...';var headline=$('<div/>').addClass('headline').append($('<a/>').attr('id',id).html(headlintext).attr('href',$(news).find('link').text()));descriptions.push($(news).find('description').text());$('.news',wrapper).append(headline);});setupHeadlines();}
else alert(result.error);}}
else{$('.news a',wrapper).each(function(index,news){id++;descriptions.push($(news).attr('title'));$(news).attr('id',id).removeAttr('title');});setupHeadlines();}
function stopAnimation(){clearInterval(interval);}
function startAnimation(){interval=setInterval(switchNews,settings.switchInterval);}
function setupHeadlines(){if(settings.controls)
controlbar.css('display','');wrapper.prepend($('<div/>').addClass('news-title'));containerWidth=$('.news',wrapper).width()+$('.news-title',wrapper).width();allHeadlines=$('.headline',wrapper);left=wrapper.find('.news').css('left');if(left=='auto')left=$('.news-title').width()+'px';allHeadlines.css('left','-'+containerWidth+'px');total=allHeadlines.length;$(allHeadlines[curIndex]).css('left',left);interval=setInterval(switchNews,settings.switchInterval);if(previewWraper!=null){var previewWrapperLeft=previewWraper.offset().left;previewWraper.animate({opacity:0},1000,function(){$(this).css('visibility','hidden');});}
if(!settings.controlsalwaysvisible)
controlbar.slideUp("fast");wrapper.mouseenter(function(e){stopAnimation();mouseEntered=getMousePosition(e,wrapper);if(!settings.controlsalwaysvisible)
controlbar.slideDown("fast");});wrapper.mouseleave(function(e){if(mode=='auto')startAnimation();var mpos=getMousePosition(e,wrapper);var direction=mouseEntered[1]>mpos[1]?"u":"d";if(direction=='u'){if(!settings.controlsalwaysvisible)
controlbar.slideUp("fast");}
if(direction=='d'){if(previewWraper!=null)
previewWraper.animate({opacity:0},500,function(){$(this).css('visibility','hidden');});}});if(settings.controls){controlbar.mouseleave(function(){if(!settings.controlsalwaysvisible)
controlbar.slideUp("fast");if(previewWraper!=null)
previewWraper.animate({opacity:0},500,function(){$(this).css('visibility','hidden');});});}
previewWraper.mouseleave(function(){if(!settings.controlsalwaysvisible)
controlbar.slideUp("fast");if(previewWraper!=null)
previewWraper.animate({opacity:0},500,function(){$(this).css('visibility','hidden');});});if(settings.showdetail){$('.headline',wrapper).mouseenter(function(e){var top=-(previewWraper.height()+$('.tip').height()+2);previewWraper.css('top',top);var description=descriptions[parseInt($(this).find('a').attr('id'))-1];if(description=='')description=$(this).find('a').html();if(description.length>120)description=description.substr(0,120);description+='<a href="'+$(this).find('a').attr('href')+'">'+settings.moretext+'</a>';var previewId=wrapper.attr('id')+'-'+'preview';$('#'+previewId+' p').html(description);$('#'+previewId+' h4').html($(this).find('a').html());var previewleft=$(this).offset().left-previewWrapperLeft;previewWraper.css('left',previewleft+'px')
.css('visibility','visible')
.stop()
.animate({opacity:1.0},1000,function(){});});}}
function switchNews(){if(direction=='forward'){curIndex=(prevIndex+1)%total;$(allHeadlines[prevIndex]).stop().animate({'left':containerWidth+'px'},"slow",function(){$(this).css('left','-'+containerWidth+'px');});$(allHeadlines[curIndex]).stop().animate({'left':left},"slow");}
else{curIndex=(prevIndex>0?prevIndex-1:total-1)%total;$(allHeadlines[prevIndex]).stop().animate({'left':-containerWidth+'px'},"slow");$(allHeadlines[curIndex]).css({'left':containerWidth+'px'}).stop().animate({'left':left},"slow");}
prevIndex=curIndex;}
function getMousePosition(e,el){var x=0;var y=0;if(e.offsetX||e.offsetY){x=e.offsetX;y=e.offsetY;}
else if(e.pageX||e.pageY){x=e.pageX-parseInt($(el).css('left'));y=e.pageY-parseInt($(el).css('top'));}
else if(e.clientX||e.clientY){x=e.clientX+document.body.scrollLeft+document.documentElement.scrollLeft;y=e.clientY+document.body.scrollTop+document.documentElement.scrollTop;}
return[x,y];}});}});})(jQuery);
