function checkFieldsSetMarker(objSection) {
	var hasvalues = false;
	
	if (objSection.className.indexOf('secclosed') != -1) {
		var els = getElementsByClassName('text', '', objSection);
		for (var i in els) {
			if (els[i].value)
				hasvalues = true;
		}
	}
		
	var markers = getElementsByClassName('marker', '', objSection);
	for (var m in markers) {
		if (hasvalues) {
			markers[m].style.visibility="visible";
		} else {
			markers[m].style.visibility="hidden";
		}

	}
}

function hideMarker(objSection) {
	var markers = getElementsByClassName('marker', '', objSection);
	for (var m in markers) {
		markers[m].style.visibility="hidden";
	}
}

function initFilter() {
	var sections = getElementsByClassName('section', '', document.getElementById('filter_form'));
	
	for (var s in sections) {
		checkFieldsSetMarker(sections[s]);
	}
}

function toggleSection(objSection) {
	var isOpen = (objSection.className.indexOf('secopen') != -1)?1:0;
	
	var sections = getElementsByClassName('secopen', '', document.getElementById('filter_form'));
	
	for (var s in sections) {
		closeSection(sections[s]);
	}
	
	if (!isOpen) {
		openSection(objSection);
	}
}

function closeSection(objSection) {
	switchClassName(objSection, 'secopen', 'secclosed');
	checkFieldsSetMarker(objSection);
}

function openSection(objSection) {
	switchClassName(objSection, 'secclosed', 'secopen');
	hideMarker(objSection);
}

function clearSection(objSection) {
	var jqpresent = (typeof jQuery == 'function');

	var els_txt = getElementsByClassName('text', '', objSection);
	for (var i in els_txt) {
		els_txt[i].value = '';
		if (jqpresent) $(els_txt[i]).change();
	}
	
	var els_cbox = getElementsByClassName('checkbox', '', objSection);
	for (var i in els_cbox) {
		els_cbox[i].checked = false;
	}

	hideMarker(objSection);
}


/************************
	library functions
*************************/

function getElementsByClassName(strClass, strTag, objContElm) {
	strTag = strTag || "*";
	objContElm = objContElm || document;    
	var objColl = objContElm.getElementsByTagName(strTag);
	if (!objColl.length &&  strTag == "*" &&  objContElm.all) objColl = objContElm.all;
	var arr = new Array();                              
	var delim = strClass.indexOf('|') != -1  ? '|' : ' ';   
	var arrClass = strClass.split(delim);    
	for (var i = 0, j = objColl.length; i < j; i++) {                         
		var arrObjClass = objColl[i].className.split(' ');   
		if (delim == ' ' && arrClass.length > arrObjClass.length) continue;
		var c = 0;
		comparisonLoop:
		for (var k = 0, l = arrObjClass.length; k < l; k++) {
			for (var m = 0, n = arrClass.length; m < n; m++) {
				if (arrClass[m] == arrObjClass[k]) c++;
				if ((delim == '|' && c == 1) || (delim == ' ' && c == arrClass.length)) {
					arr.push(objColl[i]); 
					break comparisonLoop;
				}
			}
		}
	}
	return arr; 
}

function addClassName(obj,strClass) {
	obj.className = obj.ClassName != '' ? obj.className+' '+strClass : strClass;
}

function removeClassName(obj,strClass){
	var regex = new RegExp(" "+strClass+"|"+strClass+" |"+strClass);
	obj.className = obj.className.replace(regex, "");
}

function switchClassName(obj,strOldClass,strNewClass) {
	obj.className = obj.className.replace(strOldClass, strNewClass);
}

// this fixes the dropdown for IE
startList = function() {
	if (document.all&&document.getElementById) {
		navRoot = document.getElementById("nav");
		for (i=0; i<navRoot.childNodes.length; i++) {
			node = navRoot.childNodes[i];
			if (node.nodeName=="LI") {
				node.onmouseover=function() {
					this.className+=" over";
				}
				node.onmouseout=function() {
					this.className=this.className.replace(" over", "");
				}
			}
		}
	}
}

function dbg(obj) {
	if ("console" in window)
		console.log(obj)
	else
		alert(obj);
}

function checktcs (form) {
	var check = document.getElementById("agreetcscb");
	
	if (check == null)
		return false;
	
	if (form.agreetcs == null)
		return false;
	
	if (check.checked) {
		form.agreetcs.value = "1";
		return true;
	} else {
		form.agreetcs.value = "0";
		check.parentNode.className += " warningbox";
		return false;
	}
	
	return false;
}

// antispam - requires jQuery
if(typeof jQuery == 'function'){
	jQuery(function(){
		jQuery('.eas').each(function(){
			var block = jQuery(this);
			var ea = '';
			var pf = '';
			var sf = '';
			
			block.children().each(function(){
				var el = jQuery(this);
				
				if (el.hasClass('c') || el.hasClass('f') || el.hasClass('i')) {ea = ea + el.text();}
				else if (el.hasClass('b') || el.hasClass('e') || el.hasClass('h')) {
					if (el.text() == ' dot ') {ea = ea + '.';}
					else if (el.text() == ' at ') {ea = ea + '@';}
				}
				else if (el.hasClass('pf')) {
					pf = el.text();
				}
				else if (el.hasClass('sf')) {
					sf = el.text();
				}
			});
			
			block.html((block.hasClass('mt')) ? '<a href="mailto:'+ea+'">'+pf+ea+sf+'</a>' : pf+ea+sf);
		});
	});
}

