/* Author: Mattias Bohez (Walking Men)
*/

/* 

	Main navigation 

*/
(function($,window,document,undefined){
$(function(){
	
// set variables	
var container = $('#sw-primaryNav'),
	timeout = null,
	elements = container.children('li'),
	dropdowns = [],
	current = -1;
	

elements.each(
	function(i,li) {
		var dropdown = $(this).find('.dropDown');
		matchHeight(dropdown);
		// store the dropdown element for easy access later on
		dropdowns.push(dropdown);
		
		// add a hover state
		$(this).children('a').bind('mouseenter', function(event){
			//var el = Event.element(event);
			hover(i);
		});
	}
);
container.bind('mouseleave', function(event){
	//var el = Event.element(event);
	unhover();
});

function open(index){
	var oThis = this;
	$(elements[index]).addClass('sfhover');
	$('video').css('visibility','hidden');
	// set classname for drop
	current = index;
}
function close(index){
	$(elements[current]).removeClass('sfhover');
	$('video').css('visibility','visible');
	current = -1;
}
function hover(index){
	// clear a possible running timeout
	try{clearTimeout(timeout)}catch(e){}
	// if the called dropdown is different than the opened one
	if(index != current) {
		
		if(current != -1){
			// hide current dropdown
			close(current);
		}
		
		// show called dropdown
		open(index);
	}
}
function unhover(){
	try{clearTimeout(timeout)}catch(e){}
	
	timeout = setTimeout(function(){
		close(current);
	},350);
}
function matchHeight(parent){
	var boxes = parent.find('ul[class^=grid_]');
	
	var length = boxes.length;
	var i = 0;
	
	while ( i < length) {
		var list = [];
		var mybox = $(boxes[i])
		var top = mybox.offset().top;
		var height = 0;
		
		do{
			list.push(boxes[i]);
			var myHeight = $(boxes[i]).height();
			height = (height > myHeight)? height : myHeight;
			i++;
		}
		while(i < length && top == mybox.offset().top );
		
		if(list.length > 1){
			for(var j=0;j < list.length;j++){
				list[j].style.height = height+'px';
			}
		}
		
	};
}


});
})(window.jQuery,window,document);


/*
	Ads teaser

*/

(function($,window,document,undefined){$(function() {
		$('.sibos-ads').each(function(){
			var ads = [],
				current = 0,
				container = $(this);
			
			function nextAd(){
				current = (current+1)%ads.length;
				container.html(ads[current]);
			}
			$.ajax(container.data('xml'),{
				dataType: 'xml',
				success: function(data){
					$(data).find('ad').each(function(){
						var item = $(this),
							image = item.children('img');
							
						var a = $('<a></a>');
							a.attr('href',item.attr('href'));
							
						var img = $('<img/>');
							img.attr('src',image.attr('src'));
							img.attr('alt',image.attr('alt'));
						a.html(img);
						ads.push(a);
					});
					$.shuffle(ads); // randomize the array
					nextAd();
					setInterval(nextAd,5000);
				}
			});
		});
	});})(jQuery,window,document);



/*
	
	Quotes teaser
	
*/
(function($,window,document,undefined){$(function() {
	$('.sibos-quotes').each(function(){
		var quotes = [],
			current = 0,
			container = $(this)
		
		function nextQuote(){
			current = (current+1)%quotes.length;
			container.html(quotes[current]);
		}
		$.ajax(container.data('xml'),{
			dataType: 'xml',
			success: function(data){
				$(data).find('quota').each(function(){
					quotes.push($(this).text())
				});
				$.shuffle(quotes); // randomize the array
				nextQuote();
				setInterval(nextQuote,7000);
			}
		});
	});
});})(jQuery,window,document);


/*
	
	Tags teaser
	
*/
(function($,window,document,undefined){$(function() {
		$('.sibos-tags').each(function(){
			var container = $(this);
			
			$.ajax(container.data('xml'),{
				dataType: 'xml',
				success: function(data){
					var str = ""					
					$(data).find('tag').each(function(){
						var myData = $(this);
						str += '<a href="'+myData.attr('href')+'" target="'+myData.attr('target')+'" class="size-'+myData.attr('weight')+'">'+myData.text()+'</a> '
					});
					container.html(str)
				}
			});
		});
	});})(jQuery,window,document);


