/**
 * Esemény beállítás
 * @return void
 */
function addEvent(O,E,F,x){
  return(x=O.addEventListener)?x(E,F,1):(x=O.attachEvent)?x('on'+E,F):!1
}

/**
 * Linkeket megnyitja uj ablakban, ahol a rel="external"
 * @return void
 */
function externalLinks()
{
  if (!document.getElementsByTagName) return;
  var anchors = document.getElementsByTagName("a");
  for (var i=0; i<anchors.length; i++)
  {
    var anchor = anchors[i];
    if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external") anchor.target = "_blank";
  }
  return true;
}

addEvent(window,'load',externalLinks);

/**
 * Debug
 * @return void
 */
function myDebug(text)
{
  var o = document.getElementById("mydebug");
  if (!o)
  {
    var d = document.createElement("div");
    d.id = "mydebug";
    d.style.color = "white";
    document.body.insertBefore(d, document.body.firstChild);
    o = document.getElementById("mydebug");
  }
  o.innerHTML += "<br />" + text;
  return true;
}

/**
 * Depends on jQuery
 */
function scrollWindowToElement(el, params)
{
  if (!scrollWindowToElement.running) scrollWindowToElement.running = false;

  if (!scrollWindowToElement.running)
  {
    scrollWindowToElement.startTop = typeof window.scrollY != 'undefined' ? window.scrollY : document.documentElement.scrollTop;
    scrollWindowToElement.diffTop = $(el).offset().top + (typeof params != 'undefined' && typeof params.y != 'undefined' ? params.y : 0) - scrollWindowToElement.startTop;
    scrollWindowToElement.running = true;
    scrollWindowToElement.params = params;
    scrollWindowToElement.p = 0;
    scrollWindowToElement(el);
    return;
  }
  else
  {
    var p = scrollWindowToElement.p;
    scrollWindowToElement.p += 0.03;
    if (Math.abs(p - 1) < 0.05)
    {
      scrollWindowToElement.running = false;
      delete(scrollWindowToElement.params);
      delete(scrollWindowToElement.p);
      return;
    }
    var newTop = ((-Math.cos(p*Math.PI)/2) + 0.5) * scrollWindowToElement.diffTop + scrollWindowToElement.startTop;
    window.scrollTo(0, newTop);
    setTimeout(scrollWindowToElement, 20);
  }
}

function versionCompare(v1, v2)
{
  if (v1 == v2) return 0;
  var v1 = v1.split('.');
  var v2 = v2.split('.');

  var cnt = Math.max(v1.length, v2.length);
  for (var i=0; i<cnt; i++)
  {
    if (v1.length <= i) v1[i] = 0;
    if (v2.length <= i) v2[i] = 0;

    if (v1[i] < v2[i]) return 1;
    if (v1[i] > v2[i]) return -1;
  }

  return 0;
}

function trim(str, chars)
{
	return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars)
{
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars)
{
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

function in_array (needle, haystack, argStrict)
{
  var key = '', strict = !!argStrict;
  if (strict) {
      for (key in haystack) {
          if (haystack[key] === needle) {
              return true;            }
      }
  } else {
      for (key in haystack) {
          if (haystack[key] == needle) {                return true;
          }
      }
  }
  return false;
}

function implode (glue, pieces)
{
    var i = '', retVal='', tGlue='';
    if (arguments.length === 1) {        pieces = glue;
        glue = '';
    }
    if (typeof(pieces) === 'object') {
        if (pieces instanceof Array) {            return pieces.join(glue);
        }
        else {
            for (i in pieces) {
                retVal += tGlue + pieces[i];                tGlue = glue;
            }
            return retVal;
        }
    }    else {
        return pieces;
    }
}

function explode (delimiter, string, limit)
{
     var emptyArray = { 0: '' };

    // third argument is not required
    if ( arguments.length < 2 ||
        typeof arguments[0] == 'undefined' ||        typeof arguments[1] == 'undefined' )
    {
        return null;
    }
     if ( delimiter === '' ||
        delimiter === false ||
        delimiter === null )
    {
        return false;    }

    if ( typeof delimiter == 'function' ||
        typeof delimiter == 'object' ||
        typeof string == 'function' ||        typeof string == 'object' )
    {
        return emptyArray;
    }
     if ( delimiter === true ) {
        delimiter = '1';
    }

    if (!limit) {        return string.toString().split(delimiter.toString());
    } else {
        // support for limit argument
        var splitted = string.toString().split(delimiter.toString());
        var partA = splitted.splice(0, limit - 1);        var partB = splitted.join(delimiter.toString());
        partA.push(partB);
        return partA;
    }
}

