dojo.require("dojo.behavior"); // event binding module
dojo.require("dojo._base.connect");
dojo.require("dojo.NodeList-traverse");

djConfig.usePlainJson=true;

/* key navigation enchancement */
function autoSuggestHide(res) {dojo.style(dojo.byId(res), {visibility: "hidden"});}
function suggestOver(div_value){div_value.className = 'suggest_link_over';}
function suggestOut(div_value) {div_value.className = 'suggest_link';}

function setSearch(value, el, res) {
	if(dojo.byId(el)){
		dojo.byId(el).value = value;
	}
	dojo.byId(res).innerHTML = '';
	dojo.style(dojo.byId(res), {visibility: "hidden"});
}

function setCursor(index, items) {
	index = index - 1;
	for( var i = 0; i < items.length; i++ ) {items[i].className = 'suggest_link';}
	items[index].className ='suggest_link_over';
}

function autoSuggestKeyNavigation(el, res) {
	var keyPressed, itemIndex = 0;
	var s = dojo.byId(el);
	var d = dojo.byId(res); 
	var suggestedItems = d.getElementsByTagName('div');
	wasSearch = true;
	
	return dojo.connect( s, "onkeydown", function(e) {
		var key = e.charCode || e.keyCode || 0;
		if (/27/.test(key)) { // esc
			if ( wasSearch && itemIndex ) {
				itemIndex = 0;
				autoSuggestHide(res);
			}
		} else if (/38/.test(key)) { // up
			if (wasSearch) {
				var next = itemIndex - 1;
				if (next < 1) {
					next = suggestedItems.length;
				}
				itemIndex = next;
				setCursor(next,suggestedItems);
				dojo.stopEvent(e);
			}
		} else if (/40/.test(key)) { // down
			if (wasSearch) {
				var next = itemIndex + 1;
				if (next > suggestedItems.length) {
					next = 1;
				}
				itemIndex = next;
				setCursor(next,suggestedItems);
				dojo.stopEvent(e);
			}
		} else if (/13/.test(key)) { // enter
			if (wasSearch && itemIndex) {
				dojo.stopEvent(e);
				if(suggestedItems[itemIndex-1].getElementsByTagName("a")[0]){
					autoSuggestHide(res);
					window.location = suggestedItems[itemIndex-1].getElementsByTagName("a")[0];
				}else{
					dojo.query('.phrase', suggestedItems[itemIndex-1]).forEach(function(elem, indeks){ 
						if(indeks == 0) {
							itemIndex = 0;
							setSearch(elem.innerHTML, el, res); 
							autoSuggestHide(res);
							if(el == 'query'){
								dojo.byId("formSearch").submit();
							}else if(el == 'resultQuery'){
								dojo.byId("SearchResult").submit();
							}
						}
					});
				}
				autoSuggestHide(res);
			}
		}  else {
			if (keyPressed) { clearTimeout(keyPressed); }
			keyPressed = setTimeout(function() {
				itemIndex = 0;
				autoSuggest(el, res);
			}, 120);
		}
	});
}  

function triggerTree(node){
	if(dojo.hasClass(node, 'unexpanded')){
		dojo.removeClass(node, 'unexpanded');
		dojo.addClass(node, 'expanded');
		dojo.query(node).children('li').forEach(function(e, i){
			if(!dojo.hasClass(e, 'tree')){
				dojo.style({display: 'block'})
			}
		});
	}else if(dojo.hasClass(node, 'expanded')){
		dojo.removeClass(node, 'expanded');
		dojo.addClass(node, 'unexpanded');
		dojo.query(node).children('li').forEach(function(e, i){
			if(!dojo.hasClass(e, 'tree')){
				dojo.style({display: 'none'})
			}
		});
	};
}