/* 
	Video player
*/
(function($,window,document,undefined){$(function() {
	$('.sibos-videoTeaser').each(function(){
		var container= $(this),
			next = container.find('.sibos-videoTeaser-next'),
			prev = container.find('.sibos-videoTeaser-prev'),
			navWrap = container.find('.sibos-videoTeaser-nav'),
			nav = navWrap.find('ul'),
			video = container.find('.sibos-videoTeaser-video');
			
			video[0].id = "video"+new Date().getTime();
			
		// setup next and previous buttons
		next.bind('click', function() {
		    navWrap.animate({scrollLeft: navWrap.scrollLeft()+264},'fast');
		    return false;
		});
		prev.bind('click', function() {
		    navWrap.animate({scrollLeft: navWrap.scrollLeft()-264},'fast');
		    return false;
		});
		
		
		$.ajax(container.data('xml'),{
			dataType: 'xml',
			success: function(data){
				// setup data
				var sorted = {},
					groups = [];

				$(data).find('item').each(function(){
					var myItem = $(this),
						video_url= myItem.children('video_url').text(),
						title= myItem.children('title').text(),
						tagline= myItem.children('tagline').text(),
						image= myItem.children('image').text(),
						groupname = myItem.children('date').text()
						group = myItem.children('date').attr('date');
						
					var li = $('<li></li>');
						li.addClass('media');
						li.addClass('sibos-videoTeaser-item');
					
					var img = $('<img/>');
						img.addClass('img');
						img.attr('width','47');
						img.attr('height','35');
						img[0].src = "images/"+image;
					
					var bd = $('<div></div>').html('<strong>'+title+'</strong>'+tagline);
						bd.addClass('bd')
					
					li.click(function(){
						jwplayer(video[0]).load('video/'+video_url);
						jwplayer(video[0]).play();
		    			return false;
					});
					li.append(img);
					li.append(bd);
					//console.log([group,title])
					if(!$.isArray(sorted[group]) ){
						groups.push({date:group,name:groupname});
						sorted[group] = new Array();
					}
					sorted[group].push(li);

					//nav.prepend(li);
				});
				groups.sort(function(b,a){
					 if (a.date<b.date) return -1
					 if (a.date>b.date) return +1
					 return 0
				});
				//console.log([groups,sorted])
				for (var i = 0; i < groups.length; i++) {
					nav.append('<li class="sibos-videoTeaser-navsep">'+groups[i].name+'</li>')
					for (var j = 0; j < sorted[groups[i].date].length; j++) {
						nav.append(sorted[groups[i].date][j])
					};
				};

				// fix slider width
				var li = nav.find('li:last-child');
				//nav.width(li[0].offsetLeft + li.outerWidth()+100); //+100 for ie9 wrapping problem
				
				// setup player and load the first movie
				jwplayer(video[0]).setup({
					flashplayer: "res/jwplayer/player.swf",
					stretching:"uniform",
					file: "video/"+$(data).find('item:last-child').find('video_url').text(),
					image: "images/"+$(data).find('item:last-child').find('image').text(),
					height: 265,
					width: '100%',
					skin: "res/jwplayer/skins/glow/glow.xml"
				});

				jScrollapi.reinitialise();
			}
		});

		navWrap.jScrollPane({
			showArrows: true,
			verticalArrowPositions: 'split'
		});
		var jScrollapi = navWrap.data('jsp');
		setInterval(function(){
			jScrollapi.reinitialise();
		},1313)
		
	})
	
	
});})(jQuery,window,document);







