
$(function() {

	$('.js-hide').hide();
	$('.js-show').show();

	// home page
	$('ul.slide').each(function(){
		Slide($(this));
	});
	$('body.home div#directory-list').each(function(){
		initCharts($(this));
	});
	
	
	// content pages
	$('div.slideshow').each(function(){
		SlideShow($(this));
	});
	
	// Accordion
	$('ul.accordion').each(function(){
		if(!$(this).hasClass('noexpand')) {
			Accordion($(this));
		}
	});
	
	// directory
	expandingOptions();
	directoryListThumb();
	autoSubmitSelects();
	setUpGenres();
	ajaxPreview();
	takeAwaySortOnTextSearch(),
	
	// show add this buttons
	$('.addthis_button').show();
	
	// blog throw back
	blog();	
	
	
	// if related div is empty add class of white
	$('.related').each(function() {
		var relatedDiv = $(this);
		if (relatedDiv.children().length < 1 ) relatedDiv.addClass('white');
	});
	
});

function takeAwaySortOnTextSearch() {
	var getVars = getUrlVars();
	if (getVars['festival_query']) {
		$('#sort-options').hide();
	}
}

function getUrlVars()
{
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for(var i = 0; i < hashes.length; i++)
    {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }
    return vars;
}

function blog() {
	if ($('body').hasClass('project-blog')) {
		var li_item = $('ul.accordion li').eq(0)
		var id = li_item.attr('id').substring(5);
		var url = $('div.page-title a.button').attr('href');
		window.location = url+'?post='+id;
	}

}

function initCharts(element) {
	var buttons = element.prev().find('a');
	var stats_element = element.next().hide();
	var dataobjects	= getChartsData(stats_element);
	var charts = [];
	$(buttons[0]).addClass('inactive').click(function(e){
		e.preventDefault();
		element.show();
		stats_element.hide();
		$(buttons[0]).removeClass('active');
		$(buttons[0]).addClass('inactive');
		$(buttons[1]).addClass('active');
		//console.log(charts);
		for (var i=0;i<charts.length;i++) {
			
			charts[i].destroy();
			
		}
		charts = [];
		return false;
	});
	$(buttons[1]).addClass('active').show().click(function(e){
		e.preventDefault();
		element.hide();
		stats_element.show();
		$(buttons[0]).addClass('active');
		$(buttons[1]).removeClass('active');
		$(buttons[0]).removeClass('inactive');
		charts.push(drawChart(dataobjects[0].name,dataobjects[0].data,dataobjects[0].gdata));
		charts.push(drawChart(dataobjects[1].name,dataobjects[1].data,dataobjects[1].gdata));
		return false;
	});
}


function getChartsData(stats_element) {
	var lookup = {Fiction:'#fd194a',Documentary:'#1d9dfe',Animation:'#c0d94a',Experimental:'#ffffff'};
	var dataobjects = [];
	stats_element.find('div.graph_canvas').each(function(){
		var _name = $(this).attr('id');
		var _data = [];
		var _gdata = [];
		$(this).next().find('tr').each(function(){
			var tds = $(this).find('td');
			var first = $(tds[0]);
			var second = $(tds[1]);
			var n = first.find('span').text();
			var y = parseInt(second.text().substring(1,second.text().indexOf(')')));
			var colour = lookup[first.find('div').attr('class')];
			_data.push({ name: n, y:y, color: colour });
			_gdata.push({ name: n, y:y, color: '#333333' });
			
		});
		dataobjects.push({name:_name,data:_data,gdata:_gdata});
	});
	return dataobjects;

}