// keywords - requires jQuery
if(typeof jQuery == 'function'){
	function popups_close() {
		// calls kwords_close() and libs_close() but doesnt return false, allowing the form to submit
		kwords_close();
		libs_close();
	}
	

	function libs_init() {
		$("#libs_show").click(libs_show); // show/hide trigger
		$("#libs_box .windowclosebutton").click(libs_close); // close button
		$("#libs_box .clear_libraries").click(libs_clear); // clear button
		$('#libs_list a').click(lib_toggle).hover(
			function(){$("#libs_info_" + $(this).attr('rel')).show();},
			function(){$("#libs_info_" + $(this).attr('rel')).hide();}
		);

		$("#libs_tabs a").click(libs_nav); // navigation tabs
		$('#libs_tabs a.default').click(); // trigger the default view
		
		$('#libs_clear').click(libs_clear);
		$("#libs_text").change(libs_update);
		
	}
	
	function libs_clear() {
		$("#libs_text").val('').change();
		return false;
	}

	function libs_show() {
		libs_update();
		
		kwords_close();
		$("#libs_box").toggle();
		return false;
	}
	
	function libs_close() {
		$("#libs_box").hide();
		return false;
	}
	
	
	function libs_update() {
		var sel = $.trim($("#libs_text").val()).split(" ");

		$("#libs_list a.selected").removeClass('selected');
		$.each(sel, function(i, kw) {
			$("#libs_list a[rel="+kw+"]").addClass('selected');
		});

		var selcount = $("#libs_list_abc a.selected").length;
		if (selcount) {
			$("#libs_show span").text(selcount);
		} else {
			$("#libs_show span").text("all");
		}
	}
	
	function libs_nav() {
		var target = $(this);
		var letter = target.attr('rel');
		
		$("#libs_tabs a.current").removeClass("current");
		target.addClass("current");
		
		$("#libs_list > div").hide();
		
		if (letter == 'cursel') {
			var selected = $("#libs_list_abc a.selected").clone(true);
			var tgt = $("#libs_list_cursel").empty();
			
			if (selected.length)
				tgt.append(selected);
			else
				tgt.html("<em>No libraries are currently selected</em>");
		}
		
		$("#libs_list_" + letter).show();
		
		return false;
	}
	
	function lib_toggle() {
		var lib = $(this).attr('rel');
		
		var l_lib = $("#libs_list a[rel="+lib+"]");
		
		if (l_lib.hasClass('selected')) { // remove
			var new_lib = ' ' + $("#libs_text").val() + ' ';
			
			new_lib = $.trim(new_lib.replace(new RegExp(' '+lib+' ', 'gi'), ' ').replace(new RegExp('  ', 'gi'), ' '));
			$("#libs_text").val(new_lib);
		} else { // add
			$("#libs_text").val($.trim($("#libs_text").val() + " " + lib));
		}
		
		libs_update();
		
		$(this).blur();
		
		return false;
	}



	
	function kwords_init() {
		$("#kwords_show").click(kwords_show); // show/hide trigger
		$("#kwords_box .windowclosebutton").click(kwords_close); // close button
		$("#kwords_text").change(kwords_update).keypress(kwords_update_delay); // react to the text box typing
		$("#kwords_tabs a").click(kwords_nav); // navigation tabs

		$.getJSON('/get_keywords', function(res){
			
			/** create keywords in list **/
			$.each(res.keywords, function (kw, cat) {
				var catclass = (cat.length)?('kw_cat_'+cat.join(' kw_cat_')):'';
				
				$('<a href="#" class="kword '+ catclass + '" rel="'+kw+'">'+kw+'</a>').appendTo("#kwords_list");
			});

			/** hide all keywords and add click handler **/
			$('#kwords_box a.kword').hide().click(kword_toggle);
			
			/** build linebreaks for alphabetical view **/
			var cur_letter = 'a';
			$("#kwords_list a.kword").each(function() {
				if (cur_letter != (cur_letter = $(this).attr('rel').charAt(0)))
					$(this).before("<br /><br />");
			});
			$("#kwords_list br").hide();

			/** build categorised view, and append it to the keywords list hidden **/
			var cats = $('<div id="kwords_categories"></div>');
			$.each(res.categories, function(k, v) {
				cats.append("<h2>"+v+"</h2>");
				$("#kwords_list a.kw_cat_"+k).clone(true).appendTo(cats);
			});
			cats.find("h2:not(:first)").css('margin-top', '10px'); // this adds the padding to all h2s except the first one
			cats.appendTo("#kwords_list");

			$('#kwords_box .empty, #kwords_box .loading').hide(); // hide helper texts
			$('#kwords_box #kwords_list').show();
			$('#kwords_tabs a[rel=default]').click(); // trigger the default view

			kwords_update();
		});
	}
	
	function kwords_show() {
		kwords_update();
		
		libs_close();
		$("#kwords_box").toggle();
		return false;
	}
	
	function kwords_close_no_stop() {
		// calls kwords_close() but doesnt return false, allowing the form to submit
		kwords_close();
	}
	
	function kwords_close() {
		$("#kwords_box").hide();
		return false;
	}
	
	var kwords_updateDelayTimer;
	function kwords_update_delay() {
		if (kwords_updateDelayTimer)
			clearTimeout(kwords_updateDelayTimer);
		
		kwords_updateDelayTimer = setTimeout(kwords_update, 250);
	}
	
	function kwords_updateCount() {
		$("#kwords_charcount").text('(' + $("#kwords_text").val().length + '/255)');

		if ($("#kwords_text").val().length > 255)
			$("#kwords_toolong").show();
		else
			$("#kwords_toolong").hide();
	}
	
	function kwords_update() {
		var sel = $.trim($("#kwords_text").val()).split(" ");
		
		kwords_updateCount();

		$("#kwords_list a.selected").removeClass('selected');
		$.each(sel, function(i, kw) {
			$("#kwords_list a[rel="+kw+"]").addClass('selected');
		});
	}
	
	function kwords_nav() {
		var target = $(this);
		var letter = target.text();
		
		$("#kwords_tabs a.current").removeClass("current");
		target.addClass("current");
		
		$("#kwords_categories").hide();
		$("#kwords_list .kword").hide();
		$("#kwords_list br").hide();

		if (letter == 'current selection') {
			var selected = $("#kwords_list a.selected");
			
			if (selected.length)
				selected.show();
			else
				$("#kwords_list .empty").show();
		} else if (letter == 'categorised') {
			$("#kwords_categories").find('*').andSelf().show();
		} else if (letter == 'alphabetical') {
			$("#kwords_list a.kword, #kwords_list br").show();
		} else
			$("#kwords_list .kw_l_"+letter).show();
		
		
		return false;
	}
	
	function kword_toggle() {
		var kw = $(this).attr('rel');
		
		var l_kw = $("#kwords_list a[rel="+kw+"]");
		
		if (l_kw.hasClass('selected')) { // remove
			var new_kw = ' ' + $("#kwords_text").val() + ' ';
			
			new_kw = $.trim(new_kw.replace(new RegExp(' '+kw+' ', 'gi'), ' ').replace(new RegExp('  ', 'gi'), ' '));
			$("#kwords_text").val(new_kw);

			l_kw.removeClass('selected');
		} else { // add
			$("#kwords_text").val(
				$.trim($("#kwords_text").val() + " " + kw)
			);

			l_kw.addClass('selected');
		}
		
		kwords_updateCount();
		
		$(this).blur();
		
		return false;
	}
}

