/**
 * @author thespiritx
 */
Array.prototype.exists = function(search){
  for (var i=0; i<this.length; i++)
    if (this[i] == search){
    	if(!arguments[1]) return true;
    	return i;
    }
	return false;
};
var $S = function(){
	var stop = false;
	if (!$S.runonce) {
		$S.runonce = true;
		if (typeof window.searchsetup != 'undefined') {
			var searchsetup = window.searchsetup.split(';')
			for(var n in searchsetup){
				if (!isNaN(n)) {
					attribute = searchsetup[n].split(':');
					skey = attribute[0];
					svalue = attribute[1];
					if (skey == 'type') {
						$S.searchType(svalue);
						stop = true;
					}
					else {
						$S.filters[skey] = svalue;
					}
				}
			};
		}
	}
	var r = $S.keywords();

	var update = '#ajaxframe';
	var url = '/kstream/base/search.php';
	
	if(!stop)
		$.ajax({
			'url': url,
			type: 'post',
			data: $S.filters,
			beforeSend: function(){
				$S.loading('#results');
				if (r) {
					$('#relatedShow').hide();
					$S.filters.start = 0;
				}
				window.scroll(0,0);
			},
			success: function(data){
				$S.resultData.total = data['number'];
				$S.resultData.offset = data.start;
				$S.results = data.results;
				/*$S.reorder($S.filters.sort,true);*/
				$S.display('#results');
			},
			dataType: 'json'
		});
};
$S.runonce = false;
$S.prepare = function(data){
	return data;
}
$S.address = {
	content: 'http://www.wgte.org/wgte/',
	users: 'http://www.wgte.org/wgte/users/',
	image_ext: '_l.jpg'
};
$S.detect = function(e){
	var key;
	if(window.event){
		key = window.event.keyCode;
	}else{
		key = e.which;
	}
	if(key == 13) $S();
	return false;		
}
$S.filters = {
	keywords: '',
	type: 'official',
	results: 20,
	start: 0,
	showing: 0,
	date: {
		month: '',
		day: '',
		year: ''
	},
	media: '',
	rating: 0,
	tag: '',
	sort: 'title',
	order: 'forward'
};
$S.results = [];
$S.resultData = {
	total: 0,
	offset: 0
}; 
$S.loading = function(elm){
	$(elm).html('');
	var img = $('<img/>');
		$(img).attr({
			'border': '0',
			'alt': 'Loading...',
			'width': '32',
			'src': '/kstream/images/search/ajax-loader.gif'
		});
	img.addClass('loadingImage');
	$(elm).append(img);
};
$S.expand = function(item){
	if( $(item).find('.details').hasClass('hidden') ){
		$(item).css({'height':'100px'});
		$(item).find('.details').removeClass('hidden');
	}else{
		$(item).css({'height':'30px'});
		$(item).find('.details').addClass('hidden');
	}
};
$S.selectList = [];
$S.selectBox = function(e){
	if($(e).attr('rel') == 'open'){
		$S.selectClose(e);
	}else{
		$S.selectOpen(e);
	}
}
$S.selectOpen = function(e){
	$(e).find('.options').css({'display':'block'});
	$S.selectList[$S.selectList.length] = e.id;
	$(e).attr('rel','open');
	setTimeout('$(document.body).click($S.selectClose);',500);
};
$S.selectClose = function(e){
	$('.select').each(function(key, value){
		$(value).find('.options').css({'display':'none'});
		$(value).attr('rel','closed');
	});
	$(document.body).unbind('click');
};
$S.spcSelectClose = function(e){
	if($S.selectList.exists(e)){
		$(e).find('.options').css({'display':'none'});
		$(document.body).unbind('click');
	}
};

// ALTER FILTER
$S.keywords = function(){
	var r = $S.filters.keywords==$('#keywords_value').val()?false:true;
	$S.filters.keywords = $('#keywords_value').val();
	return r;
};
$S.media = function(type){
	if($S.filters.media.indexOf(type) >= 0){
		var arr = $S.filters.media.split(',');
		$S.filters.media = '';
		for( var i in arr ){
			if((typeof arr[i] == 'string' || typeof arr[i] == 'numeric') && arr[i] != ''){
				if(arr[i] != type){
					$S.filters.media += arr[i]+',';
				}
			}
		}
		$('#media_'+type).removeClass('statusActive');
		$('#media_'+type).addClass('statusInactive');
	}else{
		$S.filters.media += type+',';
		$('#media_'+type).removeClass('statusInactive');
		$('#media_'+type).addClass('statusActive');
	}
	$S.display('#results');
};
$S.rating = function(ui, type, rating){
	$S.filters.rating = rating;
	$S.display('#results');
};