function drawChart(id,data,gdata) {
	var chart;
	chart = new Highcharts.Chart({
		chart: {
			renderTo: id,
			margin: [0, 0, 0, 0],
			plotBackgroundColor: 'gray',
			plotBorderWidth: 0,
			plotBorderColor: '#000000',
			borderColor: '#000000',
			plotShadow: false,
			animation: false,
			spacingTop: 0,
			spacingLeft: 0,
			spacingRight: 0,
			spacingBottom: 0,
			width:284,
			height:285
		},
		credits: {
			enabled: false
		},
		plotOptions: {
			pie: {
				borderColor: '#ffffff',
				borderWidth: 0,
				enableMouseTracking: false,
				animation: true,
				stickyTracking: false
			}
		},
		legend: {
			enabled: true,
			align: 'left'
			
		},
		tooltip: {
			formatter: function() {
					return this.point.name +': '+ this.y +' ';
				}
		},
		exporting: {
			enabled: false
		},
		title: {
			text: null
		},
		subtitle: {
			text: null
		},
		
		series: [
		{
			type: 'pie',
			name: id,
			size: '80%',
			innerSize: '15%',
			borderColor: '#ffffff',
			borderWidth: .25,
			enableMouseTracking: false,
			tooltip: {
				enabled: false
			},
			data: gdata,
			dataLabels: {
				enabled: false
			}
		},{
			type: 'pie',
			name: id,
			size: '50%',
			innerSize: '48%',
			borderColor: '#ffffff',
			borderWidth: 0,
			enableMouseTracking: false,
			tooltip: {
				enabled: false
			},
			data: data,
			dataLabels: {
				enabled: false
			}
		}					
		]
	});
	return chart;

}

// Accordion
function Accordion(container) {
	var post = getParameterByName('post');
	$(container).find('li h4').each(function(){
		var my_content = $(this).next();
		var my_parent = $(this).parent();

		if ('post_'+post === my_parent.attr('id')) {
			// don't slide up the content
			setTimeout(function(){
				$('html,body').animate({scrollTop: $('#post_'+post).offset().top},'slow');
			},1500);
			
		} else {
			my_content.hide();
		}
		my_parent.removeClass('down');
		$(this).click(function(e){
			e.preventDefault();
			if (my_parent.hasClass('down')) {
				my_parent.removeClass('down');
				my_content.slideUp();
			} else {
				my_parent.addClass('down');
				my_content.slideDown();
			}
		
		
		});
	
	});

}

function getParameterByName( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return decodeURIComponent(results[1].replace(/\+/g, " "));
}

// Content page slider
function SlideShow(slideContainer) {

	var slidesWrapper = $(slideContainer);
	
		
	if (slidesWrapper.find('ul#slideshow_images').length < 1) {
		// turn off caption
		var caption = $(slidesWrapper.find('p'));
		if (caption.html() == '') {
			caption.hide();
		}
		return false;
	}
	
	
	slidesWrapper.css('overflow','hidden');
	var mask = slidesWrapper.find('span');
	var mask_class = mask.attr('class');
	
	var sh = mask.height();
	var slides = $(slidesWrapper.find('ul').get(0));
	

	var captions_array = [];
	var slideWidth = parseInt(slidesWrapper.width())+5;
	var current_slide = 1;
	// add the slides to the correct ul
	var slidesCount = 1;
	slidesWrapper.find('ul#slideshow_images').find('li').each(function(){
		slidesCount++;
		var my_caption = $(this).find('p');
		captions_array[slidesCount] = my_caption.html();
		my_caption.remove();
		slides.append($(this));
	});
	slidesWrapper.find('ul#slideshow_images').remove();
	slides.css('width',(slidesCount*slideWidth)+15).addClass('wrap').css('position','relative').css('left',0);
	slides.css('height',sh)
	
	slides.find('li').each(function(){
		$(this).css('text-align','left').css('width',slideWidth).css('height',sh).css('float','left').css('display','block').prepend('<span class="'+mask_class+'"></span>');
		//.css('margin-right','5px');
	});
	var p_pos = slideWidth-78;
	var n_pos = slideWidth-44;	
	if (slideWidth == 474) {
		p_pos = slideWidth-73;
		n_pos = slideWidth-39;
	} 
	if (slidesWrapper.parent().hasClass('accordion-content')) {
		p_pos = slideWidth-78;
		n_pos = slideWidth-44;
	} 

	var prev = $('<a class="previous">Previous</a>').css('z-index',100).css('left',p_pos);
	var next = $('<a class="next">Next</a>').css('z-index',100).css('left',n_pos);
	

	
	slidesWrapper.prepend(prev).prepend(next);
	
	// find caption p
	var caption = $(slidesWrapper.find('p'));
	if (caption.length < 1) {
		caption = $('<p></p>');
		slides.after(caption);
		captions_array[1] = '';
		caption.hide();
	} else {
		captions_array[1] = caption.html();
	}
	prev.hide();
	if (caption.html() == ' &nbsp;' || caption.html() == '') {
		caption.hide();
	}
	next.add(prev).bind('click',function(e){
		e.preventDefault();
		
		if (slides.is(':animated')) {
			return false;
		} else {
			slides.stop();

			var leftOffset = parseInt(slides.css('left'));
			
			if ($(this).hasClass('next')) {
				//if (slides.width() + leftOffset > wrapperWidth) {
				
				if (-leftOffset < slideWidth*(slidesCount-1)) {
					prev.show();
					current_slide++;
					caption.html(captions_array[current_slide]);
					if (caption.html() == ' &nbsp;' || caption.html() == '') {
						caption.hide();
					} else {
						caption.show();
					}
					slides.stop().animate({left: leftOffset - slideWidth + 'px'},'slow');
					if (-leftOffset+slideWidth >= slideWidth*(slidesCount-1)) {
						next.hide();
					}
				} else {
					next.hide();
				}	
		
			} else if ($(this).hasClass('previous')) {
				if (leftOffset < 0) {
					next.show();
					current_slide--;
					caption.html(captions_array[current_slide]);
					if (caption.html() == ' &nbsp;' || caption.html() == '') {
						caption.hide();
					} else {
						caption.show();
					}
					slides.stop().animate({left: leftOffset + slideWidth + 'px'},'slow');
				}
				if (leftOffset + slideWidth >= 0) {
					prev.hide();
				}
			} else {
				prev.hide();
			}
		}
		
		return false;
	});

}



