var isIe = window.ActiveXObject || false,
    isOpera = window.opera || false,
    isFF = navigator.userAgent.indexOf('Mozilla') != -1 ? true : false;

function addListener(elem, event, call_back)
{
  try
  {
    if (elem.addEventListener)
    {
      if((event == 'mousewheel') && isFF)
      {
        elem.addEventListener('DOMMouseScroll', call_back, false);
      }
      else
      {
        elem.addEventListener(event, call_back, false);
      }
    }
    else if (elem.attachEvent)
    {
      elem.attachEvent('on'+event, call_back);
    }
    else {}
  }
  catch(e)
  {
    alert(e.toString());
  }
}

function removeListener(elem,event,call_back)
{
  try
  {
    if (elem.removeEventListener)
    {
      if((event == 'mousewheel') && isFF)
      {
         elem.removeEventListener('DOMMouseScroll', call_back, false);
      }
      else
      {
         elem.removeEventListener(event, call_back, false);
      }
    }
    else if (elem.detachEvent)
    {
      elem.detachEvent('on'+event, call_back);
    }
    else {}
  }
  catch(e)
  {
    alert(e.toString());
  }
}

function stopPropagation(event)
{
  if(event)
  {
    if(event.stopPropagation)
    {
      event.stopPropagation();
    }
    else
    {
      event.cancelBubble = true;
    }
  }
}

function preventDefault(event)
{
  if (event.preventDefault)
  {
    event.preventDefault();
  }
  else
  {
    event.returnValue = false;
  }
}

function $(id)
{
  return document.getElementById(id);
}

function getElementsByClass(searchClass,node,tag)
{
        var classElements = [];

        if (node == null)
        {
          node = document;
        }

        if (tag == null)
        {
          tag = '*';
        }

        var els = node.getElementsByTagName(tag);
        var elsLen = els.length;

        var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
        var i;
        for (i = 0; i < elsLen; i++)
        {
          if (pattern.test(els[i].className))
          {
            classElements[classElements.length] = els[i];
          }
        }

        return classElements;
}

function getTop(elem)
{

  var  top = 0;
  top = elem.offsetTop;

  if(elem.parentNode && elem.parentNode.tagName != 'HTML') top += getTop(elem.parentNode);

  return top;
}

function getLeft(elem)
{
  var  left = 0;

  if(elem.parentNode && elem.parentNode.tagName != 'HTML') left += getLeft(elem.parentNode);

  return left;
}

function getExpDate(days, hours, minutes)
{
  if(typeof days == 'number' && typeof hours == 'number' && typeof minutes == 'number')
  {
    var expDate = new Date();
    expDate.setDate(expDate.getDate()+parseInt(days));
    expDate.setHours(expDate.getHours()+parseInt(hours));
    expDate.setMinutes(expDate.getMinutes()+parseInt(minutes));
    return expDate.toGMTString();
  }

  return 0;
}

function getCookieVal(offset)
{
  var endStr = document.cookie.indexOf(';', offset);
   if(endStr == -1)
   endStr = document.cookie.length;
  return decodeURIComponent(document.cookie.substring(offset, endStr));
}

function getCookie(name)
{
  var arg = name+'=';
  var alen = arg.length;
  var clen = document.cookie.length;
  var i = 0;
  var j = 0;

  while(i < clen)
  {
   j = i + alen;
   if(document.cookie.substring(i,j) == arg)
    return getCookieVal(j);

   i = document.cookie.indexOf(' ', i) + 1;
   if(!i) break;
  }

  return null;
}

function setCookie(name, value, expires, path, domain, secure)
{
  document.cookie = name+'='+encodeURIComponent(value) +
   ((expires) ? '; expires='+expires : '') +
   ((path) ? '; path='+path : '') +
   ((domain) ? '; domain='+domain : '') +
   ((secure) ? '; secure' : '');
}

function delCookie(name, path, domain)
{
  if(getCookie(name))
  {
    document.cookie = name + '=' +
    ((path) ? '; path='+path : '') +
    ((domain) ? '; domain='+domain : '')+
    '; expires= Thu, 01 Jan 70 00:00:01 GMT';
  }
}

function insertAfter(parent, node, referenceNode)
{
  parent.insertBefore(node, referenceNode.nextSibling);
}

function random(dec, min_num, max_num)
{
  var num = parseInt(Math.random() * dec, 10);

  if ((max_num && (num > max_num)) || (min_num && (num < min_num))) num = random(dec, min_num, max_num);

  return num;
}

function serverError(e)
{
  alert('Error! Pleas try again later!\nERROR:\n'+e.toString());
}

function alertObject(obj)
{
  var i, str = '';
  for(i in obj)
  {
    str += i + ' : ' + obj[i] + '\n';
  }
  alert(str);
}

function joinObject(glueStr, obj)
{
  var i, str ='';
  for(i in obj)
  {
    if(typeof obj[i] == 'number' || typeof obj[i] == 'string')
    str += obj[i] + glueStr;
  }

  return str.substr(0,str.length-1);
}


function hide()
{
  var n = arguments.length, elem;
  for(var i = 0; i < n; ++i)
  {
    elem = $(arguments[i]);
    if(elem)
    {
      elem.style.display = 'none';
    }
  }
}

function show()
{
  var n = arguments.length, elem;
  for(var i = 0; i < n; ++i)
  {
    elem = $(arguments[i]);
    if(elem)
    {
      elem.style.display = 'block';
    }
  }
}