/*
	Quotes teaser
*/
(function($,window,document,undefined){$(function() {
	function bubbleSort(array,attr) {
		for (var i = array.length - 1; i >= 0;  i--) {
			for (var j = 0; j < i; j++) {
				if (array[j+1][attr] > array[j][attr]) {
					var temp = array[j];
					array[j] = array[j+1];
					array[j+1] = temp;
	      		}
	   		}
		}
		return array;
	}
/*
	news teaser
*/
	$('.sibos-news').each(function(){
		var container = $(this),
			news = [],
			listWrap = container.find('.sibos-news-list'),
			list = listWrap.find('ul'),
			article = container.find('.sibos-news-item');
			
		function loadArticle(i){
			var ct =  "<img class=\"left\" src=\"images/"+news[i].picture+"\">";
				ct += "<a href=\""+news[i].link+"\" target=\""+news[i].target+"\" class=\"title\">"+news[i].title+"</a>";
				ct += "<div class=\"date\">"+news[i].date+"</div>";
				ct += "<div class=\"slug\">"+news[i].slug+"</div>";
				ct += "<div class=\"html_content\">"+news[i].html_content+"</div>";
				ct += "<a href=\""+news[i].link+"\" target=\""+news[i].target+"\" class=\"more\">Read more</a>";
			article.html(ct);
		}
		
		$.ajax(container.data('xml'),{
			dataType: 'xml',
			success: function(data){
				$(data).find('item').each(function(){
					var item = $(this);
					news.push({
						sort: parseInt(item.children('sort').text(),10),
						feature: item.children('feature').text() === "yes",
						date: item.children('date').text(),
						title: item.children('title').text(),
						slug: item.children('slug').text(),
						picture: item.children('picture').text(),
						html_content: item.children('html_content').text(),
						link: item.children('link').text(),
						target: item.children('target').text()
					});
				});
				news = bubbleSort(news,'sort');
				
				var hasLoaded = false;
				$.each( news, function(i,el){
					if(news[i].feature){
						loadArticle(i);
						hasLoaded = true;
					}else{
						var li = $('<li></li>'),
							a = $('<a></a>');
							a.addClass('media');
							a.attr('href',news[i].link);
							a.attr('target',news[i].target);
						var ct =  "<img class=\"img\" src=\"images/"+news[i].picture+"\" width=\"80\">";
							ct += "<span class=\"bd\">";
							ct += "<span class=\"title\">"+news[i].title+"</span>";
							ct += "<span class=\"html_content\">"+news[i].slug+"</span>";
							ct += "<span class=\"more\">Read more</a>";
							ct += "</div>";
						/*li.click(function(){
							loadArticle(i);
							return false;
						});*/
						a.html(ct);
						li.append(a);
						list.append(li);
					}
				});
				if(!hasLoaded) loadArticle(0);
				
				listWrap.jScrollPane({
					showArrows: true,
					verticalArrowPositions: 'split'
				});
				var jScrollapi = listWrap.data('jsp');
				setInterval(function(){
					jScrollapi.reinitialise();
				},1313)
			}
		});
	});
	
});})(jQuery,window,document);



/*
	Events teaser
*/
(function($,window,document,undefined){$(function() {
	$(".sibos-highlight-events").each(function(){
		var container=$(this),
			contentWrap = container.find('.sibos-highlight-content'),
			content = contentWrap.find('ul'),
			next = container.find('.sibos-highlight-next'),
			prev = container.find('.sibos-highlight-prev'),
			nav = container.find('.sibos-highlight-nav').find('ul'),
			contentList = [],
			navlist = [],
			current = 0,
			timeout = null;
		
		function goToItem(index){
			navlist[index].addClass('current').siblings().removeClass('current');
			var speed=(index === 0 && current ===navlist.length-1)? 0 : 500;
			content.animate({left:-contentList[index].position().left},speed);
			//get next element
			current = index;
			try{clearTimeout(timeout)}catch(e){}
			timeout = setTimeout(function(){
				goToItem((index+1)%contentList.length)
			},6000)
		}
		next.click(function(){
			goToItem((current+1)%contentList.length);
		    return false;
		})
		prev.click(function(){
			goToItem((contentList.length+current-1)%contentList.length);
		    return false;
		})
			
		$.ajax(container.data('xml'),{
			dataType: 'xml',
			success: function(data){
				var items = $(data).find('item');
				items.each(function(index){
					// get data from node
					var item = $(this),
						title = item.children('title').text(),
						slug = item.children('slug').text(),
						picture = item.children('picture').text(),
						link = item.children('link').text();
					
					var contentLi = $('<li></li>');
						contentLi.width(99.9/items.length+'%');
					var contentA = $('<a></a>');
						contentA.attr('href',link);
					var contentStr = '<img class="picture" src="images/'+picture+'">';
						contentStr += '<span class="title">'+title+'</span>';
						contentStr += '<span class="slug">'+slug+'</span>';
					contentA.html(contentStr);
					contentLi.html(contentA);
					
					var navLi =  $('<li></li>');
						navLi.width(99.9/items.length+'%');
					navLi.html(index+1);
					
					navLi.click(function(){
						goToItem(index);
		    			return false;
					});
					
					content.width(items.length*100+'%');
					content.append(contentLi);
					nav.append(navLi);
					contentList.push(contentLi);
					navlist.push(navLi);
					
				});
				goToItem(Math.floor(Math.random()*items.length));
			}
		});
		
	})

});})(jQuery,window,document);






