//-------------------------------------------------------------
// © Michal Michna - 12.2.2009 - 1.0
// 				     9.4.2009 - 1.1 - add support for sub-bookmark
//-------------------------------------------------------------

var divs;
var divsHeading = new Array();

var url = location.href;
var langBlockStrings = { 
		"cz" : { 
			'PREVIOUS_PAGE' : "Předchozí stránka", 
			'PARENT_PAGE' : "Stránka kategorie",
			'NEXT_PAGE' : "Následující stránka",
			'BACK' : "Zpět",
			'HISTORY_BACK' : "Minulá stránka"
			
		},
		"en" : { 
			'PREVIOUS_PAGE' : "Previous page", 
			'PARENT_PAGE' : "Parent page",
			'NEXT_PAGE' : "Next page",
			'BACK' : "Back",
			'HISTORY_BACK' : "History back"
		}
};

function inicializeBlock(language){
	var bookmark = getBookmark(location);

	divs = getAllElements('div','page_block');
	for (var i in divs){
		var tmp = divs[i].getElementsByTagName('h1');
		var head = tmp[0];
		var str = head.innerHTML;
		srt = str.toString();
		str = str.replace(/<[^>]*./g,"");
		divsHeading[i] = str;
	}
	
	showBlock(bookmark);
	bottomNavigation(language);
	
	reflesh();
	return;
}

// finds out every 200ms whether URL been changed 
// using history navigation, move on active bookmarks
function reflesh(){
	//alert(url);
	//if(location.href == url){
		url = location;
		//alert(url);
		showBlock(getBookmark(url));
	//}
	
	setTimeout('reflesh()',200);
	return;
}

// set CSS style element show
function showElement(Element){
	Element.style.display="block";
}

// set CSS style element hide
function hideElement(Element){
	Element.style.display="none";
}

// realy great implementation ;)
// show only element according IDBlock
function showBlock(IDBlock){
	// if it is page_block, show him
	if(inArray(divs,IDBlock)){
		for ( var i in divs )
		{
		    if(divs[i].id == IDBlock){
		    	showElement(divs[i]);
		    }
		    else{
		    	hideElement(divs[i]);
		    }
		} 
	}
	// otherwise find 
	else {
		showBookmark(IDBlock);
	}
}

// find out in witch page_block anchor is contains
function showBookmark(Anchor){
	// get element
	var element = document.getElementById(Anchor);
	// get parent element
	var parent = element.parentNode;
	// do until reach parent page_block (break) or body tag (while condition)
	do {
		// get element id
		id = parent.getAttribute('id');
		// find whether id is one of page_block
		if(inArray(divs, id)){
			// if it is, show this page block
			showBlock(id);
			// and end loop
			break;
		}
		// otherwise get the next parent node
		else {
			parent = parent.parentNode; 			
		}
	} while (parent.nodeName != 'BODY');
	return;
}

function inArray(Array, Element){
	for ( var i in Array )
	{
	    if(Array[i].id == Element){
	    	return true;
	    }
	} 
	return false;
}

function getElement(Source,TagElement,Class){
	var col = getElements(Source,TagElement,Class);
	return col[0];
}

function getElements(Source,TagElement,Class){
	var elements = Source.getElementsByTagName(TagElement);
	var collection = Array();
	for (var i=0; i<elements.length; i++){
		var element = elements.item(i);
		if(element.className == Class){
			collection.push(element);
		}
	}
	return collection;
}

// function get all Element in document with specify TAG of Element and 
// value Class in class attribute
function getAllElements(TagElement,Class){
	return getElements(document,TagElement,Class);
}

// handle navigation during bookmarks
function navigationHandler(Event){
	var object = getTarget(Event);
	// is a A element
	if(object.tagName == 'A' || object.tagName == 'IMG'){
		if(object.tagName == 'IMG'){
			object = object.parentNode;
		}
		var bookmark = object;
		bookmark = getBookmark(bookmark);
		if(bookmark == false){
			return true;
		}
		showBlock(bookmark);
		return true;
	}
	return true;
}

// get source for event
function getTarget(Event){
	var targ;
	if (!Event) Event = window.event;
	if (Event.target) targ = Event.target;
	else if (Event.srcElement) targ = Event.srcElement;
	if (targ.nodeType == 3) // defeat Safari bug
		targ = targ.parentNode;

	return targ;
}

// return bookmark: string or false value
// if urlDest is external URL
function getBookmark(urlDest){	
	var loc = location.href;
	var url = urlDest.href;
	
	loc = loc.split('#');
	url = url.split('#');
	
	// source and destination URLs are both same
	if(loc[0] == url[0]){
		// return bookmark from destination URL 
		if(url[1] == undefined || url[1].length == 0 || !isBookmark(url[1])){
			return "index";		// default bookmark
		}
		return url[1];			// bookmark
	}
	return false;	// diferent URL
}

// find out, whether bookmark ID exists in document
function isBookmark(id){
	if(document.getElementById(id) != null)
		return true;
	return false;
}

// generate bottom navigation (prev|parent|next)
function bottomNavigation(language){
	// get navigation
	var nav = getElement(divs[0],'ul','bottom_navigation');
	// remove all buttons
	//deleteAllChilds(nav);
	
	// first block - index - no prev page
	deleteAllChilds(nav);
	nav.appendChild(buttBottNavig(divsHeading[0],divs[0].id,'parent',langBlockStrings[language]['PARENT_PAGE']));
	nav.appendChild(buttBottNavig(divsHeading[1],divs[1].id,'next', langBlockStrings[language]['NEXT_PAGE']));
	nav.appendChild(historyBackButton(language));
	
	// between first and last page
	for (var i=1; i<divs.length-1; i++)
	{	
		nav = getElement(divs[i],'ul','bottom_navigation');
		deleteAllChilds(nav);
		nav.appendChild(buttBottNavig(divsHeading[i-1],divs[i-1].id,'prev',langBlockStrings[language]['PREVIOUS_PAGE']));
		nav.appendChild(buttBottNavig(divsHeading[0],divs[0].id,'parent',langBlockStrings[language]['PARENT_PAGE']));
		nav.appendChild(buttBottNavig(divsHeading[i+1],divs[i+1].id,'next', langBlockStrings[language]['NEXT_PAGE']));
		nav.appendChild(historyBackButton(language));
		
	} 
	// last block - no next page
	nav = getElement(divs[divs.length-1],'ul','bottom_navigation');
	deleteAllChilds(nav);
	nav.appendChild(buttBottNavig(divsHeading[divs.length-2],divs[divs.length-2].id,'prev',langBlockStrings[language]['PREVIOUS_PAGE']));
	nav.appendChild(buttBottNavig(divsHeading[0],divs[0].id,'parent',langBlockStrings[language]['PARENT_PAGE']));
	nav.appendChild(historyBackButton(language));
	
}

// remove all child element in Node
function deleteAllChilds(Node){
	var x=Node.childNodes;
	while(x.length > 0)
	{
		Node.removeChild(x[0]);
	}	
	return;
}

// generate element for button Prev
function buttBottNavig(title, href, iclass, label){
	var element = document.createElement('li');
	element.className = iclass;
	element.innerHTML = "<a title=\"" + title + "\" href=\"#" + href + "\">" + label + "</a>";
	return element;
}

function historyBackButton(language){
	var element = document.createElement('li');
	element.className = 'back';
	element.innerHTML = "<a class=\"klikaci\" title=\""+ langBlockStrings[language]['HISTORY_BACK'] +"\" onclick=\"history.back();\">" + langBlockStrings[language]['BACK'] + "</a>";
	return element;
}