// Home page slider
function Slide(slideContainer){
	
	var slides = $(slideContainer);


	// add pager
	var pager = $('<ol class="pager horiz"></ol>');
	var prev = $('<li><a href="#" class="previous">Previous</a></li>');
	var next = $('<li><a href="#" class="next">Next</a></li>');
	var slide_array = [];
	var slidesCount = 0;
	pager.prepend(prev);
	
	$('li.slide', slides).each(function(){
		slidesCount++;
		var my_number = slidesCount;
		var new_slide = $('<li><a href="#">'+slidesCount+'</a></li>');
		new_slide.bind('click',function(e){
			e.preventDefault();
			slides.stop().animate({left: -slideWidth*(my_number-1) + 'px'},'slow');
			slide_array[current_slide].find('a').removeClass('active');
			current_slide = my_number;
			slide_array[current_slide].find('a').addClass('active');
			if (slideWidth*(my_number-1) >= slideWidth*(slidesCount-1)) {
				next.hide();
			} else {
				next.show();
			}
			if (-slideWidth*(my_number-1) >= 0) {
				prev.hide();
			} else {
				prev.show();
			}

			
			return false;
		});
		slide_array[slidesCount] = new_slide;
		pager.append(slide_array[slidesCount]);
		$(this).find('div').html(slidesCount);
	});
	slides.append('<li><span class="mask-576-grey"></span><ul><li><span style="display:block;background:#323232;width:576px;height:325px;"></span></li></ul></li>');
	slide_array[1].find('a').addClass('active');
	var current_slide = 1;
	
	pager.append(next);
	slides.parent().before(pager);
	slides.css('left',0);
	slides.css('position','relative');
	slideWidth = $('li.slide:first', slides).width() + 4;
	slides.width(slidesCount * slideWidth + slidesCount * 2);
	wrapperWidth = slides.parent().width();
	prev.hide();
	
	var leftOffset = parseInt(slides.css('left'));
	if (-leftOffset >= slideWidth*(slidesCount-1)) {
		next.hide();
	}
	
	
	
	
	next.add(prev).bind('click',function(e){
		e.preventDefault();
		//if(slideWidth * slidesCount < wrapperWidth) {
		//	return false;
		//}
		if (slides.is(':animated')) {
			return false;
		} else {
			slides.stop();

			var leftOffset = parseInt(slides.css('left'));
			
			if ($(this).find('a').hasClass('next')) {
				//if (slides.width() + leftOffset > wrapperWidth) {
				
				if (-leftOffset < slideWidth*(slidesCount-1)) {
					prev.show();
					slide_array[current_slide].find('a').removeClass('active');
					current_slide++;
					slide_array[current_slide].find('a').addClass('active');
					slides.stop().animate({left: leftOffset - slideWidth + 'px'},'slow');
					
					
					if (-leftOffset+slideWidth >= slideWidth*(slidesCount-1)) {
						next.hide();
					}
				} else {
					next.hide();
				}	
		
			} else if ($(this).find('a').hasClass('previous')) {
				if (leftOffset < 0) {
					next.show();
					slide_array[current_slide].find('a').removeClass('active');
					current_slide--;
					slide_array[current_slide].find('a').addClass('active');
					slides.stop().animate({left: leftOffset + slideWidth + 'px'},'slow');
				}
				if (leftOffset + slideWidth >= 0) {
					prev.hide();
				}
			} else {
				prev.hide();
			}
		}

		return false;
	});
} 





