// ////////////////////////////////////////////////////////////////////////////
// common
// //////////////////////////////////////////////////////////////////////////

/*
 * Concats two arrays.
 */
function concat(a, b) {
	var result = new Array().concat(a).concat(b)
	return result;
}
/*
 * Checks if the 'currentPath' is a subpath of the 'path'.
 */
function inPath(currentPath, path) {
	var minlength = Math.min(currentPath.length, path.length)
	var subpath = currentPath.length <= path.length

	for ( var i = 0; i < minlength; i++) {
		if (currentPath[i] != path[i]) {
			return false;
		}
	}

	return subpath;
}

/*
 * Checks if the paths are equal.
 */
function pathAreEqual(path1, path2) {
	if (path1.length != path2.length) {
		return false;
	}

	for ( var i = 0; i < path1.length; i++) {
		if (path1[i] != path2[i]) {
			return false;
		}
	}

	return true;
}

function doJsonCall(jsonUrl) {
	$.ajax({
		url: jsonUrl,
		async: true,
		dataType: "script",
		scriptCharset: "utf-8",
		cache: true
	});
}

// ////////////////////////////////////////////////////////////////////////////
// quick links
// //////////////////////////////////////////////////////////////////////////

function jsonRenderQuickLinks(jsonUrl) {
	doJsonCall(jsonUrl);
}

function renderQuickLinkLi(link) {
	var li = $('<li/>');
	li.attr('class', 'quicklink');
	var href = link.href;
	if ((typeof(siteroot) != "undefined") && (href.charAt(0) == "/")) {
		href = siteroot + href;
	}
	li.html('<a href="' + href + '">' + link.title + '</a>');
	return li;
}

function doQuickLinks(root) {
	$('#quicklinks_default').empty();
	var div;

	try{
		div = $('<div/>');
		$('<div class="header"><h4>' + root.title + '</h4></div>').appendTo(div);
		
		if(!root.links || root.links.length==0 ) {
			return;
		}

		var body = $('<div class="body"/>');
		var ul = $('<ul/>');

		body.append(ul);
		div.append(body);

		for (var i = 0; i < root.links.length; i++) {
			var link = root.links[i];
			var li = renderQuickLinkLi(link);

			if (i==root.links.length-1) {
				li.attr('class', 'quicklink last');
			}
			li.appendTo(ul);
		}

	}catch(ex) {
		div = null;
	}

	if(div) {
		$('#quicklinks_default').replaceWith(div);
	}
}

// ////////////////////////////////////////////////////////////////////////////
// primary and sub navigation
// //////////////////////////////////////////////////////////////////////////

function jsonRenderNavigation(jsonUrl, path) {
	var pathParameter = '[';
	for (var i = 0; i < path.length - 1; i++) {
		pathParameter += "'" + path[i] + "',";
	}
	pathParameter += "'" + path[path.length - 1] + "']";
	
	doJsonCall(jsonUrl);
}

function doNavigation(data, path){
	//RENDER PRIMARY NAVIGATION
	ul = $('#mainNavigation');
	ul.empty();
	for ( var i = 0; i < data.length; i++) {
		var node = data[i];
		var li = renderPrimaryNavigationLi(node);
		if (typeof(path)!='undefined' && path.length > 0 && path[0] == node.label) {
			li.attr("class", "active");
		}
		li.appendTo(ul);
		var renderSubNodes = node.children;
		if (!renderSubNodes) {
			continue;
		}
		var subul = $('<ul/>');

		for ( var j = 0; j < node.children.length; j++) {
			renderPrimaryNavigationLi(node.children[j]).appendTo(subul);
		}
		subul.appendTo(li);
	}

	setupMainNavigation();

	//RENDER SUB NAVIGATION
	if((typeof(path) != 'undefined') && (data.length > 0)) {
		var pageMenuDiv = $('<div />');
		pageMenuDiv.attr('id', 'pageMenu');
		renderSubNavigationNode(data, [], path, -1).appendTo(pageMenuDiv);
		$('#pageMenuWrapper').empty();
		pageMenuDiv.appendTo('#pageMenuWrapper');
	}
}

