function countOccurances(aNiddle, aStack){
  count = 0;
  pos = aStack.indexOf(aNiddle);
  while ( pos != -1 ) {
  	count++;
    pos = aStack.indexOf(aNiddle, pos+1);
  }
  return count;
}
function isIE(){
  var aResult=false;
  if (parseInt(navigator.appVersion)>3) {
   if (navigator.appName.indexOf("Microsoft")!=-1)
    aResult = true;
  }
  return aResult;
}

function isLocal()
{
 return (window.location.protocol.toLowerCase()=='file:');
}

function goto(aAction, aActionId)
{
  aQueryString=aAction;
  if (aAction.indexOf('.')==-1) aQueryString+='.html';
  if ((aActionId) && (aActionId != "-1")) aQueryString+="?id="+aActionId;
  var t=window.top.frames["data_frame"];
  if (t===undefined) t=window;
  t.location=aQueryString;
}

function doGetParameter(aQueryString, aParamName, aDefaultValue){
  var ar1, ar2, i, qs = aQueryString;
  if (qs != '')
  {
    qs = qs.slice(1);
    ar1 = qs.split('&');
    for (i = 0; i < ar1.length; i++)
    {
      ar2 = ar1[i].split('=');
      if (ar2[0] == aParamName) return (ar2[1]);
    }
  }
  return (aDefaultValue);
}

function getParameter (aParamName, aDefaultValue)
{
  var qs = window.location.search;
  return doGetParameter(qs, aParamName, aDefaultValue);
}

function findElement(el)
{
 if (typeof(el)=='string') el=document.getElementById(el);
 return el;
}

function setElement(el,txt)
{
 el=findElement(el);
 if (el) el.innerHTML=txt;
 return el;
}

function cell(txt,attr)
{
 var r="<td";
 if (attr) r=r+" "+attr;
 r=r+">"+txt+"</td>";
 return r;
}

function addCommas(nStr)
{
  nStr += '';
  x = nStr.split('.');
  x1 = x[0];
  x2 = x.length > 1 ? '.' + x[1] : '';
  var rgx = /(\d+)(\d{3})/;
  while (rgx.test(x1)) {
    x1 = x1.replace(rgx, '$1' + ',' + '$2');
  }
  return x1 + x2;
}

function toPercent(num,digits,showZero)
{
 if (digits===undefined) digits=2;
 return ((Math.abs(num) >=0.01) || (showZero)) ? num.toFixed(digits) +" %" : '';
}

function noZero(num)
{return num==0 ? "" : num;}

