var ie = /MSIE/.test(navigator.userAgent);
var moz = !ie && navigator.product == "Gecko";

function emulateCurrentStyle()
{
	HTMLElement.prototype.__defineGetter__("currentStyle",
		function ()
		{
			return this.ownerDocument.defaultView.getComputedStyle(this, null);
		}
	);
}

if(moz)
{
	emulateCurrentStyle();
}

//------------------------------------------------------------------------------

function nextSiblingElement(root_node)
{
	var e = root_node.nextSibling;
	while(e = e.nextSibling)
		if(e.nodeType==1) return e;
	return null;
}

function gel2(sid)
{
	return document.getElementById(sid);
}

function attr2(el,attr_name)
{
	if(el!=null)
	{
		if(moz)
		{
			var attr_obj = el.attributes[attr_name];
			if(attr_obj)
				return attr_obj.value;
		}
		else if(ie)
		{
			if(el[attr_name]!='undefined')
				return el[attr_name];
		}
	}
	return null;
}

function isArray(obj)
{
	if (typeof obj == 'object' && typeof obj.length == 'number')
		return true;
	return false;
}  

function trace(m)
{
	console.log(m);
}

function escapeHTML(s)
{
	var div = document.createElement('div');
	var text = document.createTextNode(s);
	div.appendChild(text);
	return div.innerHTML;
}

function getElementsByAttribute(root_element,tag_name,attr_name)
{
	var elements = root_element.getElementsByTagName(tag_name);
	var ret = [];
	var c=elements.length;
	//alert(c);
	for (var i=0; i<c ; i++)
	{
		var e = elements[i];
		//alert(e);
		var at = attr(e,attr_name);
		//alert(e+" "+at);
		if(at) {
			//alert('getElementsByAttribute(): aggiunto '+e);
			ret.push(e);
		}
	}
	//alert(ret.length);
	return ret;
}

function getElementsByAttributeValue(root_element,tag_name,attr_name,attr_value)
{
	var elements = root_element.getElementsByTagName(tag_name);
	var ret = [];
	var c=elements.length;
	for (var i=0; i<c ; i++)
	{
		var e = elements[i];
		if(attr(e,attr_name)==attr_value)
			ret.push(e);
	}
	return ret;
}

function gel(elo)
{
	if(typeof elo == 'string')
		elo = document.getElementById(elo);
	return elo;
}

function current_style(el)
{
	el = gel(el);
	var currstyle = el.currentStyle;
	if(!currstyle || typeof currstyle == 'undefined')
		currstyle = el.ownerDocument.defaultView.getComputedStyle(el, null);
	return currstyle;
}


function attr(el,name)
{
	//alert(el+" "+name);
	el = gel(el);
	var oattr = el.attributes[name];
	//alert(oattr+" "+typeof oattr+" "+oattr.value);
	if(oattr) {
		//alert(oattr);
		return oattr.value;
	}
	return el[name];
}

function VerifyForm(form_element,invalid_classname)
{
	if(!invalid_classname)
		invalid_classname = 'invalid';

	var validators = {
		'email' : '^[a-zA-Z0-9._%+-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z]{2,4}$',
		'notempty' : '^.+$',
		'numeric': '^\d+$',
		'alphanumeric': '^[a-zA-Z0-9]+$',
		'chars': '^[a-zA-Z]+$',
		'captcha': '^[a-zA-Z0-9]{5}$',
		'password': function(el) {
			var rptel = attr(el,'repeatel');
			if(!rptel)
				rptel = 'password_repeat';
			rptel = gel(rptel);
			if(el.value && el.value===rptel.value) {
				remclass(el,'invalid');
				remclass(rptel,'invalid');
				return true;
			}
			addclass(el,'invalid');
			addclass(rptel,'invalid');
			return false;
		},
		'selandinp': function(el) {
			var rptel = attr(el,'inpel');
			rptel = gel(rptel);
			if(!el.value && !rptel.value) return false;
			return true;
		}
	}

	var els = getElementsByAttribute(form_element,"*","verify");
	var c = els.length;
	//alert("da verficare: "+c);
	var ninvalid = 0;
	for(var i=0; i<c; i++)
	{
		var e = els[i];
		var verify_val = attr(e,'verify');
		var verify_x = validators[verify_val];
		//alert(verify_val);
		var verify_ret = false;
		if(typeof verify_x === 'string'){
			var rx = new RegExp(verify_x);
			verify_ret = rx.test(e.value);
		} else if(typeof verify_x === 'function') {
			verify_ret = verify_x(e);
		}
			
		if(!verify_ret) {
			addclass(e,invalid_classname);
			if(ninvalid===0) {
				var emsg = attr(e,'errmsg');
				if(emsg) {
					alert(emsg);
				}	else {
					//alert('Il campo "'+e.name+'" non è valido!');
					alert('Il campo "'+e.id+'" non è valido!');
				}
			}
			ninvalid++;
		} else {
			remclass(e,invalid_classname);
		}
	}
	
	//alert("invalidi: "+ninvalid);
	
	if(ninvalid===0)
		return true;
	
	return false;
	//return true;
}