function renderPrimaryNavigationLi(node) {
	var li = $('<li/>');
	var href = node.href;
	if (typeof(siteroot) != "undefined") {
		href = siteroot + href;
	}

	li.html('<a href="' + href 
			+ '" title="' + node.title + '">'
			+ node.render + '</a>');
	return li;
}

/*
* Renders sub navigation (recursively)
*/
function renderSubNavigationNode(root, currentPath, path, ignoreLevels) {
	var ul_last = path.length == 4;
	var ignoredLevel = currentPath.length <= ignoreLevels;

	var ul = $('<ul ' + (ul_last ? 'class="last"' : "") + '/>');

	for ( var i = 0; i < root.length; i++) {
		var node = root[i];
		var nodePath = concat(currentPath, node.label);
		var elementInPath = inPath(nodePath, path);
		var renderSubNodes = node.children && elementInPath;
		var li_open = renderSubNodes;
		var a_selected = pathAreEqual(path, nodePath);
		var a_active = !a_selected && elementInPath;

		var a_class = "";
		if (a_selected) {
			a_class = 'class="selected"';
		} else if (a_active) {
			a_class = 'class="active"';
		}

		var li = $('<li ' + (li_open ? 'class="open"' : '') + '/>');

		var href = node.href;
		if (typeof(siteroot) != "undefined") {
			href = siteroot + href;
		}

		if (!ignoredLevel) {
			li.html('<a href="' + href 
					+ '" title="' + node.title + '" '
					+ a_class + '>' + node.render + '</a>');
			li.appendTo(ul);
		}

		if (renderSubNodes) {
			var renderedNode = renderSubNavigationNode(node.children, nodePath, path,ignoreLevels);

			if (ignoredLevel) {
				ul = renderedNode;
			} else {
				renderedNode.appendTo(li);
			}
		}
	}
	return ul;
}

// ////////////////////////////////////////////////////////////////////////////
// other sites
// //////////////////////////////////////////////////////////////////////////

function jsonRenderOtherSites(jsonUrl) {
	doJsonCall(jsonUrl);
}

function doOtherSites(data) {
	var ul = $('<ul id="inOtherSites"/>');
	$.each(data, function(i, item) {
		var li = $('<li/>');
		var a = $('<a/>');
		a.css('background-image', 'url("' + item.image + '")');
		a.css('background-position', 'left');
		a.css('background-repeat', 'no-repeat');
		a.attr('href', item.href);
		a.attr('title', item.title + ' - ' + item.summary);
		var strong = $('<strong/>');
		strong.text(item.title);
		strong.appendTo(a);
		a.append('<br />' + item.summary);
		a.appendTo(li);
		li.appendTo(ul);
	});

	
	if (ul) {
		$('#inOtherSites').replaceWith(ul);
	}
}

// ////////////////////////////////////////////////////////////////////////////
// countries
// //////////////////////////////////////////////////////////////////////////

function jsonRenderCountries(jsonUrl) {
	doJsonCall(jsonUrl);
}

function doCountries(data) {
	target = $('#popup div.body');

	// ie fix
	$('#popup div.body div.countries').empty();

	countries = $('<div class=\'countries\'/>');

	$.each(data, function(k,items) {
		div = '';
		if (k == data.length-1){
			div = $("<div class=\"last\">");
		} else {
			div = $('<div/>');
		}

		for ( var i = 0; i < items.length; i++) {
			var href = items[i].href;
			if ((typeof(siteroot) != "undefined") && (href.charAt(0) == "/")) {
				href = siteroot + href;
			}

			link =  $("<a href=\"" + href + "\">" + items[i].render + "</a><br />")
			link.appendTo(div);
		}

		div.appendTo(countries)
	});

	countries.appendTo(target);
}