function toQuoted(a)
{
  return "'" + a.toString().replace(/'/g,"\\'") + "'";
}

function zeroPad(num,places)
{
 num='000000000'+num;
 return num.slice(num.length-places);
}

function trim(s) {return s.replace(/^\s*(.*?)\s*$/,"$1")}

function toLink(a,aAction, aActionId)
{
 var r='<a href="javascript:goto(';
 r+=toQuoted(aAction)+','+toQuoted(aActionId)+')">'+a+'</a>';
 return r;
}

function dateToString(d)
{
  return d.getDate()+'/'+(d.getMonth()+1)+' '+d.getHours()+':'+zeroPad(d.getMinutes(),2);
}

function partyLogo(id)
{return '<img class="logo" src="../images/y'+id+'.png" align=absmiddle>';}


function checkUpdated(obj)
{
 return (obj.updated && (obj.updated>1));
}

function setNoResult()
{
 document.body.innerHTML='<div class=noresult><br><br><center>'+getStr('msgNoResult')+'</center></div>';
}

//sorting support
var sortKey,sortDir,sortMode;

function sortImg(key)
{return '<img class="sortimg" sortkey='+key+' title="click to sort" src="../images/sort.png">';}

function sortFunc(p1,p2)
{
var r;
p1=p1[sortKey];
p2=p2[sortKey];
if (sortMode==1) r=p2-p1;
else if (p2>p1) r=1;
else if (p2<p1) r=-1;
else r=0;
if (sortDir==-1) r=-r;
return r;
}

function sortTable(evt,arr,render)
{
 var src,srt,dir,m;
 src=evt.srcElement;
 if (!src) src=evt.target;
 srt=src.getAttribute('sortkey');
 if (!srt) return;
 m=srt.charAt(0);
 srt=srt.slice(1);
 dir=-1;     // -1=asc, 1=desc
 sortMode=1; // 1=number,2=alpha
 switch (m)
 {
  case '-': {break;}
  case '@': {sortMode=2; break;}
  default:  {dir=1; srt=m+srt; break;}
 }
 sortDir=(srt==sortKey) ? -sortDir : dir;
 sortKey=srt;
 arr.sort(sortFunc);
 render();
}

//search an object for a particular element, return previous/next

function findPrevNext(obj,cur)
{
 var i,pi,iprev,inext;
 for (i in obj)
  {
   if (i==cur)  iprev=pi;
   if (pi==cur) {inext=i; break;}
   pi=i;
  }
 return {prev:iprev,next:inext}
}

//convert an indexed json object to array, with columns <cols>
function objToMatrix(obj,cols)
{
	var r,len,id,rows,row,col;
	len=0;
	for (id in obj) len++;
  rows=Math.ceil(len/cols);
	r=new Array(rows);
	row=0; col=0;
	for (id in obj)
	{
		if (r[row]===undefined) r[row]=new Array(cols);
		r[row][col]=[id,obj[id]];
		row++;
		if (row==rows)
		{
			row=0;
			col++;
		}
	}
 return r;
}

function sleep(millis)
{
        var date = new Date();
        var curDate = null;

        do { curDate = new Date(); }
        while(curDate-date < millis)
}

//loader support

function forceReload(path)
{
  path+=(path.indexOf('?')<0) ? '?' : '&';
  var dt=new Date().getTime();
  path+='dt='+dt;
  path+=+Math.random();
  return path;
}

function loadJs(cmd,params,scheme)
{
	var path,i,paramStr,oScript;

  if (scheme===undefined) scheme=0;

  if (scheme==1)
	{
		path='../stat/'+cmd;
		if (params) for (i in params) path+='_'+params[i];
		path+='.js';
	}
  else if (top.state.live)
	{
		if (scheme)	{alert('ERROR');return;}
  	path='../php/'+cmd+'.php';
		paramStr='';
		if (params) for (i in params) paramStr+='&p'+i+'='+params[i];
		if (paramStr) path+='?'+paramStr.slice(1);
		path=forceReload(path);
	}
	else
	{
    if (scheme==2) path='../dyndat/'+params.shift()+'/'+cmd;
		else path='../dyn/'+cmd;
		if (params) for (i in params) path+='_'+params[i];
		path=forceReload(path+'.js');
	}

  path=top.state.serverPath+path;
	if (top.state.debug) alert(path);

  oScript=document.createElement('script');
  oScript.type='text/javascript';
  oScript.src=path;
  document.getElementsByTagName('head')[0].appendChild(oScript);

  return oScript;
}

//load maps dynamically
function loadImage(el,path)
{
 el=findElement(el);
 if (!el) return;
 path=top.state.serverPath+forceReload(path);
 el.src=path;
}

function loader_start()
{
 var elem = document.createElement('DIV');
 elem.id='loader_container';
 elem.innerHTML='<DIV id="loader"><DIV id="loader_msg">'+getStr('msgPleaseWait')+'</DIV><DIV id="loader_bg"><DIV id="loader_progress"></DIV></DIV></DIV>';
 var t = setInterval(loader_animate,20);
 elem.setAttribute('loader_timer',t);
 t = setInterval(loader_fail,30000);
 elem.setAttribute('loader_fail',t);
 document.body.appendChild(elem);
}

function loader_fail()
{
 loader_clear();
 setNoResult();
}

function loader_clear()
{
	var elem = document.getElementById('loader_container');
	if (!elem) return;
	var t=elem.getAttribute('loader_fail');
	clearInterval(t);
	t=elem.getAttribute('loader_timer');
	clearInterval(t);
	document.body.removeChild(elem);
}

function loader_animate()
{
	var elem = document.getElementById('loader_progress');
	if (!elem) return;
        var wMax=elem.offsetParent.offsetWidth,lenMax=wMax/4,posMax=(wMax-lenMax),step=2;
        var pos=elem.offsetLeft,len=elem.offsetWidth;
	if (pos==0) len += step;
	if (len>=lenMax || pos>=posMax) pos += step;
	if (pos>=posMax) len -= step;
	if (len<0) len=0;
	if (pos>=posMax && len==0) pos=0;
	elem.style.left = pos;
	elem.style.width = len;
}

function getLanguage(){
  return window.top.CurrentLang;
}

function setLanguage(aLanguage){
  window.top.location = '/pages/index.html?lang=' + aLanguage;
}

function getStr(aVarName)
{
 var row=window.top.langPack[aVarName];
 if (row) row=row[window.top.CurrentLang];
 if (row===undefined) alert('Missing string '+aVarName);
 return row;
}

//---------------greeklish support
var
   _g1='ÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÓÔÕÖ×ØÙ¢¸¼ºÚ¾¹¿áâãäåæçèéêëìíîïðñóòôõö÷øùÜÝüßúýÞþ';
   _g2='ÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÓÔÕÖ×ØÙÁÅÏÉÉÕÇÙÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÓÓÔÕÖ×ØÙÁÅÏÉÉÕÇÙ'
   _map={
       'Á':'A','Â':'V','Ã':'G','Ä':'D','Å':'E','Æ':'Z',
       'Ç':'I','È':'TH','É':'I','Ê':'K','Ë':'L','Ì':'M',
       'Í':'N','Î':'X','Ï':'O','Ð':'P','Ñ':'R','Ó':'S',
       'Ô':'T','Õ':'Y','Ö':'F','×':'CH','Ø':'PS','Ù':'O'};


function toGreekUpper(a)
{
 var r='',c,i,j;
 for (i=0; i<a.length; i++)
 {
  c=a.charAt(i);
  j=_g1.indexOf(c);
  if (j>=0) c=_g2.charAt(j); else c=c.toUpperCase();
  r+=c;
 }
 return r;
}

function capitalize(a)
{
 var r='',i,c,pc='',letters=/[A-Za-z]/;
 for (i=0; i<a.length; i++)
 {
  c=a.charAt(i);
  if (letters.test(pc)) c=c.toLowerCase();
  else if (letters.test(c)) c=c.toUpperCase();
  pc=c;
  r+=c;
 }
 return r;
}

function toGreeklish(a)
{
 var r='',c,c1,i;
 a=toGreekUpper(a);
 a=a.replace(/ÏÕ/g,'OU');
 a=a.replace(/^ÌÐ/,'B');
 for (i=0; i<a.length; i++)
 {
  c=a.charAt(i);
  c1=_map[c];
  if (c1) c=c1;
  r+=c;
 }
 return capitalize(r);
}

function gr(a)
{
  if(getLanguage()=='el') return a;
  return toGreeklish(a);
}
//---------------end greeklish

function autoTranslate()
{
 if (getLanguage()=='el') return;
 var i,tr,el,els=document.getElementsByTagName('span');
 for (i=0; i<els.length; i++)
 {
  el=els.item(i);
  tr=el.getAttribute('mk_tr');
  if (tr) el.innerHTML=getStr(tr);
 }
}
