var prev_bg = 0;
var MAXHP = 1;
var MAXMP = 1;
var IE = (navigator.appName.search('Internet Explorer') != -1 && navigator.userAgent.search('Opera') == -1);
var Opera = (navigator.userAgent.search('Opera') != -1);
var Firefox = (navigator.userAgent.search('Firefox') != -1);

function $(id)
{
  return document.getElementById(id);
}

function Get_Cookie(name) {
   var start = document.cookie.indexOf(name+"=");
   var len = start+name.length+1;
   if ((!start) && (name != document.cookie.substring(0,name.length))) return '';
   if (start == -1) return '';
   var end = document.cookie.indexOf(";",len);
   if (end == -1) end = document.cookie.length;
   return unescape(document.cookie.substring(len,end)).replace('+', ' ');
}


function Set_Cookie(name,value,expires,path,domain,secure) {
    var cookieString = name + "=" +escape(value) +
       ( (expires) ? ";expires=" + expires.toGMTString() : "") +
       ( (path) ? ";path=" + path : "") +
       ( (domain) ? ";domain=" + domain : "") +
       ( (secure) ? ";secure" : "");
    document.cookie = cookieString;
}

function url(url, target)
{
	//if(typeof(uid) != 'undefined' && url.indexOf('uid=') == -1 && url.indexOf('?') != -1)
	//	url += '&uid=' + uid;
  if(target == 2)
    obj = parent.parent;
  else if(target == 1)
    obj = parent;
  else if(target == -1)
  {
    obj = window.open(url, '', '');
    return;
  }
  else if(typeof(target) == 'string')
  {
    obj = window.frames[target];
  }
  else
    obj = document;
  obj.location = url;
}

function checkInput(obj, minvalue, maxvalue)
{
  var val = parseInt(obj.value);
  if(obj.value == '' || obj.value == '-')
    return;
  minvalue = parseInt(minvalue);
  maxvalue = parseInt(maxvalue);
  if(isNaN(minvalue))
    minvalue = -1 * 0xFFFFFFFF;
  if(isNaN(maxvalue))
    maxvalue = 0xFFFFFFFF;
  if(isNaN(val))
    val = minvalue > 0 ? minvalue : 0;
  else if(val < minvalue)
    val = minvalue;
  else if(maxvalue >= minvalue && val > maxvalue)
    val = maxvalue;
  obj.value = val;
}

function UpdateProtectTime(protect_time)
{
  if(typeof(protect_time) != 'undefined' && protect_time > 0)
  {
  	if(protect_time <= 60)
    	$('protect_time').innerHTML = 'Czas ochrony: <b>' + protect_time + '</b> minut';
    else
    	$('protect_time').innerHTML = 'Czas ochrony:<br><b>' + Math.floor(protect_time/60) + '</b> godzin <b>' + (protect_time%60) + '</b> minut';
    my_setTimeout(UpdateProtectTime, 60000, protect_time-1);
  }
  else
    $('protect_time').innerHTML = '';
}

function UpdateAntiprotect(count)
{
  if(typeof(count) != 'undefined' && count > 0)
  {
    $('antiprotect').innerHTML = '&nbsp;&nbsp;<img src="images/icon_' + ( count > 5 ? 'red' : 'white') + '_skull.gif" style="vertical-align:text-bottom">(<b>' + count + '</b>)';
  }
  else
    $('antiprotect').innerHTML = '';
}