// Search pages
function ajaxPreview() {
	var is_inproduction = $('body').hasClass('films-production');
	if (!$('body').hasClass('film-search')) {
		if (!is_inproduction) {
			return false;
		}
	}
	var directory_div = $('div#directory-list');
	var ajax_ul = $('<ul id="ajax_ul"></ul>');
	//if (!is_inproduction) {
		directory_div.append(ajax_ul);
	//}
	
	var total_results = 0;
	
	// if (directory_div.hasClass('thumbs')

	directory_div.find('li:not(.col-titles)').each(function(){
		var my_id = total_results;
		$(this).attr('id','result_'+my_id);
		
		total_results++;
	
		// these are all result list
		var me= $(this).find('a');
		var url = me.attr('href');
		var my_top = $(this).position().top;
		me.click(function(e){
			e.preventDefault();
		
			if (me.hasClass('active')) {
				window.location = url;
				return false;
			}
			
			// first check if we don't have one open
			// if we do we need to close it and move the elements into the normal list
			// we also need to do this on changing the list mode
			if (ajax_ul.find('li').length > 0 || $('div#film-insert').length > 0) {
				_resetAjaxPreview('fast');
			}
			if (directory_div.hasClass('thumbs')) {
				me.addClass('active');
			} else {
				me.addClass('slideup');
				me.hide();
			}
			
			// try inserting first, then deal with ajax
			for (var i=my_id+1; i<=total_results-1; i++) {
				var check = $('li#result_'+i);
				if (directory_div.hasClass('thumbs')) {
					// if thumbs, find the end of the row
					if (check.position().top > my_top) {
						ajax_ul.append(check);
					}
				} else {
					ajax_ul.append(check);
				}
			}

			$.ajax({
				url: url+'.ajax',
				success: function(data){
				
					if(data.match(/could not open XML/) || data.match(/Page Not Found/) ){
						// no data file
						// Display message - Portrait could not be retrieved
						return false;
					}
				
					// insert details
					response = $(data);
					response.hide();
					var r_img = response.find('div#film-insert-image');
					var r_close = response.find('a.close');
					var r_buttons = response.find('div.buttons a.button')
					var r_details = $(r_buttons.get(0));
					r_details.attr('href',url);
					var r_research = $(r_buttons.get(1));
					if (!directory_div.hasClass('thumbs')) {
						r_img.hide();
					}
					r_close.click(function(e){
						e.preventDefault();
						_resetAjaxPreview('slow');
						return false;
					});
					r_details.click(function(e){
						e.preventDefault();
						 window.location = url;
						return false;
					});
					/*r_research.click(function(e){
						e.preventDefault();
						alert('add to research');
						return false;
					})*/
					
					
					ajax_ul.before(response);
					response.slideDown('slow',function(){
						if (directory_div.hasClass('thumbs')) {
							directory_div.addClass('fade-out');
						}
					});
				},
				timeout: 8000, 
				error: function(){window.location = url;}
			});
			
		
			return false;
		});
	
	});


}

function _resetAjaxPreview(mode) {
	
	
	var ajax_ul = $('ul#ajax_ul');
	
	if (ajax_ul.length > 0) {
		var normal_ul = $(ajax_ul.parent().find('ul').get(0));
		ajax_ul.find('li').each(function(){
			normal_ul.append($(this));
		});
		normal_ul.find('li a.active').removeClass('active');
		normal_ul.find('li a.slideup').slideDown(50).removeClass('slideup');
		ajax_ul.parent().removeClass('fade-out');
	}
	//if (mode == 'fast') {
		$('div#film-insert').remove();	
	//} else {
	//	if ($('div#film-insert').length > 0) {
	//		$('div#film-insert').slideUp(10,function(){
	//			$('div#film-insert').remove();
	//		});
	//	}
	//}
	//
	
}