/*
	Twitter teaser
*/
(function($,window,document,undefined){
  $.fn.navTabs = function(options) {  
    var settings = {
      currentClass: "nav-current",
      checkHash: true
    };
    if ( options ) { 
      $.extend( settings, options );
    }
    return this.each(function(){
      var tabs = [],
        activeTab = 1;
      // loop through all tabs
      $(this).find('a').each(function(index){
        var tab = $(this),
          hash = tab.attr('href');
        if(hash.indexOf('#') === 0){
          var content = $(hash);
          // push the elements for easy reference later
          tabs[index] = {tab:tab,content:content,hash:hash};
          // hide the linked content
          content.hide();
          // if the tab has a class current we set it as the default
          if(tab.parent().hasClass(settings.currentClass)){
            activeTab=index;
          }
          // click handler
          tab.click(function(){
            // show corrent content and hide old content
            tabs[activeTab].content.hide();
            tabs[index].content.show();
            // set the current class on the LI elements
            tabs[activeTab].tab.parent().removeClass(settings.currentClass);
            tabs[index].tab.parent().addClass(settings.currentClass);
            // save the active tab
            activeTab = index;
            return false;
          })
        }
         
      })
      // check hash
      if(settings.checkHash && document.location.hash){
        // loop through tabs
        for (var i = tabs.length - 1; i >= 0; i--) {
          // if the tabs hash reference (href attribute) matches the hash we set the default as that item
          if(tabs[i].hash === document.location.hash){
            tabs[activeTab].tab.parent().removeClass(settings.currentClass);//remove a possibly set current class
            activeTab = i; // set the active tab
          }
        };
      }
      // display the default tab
      try{
        tabs[activeTab].tab.click();
      }catch(e){}
       
    })
  }
})(jQuery,window,document);


(function($,window,document,undefined){$(function() {
	$(".sibos-twitter").each(function(){
		var container=$(this),
			contentWrap = container.find('.sibos-twitter-content'),
			tabsNav = container.find('.sibos-twitter-nav'),
			contentList = [],
			navlist = [],
			current = 0,
			timeout = null;

		tabsNav.navTabs();

		$('#sibos-twitter-hashtag').jTweetsAnywhere({
		    searchParams: ['q=%23sibos'],
		    count: 3,
		    showTweetFeed: {
		        expandHovercards: true,
		        showSource: true,
		        showProfileImages: true,
		        paging:{
		        	mode: "none"
		        },
		        autorefresh:{
		        	mode: "auto-insert",
		        	interval:60,
		        	duration: 3600
		        }
		    }
		});
		$('#sibos-twitter-official').jTweetsAnywhere({
		    username: ['sibos'],
		    count: 3,
		    showTweetFeed: {
		        expandHovercards: true,
		        showSource: true,
		        showProfileImages: true,
		        paging:{
		        	mode: "none"
		        },
		        autorefresh:{
		        	mode: "auto-insert",
		        	interval:120,
		        	duration: 5000
		        }
		    }
		});
	})

});})(jQuery,window,document);















