function loadStyle() {
	// {{{
	//alert("LoadStyle");
	//if (!document.getElementById) document.write('<link rel="stylesheet" type="text/css" href="/admin/css/localization.css">');
	//document.write('<link rel="stylesheet" type="text/css" href="/admin/css/localization.css">');

	var $ = document; // shortcut
	var cssId = 'myCss';  // you could encode the css path itself to generate id..
	if (!$.getElementById(cssId))
	{
		var head  = $.getElementsByTagName('head')[0];
		var link  = $.createElement('link');
		link.id   = cssId;
		link.rel  = 'stylesheet';
		link.type = 'text/css';
		link.href = 'http://www.dcon.at/admin/css/localization.css';
		link.media = 'all';
		head.appendChild(link);
	}
	// }}}
}

function addEvent(obj, evType, fn){ 
	// {{{
	if (obj.addEventListener){ 
		obj.addEventListener(evType, fn, false); 
		return true; 
	} else if (obj.attachEvent){ 
		var r = obj.attachEvent("on"+evType, fn); 
		return r; 
	} else { 
		return false; 
	} 
	// }}}
}

function delEvent(obj, evType, fn){ 
	// {{{
	if (obj.addEventListener){ 
		obj.removeEventListener(evType, fn, false); 
		return true; 
	} else if (obj.attachEvent){ 
		var r = obj.detachEvent("on"+evType, fn); 
		return r; 
	} else { 
		return false; 
	} 
	// }}}
}

function raiseEvent (eventType, o)  
{   
	// {{{
	//var o = document.getElementById(elementID);   
	if (document.createEvent) {   
			var evt = document.createEvent("Events");   
			evt.initEvent(eventType, true, true);   
			o.dispatchEvent(evt);   
	}   
	else if (document.createEventObject)   
	{  
			var evt = document.createEventObject();   
			o.fireEvent('on' + eventType, evt);   
	}   
	o = null;  
	// }}}
}  

var loc_admin_widget;
function loc_add_admin_widget() {
	// {{{
	loc_admin_widget = document.createElement('div');
	//loc_admin_widget.setAttribute('style','position:absolute; top:0px; left:0px;background-color: red; color:white;)');
	loc_admin_widget.setAttribute('style','top:1px; left:1px;)');
	loc_admin_widget.setAttribute('class','loc-admin-widget');
	var loc_admin_ul = document.createElement('ul');
	loc_admin_ul.setAttribute('class','loc-admin-ul');
	loc_admin_widget.appendChild(loc_admin_ul);
	
	loc_add_admin_link(loc_admin_ul, 'Reset Localization Links','javascript:loc_reset_links()'); 
	loc_add_admin_link(loc_admin_ul, 'Highlight loc strings','javascript:loc_highlight_strings()'); 
	loc_add_admin_link(loc_admin_ul, 'Unhighlight loc strings','javascript:loc_unhighlight_strings()'); 

	// up arrow 
	var loc_arr_up = document.createElement('a');
	loc_arr_up.setAttribute('href','javascript:loc_move(-50,0)');
	loc_arr_up.setAttribute('class','loc-move-up');
	// up arrow UNICODE 
	var txtNode = document.createTextNode(String.fromCharCode(8593)); 
	loc_arr_up.appendChild(txtNode);
	loc_admin_widget.appendChild(loc_arr_up);

	// down arrow 
	var loc_arr_down = document.createElement('a');
	loc_arr_down.setAttribute('href','javascript:loc_move(50,0)');
	loc_arr_down.setAttribute('class','loc-move-down');
	// down arrow UNICODE 
	var txtNode = document.createTextNode(String.fromCharCode(8595)); 
	loc_arr_down.appendChild(txtNode);

	loc_admin_widget.appendChild(loc_arr_down);

	// add the loc_admin_widget to the body
	document.body.appendChild(loc_admin_widget);
	// }}}
}

