//Requires event.js
//-----------------------------
function getElementsByClass(searchClass,node,tag) {
   
   var classElements = new Array();
   var pattern = new RegExp('(^|\\s)'+searchClass+'(\\s|$)');
   node = (node == null) ? document : node;
  
   if ((document.getElementsByTagName("*").length > 0) || (tag != null)){
      tag = (tag == null) ? "*" : tag;
      var els = node.getElementsByTagName(tag);
      var elsLen = els.length;
      for (i = 0, j = 0; i < elsLen; i++){
         if (pattern.test(els[i].className)){
            classElements[j] = els[i];
            j++;
         }
      }
   }else{
      var els = node.all;
      var elsLen = els.length;
      for (i = 0, j = 0; i < elsLen; i++){
         if (pattern.test(els[i].className)){
            classElements[j] = els[i];
            j++;
         }
      }
   }
   return classElements;
} 


function hideClass(cls){
  var toHide = getElementsByClass(cls);
  for(i=0; i<toHide.length; i++){
    toHide[i].style.display = "none";
  }
}

function showClass(cls){
  var toShow = getElementsByClass(cls);
  for(i=0; i<toShow.length; i++){
    toShow[i].style.display = "";
  }
}

function show(elem)
{
	elem = $(elem);
	elem.style.display=""; 
}
          
function hide(elem)
{
	elem = $(elem);
	elem.style.display="none";           
}

//-----------------------------------------------------------------------------
function Set_Cookie( name, value, expires, path, domain, secure ) 
{
// set time, it's in milliseconds
var today = new Date();
today.setTime( today.getTime() );
/*
if the expires variable is set, make the correct 
expires time, the current script below will set 
it for x number of days, to make it for hours, 
delete * 24, for minutes, delete * 60 * 24
*/
if ( expires )
{
expires = expires * 1000 * 60 /* * 60 * 24*/; //set for minutes
}
var expires_date = new Date( today.getTime() + (expires) );

document.cookie = name + "=" +escape( value ) +
( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) + 
( ( path ) ? ";path=" + path : "" ) + 
( ( domain ) ? ";domain=" + domain : "" ) +
( ( secure ) ? ";secure" : "" );
}
	
//-----------------------------------------------------------------------------
function Get_Cookie( check_name ) {
	// first we'll split this cookie up into name/value pairs
	// note: document.cookie only returns name=value, not the other components
	var a_all_cookies = document.cookie.split( ';' );
	var a_temp_cookie = '';
	var cookie_name = '';
	var cookie_value = '';
	var b_cookie_found = false; // set boolean t/f default f
	
	for ( i = 0; i < a_all_cookies.length; i++ )
	{
		// now we'll split apart each name=value pair
		a_temp_cookie = a_all_cookies[i].split( '=' );
		
		
		// and trim left/right whitespace while we're at it
		cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');
	
		// if the extracted name matches passed check_name
		if ( cookie_name == check_name )
		{
			b_cookie_found = true;
			// we need to handle case where cookie has no value but exists (no = sign, that is):
			if ( a_temp_cookie.length > 1 )
			{
				cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );
			}
			// note that in cases where cookie is initialized but no value, null is returned
			return cookie_value;
			break;
		}
		a_temp_cookie = null;
		cookie_name = '';
	}
	if ( !b_cookie_found )
	{
		return null;
	}
}
//-----------------------------------------------------------------------------

var expanded = new Array();
var cookie_name = '';
var cookie_time = 30;

function treeInit(basic_vis, class_name){

	if( class_name == null ||  class_name == "" ){
		cookie_name = 'expanded_default';
	}else{
		cookie_name = 'expanded'+class_name;	
	}	
	tmpString = Get_Cookie( cookie_name );
	
	if( tmpString != null &&  tmpString != "" )
		expanded = tmpString.split(";");
	else if( basic_vis != null &&  basic_vis != "" )
		expanded = basic_vis.split(";");
	
	treeUpdate();
}

function treeUpdate(){
	//pokazywanie i ukrywanie rzędów
	var elements = getElementsByClass("tree_group_.*", null, 'tr');
	if (elements)
	 for(i = 0; i<elements.length; i++){ 
		var group_id = treeGetGroup(elements[i].className);
	
		if (treeIsVisible(group_id)){
			show(elements[i]);
		}
		else{
			hide(elements[i]);	
		}
	}
	//aktualizacja przycisków
	var elements = getElementsByClass("tree_trigger_.*", null, 'a');
	if (elements)
	 for(i = 0; i<elements.length; i++){ 
		var group_id = treeGetTriggerGroup(elements[i].className);
	
		if (treeIsVisible(group_id)){
			elements[i].href = "javascript:treeHide('"+group_id+"');";
		}
		else{
			elements[i].href = "javascript:treeShow('"+group_id+"');";
		}
	}		
}

function in_array(needle, haystack){
    var found = false, key; 
    for (key in haystack) {
        if ( haystack[key] == needle) {
            found = true;
            break;
        }
    }
    return found;	
}

function treeIsVisible(data){
    var found = false, key; 
    for (key in expanded) {
        if ( expanded[key] == data) {
            found = true;
            break;
        }
    }
    return found;		
}

function treeGetGroup(data){
	data = data.match("tree_group_.*(\\s|$)"); 
	if (data)
	 return data[0].substring(11);
	return null;
}

function treeGetTriggerGroup(data){
	data = data.match("tree_trigger_.*(\\s|$)"); 
	if (data)
	 return data[0].substring(13);
	return null;
}

function treeGetSubGroups(par_group){

	var subgroups = new Array();
	var elements = getElementsByClass("tree_trigger_.*", null, 'a');
	if (elements)
	 for(i = 0; i<elements.length; i++){ 
		var group_id = treeGetTriggerGroup(elements[i].className);
		var parent_group_id = treeGetGroup(elements[i].parentNode.parentNode.className);
		
		if ( parent_group_id == par_group || in_array(parent_group_id, subgroups) )
			subgroups[subgroups.length] = group_id;
	}		
	return subgroups;
}

function treeHide(group_id){

	var i;
	var sub = treeGetSubGroups(group_id);
	for(i = 0; i<expanded.length; i++){
		if( expanded[i] == group_id || in_array(expanded[i], sub) ){
			expanded.splice(i,1);
			i--;
		}
	}
	Set_Cookie( cookie_name, expanded.join(";"), cookie_time );
	treeUpdate()
}
function treeShow(group_id){
	
	var add = true;
	var j;
	for(j = 0; j<expanded.length; j++){
		if( expanded[j] == group_id ){
			add = false;
			break;	
		}
	}
	if(add){	
		expanded.push(group_id);
		Set_Cookie( cookie_name, expanded.join(";"), cookie_time );
	}
	treeUpdate();
}
//-->