selectNodeCallback = function(){};
treereinit = function() {
	var tree = $("#genre_tree");
	
	tree.find('.tree li').unbind('click').click(function(ev) {
		ev.stopPropagation();

		var el = $(this);
		var id = el.children('.id').text();
		var range = el.children('.range').text();
		var subtree = el.children('.tree');
		
		if (!el.hasClass('leaf') && !el.hasClass('loaded')) {
			el.addClass('loading');
			subtree.load("/chrome.tree.api?tree_id="+id+" .root li", function(){
				el.removeClass('loading');
				el.addClass('loaded');
				treereinit();
				if (subtree.find('li').length == 0)
					el.addClass('leaf');
				selectNode(tree, el);
			});
		}
		else
			selectNode(tree, el);
	});
};

function selectNode(tree, el) {
	var id = el.children('.id').text();
	var range = el.children('.range').text();
	var subtree = el.children('.tree');
	
	var treeheight = tree.find('.root').height() / 2;
	
//	scrollCallback = function(){ tree.find('.root').scrollTo(el, {duration: 750, axis: 'y', offset: {top:-treeheight}}); };
	scrollCallback = function(){};
	
	tree.find('.root .selected').removeClass('selected');
	el.addClass('selected');
	
	tree.find('.root .opened').addClass('toclose');
	el.removeClass('toclose');
	el.parents('.root .opened').removeClass('toclose');

	tree.find('.root .toclose').removeClass('toclose opened').children('.tree').slideUp("fast");

	if (!el.hasClass('opened')) {
		el.addClass('opened');
		subtree.slideDown("fast",scrollCallback);
	} else scrollCallback();
	
	el.siblings('li').not('.opened, .selected').slideUp();
	el.children('ul').children('li').slideDown();

	tree.find('.treevalue').val(range);
	
	selectNodeCallback();
}

function checkBrowser() {
	if (!(
		((BrowserDetect.browser == 'Chrome')) ||
		((BrowserDetect.browser == 'Safari')) ||
		((BrowserDetect.browser == 'Opera') && (BrowserDetect.version >= 9)) ||
		((BrowserDetect.browser == 'Firefox') && (BrowserDetect.version >= 3)) ||
		((BrowserDetect.browser == 'Explorer') && (BrowserDetect.version >= 6)) ||
		false
		)) {
			$('#unsupported_browser').show();
		}
}

