//
// softpltaz.js
// (c) 2006 Misha Yurasov
//

var browser_opera   = false;
var browser_msie    = false;
var browser_mozilla = false;

_detect_browser();
_add_onload_event(_page_onload);

// --------------------------------

//
// Detect current browser
//
function _detect_browser()
{
  var is_dom      = document.getElementById ? true : false;
  browser_opera   = window.opera ? true : false;                                        // Opera 5+
  browser_msie    = document.all && document.all.item && !browser_opera ? true : false; // MSIE 4+
  browser_mozilla = is_dom && navigator.appName == 'Netscape' ? true : false;           // Mozilla-based
}

//
// Register onload event
//
function _add_onload_event(ref)
{
  if (browser_mozilla)
  {
    window.addEventListener('load', ref, false);
  }
  else if (browser_opera)
  {
    document.addEventListener('load', ref, false);
  }
  else if(browser_msie)
  {
    window.attachEvent('onload', ref);
  }
}

//
// Append class to element's className
//
function _classname_append(element, classname)
{
  if (element.className.indexOf(classname) == -1)
  {
    element.className += ' ' + classname;
  }
}

// --------------------------------

//
// Fires when page is completely loaded
//
function _page_onload()
{  
  // search field
  var query_text = document.getElementById('query_text');
  
  // 1: search field behaviour
  
  if (query_text.value == '')
  {
    query_text.value = 'search...';
  }
  else
  {
    _classname_append(query_text, 'query_text_active');
    query_text.setAttribute('active', '1');
  }
  //
  query_text.onmousedown =
  query_text.onkeydown = 
    function () {
      this.value = '';
      this.onmousedown =
      this.onkeydown = null;
      _classname_append(this, 'query_text_active');
      this.setAttribute('active', '1');
      this.focus();
    };
  
  // 2: fix styles for FF
  
  if (browser_mozilla)
  {
    _classname_append(query_text, 'query_text_ff');
  }
  else if (browser_opera)
  {
    _classname_append(query_text, 'query_text_opera');
  }
  
  // 3: add navigation bar functionality
  _navbar_init();
}

var navbar_blocks = new Array();

function _navbar_init()
{
  // 1: Find all navbar blocks and save references
  
  var nav = document.getElementById('nav');
  var blk = nav.firstChild;
  var tmp, h, b, blk_id;
  
  while (blk) // blocks
  {
    if (blk.className == 'nav_block')
    {
      h = b = false;
      tmp = blk.firstChild;
      blk_id = blk.getAttribute('id');
      navbar_blocks[blk_id] = new Array();
      
      while (tmp) // header & body
      {
        if (!h && tmp.className == 'header')
        {
          navbar_blocks[blk_id]['header'] = tmp;
          h = true;
        }
        else if (!b && tmp.className == 'body')
        {
          navbar_blocks[blk_id]['body'] = tmp;
          b = true;
        }
        else
        {
          tmp = tmp.nextSibling;
        }
      }
    }
    
    blk = blk.nextSibling;
  }
  
  // 2: Attach functionality
  
  for (tmp in navbar_blocks)
  {
    blk = navbar_blocks[tmp];
    blk['header'].setAttribute('_navbar_block_id', tmp);
    blk['header'].onclick = function () { _navbar_header_click(this, true) };
    blk['header'].unselectable = true;
    
    if (_navbar_read_block_state(tmp) == 0)
    {
      _navbar_header_click(blk['header'], false, 0)
    }
  }
}

//
// OnClick event handler for navbar headers
//
function _navbar_header_click(element, save, state)
{
  var block_id = element.getAttribute('_navbar_block_id');
  
  if (state == null)
  {
    state = element.getAttribute('_navbar_block_state');
    state = state == null ? -1 : parseInt(state); // current state
    state = state == 0 ? 1 : 0; // new state
  }
  
  // set new state
  switch (state)
  {
    case 0:
    {
      navbar_blocks[block_id]['body'].style.display = 'none';
      break;
    }
    
    default:
    {
      navbar_blocks[block_id]['body'].style.display = 'block';
      break;
    }
  }

  element.setAttribute('_navbar_block_state', state);
  if (save) { _navbar_save_block_state(block_id, state); }
}

//
// Get block state from cookies
// 0 = closed, 1 = open, -1 = not set
//
function _navbar_read_block_state(block_id)
{
  var cookie_text, cookie_parts, cookie_name, i, state = -1;
  
  cookie_name = 'navbar_' + block_id;
  cookie_text = document.cookie;
  cookie_text = cookie_text.split('; ');
  
  for (i = 0; i < cookie_text.length; i++)
  {
    cookie_parts = cookie_text[i].split('=');
    
    if (cookie_parts[0] == cookie_name)
    {
      state = parseInt(cookie_parts[1]);
      break;
    }
  }
  
  return state;
}

//
// Save navbar block state
//
function _navbar_save_block_state(block_id, state)
{
  var cookie_exp_date;
  
  // cookie expiration date
  cookie_exp_date = new Date();
  cookie_exp_date.setFullYear(cookie_exp_date.getFullYear() + 1); // now + 1 year
  cookie_exp_date = cookie_exp_date.toGMTString();
  
  // set cookie
  document.cookie = 'navbar_' + block_id + '=' + state + '; expires=' + cookie_exp_date + '; path=/';
}

//
// Search software
//
function _search()
{	
	query_text = document.getElementById('query_text');
	
	if (query_text.getAttribute('active'))
	{
  	var query = query_text.value;
  	query     = _format_query(query);

  	if (query != '')
  	{
  		document.location = _kwsearches_dir + '/' + query + '/';
  		return;
  	}
  }

  alert("Please, enter search phrase first");
}

//
// Format search phrase
//
function _format_query(query)
{
	query = query.replace(/[^a-z0-9]+/gi, ' ');
	query = query.replace(/^\s/g, '');
	query = query.replace(/\s$/g, '');
	query = query.replace(/\s/g, '-');
	return query.toLowerCase();
}