function expandingOptions() {
	$('div.panel.expand h2').each(function(){
		
		$(this).click(function(){
			var parent = $(this).parent()
			if(parent.hasClass('up')) {
				parent.removeClass('up');
				parent.find('div').show();
			} else {
				parent.addClass('up');
				parent.find('div').hide();
			}
		});
		$(this).trigger('click');
	});

}

function autoSubmitSelects() {
	$('form#directory-form select.auto-submit').change(function(){
		$('form#directory-form').get(0).submit();
	});
}

function setUpGenres() {
	if ($('body').hasClass('filmmakers-list')) {
		return false;
	}
	if ($('body').hasClass('festival-list')) {
		var pagetype = 'category';
	} else {
		var pagetype = 'genre';
	}
	var is_genre = $('select#'+pagetype);
	if (is_genre.length > 0) {
		is_genre.attr('name',pagetype+'_old');
		
		var genre_filters = is_genre.parent().next();
		
		if (genre_filters.length > 0) {
		// get the existing ones if we have some
			is_genre.parent().parent().parent().prev().trigger('click');
		
			var genres = [];
			genre_filters.find('a').each(function(){
				_addGenre(true,1,'title',genre_filters,$(this),pagetype);
			});
			genre_filters.parent().parent().parent().trigger('click');
		}
		
		
		is_genre.change(function(e){
			if (genre_filters.length < 1) {
				genre_filters = $('<li class="filters"></li>');
				$(this).parent().after(genre_filters);
			}	
			//genre_filters.append('<a><input type="hidden" name="genre[]" value="1">Title</a>');
			var text = $('select#'+pagetype+' :selected').text();
			var create_filter = _addGenre(false,is_genre.val(),text,genre_filters,undefined,pagetype);
			if (create_filter != false) {
				genre_filters.append(create_filter);
				$('form#directory-form').get(0).submit();
			}
			is_genre.val('');
		});
	}
}


function _addGenre(override,value,title,genre_filters,genre,pagetype) {
	//check if this value is already in the parent object
	//console.log(genre_filters.find('a#'+pagetype+'_'+value).length);
	if (value !== '') { 
		if (genre_filters.find('a#'+pagetype+'_'+value).length < 1 || override) {	
			if (genre == undefined) { 
				var genre = $('<a id="'+pagetype+'_'+value+'"><input type="hidden" name="'+pagetype+'[]" value="'+value+'">'+title+'</a>');
			}
			genre.click(function(e){
				e.preventDefault();
				genre.remove();
				$('form#directory-form').get(0).submit();
				return false;
			});
			
			return genre;
		} else {
			genre_filters.find('a#'+pagetype+'_'+value).fadeIn(100).fadeOut(100).fadeIn(100).fadeOut(100).fadeIn(100).fadeOut(100).fadeIn(100);
			return false;
		}
	} else {
		return false;
	}
}

function directoryListThumb() {
	var is_directory = $('#directory-list');
	if ($('body').hasClass('festival-list') || $('body').hasClass('filmmakers-list') || $('body').hasClass('films-production')) {
		return false;
	} else {
		if (is_directory.length > 0) {
			// make exception for ie 7 and lower
			if ($.browser.msie) {
				var major = parseInt($.browser.version.split('.'));
				if (major < 6) {
					return false;
				}
			}


			var container = $('<li><label>Show as:</label></li>');
			var select = $('<select></select>');
			var thumbs = $('<option value="Thumbnails" selected="selected">Thumbnails</option>');
			var list = $('<option value="List">List</option>');
			select.append(thumbs);
			select.append(list);
			container.append(select);
			
			is_directory.addClass('thumbs');
			
			var list_ul = $(is_directory).find('ul');
			
			
			//var thumbs = $('<option value="Thumbnails"></option>');
			$('ul.add_show').prepend(container);
			
			select.change(function(e){
				e.preventDefault();
				_resetAjaxPreview('fast');
				if (select.val() == 'List') {
					is_directory.removeClass('thumbs');
				} else {
					is_directory.addClass('thumbs');
				}
				return false;
			});
				
		}
	}

}