function fade_color(el,bforeground,dest,millisec)
{
	trace("ayo not implemented!");
}

function fade_alpha(el,dest_alpha_percentage,millisec)
{
	trace("ayo not implemented!");
}

//element = array di oppure oggetto Element
function toggle_display(element)
{
	/*
	function _togel(el)
	{
		if(el.currentStyle.display=='none')
		{
			if(el._previous_display!='undefined')
				el.style.display=el._previous_display;
			else
				el.style.display=''; //con questo va
			
		//sotto firefox ha dei prob con le tabelle non ricalcola le dimensioni!!
		//el.style.display='block';  
		}	
		else
		{
			el._previous_display = el.currentStyle.display;
			el.style.display='none';
		}
	}*/
	
	if(typeof element == 'string')
		element = document.getElementById(element);
	
	function _togel(el)
	{
		if(el.currentStyle.display=='none')
	  {
	  	//if(el.tagName=='TABLE')
				el.style.display=''; //con questo va
			/*else
				el.style.display='block';*/
			
	    //sotto firefox ha dei prob con le tabelle non ricalcola le dimensioni!!
	    //el.style.display='block';  
		}	
		else
			el.style.display='none';
	}

	if(isArray(element))
	{
		for(var i=0;i<element.length;i++)
			_togel(element[i]);
	}
	else
		_togel(element);
}

/*
function resetSelect(sel_el,deselect_val)
{
	if(!sel_el)
		return;

	var savescroll = sel_el.scrollTop;

	var opts = sel_el.options;
	if(!opts)
		opts = sel_el.columns(0).options;
	
	//alert(opts[sel_el.selectedIndex]);
	
	if(sel_el.selectedIndex!=-1)
	{
		//alert(typeof opts[sel_el.selectedIndex].value);
		if(opts[sel_el.selectedIndex].value===deselect_val)
		{
			//alert(opts[sel_el.selectedIndex].value);
			//alert(deselect_val);
			alert('via tutto');
			for(var i=0;i<opts.length;i++)
				if(opts[i].value!=deselect_val)
					opts[i].selected = false;
			for(k in sel_el._savesel)
				sel_el._savesel[k] = false;
			return;
		}
	}
	
	if(typeof(sel_el._savesel)=='undefined')
	{
		sel_el._savesel = [];
		for(var i=0;i<opts.length;i++)
			sel_el._savesel[i] = false;
	}
	
	for(var i=0;i<opts.length;i++)
	{
		item_selected = opts[i].selected;
		//alert(item_selected);
		if(item_selected==true)
		{
			sel_el._savesel[i] = !sel_el._savesel[i];
		}
	}
	
	for(k in sel_el._savesel)
		opts[k].selected = sel_el._savesel[k];
	
	if(!ie)
		sel_el.scrollTop = savescroll;
}
*/


function resetSelect(sel_el,deselect_val)
{
	if(!sel_el)
		return;
		
	var savescroll = sel_el.scrollTop;
	var opts = sel_el.options;
	if(!opts)
		opts = sel_el.columns(0).options;
	
	if(sel_el.selectedIndex!=-1 && opts[sel_el.selectedIndex].value==deselect_val)
	{
		for(var i=0;i<opts.length;i++)
			if(opts[i].value!=deselect_val)
				opts[i].selected = false;
		for(k in sel_el._savesel)
			sel_el._savesel[k] = false;
		return;
	}
	
	if(typeof(sel_el._savesel)=='undefined')
	{
		sel_el._savesel = [];
		for(var i=0;i<opts.length;i++)
			sel_el._savesel[i] = false;
	}
	
	for(var i=0;i<opts.length;i++)
	{
		item_selected = opts[i].selected;
		if(item_selected==true)
		{
			sel_el._savesel[i] = !sel_el._savesel[i];
		}
	}
	
	for(k in sel_el._savesel)
		opts[k].selected = sel_el._savesel[k];
	
	sel_el.scrollTop = savescroll;
}

function disableInputs(rootnode,bdisabled,array_names_notdisable)
{
	var arr_i = rootnode.getElementsByTagName('input');
	var arr_s = rootnode.getElementsByTagName('select');
	var arr_t = rootnode.getElementsByTagName('textarea');
	for(i=0;i<arr_i.length;i++)
		if(array_names_notdisable.indexOf(arr_i[i].name)==-1)
			arr_i[i].disabled = bdisabled;
	for(i=0;i<arr_s.length;i++)
		if(array_names_notdisable.indexOf(arr_s[i].name)==-1)
			arr_s[i].disabled = bdisabled;
	for(i=0;i<arr_t.length;i++)
		if(array_names_notdisable.indexOf(arr_t[i].name)==-1)
			arr_t[i].disabled = bdisabled;
}

function NextSibling(start_element,sTagName)
{
	if(typeof sTagName!= 'string' || typeof start_element != 'object')
		return null;
	nextel = start_element;
	//console.log(nextel.nextSibling);
	while(nextel = nextel.nextSibling)
	{
		//console.log(nextel.tagName);
		if(nextel.nodeType==1 && nextel.tagName.toLowerCase() == sTagName.toLowerCase())
			return nextel;
	}
	return null;
}


