jQuery.noConflict();
(function($) {

	$.fn.shuffle = function() {

		var allElems = this.get(),
		getRandom = function(max) {
			return Math.floor(Math.random() * max);
		},
		shuffled = $.map(allElems, function(){
			var random = getRandom(allElems.length),
			randEl = $(allElems[random]).clone(true)[0];
			allElems.splice(random, 1);
			return randEl;
		});

		this.each(function(i){
			$(this).replaceWith($(shuffled[i]));
		});

		return $(shuffled);

	};

	if(!Modernizr.input.placeholder){
		$("input").each(function(){
			if($(this).val()=="" && $(this).attr("placeholder")!=""){
				$(this).val($(this).attr("placeholder"));
				$(this).focus(function(){
					if($(this).val()==$(this).attr("placeholder")) $(this).val("");
				});
				$(this).blur(function(){
					if($(this).val()=="") $(this).val($(this).attr("placeholder"));
				});
			}
		});
	}

	var username = $(".t-login-username").text();
	$(".t-login-username").replaceWith('<span class="t-username">'+username+'</span>');
    
    $('.home .loginbox h2.t-login.t-login-user-list.t-loginbox-logged-on').html("<br />Welcome!").show();

	$(".featured-list ul.t-latest-publist").each(function(i,list) {
		var els = $(list).children('li').shuffle();
		var length = els.length;
		if (length>1){
			$(els).each(function(j,listitem){
				if (j>3) {
					$(listitem).remove();
				}
				else {
					$(listitem).show();
				}
			});
		}
	});

	function displayName(name) {
		switch (name) {
		case 'Keywords': return 'Topic';
		case 'PublicationYear': return 'Publication Year';
		default: return name;
		}
	}

	$('#search-button2').on('click',function(e) {
		e.preventDefault();
		$('#search-button').trigger( "click" )
	});

	$(".feature-category li").on('click',function(e) {
		e.preventDefault();
		var which = $(this).attr("id").substring(9);
		$('.featured-list').removeClass("active");
		$('.featured-list.featured-'+which).addClass("active");
		$(".feature-category li").removeClass("active");
		$(this).addClass("active");
	});

	/* $('.facet-block dt a').click(function() {
		$('.facet-block dd').not($(this).parent().siblings('dd')).slideUp();
		$('.facet-block dt a').not($(this)).removeClass("minus");
		if ( $(this).hasClass("minus") )
		{
			$(this).removeClass("minus");
		}
		else {
			$(this).addClass("minus");
		}
		$(this).parent().siblings('dd').slideToggle();
		return false;
	}); */

	$('.filter').click(function() {
		$('.t-advancedsearch:not(.test) form').submit();
		return false;
	})

	var urlParams = URLToArray(window.location.href);

	function displaySelected(urlParams) {
		var show = false;
		var removelink;
		for (var key in urlParams) {
			if (urlParams.hasOwnProperty(key)) {
				if (key!='searchText' && !key.indexOf("searchParam-") == 0)  {
					/* console.log("ignoring key: " + key); */
					continue;
				}
				var item = urlParams[key];

				if (item == "")  continue;
				var fieldName = displayName(key.replace("searchParam-",""));

				if ($.isArray(item)) {
					for (var i = 0; i < item.length; i++)	{
						var oneItem = item[i];
						if (oneItem != "") {
							removelink = $('<p><a href="#" class="remove-facet" data-type="checkbox" data-name="'+key+'" data-value="'+oneItem+'"><img src="/designfileview/removeFilter" alt="Remove Filter" title="Remove Filter" /><span>' + fieldName + ': ' + oneItem+'</span></a></p>');
							$('.filterSelections').append(removelink)
							show = true;
						}
					}
				} else {
					if (key=="searchText") {
						removelink = $('<p><a href="#" class="remove-facet" data-type="text" data-name="'+key+'" data-value="'+item+'"><img src="/designfileview/removeFilter" alt="Remove Filter" title="Remove Filter" /><span>Full Text: "'  + item + '"</span></a></p>');
						$('.filterSelections').append(removelink)
						show = true;
					} else {
						removelink = $('<p><a href="#" class="remove-facet" data-type="text" data-name="'+key+'" data-value="'+item+'"><img src="/designfileview/removeFilter" alt="Remove Filter" title="Remove Filter" /><span>' + fieldName + ': ' + item + '</span></a></p>');
						$('.filterSelections').append(removelink)
						show = true;
					}
				}
			}
		}
		if (show) {
			var clearlink = $('<a class="clear-all" href="#")">clear all</a>');
			$(clearlink).click(function() {
				window.location.href='/~searchResults?searchMode=advanced&context=-2';
			});
			$('h3.selections').show();
			$('.filterSelections').append(clearlink).show();
		}
	}

	function endsWith(str, suffix) {
		return str.indexOf(suffix, str.length - suffix.length) !== -1;
	}

	function URLToArray(url) {
		var req = [];
		var pairs = $('#advanced-search-Book-1').serializeArray();
		for (var i = 0; i < pairs.length; i++) {
			var name = pairs[i].name;
			var value = pairs[i].value;
			if(name in req ) {
				if (typeof(req[name])=="string") {
					var new_val = new Array();
					new_val.push(req[name]);
					new_val.push(value);
					req[name] = new_val;
				}
				else if (typeof(req[name])=="object") {
					req[name].push(value);
				}
			}
			else {
				if (typeof(value)!="undefined") {
					/* && value != "") { */
					req[name] = value;
				}
			}
		}
		return req;
	}

	var buildFromParams = function (params) {
		var string = '';
		$.each(params,function(k,v) {
			if (v) { string = string + k + "=" + v + "&"; }
		});
		return string;
	}

	var formEls = ['PublicationYear','Imprint','Keywords']

	function getFormFields() {
		var fields = [];
		$(formEls).each(function(k,v) {
			var field = v.replace('t-searchparam-','').replace('-input','');
			fields.push(field);
		});
		return fields;
	}

	function renderFields(response,fields) {
		var form = $('.t-advancedsearch:not(.test) form');
		var second_section = $('<div class="search-section" style="margin-left: 30px; margin-top:10px;">');
		$('.t-advancedsearch h1').replaceWith('<h2>eBook Search</h2>');
		$('.t-advancedsearch:not(.test) form').prepend($('#search-tab p.t-submit input'));
		$('.t-advancedsearch-bookform.t-searchform').addClass("search-section");
		$('.t-text-input.t-searchtext-input').attr("placeholder","Full Text");
		$(fields).each(function(k,v) {
			if (typeof(response[v])!="undefined") {
				if (v=="PublicationYear") {
					response[v] = response[v].reverse();
				}
				var textInput = $('.t-advancedsearch:not(.test) form input[name="searchParam-'+v+'"]:first');
				$('.t-advancedsearch:not(.test) form input[name="searchParam-'+v+'"]:not(:first)').val('').hide();
				var placeHolder = $(textInput).attr("placeholder");
				var fieldContainerList = $('<dl class="accordion">');
				if (placeHolder=="Keyword(s)") { placeHolder="Topics"; }
				$(fieldContainerList).append('<dt><a href="#">'+placeHolder+'</a></dt>');
				var fieldContainer = $('<dd>');
				var currentQueryItems = urlParams['searchParam-'+v];
				var cqi_type = typeof(currentQueryItems);
				if (typeof(currentQueryItems)!="undefined") {
					if ($.isArray(currentQueryItems)) {
						$(currentQueryItems).each(function(idx,cqi) {
							currentQueryItems[idx] = cqi; // escape?
						});
					}
					else {
						currentQueryItems = currentQueryItems; // escape?
					}
				}
				$(response[v]).each(function(j,item) {
					var label='fld-' + v.replace(/[^a-zA-Z]/g, "") + '-' + j;
					if (typeof(currentQueryItems)!="undefined" && currentQueryItems.indexOf(response[v][j])>-1) {
						var input = $('<p><input type="checkbox" value="'+ unescapeColons(response[v][j]) +'" name="searchParam-'+v+'" checked="checked" id="' + label + '"/><label for="' + label + '">'+unescapeColons(response[v][j])+'</label></p>');
					}
					else {
						var input = $('<p><input type="checkbox" value="'+unescapeColons(response[v][j])+'" name="searchParam-'+v+'"  id="' + label + '" /><label for="' + label + '">'+unescapeColons(response[v][j])+'</label></p>');
					}
					$(fieldContainer).append(input);
				});
				$(fieldContainerList).append(fieldContainer);
				$(textInput).remove();
				$(second_section).append(fieldContainerList);
			}
		});
		$(second_section).insertAfter('.t-advancedsearch:not(.test) .t-advancedsearch-bookform.t-searchform');
	}

	function getFacets () {
		var facets = [];
		$('.facet-block').each(function(k,v) {
			var classes = $(v).attr("class").split(' ');
			for (i = 0; i < classes.length; i++) {
				if (classes[i].indexOf("facet-name-")>-1) {
					if (classes[i].substring(11)) {
						facets.push(classes[i].substring(11));
					}
				}
			}
		});
		return facets;
	}

	function renderFacets (response,facets) {
		var has_facet = false;
		$(facets).each(function(k,v) {
			if (typeof(response[v])!="undefined") {
				var fieldContainer = $('<dd>');
				var currentQueryItems = urlParams['searchParam-'+v];
				$(response[v]).each(function(i,item) {
					if (item.count>0) {has_facet=true;}
					var input;
					var label='facet-' + v.replace(/[^a-zA-Z]/g, "") + '-' + i;

					if (typeof(currentQueryItems)!="undefined" && currentQueryItems.indexOf(item.value)>-1) {
						input = $('<p><input type="checkbox" class="facet-selector" value="'+item.value+'" name="searchParam-'+v+'" checked="checked" id="'+label+'" /><label for="' + label + '">'+item.value+' ('+item.count+')</label></p>');
					} else {
						input = $('<p><input type="checkbox" class="facet-selector" value="'+item.value+'" name="searchParam-'+v+'" id="'+label+'" /><label for="' + label + '">'+item.value+' ('+item.count+')</label></p>');
					}
					$(fieldContainer).append(input);
				});
				$(fieldContainer).hide();
				if (has_facet) { $('.facet-block.facet-name-'+v).append(fieldContainer).show(); }
			}
		});
	}

	var facets = getFacets();
	var fields = getFormFields();

	var payload = {
			'prop-names': fields,
			'meta-type': 'Book'
	};

	function initFormEls(){
		$('.facet-selector').click(function(){
			var check = $(this).prop("checked");
			$('.t-advancedsearch:not(.test)').find('input[name="'+$(this).attr("name")+'"][value="'+$(this).val()+'"]').prop("checked",check);
		});
		$('.remove-facet').click(function() {
			var name = $(this).data("name");
			var value = $(this).data("value");
			var type = $(this).data("type");
			if (type=="checkbox") {
				var item = $('.t-advancedsearch:not(.test)').find('input[name="'+name+'"][value="'+value+'"]');
				$(item).prop("checked",'');
			}
			else if (type=="text") {
				$('.t-advancedsearch:not(.test)').find('input[name="'+name+'"]').val('');
			}
			$('.t-advancedsearch:not(.test) form').submit();
		});
	}

	function initFieldFormEls() {
		//accordion
		if ($('.accordion').length !== 0) {
			var allPanels = $('.accordion > dd').hide();
			var allLinks = $('.accordion > dt > a');
			allLinks.filter('.minus').each(function () {
				$(this).parent().next().show();
			});
			allLinks.click(function () {
				if ($(this).hasClass('minus')) {
					allPanels.slideUp();
					$(this).removeClass('minus');
					return false;
				} else {
					allPanels.slideUp();
					allLinks.removeClass('minus');
					$(this).parent().next().slideDown();
					$(this).addClass('minus');
					return false;
				}
			});
		}
	}

	$.ajax({
		url:'/api/prop-values',
		type:"POST",
		data:JSON.stringify(payload),
		contentType:"application/json; charset=utf-8",
		dataType:"json",
		success: function(fielddata){
			renderFields(fielddata,fields);
			initFieldFormEls();
		}
	});

	function escapeColons(string) {
		string = string.replace(/%/g,"%25");
		string = string.replace(/:/g,"%3A");
		return string;
	}

	function escapeBackslashes(string) {
		string = string.replace(/\\/g,"\\\\");
		string = string.replace(/;/g,"\\;");
		return string;
	}

	function unescapeColons(string) {escapeColons
		string = string.replace(/%3A/g,":");
	string = string.replace(/%25/g,"%");
	return string;
	}

	function getSearchPayload() {
		var payload = {
				'prop-names': fields,
				'full-info': true,
				'all': new Array(),
		};
		var hadFullText=false;
		for (var key in urlParams) {
			if (urlParams.hasOwnProperty(key)) {
				var value = urlParams[key];
				if (value == "") continue;
				if (key=="searchText") {
					payload.all.push('{PdfPage:FullText:'+ escapeColons(value) + '}');
					hadFullText = true;
				} else if (key.indexOf("searchParam-") == 0) {
					var searchKey = key.replace("searchParam-","");
					var keywordField = (fields.indexOf(searchKey) != -1);
					if(typeof(value)== "string") {
						if (!keywordField)
							payload.all.push('(Book:' + searchKey+':'+escapeColons(value) + ')');
						else
							payload.all.push('Book:' + searchKey+':'+escapeColons(value));
					} else if ($.isArray(value)) {
						var myTag = "(:" + 'Book:' + searchKey + ':'
						for (var i = 0; i < value.length; i++)	{
							var oneItem = value[i];
							if (oneItem != "") {
								if (i != 0) myTag += ';';
								myTag += escapeBackslashes(escapeColons(oneItem));
							}
						}
						myTag += ':)';
						payload.all.push(myTag);
					} else {
						console.log(['unknown values:', searchKey, value]);
					}
				} else {
					console.log(['ignored payload field', key, value]);
				}
			}
		}
		if (!hadFullText)
			payload['meta-type'] = "Book";
		return payload;
	}

	if ($('dl.facet-block').length>0) {
		$.ajax({
			url:'/api/prop-values',
			type:"POST",
			data:JSON.stringify(getSearchPayload()),
			contentType:"application/json; charset=utf-8",
			dataType:"json",
			success: function(facetdata){
				displaySelected(urlParams)
				renderFacets(facetdata,fields);
				initFormEls();
			}
		});
	}

})(jQuery);