var prev_level = 0;
function SetPlayerData(level, exp, nextlv_exp, hp, mp, gold, moves, movesmax, maxhp, maxmp, name, protect_time, antiprotect)
{
  document.getElementById('player_level').innerHTML = level;
  if(prev_level != 0)
    if(prev_level < level)
    {
      document.getElementById('player_level').innerHTML = level + '( <a href="player.php" style="color: #FFFF40">awans!</a> )';
    }
    else if(prev_level > level)
    {
      document.getElementById('player_level').innerHTML = level + '( <a href="player.php" style="color: #FF4040">spadek!</a> )';
    }
  prev_level = level;
  if(typeof(movesmax) != 'undefined')
    document.getElementById('player_movesmax').innerHTML = movesmax;
  if(typeof(maxhp) != 'undefined')
  {
    document.getElementById('player_maxhp').innerHTML = maxhp;
    MAXHP = maxhp;
  }
  if(typeof(maxmp) != 'undefined')
  {
    document.getElementById('player_maxmp').innerHTML = maxmp;
    MAXMP = maxmp;
  }
  if(typeof(name) != 'undefined')
    document.getElementById('player_name').innerHTML = name;
    
  UpdateProtectTime(protect_time);
  UpdateAntiprotect(antiprotect);
  
  if(nextlv_exp < 0)
  {
  	nextlv_exp = '(' + nextlv_exp + ')' + '<A href="javascript:ShowInfoFrame(\'help.php?f=level_freeze\')"><img onclick="" border="0" src="' + img_dir + 'images/question.gif" style="vertical-align: text-bottom"></a>';
  }
  else
  {
  	nextlv_exp = '(' + nextlv_exp + ')';
  }

  document.getElementById('player_exp').innerHTML = exp;
  document.getElementById('player_nextlv_exp').innerHTML = nextlv_exp;
  document.getElementById('player_hp').innerHTML = hp;
  document.getElementById('player_mp').innerHTML = mp;
  document.getElementById('player_gold').innerHTML = gold;
  document.getElementById('player_moves').innerHTML = moves;
  document.getElementById('HP_bar').width = Math.round(hp/MAXHP*90);
  document.getElementById('MP_bar').width = Math.round(mp/MAXMP*90);
  
  moves = ($('player_movesmax').innerHTML-moves)*3;
  var h = Math.floor(moves/60);
  var m = moves % 60;

  var charge_time = (h ? h + ' godzin, ': '') + m + ' minut';
  $('moves_td').title = 'Punkty będą pełne za ' + charge_time + '.';
}

function ShowInfoFrame(uri)
{
  var frame_obj = document.getElementById('info_frame');
  if(frame_obj)
  {
    document.getElementById('info_frame').style.display = 'block';
    window.frames['info_frame'].location = uri;
  }
  else if(parent == document)
  {
    url(uri);
  }
  else
  {
    url(uri, -1);
  }
}

function HideInfoFrame()
{
  var frame_obj = document.getElementById('info_frame');
  if(frame_obj)
  {
    frame_obj.style.display = 'none';
    window.frames['info_frame'].document.body.innerHTML = '';
    window.focus();
  }
  else
    window.close();
}

function TalkTo(c_id)
{
  ShowInfoFrame('heal.php');
}