/*
	Issues teaser
*/
(function($){
	$(function(){
		function bubbleSort(array,attr) {
			for (var i = array.length - 1; i >= 0;  i--) {
				for (var j = 0; j < i; j++) {
					if (array[j+1][attr] > array[j][attr]) {
						var temp = array[j];
						array[j] = array[j+1];
						array[j+1] = temp;
		      		}
		   		}
			}
			return array;
		}

		$('.sibos-publications').each(function(){
			var container = $(this);

			var publications = container.find('.sibos-publication'),
				content = container.find('.sibos-publications-content'),
				contentWrap = container.find('.sibos-publications-wrap'),
				slider = container.find('.sibos-slider'),
				news = [];

			$.ajax(container.data('xml'),{
				dataType: 'xml',
				success: function(data){
					content.html(' ');

					$(data).find('item').each(function(){
						var item = $(this);
						news.push({
							sort: parseInt(item.children('sort').text(),10),
							group: item.children('group').text(),
							date: item.children('date').text(),
							title: item.children('title').text(),
							desc: item.children('desc').text(),
							picture: item.children('picture').text(),
							link: item.children('link').text()
						});
						var el = $('<span></span>');
							el.addClass('sibos-publication');
						switch(item.children('group').text()){
							case "Pre-edition": el.addClass('sibos-Pre-edition'); break;
							case "Tuesday": el.addClass('sibos-Tuesday'); break;
							case "Wednesday": el.addClass('sibos-Wednesday'); break;
							case "Thursday": el.addClass('sibos-Thursday'); break;
							case "Wrap-up": el.addClass('sibos-Wrap-up'); break;
						}
						var ct = ""
						if(item.children('picture').text()){
							ct += "<a href=\"docs/"+item.children('link').text()+"\"><img src=\"images/publications/"+item.children('picture').text()+"\" width=\"61\" class=\"left\"></a>";
						}
						if(item.children('title').text()){
							ct += "<span class=\"title\" >"+item.children('title').text()+"</span>";
						}
						if(item.children('desc').text()){
							ct += "<span class=\"date\" >"+item.children('date').text()+"</span>";
						}
						if(item.children('link').text()){
							ct += "<a href=\"docs/"+item.children('link').text()+"\" class=\"link\" >Download</a>";
						}
						el.html(ct);
						el.prependTo(content);
					});
					// dirty fix to add placeholders
					if(content.find('.sibos-Tuesday').length === 0){
						content.append("<span class=\"sibos-publication sibos-Tuesday\"><img src=\"images/comming_soon.gif\" width=\"61\" class=\"left\"></a><span class=\"title\">Sibos Issues Tuesday</span><span class=\"desc\">20 Sep 2011</span></span>")
					}
					if(content.find('.sibos-Wednesday').length === 0){
						content.append("<span class=\"sibos-publication sibos-Wednesday\"><img src=\"images/comming_soon.gif\" width=\"61\" class=\"left\"></a><span class=\"title\">Sibos Issues Wednesday</span><span class=\"desc\">21 Sep 2011</span></span>")
					}
					if(content.find('.sibos-Thursday').length === 0){
						content.append("<span class=\"sibos-publication sibos-Thursday\"><img src=\"images/comming_soon.gif\" width=\"61\" class=\"left\"></a><span class=\"title\">Sibos Issues Thursday</span><span class=\"desc\">22 Sep 2011</span></span>")
					}
					if(content.find('.sibos-Wrap-up').length === 0){
						content.append("<span class=\"sibos-publication sibos-Wrap-up\"><img src=\"images/comming_soon.gif\" width=\"61\" class=\"left\"></a><span class=\"title\">Sibos Issues</span><span class=\"desc\">23 Sep 2011</span></span>")
					}

					setDefaultState();
				}
			});


			function setDefaultState(){
				  var handle = container.find('.sibos-slider-handle');
				  // get the current date
				  /*var d = new Date();
				  var utc = d.getTime() + (d.getTimezoneOffset() * 60000);
				  var nd = new Date(utc + (3600000*-4)); // toronto timezone is utc - 4 hours
				  var month = nd.getMonth();
				  var day = nd.getDate();
					
				  if(month === 8 && day >= 18){
				  	switch(day){
				  		case 19: 
				  			handle.css('left','0%');
				  			content.css({left: -content.find('.sibos-Pre-edition').position().left});
				  			break;
				  		case 20: 
				  			handle.css('left','25%');
				  			content.css({left: -content.find('.sibos-Tuesday').position().left});
				  			break;
				  		case 21: 
				  			handle.css('left','50%');  
				  			content.css({left: -content.find('.sibos-Wednesday').position().left});
				  			break;
				  		default: 
				  			handle.css('left','75%'); 
				  			content.css({left: -content.find('.sibos-Wrap-up').position().left});
				  			break;
				  	}
				  }*/
				  handle.css('left','80%'); 
		  			content.css({left: -content.find('.sibos-Wrap-up').position().left});
			}


			slider.each(function(){
				  var self = $(this),
				  	  handle = self.find('.sibos-slider-handle'),
				  	  startX = 0,
				  	  endX = 0,
				  	  containeroffset = handle.offset().left,
				  	  offset = handle.position().left,
				  	  max = self.width();

				  function dragStart(e){
			        containeroffset = self.offset().left;
			        startX = e.clientX - containeroffset;
			        max = self.width();
			        offset = startX;

				    dragMove(e);
			        $(document).bind('mousemove',dragMove);
			        $(document).bind('mouseup',dragEnd);
			        self.trigger('slideStart');
			        return false;
			      }
			      function dragMove(e){
			        endX = e.clientX - containeroffset;
			        var newoffset = offset + endX-startX;
			        if(newoffset <= 0){
			        	newoffset = 0;
			        }
			        if(newoffset >= max*0.9){
			        	newoffset = max*0.9; //0.9 = dirty hack to stop it from going to the end, increas if unable to scroll to all wrap up ussues
			        }
			        handle.css({
				        left: newoffset
				   }); 
				   var currPos = Math.round(newoffset/max*100);
				   self.trigger('slideMove',currPos);
			      }
			      function dragEnd(e){
			      	var endPos = Math.round(handle.position().left/self.width()*100);

				    handle.css({
				        left: (endPos/100)*self.width()
				    });

			        $(document).unbind('mousemove',dragMove);
			        $(document).unbind('mouseup',dragEnd);
				    self.trigger('slideEnd',endPos);
			      }
			      self.mousedown(dragStart);
			      this.onselectstart = function() {return false;} // ie
				  this.onmousedown = function() {return false;} // mozilla

				  


			}).bind('slideEnd',function(event,a){
				//console.log(['slideEnd',a]);

			}).bind('slideMove',function(event,a){
				//console.log(['slideMove',a]);
				// calculate widths of sections
				var startPosPre = 0,
					startPosTue = content.find('.sibos-Tuesday').position().left,
					startPosWed = content.find('.sibos-Wednesday').position().left,
					startPosThu = content.find('.sibos-Thursday').position().left,
					startPosWra = content.find('.sibos-Wrap-up').position().left;
				//console.log(['startPos',startPosPre,startPosTue,startPosWed,startPosThu,startPosWra])
				
				var widthPre = startPosTue,
					widthTue = startPosWed - startPosTue,
					widthWed = startPosThu - startPosWed,
					widthThu = startPosWra - startPosThu,
					widthWra = content.width() - startPosWra;
				//console.log(['width',widthPre,widthTue,widthWed,widthThu,widthWra])
				
				if(a < 20){
					// pre-edition
					content.css({left: -startPosPre - (widthPre* ((a-0)/20))  })
				}else if (a < 40){
					//Tuesday
					content.css({left: -startPosTue - (widthTue* ((a-20)/20))  })
				}else if (a < 60){
					//wednesday
					content.css({left: -startPosWed - (widthWed* ((a-40)/20))  })
				}else if (a < 80){
					//thursday
					content.css({left: -startPosThu - (widthThu* ((a-60)/20))  })
				}else {
					//wrap-up
					if(widthWra < contentWrap.width()){
						// stop when all issues are in view
						content.css({left: -startPosWra })
					}else{
						content.css({left: -startPosWra - (widthWra* ((a-80)/20))  })
					}
				}
				

				/*
				content.css({
					left: -(content.width()-contentWrap.width()) * (a/100)
				})*/
			});
		});

		})
	})(jQuery)