$S.change = function(f){
	$('#sort').children().each(function(key, value){
		$(value).removeClass('statusActive');
		$(value).addClass('statusInactive');
		$(value).find('.direction').remove();
	});
	var divid = '#sort_'+f;
	$(divid).removeClass('statusInactive');
	$(divid).addClass('statusActive');

	$S.loading('#results');
	$S.reorder(f);
	$S.change.image(f);
	$S.display('#results');
};
$S.change.image = function(f){
	var src = '';
	if($S.filters.order == 'reverse'){
		src = 'arrow_ac6604.png';
	}else{
		src = 'arrow_ac6604_rev.png';
	}
	var divid = '#sort_'+f;
	var image = $('<img/>').attr('src', '/wgte/images/search/'+src).addClass('direction');
	$(divid).append(image);
}
$S.reorder = function(SortValue){
	var tempArray = $S.results;
	valueList = [];
	valueKeys = [];
	lastList = [];
	newArray = [];
	var hold = false;
	if(arguments[1]) hold = true;
	for (var z in tempArray){
		if (String(parseInt(z)) != "NaN"){
			var tmpValue = eval("tempArray[z]."+SortValue+";");
			valueKeys[valueKeys.length] = tmpValue;
			valueList[valueList.length] = {'key':tmpValue,'value':z};
		}
	}
	if (String(parseInt(valueKeys[0])) != "NaN"){
		valueKeys.sort(function(a,b){return a - b});
	}else{
		valueKeys.sort(function(a,b){
			var a = String(a).replace(/^\s+|\s+$/g,'').toUpperCase(); 
			var b = String(b).replace(/^\s+|\s+$/g,'').toUpperCase(); 
			if (a > b) 
				return 1 
			if (a < b) 
				return -1 
			return 0;
		});
	}
	if (SortValue == $S.filters.sort && $S.filters.order == 'reverse' && !hold){
		valueKeys.reverse();
	}
	for(var i in valueKeys){
		if (String(parseInt(i)) != "NaN"){
			for (var j in valueList){
				if (String(parseInt(j)) != "NaN"){
					if (valueList[j].key == valueKeys[i]){
						if (!lastList.exists(valueList[j].value)){
							lastList[lastList.length] = valueList[j].value;
							break;
						}
					}
				}
			}
		}
	}
	for(var i in lastList){
		if (String(parseInt(i)) != "NaN"){
			newArray[newArray.length] = tempArray[lastList[i]];
		}
	}
	/*
	if(window.console) console.log({
		'SortValue': SortValue,
		'sort': $S.filters.sort,
		'order': $S.filters.order
	});
	*/
	if (SortValue == $S.filters.sort){
		if ($S.filters.order == "forward"){
			$S.filters.order = "reverse";
		}else{
			$S.filters.order = "forward";
		}
	}else{
		$S.filters.order = "reverse";
	}
	$S.filters.sort = SortValue;
	$S.results = newArray;
};
$S.typeimg = function(type){
	switch(type){
		case 1:
		case '1':
			return 'images/search/audio.png';
			break;
		case 2:
		case '2':
			return 'images/search/video.png';
			break;
		case 4:
		case '4':
			return 'images/search/digital.png';
			break;
		case 5:
		case '5':
			return 'images/search/font.png';
			break;
		case 0:
		case '0':
			return 'images/search/user.png';
			break;
		case 6:
		case '6':
			return 'images/search/page_white_world.png';
			break;
		case 7:
		case '7':
			return 'images/search/television.png';
			break;
		case 3:
		case '3':
		default:
			return 'images/search/images.png';
			break;
	}
};
$S.typeimg_text = function(type){
	switch(type){
		case 1:
		case '1':
			return 'Audio';
			break;
		case 2:
		case '2':
			return 'Video';
			break;
		case 4:
		case '4':
			return 'Digital';
			break;
		case 5:
		case '5':
			return 'Text';
			break;
		case 0:
		case '0':
			return 'Profile';
			break;
		case 3:
		case '3':
		default:
			return 'Image';
			break;
	}
};
$S.tag = function(keyword){
	$('#keywords_value').val(keyword);
	$S();
};
$S.date = function(type,value){
	switch(type){
		case 'day':
			$S.filters.date.day = value;
			$S.spcSelectClose('#day_drop');
			$('#day_drop').find('.text').html(value!=''?value:'---');
			break;
		case 'month':
			$S.filters.date.month = value;
			$S.spcSelectClose('#month_drop');
			switch(value){
				case 1:
				case '1':
					$('#month_drop').find('.text').html('January');
					break;
				case 2:
				case '2':
					$('#month_drop').find('.text').html('February');
					break;
				case 3:
				case '3':
					$('#month_drop').find('.text').html('March');
					break;
				case 4:
				case '4':
					$('#month_drop').find('.text').html('April');
					break;
				case 5:
				case '5':
					$('#month_drop').find('.text').html('May');
					break;
				case 6:
				case '6':
					$('#month_drop').find('.text').html('June');
					break;
				case 7:
				case '7':
					$('#month_drop').find('.text').html('July');
					break;
				case 8:
				case '8':
					$('#month_drop').find('.text').html('August');
					break;
				case 9:
				case '9':
					$('#month_drop').find('.text').html('September');
					break;
				case 10:
				case '10':
					$('#month_drop').find('.text').html('October');
					break;
				case 11:
				case '11':
					$('#month_drop').find('.text').html('November');
					break;
				case 12:
				case '12':
					$('#month_drop').find('.text').html('December');
					break;
				default:
					$('#month_drop').find('.text').html('---------');
					break;
			}
			break;
		case 'year':
			$S.filters.date.year = value;
			$S.spcSelectClose('#year_drop');
			$('#year_drop').find('.text').html(value!=''?value:'----');
			break;
	}
	$S.display('#results');
};
$S.searchType = function(type){
	$S.filters.type = type;
	$('div.h7').children().removeClass('selected');
	$('#'+type).addClass('selected');
	/*
	$S.spcSelectClose('#type_drop');
	switch(type){
		case 'official':
			$('#type_drop').find('.text').html('WGTE.org');
			break;
		case 'schedule':
			$('#type_drop').find('.text').html('Schedule');
			break;
		case 'memberitems':
			$('#type_drop').find('.text').html('Member Items');
			break;
		case 'profiles':
			$('#type_drop').find('.text').html('Member Profiles');
			break;
		default:
			$('#type_drop').find('.text').html('Entire Site');
			break;
	}
	*/
	
	$S();
};
$S.numresults = function(amount){
	$S.filters.results = amount;
	$S.spcSelectClose('#results_drop');
	$('#results_drop').find('.text').html(amount+' Results');
	$S.display('#results');
};

