//Requires event.js
//niektóre funkcje kożystają z jQuery

//-----------------------------
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]).css.display = "none";
  }
}

function showClass(cls){
  var toShow = getElementsByClass(cls);
  for(i=0; i<toShow.length; i++){
    $(toShow[i]).css.display = "";
  }
}

function show(elem)
{
	elem = $(elem);
	elem.show(); 	
}
          
function hide(elem)
{
	elem = $(elem);
	elem.hide();
}

//-----------------------------------------------------------------------------
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 );
	var addExp = new Array();
	if( tmpString != null &&  tmpString != "" )
		expanded = tmpString.split(";");
	if( basic_vis != null &&  basic_vis != "" )
		addExp = basic_vis.split(";");
	
	expanded = expanded.concat(addExp);
	
	//aktualizacja przycisków
	var elements = getElementsByClass("tree_trigger_.*", null, 'img');
	if (elements)
	 for(i = 0; i<elements.length; i++){ 
		
		$(elements[i]).click(function(){
			var group_id = treeGetTriggerGroup(this.className);
			return treeClick(group_id);
		});
	}
	for(var j=0; j< expanded.length;j++){
    treeClick(expanded[j],true);
	}
	
	//treeUpdate();
}

function treeUpdate(){
	//pokazywanie i ukrywanie rzędów
	var elements = getElementsByClass("tree_group_.*", null, 'li');
	if (elements)
	 for(i = 0; i<elements.length; i++){ 
		var group_id = treeGetGroup(elements[i].className);
	
		if (treeIsVisible(group_id)){
			show(elements[i]);
			//$(".tree_trigger_"+group_id).attr('src','./projects/crm/resources/graphic/presentation/hide.png');
		}
		else{
			hide(elements[i]);	
			//$(".tree_trigger_"+group_id).attr('src','./projects/crm/resources/graphic/presentation/expand.png');
		}
	}
	//aktualizacja przycisków
	/*var elements = getElementsByClass("tree_trigger_.*", null, 'img');
	if (elements)
	 for(i = 0; i<elements.length; i++){ 
		var group_id = treeGetTriggerGroup(elements[i].className);
	
		$(elements[i]).click(
		if (treeIsVisible(group_id)){
			$(elements[i]).click(function(){treeHide('"+group_id+"');});
		}
		else{
			$(elements[i]).click(function(){treeShow('"+group_id+"');});
		}
	}*/		
}

function treeClick(id,init){
//alert(id);
  if (init !== true)
    init = false;
	if ( !init && treeIsVisible(id)){
		treeHide(id);
		$(".tree_trigger_"+id).attr('src','./projects/crm/resources/graphic/presentation/expand.png');
	}
	else{
		treeShow(id);
		$(".tree_trigger_"+id).attr('src','./projects/crm/resources/graphic/presentation/hide.png');
	}	
	return false;
} 

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();
	return false;
}
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();
	return false;
}
//-->