function printf(fstring)
  { var pad = function(str,ch,len)
      { var ps='';
        for(var i=0; i<Math.abs(len); i++) ps+=ch;
        return len>0?str+ps:ps+str;
      }
    var processFlags = function(flags,width,rs,arg)
      { var pn = function(flags,arg,rs)
          { if(arg>=0)
              { if(flags.indexOf(' ')>=0) rs = ' ' + rs;
                else if(flags.indexOf('+')>=0) rs = '+' + rs;
              }
            else
                rs = '-' + rs;
            return rs;
          }
        var iWidth = parseInt(width,10);
        if(width.charAt(0) == '0')
          { var ec=0;
            if(flags.indexOf(' ')>=0 || flags.indexOf('+')>=0) ec++;
            if(rs.length<(iWidth-ec)) rs = pad(rs,'0',rs.length-(iWidth-ec));
            return pn(flags,arg,rs);
          }
        rs = pn(flags,arg,rs);
        if(rs.length<iWidth)
          { if(flags.indexOf('-')<0) rs = pad(rs,' ',rs.length-iWidth);
            else rs = pad(rs,' ',iWidth - rs.length);
          }
        return rs;
      }
    var converters = new Array();
    converters['c'] = function(flags,width,precision,arg)
      { if(typeof(arg) == 'number') return String.fromCharCode(arg);
        if(typeof(arg) == 'string') return arg.charAt(0);
        return '';
      }
    converters['d'] = function(flags,width,precision,arg)
      { return converters['i'](flags,width,precision,arg);
      }
    converters['u'] = function(flags,width,precision,arg)
      { return converters['i'](flags,width,precision,Math.abs(arg));
      }
    converters['i'] =  function(flags,width,precision,arg)
      { var iPrecision=parseInt(precision);
        var rs = ((Math.abs(arg)).toString().split('.'))[0];
        if(rs.length<iPrecision) rs=pad(rs,' ',iPrecision - rs.length);
        return processFlags(flags,width,rs,arg);
      }
    converters['E'] = function(flags,width,precision,arg)
      { return (converters['e'](flags,width,precision,arg)).toUpperCase();
      }
    converters['e'] =  function(flags,width,precision,arg)
      { iPrecision = parseInt(precision);
        if(isNaN(iPrecision)) iPrecision = 6;
        rs = (Math.abs(arg)).toExponential(iPrecision);
        if(rs.indexOf('.')<0 && flags.indexOf('#')>=0) rs = rs.replace(/^(.*)(e.*)$/,'$1.$2');
        return processFlags(flags,width,rs,arg);
      }
    converters['f'] = function(flags,width,precision,arg)
      { iPrecision = parseInt(precision);
        if(isNaN(iPrecision)) iPrecision = 6;
        rs = (Math.abs(arg)).toFixed(iPrecision);
        if(rs.indexOf('.')<0 && flags.indexOf('#')>=0) rs = rs + '.';
        return processFlags(flags,width,rs,arg);
      }
    converters['G'] = function(flags,width,precision,arg)
      { return (converters['g'](flags,width,precision,arg)).toUpperCase();
      }
    converters['g'] = function(flags,width,precision,arg)
      { iPrecision = parseInt(precision);
        absArg = Math.abs(arg);
        rse = absArg.toExponential();
        rsf = absArg.toFixed(6);
        if(!isNaN(iPrecision))
          { rsep = absArg.toExponential(iPrecision);
            rse = rsep.length < rse.length ? rsep : rse;
            rsfp = absArg.toFixed(iPrecision);
            rsf = rsfp.length < rsf.length ? rsfp : rsf;
          }
        if(rse.indexOf('.')<0 && flags.indexOf('#')>=0) rse = rse.replace(/^(.*)(e.*)$/,'$1.$2');
        if(rsf.indexOf('.')<0 && flags.indexOf('#')>=0) rsf = rsf + '.';
        rs = rse.length<rsf.length ? rse : rsf;
        return processFlags(flags,width,rs,arg);
      }
    converters['o'] = function(flags,width,precision,arg)
      { var iPrecision=parseInt(precision);
        var rs = Math.round(Math.abs(arg)).toString(8);
        if(rs.length<iPrecision) rs=pad(rs,' ',iPrecision - rs.length);
        if(flags.indexOf('#')>=0) rs='0'+rs;
        return processFlags(flags,width,rs,arg);
      }
    converters['X'] = function(flags,width,precision,arg)
      { return (converters['x'](flags,width,precision,arg)).toUpperCase();
      }
    converters['x'] = function(flags,width,precision,arg)
      { var iPrecision=parseInt(precision);
        arg = Math.abs(arg);
        var rs = Math.round(arg).toString(16);
        if(rs.length<iPrecision) rs=pad(rs,' ',iPrecision - rs.length);
        if(flags.indexOf('#')>=0) rs='0x'+rs;
        return processFlags(flags,width,rs,arg);
      }
    converters['s'] = function(flags,width,precision,arg)
      { var iPrecision=parseInt(precision);
        var rs = arg;
        if(rs.length > iPrecision) rs = rs.substring(0,iPrecision);
        return processFlags(flags,width,rs,0);
      }
    farr = fstring.split('%');
    retstr = farr[0];
    fpRE = /^([-+ #]*)(\d*)\.?(\d*)([cdieEfFgGosuxX])(.*)$/;
    for(var i=1; i<farr.length; i++)
      { fps=fpRE.exec(farr[i]);
        if(!fps) continue;
        if(arguments[i]!=null) retstr+=converters[fps[4]](fps[1],fps[2],fps[3],arguments[i]);
        retstr += fps[5];
      }
    return retstr;
  }
/* Function printf() END */

function print_r1(obj)
{
  var j = 0;
  var str = '';
  for(var i in obj)
  {
    if(j++ > 20) break;
    str += i +'='+ obj[i] + '\n';
  }
  return str;
}

function print_r(obj, ident, level)
{
  var j = 0;
  var i;
  ident = ident ? ident : '';
  level = level ? level : 0;
  var str = ident + 'Object {\n';

  for(var i in obj)
  {
    if(j++ > 1000) break;
    if(typeof(obj[i]) == 'object' && level < 0)
      str += ident + i +' => '+ print_r(obj[i], ident + '    ', level+1);
    else
      str += ident + i + ' => ' + obj[i] + '\n';
  }
  return str + ident + '}\n';
}


var my_setTimeout = function(func, timeout)
{
	var args = [];
	for(var i=2;i<arguments.length;i++)
   args.push(arguments[i]);
  var _this = this;
  
  if(typeof(func) != 'function')
  {
  	_this = func[0];
  	func = func[1];
  }
  if(typeof(func) != 'function')
  {
  	return;
  }
  return setTimeout(function(){func.apply(_this, args);}, timeout);
};

var my_setInterval = function(func, interval)
{
	var args = [];
	for(var i=2;i<arguments.length;i++)
   args.push(arguments[i]);
  var _this = this;
  if(typeof(func) != 'function')
  {
  	_this = func[0];
  	func = func[1];
  }
  if(typeof(func) != 'function')
  {
  	return;
  }
  return setInterval(function(){func.apply(_this, args);}, timeout);
}

var my_clearTimeout = function(timerID)
{
	clearTimeout(timerID);
}

var my_clearInterval = function(timerID)
{
	clearInterval(timerID);
}

function isFunction(a) {
    return typeof a == 'function';
}

if (!isFunction(Array.prototype.splice)) {
    Array.prototype.splice = function (s, d) {
        var max = Math.max,
            min = Math.min,
            a = [], // The return value array
            e,  // element
            i = max(arguments.length - 2, 0),   // insert count
            k = 0,
            l = this.length,
            n,  // new length
            v,  // delta
            x;  // shift count

        s = s || 0;
        if (s < 0) {
            s += l;
        }
        s = max(min(s, l), 0);  // start point
        d = max(min(isNumber(d) ? d : l, l - s), 0);    // delete count
        v = i - d;
        n = l + v;
        while (k < d) {
            e = this[s + k];
            if (!isUndefined(e)) {
                a[k] = e;
            }
            k += 1;
        }
        x = l - s - d;
        if (v < 0) {
            k = s + i;
            while (x) {
                this[k] = this[k - v];
                k += 1;
                x -= 1;
            }
            this.length = n;
        } else if (v > 0) {
            k = 1;
            while (x) {
                this[n - k] = this[l - k];
                k += 1;
                x -= 1;
            }
        }
        for (k = 0; k < i; ++k) {
            this[s + k] = arguments[k + 2];
        }
        return a;
    };
}

function in_array(array, el)
{
  for(var i in array)
    if(array[i] == el)
      return true;
  return false;
};

var tpl_patterns = Array();
var tpl_vars = Array();
var tpl_var_names = Array();
function generateBlock(block_id, vars)
{
  var doc_write = true;
  var html = '';
  var prefix = block_id.substr(1) + '.';
  var var_names = tpl_var_names[block_id];
  var pattern;
  if(typeof vars == 'undefined')
  {
    vars = tpl_vars[block_id];
    doc_write = false;
  }
  else
    tpl_vars[block_id] = vars;
  if(typeof vars == 'undefined')
  {
    alert('missing block vars');
    return;
  }
  for(var i=0;i<vars.length;i++)
  {
    pattern = tpl_patterns[block_id];
    for(var j=0;j<vars[i].length;j++)
    {
      if(var_names[j].substr(0, 1) == '.')
      {
        for(var k=0;k<vars[i].length;k++)
          vars[i][j] = vars[i][j].replace(new RegExp('{' + prefix + var_names[k] + '}', 'g'), vars[i][k]);
      }
      pattern = pattern.replace(new RegExp('{' + prefix + var_names[j] + '}', 'g'), vars[i][j]);
    }
    pattern = pattern.replace(/\{([a-z0-9\-_]*)\}/ig, '');
    html += pattern + '\n';
  }
  if(pattern)
  {
    var js;
    do
    {
      js = pattern.match(/<script[^>]*>.*?<\/script>/i);
      if(js != null)
      {
        pattern = pattern.replace(js[0], '');
        document.write(js[0]);
      }
    }
    while(js != null);
  }
  if(doc_write && block_id.substr(1).indexOf('.') == -1)
    document.write(html);
  else
    return html;
}
var tpl_sortByColumn_col;
var tpl_sortByColumn_sort_dir;
var tpl_sortByColumn_sort_type;
function tpl_sortByColumn(a, b)
{
  var x = a[tpl_sortByColumn_col];
  var y = b[tpl_sortByColumn_col];
  if(tpl_sortByColumn_sort_type == 'NUMERIC')
  {
    x = parseInt(x);
    y = parseInt(y);
  }
  if(tpl_sortByColumn_sort_dir == 'DESC')
  {
    if(x < y) return 1;
    if(y < x) return -1;
  }
  else
  {
    if(x < y) return -1;
    if(y < x) return 1;
  }
  return 0;
}

function tpl_reparseNested(block_id)
{
  var vars = tpl_vars[block_id];
  for(var i=0;i<vars.length;i++)
  {
    for(var j=0;j<vars[i].length;j++)
    {
      if(tpl_var_names[block_id][j].substr(0, 1) == '.')
      {
        vars[i][j] = generateBlock(block_id + tpl_var_names[block_id][j]);
      }
    }
  }

}

function sortBlock(block_id, column, dir, sort_type) // 1 - ASC, 0 DESC
{
  if(typeof dir == 'undefined')
    dir = 'ASC';
  if(typeof sort_type == 'undefined')
    sort_type = 'STRING';
  block_id = '.' + block_id;
  if(typeof tpl_patterns[block_id] == 'undefined')
  {
    alert('unknownk block');
    return;
  }
  if(typeof tpl_vars[block_id] == 'undefined')
    return;
  tpl_sortByColumn_sort_dir = dir;
  tpl_sortByColumn_sort_type = sort_type;
  tpl_sortByColumn_col = -1;
  for(var i=0;i<tpl_var_names[block_id].length;i++)
    if(tpl_var_names[block_id][i] == column)
      tpl_sortByColumn_col = i;
  if(tpl_sortByColumn_col == -1)
  {
    alert('unknown sort column');
    return;
  }
  tpl_vars[block_id].sort(tpl_sortByColumn);
  // generujemy od topa
  top_block_id = block_id.split('.').slice(0, 2).join('.');
  parent_block_id = block_id.split('.');
  parent_block_id = parent_block_id.slice(0, parent_block_id.length-1).join('.');
  tpl_reparseNested(parent_block_id);
  $('TPL' + top_block_id).innerHTML = generateBlock(top_block_id);
}
var cycles_state = [];
function cycle(cycle_id, values)
{
  if(typeof cycles_state[cycle_id] == 'undefined')
    cycles_state[cycle_id] = 0;
  var ret = values[cycles_state[cycle_id]];
  cycles_state[cycle_id] = (++cycles_state[cycle_id]) % values.length;
  return ret;
}

//javascript: void sortBlock('item_table.item_row', 'AMOUNT', 'ASC', 'NUMERIC');

function buddy_list(data)
{
  var html_code = '';
  for(i=0;i<data.length;i++)
  {
    html_code += '<a href="index.php?p=write&msg_to=' + data[i][0] + '" target="_parent"><img src="' + img_dir + 'images/msg.gif" title="Napisz wiadomość" border="0"></a> <a href="javascript:ShowInfoFrame(\'profile.php?simple=1&pid=' + data[i][1] + '\')" style="color: ' + data[i][2] + '">' + data[i][0] + '</a> <a href="update.php?m=buddy&a=0&pid=' + data[i][1] + '&uid=' + uid + '"><img src="' + img_dir + 'images/trash.gif" border="0" title="Skasuj z listy przyjaciół"></a><br>';
  }
  document.getElementById('buddy_list').innerHTML = html_code;
}

var hh = 0;
var mm = 0;
var ss = 0;

function updateServerClock()
{
	if(!$('server_clock'))
		return;
  setTimeout(updateServerClock, 995);
  ss++;
  if(ss == 60)
  {
    ss = 0;
    mm++;
  }
  if(mm == 60)
  {
    mm = 0;
    hh++;
  }
  if(hh == 24)
  {
    hh = 0;
  }
  $('server_clock').innerHTML = (hh < 10 ? '0' + hh : hh) + ':' + (mm < 10 ? '0' + mm : mm) + ':' + (ss < 10 ? '0' + ss : ss);
}

function ToggleLogo(show)
{
	Set_Cookie('ToggleLogoState', show);
	if(show === 0)
	{
		$('logo_box').style.display = 'none';
		$('nologo_box').style.display = 'block';
	}
	else
	{
		$('nologo_box').style.display = 'none';
		$('logo_box').style.display = 'block';	
	}
}

function ArrayIndexOf(arr, val)
{
	for(var i=0;i<arr.length;i++)
		if(arr[i] == val)
			return i;
	return -1;
}