// ////////////////////////////////////////////////////////////////////////////
// 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;
}

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

function jsonRenderQuickLinks(jsonURL) {
	$('<script/>').attr('src',  jsonURL).appendTo('head');
}

function renderQuickLinkLi(link) {
	var li = $('<li/>');
	li.attr('class', 'quicklink');
	li.html('<a href="' + link.href + '">' + link.title + '</a>');
	return li;
}

function doQuickLinks(root) {
	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] + "']";
	
	$('<script/>').attr('src',  jsonURL).appendTo('head');
}

function doNavigation(data, path){
	//RENDER PRIMARY NAVIGATION
	ul = $('#mainNavigation');
	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);
		pageMenuDiv.appendTo('#pageMenuWrapper');
	}
}

function renderPrimaryNavigationLi(node) {
	var li = $('<li/>');
	$('<a/>').attr('href',node.href).attr('title',node.title).text(node.render).appendTo(li);
	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"' : '') + '/>');

		if (!ignoredLevel) {
			li.html('<a href="' + node.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) {
	$('<script/>').attr('src',  jsonURL).appendTo('head');
}

function doOtherSites(data) {
	var ul = $('<ul id="inOtherSites"/>');
	$.each(data, function(i, item) {
		var li = $('<li/>');
		var a = $('<a/>');
		a.attr('style', 'background: url("' + item.image + '") left no-repeat;');
		a.attr('href', item.href);
		a.attr('onmouseover', 'style.backgroundColor="#EEEEEE"');
		a.attr('onmouseout', 'style.backgroundColor="#FFFFFF"');
		a.attr('onclick', 'return window.open(this.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) {
	$('<script/>').attr('src',  jsonURL).appendTo('head');
}

function doCountries(data) {
	target = $('#popup div.body');
	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++) {
			link =  $("<a href=\"" + items[i].href + "\">" + items[i].render + "</a><br />")
			link.appendTo(div);
		}

		div.appendTo(countries)
	});

	countries.appendTo(target);
}