function setTree(node){
	dojo.query(node+' li a').forEach(function(el, i){
		if(el.href.split("category=")[1] == encodeURI(dojo.byId('selectedCategory').value)){
			dojo.query(el).parents('ul.unexpanded').siblings('span.inactive').removeClass('inactive').addClass('active');
			dojo.query(el).parents('ul.expanded').siblings('span.inactive').removeClass('inactive').addClass('active');
			dojo.query(el).parents('ul.unexpanded').removeClass('unexpanded').addClass('expanded');
			dojo.query(el).parents('ul.expanded').children('ul.unexpanded').removeClass('unexpanded').addClass('expanded');
			dojo.query(el).siblings('span.inactive').removeClass('inactive').addClass('active');
			dojo.query(el).siblings('ul.unexpanded').removeClass('unexpanded').addClass('expanded');
		}
	});
	dojo.query(node+' li.tree span').forEach(function(el, ind){
		dojo.connect(el, 'onclick', function(e){
			if(dojo.hasClass(el, 'active')){
				dojo.removeClass(el, 'active');
				dojo.addClass(el, 'inactive');
			}else if(dojo.hasClass(el, 'inactive')){
				dojo.removeClass(el, 'inactive');
				dojo.addClass(el, 'active');			
			}
			triggerTree(dojo.query(el).siblings('ul')[0]);
		});
	});
}

function autoSuggest(el, res){
	var queryElement = dojo.byId(el).value;
	var xslttemplate, category;
	dojo.byId("selectedCategory") ? category = dojo.byId("selectedCategory").value : category = 'tvp/tvp.info';
	
	if(queryElement.length < 3 ){
		dojo.style(dojo.byId(res), {visibility: "hidden"});
		dojo.byId(res).innerHTML = "";
		if(dojo.byId("suggestWarning")){
			dojo.byId("suggestWarning").innerHTML = '<span class="innerText">Zapytanie musi mieć co najmniej 3 znaki</span>';
		}
	}else{
		if(dojo.byId("suggestWarning")){
			dojo.byId("suggestWarning").innerHTML = "";
		}
		if(el == 'query') { xslttemplate = 'tvp-info/searchv3/autocomplete.xslt'; } else { xslttemplate = 'tvp-info/searchv3/quicksearch.xslt'; }
		dojo.xhrGet({
			content:{ 
				query:queryElement, 
				category: category,
				xslt: xslttemplate
			}, 
			handleAs: "text", 
			url: "/portal/NetsprintAutoCompleteProxy", 
			handle: function(response, ioArgs){ 
				var str = response.split(":::::"); 
				
				if(str.length > 2){
					dojo.style(dojo.byId(res), {visibility: "visible"});
					dojo.byId(res).innerHTML = "";
					for (var z = 0; z < str.length - 1; z++){
						dojo.byId(res).innerHTML += str[z];
					}
				}else{
					dojo.style(dojo.byId(res), {visibility: "hidden"});
				}	
			}, 
			error: function(response,ioArgs){console.error('HTTP status code: ',ioArgs.xhr.status); } });
	}
}

function SearchFormSubmit(){
	dojo.byId("SearchResult").submit();
}

function checkConnect(){
	if(dojo.byId("query")){
		var suggestItem;
		
		dojo.connect(dojo.byId('query'), "onfocus", function(){
			var el = 'query', res = 'suggestResultHome';
			suggestItem = autoSuggestKeyNavigation(el, res);
		});
	}
	if(dojo.byId("resultQuery")){
		var suggestItemSearch;
		dojo.connect(dojo.byId('resultQuery'), "onfocus", function(){
			var el = 'resultQuery', res = 'suggestResult';
			suggestItemSearch = autoSuggestKeyNavigation(el, res);
		});
		if(dojo.isIE){
			dojo.query("#results .box .category a").forEach(function(e){
				e.href = encodeURI(e.href);
			});
			dojo.query("#SearchResult .pagination a").forEach(function(e){
				e.href = encodeURI(e.href);
			});
			dojo.query("#categoryTree a").forEach(function(e){
				e.href = encodeURI(e.href);
			});
		}
	}
}

dojo.addOnLoad(function(){
	checkConnect();
	if(dojo.byId('categoryTree')){
		setTree('#categoryTree');
	}
});