function tab_activate(arr,activetab)
{
	for(var i=0;i<arr.length;i++)
	{
		if(arr[i]!=activetab)
		{
			arr[i].className=arr[i].attributes['dclass'].value;
			gel2(arr[i].attributes['tabcontentid'].value).style.display='none';
		}
		else
		{
			arr[i].className=arr[i].attributes['aclass'].value;
			gel2(arr[i].attributes['tabcontentid'].value).style.display='block';
		}
	}
}
		

function implodi_esplodi_tree(img,hide_show_el)
{
  if(img.src.indexOf('tree_plus2')>0)
    img.src = 'images/tree_minus2.gif';
  else
    img.src = 'images/tree_plus2.gif';
    
  toggle_display(hide_show_el);
}


/*TABBER ------------------------------------------------------------------------------*/

// var tabfolder = new Tabber('tabs_ul','active');
function Tabber(ul_id_or_obj,active_tab_class)
{
	if(this == window)
		return null;
		
	this.rootEle = ul_id_or_obj;
	
	if(typeof this.rootEle == 'string')
		this.rootEle = document.getElementById(this.rootEle);
		
	if(!this.rootEle)
		return null;
		
	this.activeClassName = active_tab_class;
	
	//metodo tab_onclick()
	this.tab_onclick = function(tab_ele)
	{
		//console.dir(this.tabs);
	
		if(this.tabs && this.tabs.length)
		{
			for(var i=0;i<this.tabs.length;i++)
			{
				var curr = this.tabs[i];
				if(curr.tab != tab_ele)
				{
					curr.tab.className = '';
					curr.cnt.style.display = 'none';
				}
				else
				{
					curr.tab.className = this.activeClassName;
					curr.cnt.style.display = '';
				}
			}
		}
	}
		
	//metodo init()
	this.init = function() {
		if(!this.rootEle)
			return false;
			
		var lis = this.rootEle.getElementsByTagName('LI');
		
		if(lis && lis.length)
		{
			this.tabs = [];
			for(var i=0;i<lis.length;i++)
			{
				var curr_ele = lis[i];
				
				var curr_a = curr_ele.getElementsByTagName('A')[0];
				var curr_cnt = curr_a.rel;
				//alert(curr_cnt);
				curr_cnt = document.getElementById(curr_cnt);
				
				this.tabs.push({
					tab: curr_ele,
					a: curr_a,
					cnt:curr_cnt
				});
				
				var obj = this;
				curr_ele.onclick = function(){ obj.tab_onclick(this); }
			}
		}
	}
	
	this.init();
	//fine Tabber
}


//------------------------------------------------------------------


function submit_parent(start_ele)
{
	if(typeof start_ele == 'string')
		start_ele = document.getElementById(start_ele);
	while(start_ele)
	{
		if(typeof start_ele.nodeName!='undefined' && start_ele.nodeName=='FORM')
			start_ele.submit();
		start_ele = start_ele.parentNode;
	}
}


function label_input(input_ele,str)
{
	if(typeof input_ele == 'string')
		input_ele = document.getElementById(input_ele);
	
	if(!input_ele.value.length)
		input_ele.value = str;
	
	input_ele.onfocus = function() {
		if(input_ele.value!=str)
			input_ele.value = '';
	}
	
	input_ele.onblur = function() {
		if(!input_ele.value.length)
			input_ele.value = str;
	}
	
}

//------------------------------------------------------------------------------



function hasclass(e,classname)
{
	if(typeof e == 'string')
		e = document.getElementById(e);
	
	var rx = new RegExp("(^|\\s)" + classname + "(\\s|$)");
	return rx.test(e.className);
}

function remclass(e,classname)
{
	if(typeof e == 'string')
		e = document.getElementById(e);
	
	//alert( "hasclass: "+classname+">"+this.hasclass(e,classname) );
	
	if(!this.hasclass(e,classname))
		return false;
	
	var rx = new RegExp("(^|\\s)" + classname + "(\\s|$)");
	var sc = e.className;
	//alert("class: "+sc);
	if(typeof sc == 'string')
	{
		sc = sc.replace(rx,'','gis');
		//alert("new class: "+sc);
		e.className = sc;
		return true;
	}			
	return false;
}

function addclass(e,classname)
{
	if(typeof e == 'string')
		e = document.getElementById(e);
	
	this.remclass(e,classname);
	var sc = e.className;
	if(typeof sc != 'string')
		sc = "";
	sc += " "+classname+" ";
	e.className = sc;
	return true;
}


function switch_class(e,arrclassnames)
{
	if(typeof e == 'string')
		e = document.getElementById(e);
	
	if(hasclass(e,arrclassnames[0])) {
		remclass(e,arrclassnames[0]);
		addclass(e,arrclassnames[1])
	}
	
	if(hasclass(e,arrclassnames[1])) {
		remclass(e,arrclassnames[1]);
		addclass(e,arrclassnames[0])
	}
}







