var gsearch = {
	name: 'cse-search-box',
	facet: [],
	movieAdded: [],
	storytellerAdded: [],
	truthseekersAdded: [],
	searchText:'',
	numPerPage: 10,
	hasMore: false,
	currentPage: 1,
	timer: false,
	
	init: function() {
		google.search.CustomSearchControl.attachAutoCompletion(
            $('#cx').val(),
            document.getElementById('searchText'),
            'search-form');
        
        $('#searchText').keypress(function(e) {        	
			if(e.keyCode==13) {
				e.stopPropagation();
				return gsearch.submit();
			}
			else {
				return true;
			}
		});
		
		$('input[name=sa]').bind('click',function(e){
			return gsearch.submit();
		});
		
		gsearch.initScrollSearch();
		
		if(gsearch.isSearchPage()) {
			var query = unserialize(location.hash.toString().substring(1));
			if(typeof(query['label'])!='undefined' && query['label']!='') {
				var lbl = decodeURIComponent(query['label']);
				$('#label').val(lbl);
			}
			if(typeof(query['q'])!='undefined' && query['q']!='') {
				var q = decodeURIComponent(query['q']);
				$('#searchText').val(q);
				gsearch.doSearch(q);
			}
			gsearch.loadNoResultDiv();
		}
		
		if(gsearch.isIE7()) {
			setInterval("$('.gsc-completion-container').attr('cellspacing',0);", 10);
		}
	},
	
	isIE7: function()
	{
		return $.browser.msie && $.browser.version.substr(0,1)==7;
	},
	
	initScrollSearch: function() {
		var offset = 370;
		$(window).scrollTop(0);
		$(window).scroll(function() {
			if(gsearch.timer) return;
			if(!gsearch.isSearching() && $(window).scrollTop() >= $(document).height()-$(window).height()-offset){
				gsearch.timer = true;
				gsearch.doNextSearch();
				setTimeout('gsearch.clearTimer()',1500);
			}
		});
	},	
	clearTimer: function() {
		gsearch.timer = false;
	},
	isSearchPage: function() {
		return window.location.toString().indexOf('gsearch.php')!=-1;
	},
	checkValue: function() {
		var $field = $('#searchText');
		if($field.val()=='' || trim($field.val())==''){
			alert('Please enter search text.');
			return false;
		}
		$field.val($field.val().replace(/"/g,''));
		return true;
	},
	disableForm: function() {
		$('#searchText').attr('disabled',true);
	},
	enableForm: function() {
		$('#searchText').attr('disabled',false);
	},
	isSearching: function() {
		$('#searchText').attr('readonly') == 'readonly';
	},
	submit: function(form) {
		if(!gsearch.isSearching()) {
			if(this.checkValue()) {
				if(gsearch.isSearchPage()) {
					$('#label').val('');
					gsearch.searchText = $('#searchText').val();
					gsearch.doSearch(gsearch.searchText);
				}
				else {
					window.location = $('#'+gsearch.name).attr('action') + '#q=' + encodeURIComponent($('#searchText').val());
				}
			}
			else {
				gsearch.enableForm();
			}
		}
		return false;
	},
	showHideLoadingIcon: function(show) {
		if(show) {
			$('#loadingIcon').show();
		}
		else {
			$('#loadingIcon').hide();
		}
	},
	doNextSearch: function() {
		if(gsearch.hasMore) {
			if(gsearch.isSearching()) {
				return;
			}
			
			gsearch.showHideLoadingIcon(true);
			
			var val = $('#searchText').val();			
			++gsearch.currentPage;
			
			var start = (gsearch.currentPage-1)*gsearch.numPerPage;
			gsearch.disableForm();
			
			// add tag to the search
			var label = $('#label').val();
			if(label=='') {
				label = 'movies';
				$('#label').val(label);
			}
			val += ' more:'+label;
			var _url = 'http://www.google.com/cse?output=xml&num='+gsearch.numPerPage+'&start='+start+'&cx='+$('#cx').val()+'&q=' + escape(val);
			var _yql = 'select * from xml where url="'+_url+'"';
			
			$.ajax({
				url: 'http://query.yahooapis.com/v1/public/yql?format=xml&_maxage=3600&q='+URLEncode(_yql),
				dataType: 'jsonp',
				jsonpCallback: 'gsearch.searchResultHandler'			
			});
		}
	},	
	doSearch: function(val) {
		if(gsearch.isSearching()) {
			return;
		}
		
		gsearch.currentPage = 1;
		
		var start = (gsearch.currentPage-1)*gsearch.numPerPage;
		gsearch.disableForm();
		gsearch.showHideLoadingIcon(true);
		
		$('#searchText').val(val);
		$('#searchText').blur();
		$('#search-header > span').html(val);
		// add tag to the search
		var label = $('#label').val();
		if(label=='') {
			label = 'movies';
			$('#label').val(label);
		}
		gsearch.updateLocation(val, label);				
		val += ' more:'+label;
		var _url = 'http://www.google.com/cse?output=xml&num='+gsearch.numPerPage+'&start='+start+'&cx='+$('#cx').val()+'&q=' + escape(val);
		var _yql = 'select * from xml where url="'+_url+'"';
		$('#search-result-list').html('');
		$('#cse-search-results').hide();
		gsearch.facet = [];
		gsearch.movieAdded = [];
		gsearch.storytellerAdded = [];
		gsearch.truthseekersAdded = [];
		
		$('#suggestion').remove();
		$('#po > tbody > tr').remove();
		
		$.ajax({
			url: 'http://query.yahooapis.com/v1/public/yql?format=xml&_maxage=3600&q='+URLEncode(_yql),
			dataType: 'jsonp',
			jsonpCallback: 'gsearch.searchResultHandler'			
		});
	},	
	applyFilter: function(label) {
		$('#label').val(label);
		//gsearch.doSearch(gsearch.searchText);
		gsearch.doSearch($('#searchText').val());		
	},	
	searchResultHandler: function(data) {
		gsearch.showHideLoadingIcon(false);
		
		if(data.results.length>0) {
			var $xml;
			
			if(!window.DOMParser) { // IE
				var xmlDoc = new ActiveXObject( "Microsoft.XMLDOM" );
				xmlDoc.async = false;
				xmlDoc.loadXML( data.results[0] );
				$xml = $(xmlDoc);
			}
			else {
				 $xml = $(data.results[0]);
			}
			
			var searchText = $('#searchText').val();
			
			gsearch.hasMore = $xml.find('NU').length>0;
			
			$xml.find('FacetItem').each(function(){
				var lbl = $(this).find('label').text();
				var txt = $(this).find('anchor_text').text();
				if(lbl!='' && txt!='') {
					if(lbl=='movies') txt='Films';
					else if(lbl=='truth_seekers') txt='Truth Seekers (Essays)';
					gsearch.facet.push({'label' : lbl, 'text': txt })
				}
			});
			
			gsearch.addRefineList(searchText);
		//	$('#searchText').val('');
			
			var res = $xml.find('R');
			var q = $xml.find('Q').text().replace(/^.*more:(.*)$/,'$1');

			if(res.length>0) {
				$('#no-results').hide();
				$('#cse-search-results').show();
				res.each(function(){
					var label = $(this).find('Label').last().text();
					if(label=='movies' || q=='movies') {
						gsearch.addMovieResult($(this), searchText);
					}
					else if(label=='story_tellers' || q=='story_tellers') {
						gsearch.addStoryTellerResult($(this), searchText);
					}
					else if(label=='truth_seekers' || q=='truth_seekers') {
						gsearch.addTruthSeekerResult($(this), searchText);
					}
					else {
					//	gsearch.addResult($(this), searchText);
					}
				});		
				gsearch.enableForm();
				return;
			}
			
		}
		
		var suggestion_link = (typeof($xml)!='undefined') ?  $xml.find('Suggestion').attr('q') : null;
		var suggestion_text = '';
		if(suggestion_link!=null) {
			suggestion_text = suggestion_link.replace('more:movies','').replace('more:story_tellers','').replace('more:truth_seekers','');
			var elm = '<p id="suggestion" class="suggestion"><span>Did you mean: </span>';
			elm += '<a href="#" onclick="gsearch.doSearch(\''+suggestion_text+'\');return false;">'+suggestion_text+'</a></p>';
			
			$(elm).insertAfter($('#cse-search-results'));
		}
		
		
		$('#cse-search-results').hide();
		/*
		if($('#no-results').html()=='') {
			gsearch.loadNoResultDiv();
		}
		*/
		$('#no-results').show();
		
		gsearch.enableForm();		
		//$('#searchText').val('');
	},
	
	loadNoResultDiv: function() {
		var isFilmedia = location.toString().indexOf('/filmedia/')!=-1 ? 1 : 0;
		//$('#no-results').load('/gsearch/noResultList.php?filmedia='+isFilmedia);
		$.ajax({
			url: '/gsearch/noResultList.php',
			data: { filmedia: isFilmedia },
			dataType: 'html',
			success: function(data) {
				$('#no-results').html(data);
				initMovieInfoPopup($('#no-results').find('.previewPlayerThumbnail'));
			}
		});
	},
	
	getFacetText: function(label) {
		for(var i=0;i<gsearch.facet.length;i++) {
			var facet = gsearch.facet[i];
			if(facet.label==label)
				return facet.text;
		}
		return '';
	},
	
	updateLocation: function(q, label) {
		location.hash = 'q='+escape(q) + '&label='+label;
	},
	
	addRefineList: function(searchText) {
		$('#refine > i').text(searchText);
		$('#po').removeClass('movies story_tellers truth_seekers').addClass($('#label').val());
		/*
		if(gsearch.facet.length>0) {
			$('#refine').html('Refine results for <i>'+searchText+':</i>');
			$('#po').removeClass('movies story_tellers truth_seekers').addClass($('#label').val());
			var list = '';
			for(var i=0;i<gsearch.facet.length;i++) {
				var facet = gsearch.facet[i];
				var link = 'gsearch.php?q='+escape(searchText)+'&label='+facet.label;
				if(i>0)
					list += '&nbsp;&nbsp;|&nbsp;&nbsp;';
				list += '<span class="l2"><a href="'+link+'" onclick="gsearch.applyFilter(\''+facet.label+'\');return false;" class="'+facet.label+'">'+facet.text+'</a></span>';
			}
			$('#po').html(list);
		}
		*/
	},
	
	addResult: function($xml, searchText) {
		var title = $xml.find('T').text();
		var desc = $xml.find('S').text();
		var link = $xml.find('U').text();
		var label = $xml.find('Label').last().text();
		var strLabel = gsearch.getFacetText(label); // label.replace(/^(.)|\s(.)/g, function($1){ return $1.toUpperCase( ); });
		var strLink = link.replace(/^http:\/\/(.*)/, '$1').replace(/^(.*\/play\/\d+\/[^/]+)\/.*$/, '$1');
		var labelLink = 'gsearch.php?q='+escape(searchText)+'&label='+label;
		
		var elm = '<h2 class="r"><a class="l" target="_top" href="'+link+'">'+title+'</a></h2>'
				  + '<div class="std">'+desc+'<br><span class="a">'+strLink+'</span><br>Labeled <a href="'+labelLink+'" class="fl">'+strLabel+'</a></div>';
		$('#search-result-list').append('<li>'+elm+'</li>');
	},
	
	addMovieResult: function($xml, searchText) {
		var movieId = $xml.find('U').text().replace(/^http:\/\/.*\/play\/(\d+).*$/,'$1');
		
		if($.inArray(movieId, gsearch.movieAdded)!=-1)
			return;
		
		$('#search-result-list').append('<li><div id="se-m-'+movieId+'" style="display:none"></div></li>');
		gsearch.movieAdded.push(movieId);		
		
		$.ajax({
			url: '/ajax/getMovie.php',
			data: { movieId: movieId },
			dataType: 'json',
			cache: true,
			success: function(data) {
				var div = '#se-m-'+movieId;
				
				if(data.id==null || data.id=='null') {					
					 $(div).parent().remove();
					return;
				}
				
				if($(div).html()!='') {
					return;
				}
				
				var isFilmedia = location.toString().indexOf('/filmedia/')!=-1;
				var view = isFilmedia ? 'thumb' : 'grid';
				
				var genreLink = 'films.php?view='+view+'&listType=genre&id='+data.genreId;
				var countryLink = 'films.php?view='+view+'&listType=country&tags='+data.countryId;

				var elm = '<table cellspacing="5" cellpadding="0" class="search-result-item"><tr>';
				// image
				elm += '<td class="thumb-container"><a target="_top" href="'+data.playerLink+'"><img src="'+data.small_thumb+'" class="movie-thumb"/></a></td>';
				// info
				elm += '<td><h2 class="r"><a class="l" target="_top" href="'+data.playerLink+'" id="s-m-title-'+movieId+'">'+em(data.title, searchText)+'</a>';
				elm += '<span class="g">';
				if(data.title!=null && data.title.length>50) {
					elm += '...<br/>';
				}
				elm += '(<a href="'+genreLink+'">'+data.genre+'</a> | '+timeToString2(data.duration)+')</span></h2>';
				elm += '<div class="std"><div class="syno" id="syno_'+movieId+'">'+em(data.synopsis, searchText)+'&nbsp;</div>';
				elm += '<div>Director: '+data.director+' | Producer: '+data.producer+'</div>';
				elm += '<div class="bl">Produced In: '+data.year+' | Country: <a href="'+countryLink+'">'+data.country+'</a> | ';
				elm += 'Tags: '; 
				for(var i=0;i<data.movieTags.length;i++){
					if(i>0) elm += ', ';
					if(isFilmedia) {
						elm += data.movieTags[i].replace('/festival/','/filmedia/').replace('view=grid','view=thumb');
					}
					else {
						elm += data.movieTags[i];
					}
				}
				elm += '</div></div></td>';
				elm += '</tr></table>';
				$(div).html(elm);
				$('#syno_'+movieId).expander({
					slicePoint: 90,
					expandText:'',
					userCollapseText:''

				});
				
				if($('#s-m-title-'+movieId).text().length>72) {
					$('#s-m-title-'+movieId).attr('title',data.title)
				}
				$('#s-m-title-'+movieId).expander({
					slicePoint: 72,
					expandText:'',
					userCollapseText:''

				});
				//$('#syno_'+movieId).widthTruncate().show();
				$(div).show();
			}
		});	
	},
	
	addStoryTellerResult: function($xml, searchText) {
		var screenName = URLDecode($xml.find('U').text().replace(/^http:\/\/.*\/storyteller\/([^\/]+)(.*)?$/,'$1'));

		if($.inArray(screenName, gsearch.storytellerAdded)!=-1)
			return;
		var id = screenName.replace(/(\s|-)/g,'_');
		$('#search-result-list').append('<li><div id="se-m-'+id+'" style="display:none"></div></li>');
		gsearch.storytellerAdded.push(screenName);		
		
		$.ajax({
			url: '/ajax/getStoryteller.php',
			data: { sn: screenName },
			dataType: 'json',
			cache: true,
			success: function(data) {
				var div = '#se-m-'+id;
				
				if(data.name==null || data.name=='null') {		
					 $(div).parent().remove();
					return;
				}
				
				var tagLink = 'films.php?view=grid&listType=tag&tags=';
				var counter = 0;
				
				var elm = '<table cellspacing="5" cellpadding="0" class="search-result-item"><tr>';
				// image
				elm += '<td class="photo-container"><a target="_top" href="'+data.link+'"><img src="'+data.photo+'" class="photo-thumb"/></a></td>';
				// info
				elm += '<td><h2 class="r"><a class="l" target="_top" href="'+data.link+'">'+em(data.name, searchText)+'</a>, <span>from</span> '+data.country+'</h2>';
				// films
				elm += '<div class="std"><div class="bl"><span>Film(s):</span>&nbsp;';
				for(var x in data.films) {
					if(counter>2) {
						elm += ', <a href="'+data.link+'">More...</a>';
						break;
					}
					if(counter++>0)
						elm +=', ';
					var name = data.films[x].replace(/\s/,'_');
					elm += '<a href="/documentary/watch-online/play/'+x+'/'+name+'">'+data.films[x]+'</a>';
				}
				elm += '</div>';
				// tags
				elm += '<div class="bl"><span>About:</span>&nbsp;';
				counter = 0;
				for(var x in data.tags) {
					if(counter>5) 
						break;
					if(counter++>0)
						elm +=', ';
					elm += '<a href="'+tagLink+x+'">'+data.tags[x]+'</a>';
				}
				elm += '</div>';
				elm += '</div></td>';
				elm += '</tr></table>';
				$(div).append(elm);
				$(div).show();
			}
		});
	},
	
	addTruthSeekerResult: function($xml, searchText) {
		var id = $xml.find('C').attr('CID');
		
		if($.inArray(id, gsearch.truthseekersAdded)!=-1)
			return;
		
		var title = $xml.find('T').text().replace(/^Truth Seekers:.(.*)$/, '$1');
		var link = $xml.find('U').text();
		var desc = $xml.find('S').text().replace(/^([^<]+<b>...<\/b>).(.*)$/,'$2');
		
		var elm = '<table cellspacing="5" cellpadding="0" class="search-result-item"><tr>';
				// image
				elm += '<td class="ts-thumb-container" id="img-'+id+'"></td>';
				// info
				elm += '<td><h2 class="r" id="se-ts-'+id+'"><a class="l" target="_blank" href="'+link+'">'+title+'</a></h2>';
				elm += '<div class="std"><div class="syno" id="syno_'+id+'">'+desc+'&nbsp;</div>';
				elm += '<div id="ts-author-'+id+'"></div>';
				elm += '</div></td>';
				elm += '</tr></table>';
		
		$('#search-result-list').append('<li id="slst-'+id+'"><div id="se-t-'+id+'" style="display:none">'+elm+'</div></li>');
		gsearch.truthseekersAdded.push(id);		
		
		$.ajax({
			url: '/ajax/getTruthSeeker.php',
			data: { url: link },
			dataType: 'json',
			cache: true,
			success: function(data) {
				if(data.title==null || data.title=='null') {
					 $('#slst-'+id).remove();
					return;
				}
	
				$('#se-ts-'+id+' > a').html(data.title);
				
				var imgUrl = data.image;
				if(imgUrl=='null' || imgUrl == null) {
					imgUrl = '/images/spacer.gif';
				}
				var elm = '<a target="_blank" href="'+link+'" class="ts-img-holder"><img src="'+imgUrl+'" class="ts-thumb"/></a>';
				$('#img-'+id).html(elm);
				
				// author
				var author = data.author;
				if(author!='null' && author!=null) {
					var profile_link = 'http://truthseekers.cultureunplugged.com/truth_seekers/' + author.toLowerCase().replace(/\s/g,'_') + '.html';
					$('#ts-author-'+id).html(
						'Posted on ' + data.postDate + ' by <a target="_blank" href="'+profile_link+'">' + author + '</a>'
					);
				}
				
				$('#se-t-'+id).show();
			}
		});
	}
	
};

google.load('search', '1');
google.setOnLoadCallback(gsearch.init);

function em(str, word) {
	if(str=='' || str==null) return str;

	var regex = new RegExp('(' + word + ')', 'gi' );
	return str.replace(regex, "<b>$1</b>");
}

function unserialize(data){
	var data = data.split("&");
	var serialised = new Array();
	$.each(data, function(){
		var prop = this.split("=");
		serialised[prop[0]] = prop[1];
	});
	return serialised;
}

function timeToString(duration) {
	var d = duration.split(':');
	var min = parseInt(d[d.length-2].replace(/^0+/,''));
	//var sec = parseInt(d[1].replace(/^0+/,''));
	var hour = 0;
	if(d.length>2) {
		hour = parseInt(d[d.length-3].replace(/^0+/,''));
	}
	//min = min%60;
	var str = '';
	if(hour>0) str = hour + ' hr ';
	str += min + ' mins';
	return str;
	
}

function timeToString2(duration) {
	return (duration.length<6) ? ('00:'+duration) : duration;
	
}

if(!window.trim) {
function trim(str){ return str.replace(/^\s+|\s+$/g,"");}
}