$S.filter = function(){
	$S.filter.results = [];
	for(var i = 0; i < $S.results.length; i++){
	  var cd = new Date($S.results[i].date*1000);
	  if(($S.filters.date.month == '' || cd.getMonth()+1 == $S.filters.date.month) && ($S.filters.date.day == '' || cd.getDate() == $S.filters.date.day) && ($S.filters.date.year == '' || cd.getFullYear() == $S.filters.date.year)){
		if($S.results[i].rating_avg == '') $S.results[i].rating_avg = 0;
		if(($S.filters.media == '' || $S.filters.media.indexOf($S.results[i].itemtype) >= 0) && ($S.results[i].rating_avg >= $S.filters.rating)){	
			var x = $S.filter.results.length;
			$S.filter.results[x] = $S.results[i];
			$S.filter.results[x].title = $S.filter.results[x].title.replace(/\\/g,'');
			
			$S.filter.results[x].description = $S.filter.results[x].description.replace(/\\/g,'');
			
		}
	  }
	}
}

$S.display = function(elm){
	$S.filter();
	$S.display.taglist = [];
	$(elm).html('');
	$S.filters.showing = 0;
	var ch = '!';
	if($S.filter.results.length > 0){
	for(var i = 0; i < $S.results.length; i++){
		var rh = false;
		switch($S.filters.sort){
			case 'title':
				if(isNaN(Number($S.filter.results[i].title.replace(/^\s+|\s+$/g,'').substr(0,1)))){
					if(ch.toUpperCase() != $S.filter.results[i].title.replace(/^\s+|\s+$/g,'').substr(0,1).toUpperCase()){
						ch = $S.filter.results[i].title.replace(/^\s+|\s+$/g,'').substr(0,1).toUpperCase();
						rh = true;
					}
				}else{
					if(ch != '#'){
						ch = '#';
						rh = true;
					}
				}
				break;
			case 'date':					
				var d = new Date($S.filter.results[i].date*1000);
				if(ch != d.getFullYear()){
					ch = d.getFullYear();
					rh = true;
				}
				break;
			case 'itemtype':
				var th = '';
				switch($S.filter.results[i].itemtype){
					case 1:
					case '1':
						th = 'Audio';
						break;
					case 2:
					case '2':
						th = 'Video';
						break;
					case 3:
					case '3':
						th = 'Images';
						break;
					case 4:
					case '4':
						th = 'Digital';
						break;
					case 5:
					case '5':
						th = 'Text';
						break;
					case 0:
					case '0':
						th = 'Member Profiles';
						break;
				}
				if(ch != th){
					ch = th;
					rh = true;
				}
				break;
			case 'rating_avg':
				if($S.filter.results[i].rating_avg == '') $S.filter.results[i].rating_avg = '0';
				if(ch != $S.filter.results[i].rating_avg){
					var ch = $S.filter.results[i].rating_avg;
					rh = true;
				}
				break;
			case 'type':
				if(ch != $S.filter.results[i].type){
					var ch = $S.filter.results[i].type;
					rh = true;
				}
				break;
		}
		/*if(rh){
			var header = $S.display.title(ch);
			$(elm).append(header);
		}*/
		var result = $S.display.item(i,elm);
		if(result) $(elm).append(result);
		
		$S.filters.showing++;
		
		if($S.filter.results[i].tags != '') $S.display.buildtaglist(i);
	}
	$(elm).append($('<div class="pipe"/>'));
	$S.display.pages('bottom');
	$S.display.tags();
	if(window.console) console.log($(elm).html());
	}else{
		var header = $S.display.noresults();
		$(elm).append(header);
	}
	if(backgroundPosition) backgroundPosition();
};
$S.display.noresults = function(){
	return $('<div/>').attr('style', 'font-weigh:bold;margin:5px;').html('No Results Available with the current search criteria');
}
$S.display.taglist = [];
$S.display.buildtaglist = function(i){
	var list = $S.filter.results[i].tags.split(',');
	for(var i in list){
		if(!isNaN(Number(i))){
			if(!$S.display.taglist.exists(list[i]) && list[i].replace(/^\s*/, "").replace(/\s*$/, "") != '') $S.display.taglist[$S.display.taglist.length] = list[i];
		}
	}
};
$S.display.tags = function(){
	$('#filter_tags').html('');
	tx = false;
	for(var i in $S.display.taglist){
		if(!isNaN(Number(i))){
			if(i>0) $('#filter_tags').append($('<br/>'));
			var tag = $S.display.taglist[i];
			var nei = $('<a/>');
			nei.attr({
				'href': 'javascript:$S.tag(\''+tag+'\');',
				'title': tag
			});
			$(nei).html(tag);
			$('#filter_tags').append(nei);
			tx = true;
		}
	}
};
$S.display.title = function(i){
	if(i == '') i = '&nbsp;';

	var header = $('<h3/>').addClass('clear');
		header.html(i);
	
	return header;
};
$S.display.item = function(i){
	var result = $('<a/>').addClass('item');
	
		var link = '';
		if($S.filter.results[i].type == 'memberitem'){
			link = 'index.asp?item_id='+$S.filter.results[i].uid;
		}else
			if($S.filter.results[i].type == 'official'){
				link = 'index.asp?item_id='+$S.filter.results[i].uid;
			}else
				if($S.filter.results[i].type == 'lessonplans'){
					link = 'responses.asp?item_id='+$S.filter.results[i].uid;
				}else
					if($S.filter.results[i].type == 'schedule'){
						link = $S.filter.results[i].url;
					}else{
						link = 'profile.asp?userid='+$S.filter.results[i].uid;
					}
		result.attr({
			'href': link,
			'title': $S.filter.results[i].title
		});
	
		var info = $('<div/>').addClass('info');
		var d = new Date($S.filter.results[i].date*1000);
		
		if($S.filter.results[i].image != null && $S.filter.results[i].image != 'images/nophoto'){
			var img = $('<img/>');
			img.addClass('image');
			var image_address = $S.address.content+$S.filter.results[i].image+$S.address.image_ext;
			img.attr({
				'src': image_address,
				'alt': $S.filter.results[i].title,
				'title': $S.filter.results[i].title,
				'align': 'left',
				'vspace': '5',
				'hspace': '5'
			});
			info.append(img);
		}
		info.append($('<h5/>').html($S.filter.results[i].title));
		info.append($('<p class="date"/>').html(d.toDateString()));
		info.append($S.filter.results[i].description);
		
		var addedData = $('<div/>').addClass('added_data stdBackground');
		result.append(addedData);
		
			var ne = $('<div/>');
			addedData.append(ne);
			ne.addClass('iconset');
			
			var nei = $('<img/>');
			nei.attr({
				'border': '0',
				'alt': $S.typeimg_text($S.filter.results[i].itemtype),
				'title': $S.typeimg_text($S.filter.results[i].itemtype),
				'src': $S.typeimg($S.filter.results[i].itemtype)
			});
			ne.append(nei);
			nei.addClass('image');
			
			num = false;
			if($S.filter.results[i].type != 'profiles'){
				var ne = $('<div/>');
				addedData.append(ne);
				ne.addClass('pipe');
				ne.html('|');
				
				var nei = $('<div/>');
				addedData.append(nei);
				nei.addClass('rating');
				nei.attr({
					rel: 'disabled',
					'id': 'rating_' + Math.floor(Math.random() * 1000)
				});
				nei.text(($S.filter.results[i].rating_avg!=null?$S.filter.results[i].rating_avg:0)+" ");
					var neim = $('<img/>');
					nei.append(neim);
					neim.addClass('float');
					neim.attr({
						'src': '/kstream/images/star.png'
					});
				
				var ne = $('<div/>');
				addedData.append(ne);
				ne.addClass('pipe');
				ne.html('|');
				
				var c = ($S.filter.results[i].comments == '')?'0':$S.filter.results[i].comments;
				
				var nei = $('<div/>');
				addedData.append(nei);
				nei.addClass('comments');
				nei.html(c+' ');
					var neim = $('<img/>');
					nei.append(neim);
					neim.addClass('float');
					neim.attr({
						'src': '/kstream/images/comment.png'
					});
				
				if ($S.filter.results[i].lessonplans > 0) {
					var ne = $('<div/>');
					addedData.append(ne);
					ne.addClass('pipe');
					ne.html('|');
					
					var nei = $('<div/>');
					addedData.append(nei);
					nei.addClass('lessonplans');
					nei.attr({
						rel: 'disabled',
						'id': 'rating_' + Math.floor(Math.random() * 1000)
					});
					nei.text($S.filter.results[i].lessonplans+" ");
						var neim = $('<img/>');
						nei.append(neim);
						neim.addClass('float');
						neim.attr({
							'src': '/kstream/images/Apple16x16.png'
						});
				}
				
				if ($S.filter.results[i].responses > 0) {
					var ne = $('<div/>');
					addedData.append(ne);
					ne.addClass('pipe');
					ne.html('|');
					
					var nei = $('<div/>');
					addedData.append(nei);
					nei.addClass('lessonplans');
					nei.attr({
						rel: 'disabled',
						'id': 'rating_' + Math.floor(Math.random() * 1000)
					});
					nei.text($S.filter.results[i].responses+" ");
						var neim = $('<img/>');
						nei.append(neim);
						neim.addClass('float');
						neim.attr({
							'src': '/kstream/images/KSHead16x16.png'
						});
				}
			}
		
	result.append(info);
		
	return result;
};
$S.display.pages = function(v){
	var r = $('#results');
	
	// CONTAINER
	var ne = $('#'+v+'_pages');
	ne.html('');
	ne.addClass('pages clear');
	
	// FIRST PAGE
	var b = $('<img/>');
	if($S.filters.start > 0){
		b.attr('src', '/wgte/images/search/arrow-left-end.gif');
		b.click(function(ev){
			$S.filters.start = 0;
			$S();
		});
	}else{
		b.attr('src', '/wgte/images/search/arrow-left-end-off.gif');
		b.addClass('nopointer');
	}
	b.attr({
		'border': '0',
		'title': 'First Page',
		'alt': 'First Page'
	});
	ne.append(b);
	
	// SKIP PREVIOUS 2 PAGES
	var b = $('<img/>');
	if($S.filters.start >= $S.filters.results*3){
		b.attr('src', '/wgte/images/search/arrow-fast-reverse.gif');
		b.click(function(ev){
			$S.filters.start = $S.filters.start-($S.filters.results*3);
			$S();
		});
	}else{
		b.attr('src', '/wgte/images/search/arrow-fast-reverse-off.gif');
		b.addClass('nopointer');
	}
	b.attr({
		'border': '0',
		'title': 'Skip Previous 2 Pages',
		'alt': 'Skip Previous 2 Pages'
	});
	ne.append(b);
	
	// PREVIOUS PAGE
	var b = $('<img/>');
	if($S.filters.start > 0){
		b.attr('src', '/wgte/images/search/arrow-left.gif');
		b.click(function(ev){
			$S.filters.start = $S.filters.start-$S.filters.results;
			$S();
		});
	}else{
		b.attr('src', '/wgte/images/search/arrow-left-off.gif');
		b.addClass('nopointer');
	}
	b.attr({
		'border': '0',
		'title': 'Previous Page',
		'alt': 'Previous Page'
	});
	ne.append(b);
	
	// PAGE NUMBERS
	for(var i = $S.filters.start-($S.filters.results*2); i <= $S.filters.start+($S.filters.results*2); i = i+$S.filters.results){
		if(i >= 0 && i <= Math.floor($S.resultData.total/$S.filters.results)*$S.filters.results){
			var b = $('<div/>');
			var s = $S.filters.start==i?'statusActive nopointer':'statusInactive';
			b.addClass('cornerAll');
			b.addClass(s);
			b.html((i/$S.filters.results)+1);
			ne.append(b);
			if ($S.filters.start != i) {
				b.click(function(ev){
					var elm = this;
					var i = Number($(elm).text());
					$S.filters.start = (i - 1) * $S.filters.results;
					$S();
				});
			}
		}
	}
	
	// NEXT PAGE
	var b = $('<img/>');
	if($S.filters.start < Math.floor($S.resultData.total/$S.filters.results)*$S.filters.results){
		b.attr('src', '/wgte/images/search/arrow-right.gif');
		b.click(function(ev){
			$S.filters.start = $S.filters.start+$S.filters.results;
			$S();
		});
	}else{
		b.attr('src', '/wgte/images/search/arrow-right-off.gif');
		b.addClass('nopointer');
	}
	b.attr({
		'border': '0',
		'title': 'Next Page',
		'alt': 'Next Page'
	});
	ne.append(b);
	
	// SKIP NEXT 2 PAGES
	var b = $('<img/>');
	if($S.filters.start <= Math.floor($S.resultData.total/$S.filters.results)*$S.filters.results-$S.filters.results*3){
		b.attr('src', '/wgte/images/search/arrow-fast-forward.gif');
		b.click(function(ev){
			$S.filters.start = $S.filters.start+($S.filters.results*3);
			$S();
		});
	}else{
		b.attr('src', '/wgte/images/search/arrow-fast-forward-off.gif');
		b.addClass('nopointer');
	}
	b.attr({
		'border': '0',
		'title': 'Skip Next 2 Pages',
		'alt': 'Skip Next 2 Pages'
	});
	ne.append(b);
	
	// LAST PAGE
	var b = $('<img/>');
	if($S.filters.start < Math.floor($S.resultData.total/$S.filters.results)*$S.filters.results){
		b.attr('src', '/wgte/images/search/arrow-right-end.gif');
		b.click(function(ev){
			$S.filters.start = Math.floor($S.resultData.total/$S.filters.results)*$S.filters.results;
			$S();
		});
	}else{
		b.attr('src', '/wgte/images/search/arrow-right-end-off.gif');
		b.addClass('nopointer');
	}
	b.attr({
		'border': '0',
		'title': 'Last Page',
		'alt': 'Last Page'
	});
	ne.append(b);
};
$(document).ready(function(){$S()});