function loc_move(up, right) {
	// {{{
	//loc_admin_wiget.setStyle('top','-100');
	if (up != 0) {
		var top = parseInt(loc_admin_widget.style.top);
		top += up;
		if (top < 0) { top = 0; }
		loc_admin_widget.style.top = top + 'px'; 
	}
	// }}}
}

function loc_add_admin_link(admin_widget, txt, href) {
	// {{{
	var link = document.createElement('a');
	link.setAttribute('class','loc-admin-link');
	var txtNode = document.createTextNode(txt); 
	var li = document.createElement('li');

	link.setAttribute('href',href);
	link.appendChild(txtNode);

	li.appendChild(link);
	admin_widget.appendChild(li);
	// }}}
}
var highlighted = false;
function loc_highlight_strings()  {
	// {{{
	if (!highlighted) {
		//locs = document.getElementsByClassName('loc-translate-string');
		locs = getElementsByClassName(window.document, '*', 'loc-translate-string');
		var style;
		for (i = 0; i < locs.length; ++i) {
				str = locs[i];
				style = str.getAttribute('style');
				str.setAttribute('style_old',style);
				style += ";color: red; background-color: yellow;";
				str.setAttribute('style',style);
		}
		highlighted = true;
	}
	// }}}
}
function loc_unhighlight_strings()  {
	// {{{
	if (highlighted) {
		//locs = document.getElementsByClassName('loc-translate-string');
		locs = getElementsByClassName(window.document, '*', 'loc-translate-string');
		var style;
		for (i = 0; i < locs.length; ++i) {
				str = locs[i];
				style_old = str.getAttribute('style_old');
				str.setAttribute('style',style_old);
		}
		highlighted = false;
	}
	// }}}
}

function getElementsByClassName(oElm, strTagName, strClassName){
	// {{{
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all :
			oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/\-/g, "\\-");
	var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var oElement;
	for(var i=0; i<arrElements.length; i++){
			oElement = arrElements[i];     
			if(oRegExp.test(oElement.className)){
					arrReturnElements.push(oElement);
			}   
	}
	return (arrReturnElements)
	// }}}
}

function loc_init_links()  {
	// {{{
	//alert("loc");
	loadStyle();

	/*
	var locs = $$('.loc-translate-string');

	locs.each(function(elem) {
		elem.addEvent('click', function() { 
			loc_call_localization(); 
		}) 
	});
	*/
	
	locs = getElementsByClassName(window.document, '*', 'loc-translate-string');

	if (locs.length > 0) {
		//alert(locs.length);
		loc_add_admin_widget();

		var parent_node;
		for (i = 0; i < locs.length; ++i) {
			//if (i<3) alert (locs[i].nextSibling);
			str = locs[i];
			addEvent(str,'click', loc_call_localization); 

			lnk = locs[i].nextSibling;
			//lnk.setAttribute('style','display:none');
			
			// deactivate all parent links
			parent_node = str.parentNode;
			while (parent_node ) {
				if (parent_node.tagName == 'A') {
					parent_node.href_old = parent_node.href;
					parent_node.href ="javascript:void(0)";
				}
				parent_node = parent_node.parentNode;
			}

		}
	}
	// }}}
}

function loc_reset_links() {
	// {{{
	//locs = document.getElementsByClassName('loc-translate-string');
	locs = getElementsByClassName(window.document, '*', 'loc-translate-string');

	if (locs.length > 0) {

		var parent_node;
		for (i = 0; i < locs.length; ++i) {
			str = locs[i];
			delEvent(str,'click', loc_call_localization); 
			
			parent_node = str.parentNode;
			while (parent_node ) {
				if (parent_node.tagName == 'A') {
					parent_node.href = parent_node.href_old
				}
				parent_node = parent_node.parentNode;
			}

		}
	}
	// }}}
}

function loc_call_localization(ev) {
	// {{{
	//alert(ev);
	if (ev.stopPropagation) {
		ev.stopPropagation();
	} else {
		ev.cancelBubble = true;
	} 
	//alert(this.onclick);
	this.nextSibling.onclick();
	//raiseEvent('click',this.nextSibling);
	// }}}
}

addEvent(window, 'load', loc_init_links);

