var LastSort = new Array;
var MapReload = 0;
var t;
var Data = new Array();
var globalCursorPos;

function ChangeLayer(value,id) {
	var el = document.getElementById(id+"_max");
	if (value==0) {
		el.style.visibility = 'hidden';
		document.getElementById(id+"_input").value="";
	} else {
		el.style.visibility = 'visible';
	}
}

function Sort(id,col,element_id) {	var order = 1;	if (LastSort[id]==col) {		order = 2;
		LastSort[id]=false;	} else {		LastSort[id]=col;	}    var req = new JsHttpRequest();
    req.onreadystatechange = function() {
        if (req.readyState == 4) {        	var resp = req.responseJS;
        	if (resp.good==1) {        		ShowData(id,resp.sort);
        	}
        }
        return false;
    }
    req.caching = true;
    req.open(null, '/server.php', true);
    req.send( { 'act': "sort", 'name':id,'col':col,'element_id':element_id,'order':order} );
    return false;
}

function ReloadMap() {	var mobs = document.getElementById('mapform');
    var req = new JsHttpRequest();
    req.onreadystatechange = function() {
        if (req.readyState == 4) {
        	var resp = req.responseJS;
        	if (resp.good==1) {				$("img").src = "/map-"+MapLink+"-"+MapReload;
				MapReload++;
        	}
        	if ($("ads_top")) {
				var ads = $("ads_top").innerHTML;
				$("ads_top").innerHTML = "";
				$("ads_top").innerHTML = ads;
			}
        }
        return false;
    }
    req.caching = false;
    req.open(null, '/server.php', true);
    req.send( { 'act': "mapmobs", 'mobs':mobs} );
    return false;
}

function SelectAll(type) {	var els = document.getElementsByTagName("input");
	var el;
	for(var i=0;i<els.length;i++) {		el = els[i];
		if(el.type!='checkbox') continue;
		el.checked = type;
	}
	return false;}

function ShowData(id,data) {	var table = document.getElementById(id);
	for(var i=2;i<=data.length+1;i++) {		for(var key in data[i-2]) {			table.rows[i].cells[key].innerHTML = data[i-2][key];		}
	}}

function GetData(type,id) {
    var req = new JsHttpRequest();
    req.onreadystatechange = function() {
        if (req.readyState == 4) {        	var resp = req.responseJS;
        	if (resp.good==1) {        		Data['description_ru'] = resp.d.description;
        		Data['description_en'] = resp.d.description_en;
        		Data['name_ru']= resp.n.name;
        		Data['name_en']= resp.n.name_en;
        		Data['set']= resp.set;
        		Data['loaded'] = 1;
        		EditableInfo(type,id);
				SetLanguage(resp.set);        	} else if (resp.error) {        		alert(resp.error);        		Hide();
        	} else {        		alert("Server Error, try to update this page a little later");        		Hide();
        	}
        }
        return false;
    }
    req.caching = false;
    req.open(null, '/server.php', true);
    req.send( { 'act': "info", 'type': type, "id": id} );
    return false;
}

function SaveChanges(type,id) {
	var lang = $('atx_lang').value;
	var name = $('atx_name').value;
	var desc = $('atx_desc').value;
	if (name.length>100) {		alert("Name is 100 symbols maximum / Максимальная длинна имени - 100 символов");
		return false;	}
	if (name=="") {		return false;
	}
	if (Data['description_'+lang]==desc && Data['name_'+lang]==name) {		Hide();
		return false;	}
    var req = new JsHttpRequest();
    req.onreadystatechange = function() {
        if (req.readyState == 4) {
        	var resp = req.responseJS;
        	if (resp.good==1) {        		RenewData(resp,type,id);        		Hide();
        	} else if (resp.error) {
        		alert(resp.error);
        	}
        }
        return false;
    }
    req.caching = false;
    req.open(null, '/server.php', true);
    req.send( { 'act':"update", 'type':type, "id":id, "name":name, "description":desc, "lang":lang} );
    return false;}

function RenewData(resp,type,id) {	var lang = $('atx_lang').value;
	if (Data["set"]==lang) {
		$('ax_name').innerHTML = resp.name + ' <img src="/images/edit.gif" title="Edit" alt="Edit" onclick="ShowBox(\''+type+'\',\''+id+'\');"  align="absmiddle">'
		if ($("ax_description")) {
			$("ax_description").innerHTML = resp.description;
		} else if ($("dataTable")) {			var table = $("dataTable");
			var row = table.insertRow(table.rows.length);
			var cell = row.insertCell(0);
			cell.colSpan = 4;
			cell.id = "ax_description";
			cell.innerHTML = resp.description;		} else {			alert("Can't update description data. Please, reload this page.");		}
	}
	Data['description_'+lang] = resp.desc;
	Data['name_'+lang] = resp.name;
}

function ShowBox(type, id) {
	var Height = Math.max(document.documentElement.clientHeight,document.body.clientHeight)+"px";
	if (typeof document.body.style.maxHeight === "undefined") {//if IE 6
		$("ax_iframe").className = "TB_HideSelect";
		$("ax_iframe").style.height = Height;
	}
	var div = document.getElementById("ax_spacer");
	div.className = "TB_overlayBG";
	div.style.height = Height;
	div.onclick = Hide;
	var Width = document.body.clientWidth;
	var wind  = document.getElementById("ax_window");
	wind.style.left = Math.round(Width/2)-200+"px";
	var top = (document.documentElement.scrollTop!=0) ? document.documentElement.scrollTop : document.body.scrollTop;
	wind.style.top = top+200+"px";
	wind.style.display = "block";
	if (Data["loaded"]==1) {		EditableInfo(type,id);
		SetLanguage(Data.set);	} else {
		wind.innerHTML = '<table width="400" border="0"><tr><td align="center"><img src="/images/loading.gif"></td></tr></table>';
	}
	CheckTop();
	return false;
}

function EditableInfo(type,id) {	$("ax_window").innerHTML = '<table width="400" class="tableText" id="ax_st">'+
		'<tr><th colspan="2">Edit:</th></tr>'+
		'<tr><th width="50">Language:</th><td>'+
			'<select onChange="SetLanguage(this.value)" id="atx_lang"><option value="ru">Русский</option><option value="en"'+(Data['set']=="en"?' selected':'')+'>English</option></select>'+
		'</td></tr><tr><th>Name:</th><td align="center"><input type="text" id="atx_name" style="width:300px;"></td></tr>'+
		'<tr><th rowspan="2">Description:</th><td><textarea rows="10" style="width:300px;" id="atx_desc"></textarea></td></tr>'+
		'<tr><td><input type="button" class="bbButton" value="NPC" onClick="SetbbFunction(this.value);">'+
			'<input type="button" class="bbButton" value="Item" onClick="SetbbFunction(this.value);">'+
			'<input type="button" class="bbButton" value="Mob" onClick="SetbbFunction(this.value);">'+
		'</tr>'+
		'<tr><th colspan="2"><a href="#" onClick="return SaveChanges(\''+type+'\',\''+id+'\');">Save</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href="#" onClick="Hide();return false;">Cancel</a></th></tr>'+
	'</table>';
}

function SetbbFunction(value) {	value = value.toUpperCase();
	var t = $('atx_desc');
	var text = t.value;
	if (t.selectionStart || t.selectionStart==0) {
		var start = t.selectionStart;
		var end = t.selectionEnd;
		if (start==end) {			var id=prompt("ID:","");
			if (!id.match(/^[0-9]+$/) || id<=0) {
				alert("Incorrect ID");
				return false;
			}
			t.value = text.substr(0,start) + "["+value+"]" + id + "[/"+value+"]" + text.substr(start,999);		} else {			var id = text.substr(start,end-start);
			if (!id.match(/^[0-9]+$/) || id<=0) {
				alert("Incorrect ID Selected");
				return false;
			}
			t.value = text.substr(0,start) + "["+value+"]" + id + "[/"+value+"]" + text.substr(end,999);
		}
	} else {		t.focus();
		var sel = document.selection.createRange();
		var id = sel.text;
		if (id=="") {
			id=prompt("ID:","");
		}
		if (!id.match(/^[0-9]+$/) || id<=0) {
			alert("Incorrect ID");
			return false;
		}
		sel.text = "["+value+"]" + id + "[/"+value+"]";
	}}

function SetLanguage(lang) {$('atx_name').value=Data['name_'+lang];$('atx_desc').value=Data['description_'+lang];}

function Hide() {	clearTimeout(t);	$("ax_spacer").className = "";
	$("ax_spacer").style.height = "0px";	$("ax_window").style.display = "none";
	if (typeof document.body.style.maxHeight === "undefined") {//if IE 6
		$("ax_iframe").className = "";
		$("ax_iframe").style.height = "0px";
	}
}

function CheckTop() {
	var wind  = document.getElementById("ax_window");
	var top = (document.documentElement.scrollTop!=0) ? document.documentElement.scrollTop : document.body.scrollTop;
	wind.style.top = top + 200+"px";
	wind.style.display = "block";
	t = setTimeout(CheckTop,5);
}

function $(el){return document.getElementById(el);}

function tb_detectMacXFF() {
  var userAgent = navigator.userAgent.toLowerCase();
  if (userAgent.indexOf('mac') != -1 && userAgent.indexOf('firefox')!=-1) {
    return true;
  }
}

var iTimer = {
	isIE: "\v"=="v",
	time: {},
	names:{},
	timeOut: null,
	run: function(T) {		this.time = T;
		var k = $("dtimer").getElementsByTagName("th");
		if(this.isIE){			this.names["open"]=k[3].firstChild.data;
			this.names["close"]=k[5].firstChild.data;
			this.names["end"]=k[6].firstChild.data;
		} else {			this.names["open"]=k[3].textContent;			this.names["close"]=k[5].textContent;
			this.names["end"]=k[6].textContent;
		}
		window.setInterval(function(){iTimer.calc();},1000);
	},
	calc: function() {		var el;
		for(var i=0;i<this.time.length;i++) {			el = this.time[i];
			if(typeof(el.closed)!="undefined") continue;
			if(typeof(el.timer)=="undefined" || el.timer==0) {				el = this.checkTimer(el);
				if(typeof(el.closed)!="undefined"){					$("time_"+el.id).innerHTML = "---";
					$("act_"+el.id).innerHTML = "---";
					continue;				}			}
			$("time_"+el.id).innerHTML = this.formatTime(el.timer--);
			if(typeof(el.ltimer)!="undefined") {
				$("slvl_"+el.id).innerHTML = this.formatTime(el.ltimer--);
			}
			this.time[i] = el;
		}
	},
	checkTimer: function(el) {		if(el.open>0) {			el.timer = el.open;
			el.open = 0;
			$('act_'+el.id).innerHTML = this.names["open"];
			return el;		}
		if(el.close>0) {			el.timer = el.close;
			el.close = 0;
			$('act_'+el.id).innerHTML = this.names["close"];
			if(el.lvl2>0) {
				el.ltimer = el.lvl2;
				el.lvl2 = 0;
			}
			return el;		}
		if(el.end>0) {			el.timer = el.end;
			el.end = 0;
			$('act_'+el.id).innerHTML = this.names["end"];
			return el;		}
		el.closed = 1;
		return el;	},
	formatTime:function(t) {		var H = Math.floor(t/3600);
		var M = Math.floor((t-H*3600)/60);
		var S = t - H*3600 - M*60;
		return "0"+H+":"+(M<10?"0"+M:M)+":"+(S<10?"0"+S:S);	}
};

var bb = {
	isIE:"\v"=="v",
	width:300,
	e:"ax_window",
	s:"ax_spacer",
	f:"ax_iframe",
	id:"bb_radios",
	a:"atx_desc",
	lang_ru:{"drop":"Список выпадающих предметов","lvl":"Уровень","hp":"Здоровье","exp":"Опыт","atk":"Атака","def":"Защита","pr":"Физ. Сопротивление","close":"Закрыть","main":"Создание BB кодов для форума","linkname":"Названия ссылкой","m_image":"Картинка монстра","m_stats":"Базовые параметры","m_stats2":"Расширеные параметры","m_drop":"Дроп","code":"Обернуть все в [CODE]*[/CODE]"},
	lang_en:{"drop":"Drop List","lvl":"Level","hp":"HP","exp":"Exp","atk":"Attack","def":"Def","pr":"Ph.Res","close":"Close","main":"Creating BB codes for forums","linkname":"Link on all names","m_image":"Show monster image","m_stats":"Base stats","m_stats2":"More stats","m_drop":"Drop","code":"[CODE]*[/CODE]"},
	link:false,
	show: function(type, id, lang) {		if(lang=="ru"){this.lang=this.lang_ru}else{this.lang=this.lang_en;}		var h = Math.max(document.documentElement.clientHeight,document.body.clientHeight)+"px";
		if (typeof document.body.style.maxHeight === "undefined") {//if IE 6
			$(this.f).className = "TB_HideSelect";
			$(this.f).style.height = h;
		}
		var div = document.getElementById(this.s);
		div.className = "TB_overlayBG";
		div.style.height = h;
		div.onclick = function(){bb.hide();};
		var w = document.body.clientWidth;
		var wind  = document.getElementById(this.e);
		wind.style.left = Math.round(w/2)-this.width+"px";
		var top = (document.documentElement.scrollTop!=0) ? document.documentElement.scrollTop : document.body.scrollTop;
		wind.style.top = top+200+"px";
		wind.style.display = "block";
		this.html(type);
		this.update();
		this.checkTop();
	},
	hide:function() {
		clearTimeout(t);
		$(this.s).className="";$(this.s).style.height="0px";$(this.e).style.display="none";
		if(typeof document.body.style.maxHeight==="undefined"){$(this.f).className="";$(this.f).style.height="0px";}
	},
	checkTop:function () {
		var wind  = document.getElementById(this.e);
		var top = (document.documentElement.scrollTop!=0) ? document.documentElement.scrollTop : document.body.scrollTop;
		wind.style.top=top+200+"px";
		wind.style.display="block";
		t = setTimeout(function(){bb.checkTop();},5);
	},
	html:function(type){		$("ax_window").innerHTML = '<table width="600" class="tableText" id="ax_st">'+
		'<tr><th colspan="2">'+this.lang["main"]+'</th></tr>'+
		'<tr><th id="'+this.id+'">'+this.getChecks(type)+'</th>'+
		'<th><textarea rows="10" style="width:300px;" id="'+this.a+'"></textarea></th></tr>'+
		'<tr><th colspan="2"><a href="#" onClick="Hide();return false;">'+this.lang["close"]+'</a></th></tr>'+
	'</table>';
	},
	getChecks:function(type){		var ret="";		ret='<p><input type="checkbox" value="1" id="a_linkname" onclick="bb.update()" />'+
			'<label for="a_linkname">'+this.lang["linkname"]+'</label></p>';
		if(type=="mo") {			ret+='<p><input type="checkbox" value="1" id="m_image" onclick="bb.update()" />'+
				'<label for="m_image">'+this.lang["m_image"]+'</label></p>';			ret+='<p><input type="checkbox" value="1" id="m_stats" onclick="bb.update()" />'+
				'<label for="m_stats">'+this.lang["m_stats"]+'</label></p>';
			ret+='<p><input type="checkbox" value="1" id="m_stats2" onclick="bb.update()" />'+
				'<label for="m_stats2">'+this.lang["m_stats2"]+'</label></p>';
			ret+='<p><input type="checkbox" value="1" id="m_drop" onclick="bb.update()" />'+
				'<label for="m_drop">'+this.lang["m_drop"]+'</label></p>';
		}		ret+='<p><input type="checkbox" value="1" id="a_code" onclick="bb.update()" />'+
			'<label for="a_code">'+this.lang["code"]+'</label></p>';
		return ret;	},
	url:function(out,type,id){		var f=(type=="m")?"mob":"items"		return '[URL="http://piratia.arbah.ru/'+f+'/'+id+'"]'+out+"[/URL]";	},
	image:function(src){		reg=/(\d+)\.jpg/i;
		src=reg.exec(src);
		return this.url("[IMG]http://pkodb.com/m/"+src[1]+".jpg[/IMG]","m",src[1]);
	},
	itemimage:function(src,id){
		reg=/([\w\d]+)\.gif/i;
		src=reg.exec(src);
		return this.url("[IMG]http://pkodb.com/i/"+src[1]+".gif[/IMG]","i",id);
	},
	update:function(){		var out = "";		out = '[SIZE="5"][B]'+$("ax_name").innerHTML+'[/B][/SIZE]';
		var checks = $(this.id).getElementsByTagName("input");
		for(var i=0;i<checks.length;i++) {			if(checks[i].checked==true)				eval("out = bb.f"+checks[i].id+"(out);");		}
        $(this.a).value=out;	},
	fa_linkname:function(out){		this.link = true;		return this.url(out,Sdata["type"],Sdata["id"]);	},
	fm_image:function(out){		var el = $('dataTable').getElementsByTagName("img");
		if(el.length==1) return out;
		return this.image(el[1].src,"m")+" "+out;
	},
	fm_stats:function(out){		var temp = "[B]"+this.lang["lvl"]+"[/B]: "+Sdata["lvl"]+" [B]"+this.lang["hp"]+"[/B]: "+Sdata["hp"]+(Sdata["exp"]!=0?" [B]"+this.lang["exp"]+"[/B]"+(Sdata["exprates"]>1?"x"+Sdata["exprates"]:"")+": "+Sdata["exp"]:"");		return out+"\n"+temp;
	},
	fm_stats2:function(out){
		var temp = "[B]"+this.lang["atk"]+"[/B]: "+Sdata["atk"]+" [B]"+this.lang["def"]+"[/B]: "+Sdata["def"]+" [B]"+this.lang["pr"]+"[/B]: "+Sdata["pr"];
		return out+"\n"+temp;
	},
	fm_drop:function(out){		var el = $("drop_from_mobs");
		if(!el)return out;
		el = el.getElementsByTagName("tr");
		var text = "";
		var reg = /\/(\d+)$/i;
		for(var i=1;i<el.length;i++) {			var k = el[i].getElementsByTagName("td");
			var link= k[1].getElementsByTagName("a")[0];
			link = reg.exec(link.href);
			var item_id = link[1];
			link = k[1].getElementsByTagName("img")[0];
			link = this.itemimage(link.src,item_id);
			var name = k[2].getElementsByTagName("a")[0];
			var drop = k[3];
			if(this.isIE){name=name.firstChild.data;drop=drop.firstChild.data;}else{name=name.textContent;drop=drop.textContent;}
			if(this.link){name=this.url(name,"i",item_id);}
			text += link + " " + name + " - "+drop+"\n";
		}
		return out + "\n\n[SIZE=\"4\"][B]"+this.lang["drop"]+"[/B][/SIZE] " +(Sdata["droprates"]>1?"x"+Sdata["droprates"]:"")+"\n"+text;	},
	fa_code:function(out){return"[CODE]"+out+"[/CODE]";}
};
function addEventListener(el,event,func){try{el.addEventListener(event,func,false);}catch(e){try{el.detachEvent('on'+event,func);el.attachEvent('on'+event,func);}catch(e){el['on'+event]=func;}}}
function removeEventListener(el,event,func){try{el.removeEventListener(event,func,false);}catch(e){try{el.detachEvent('on'+event,func);}catch(e){el['on'+event]=null;}}}
function App(el){$("www").innerHTML =el+"<br />"+$("www").innerHTML;}
function Show(el){$("www").innerHTML ="";for(i in el){if(i.indexOf("HTML")!=-1 || i.indexOf("Text")!=-1){continue;};$("www").innerHTML+="["+i+"] => "+el[i]+"<br>";}}
function ShowA(el){for(i in el){if(i.indexOf("HTML")!=-1 || i.indexOf("Text")!=-1){continue;};alert("["+i+"] => "+el[i]+"<br>");}}
var iServ = {
	isIE: "\v"=="v",
	stat:0,
	val:'open',
	open: function(el) {		this.changeClass(el,this.stat,'close',true);
		this.stat = 1 - this.stat;		el = $("ihidden");
		this.show(el,this.stat);	},
	set:function(el,value) {this.changeClass(el,value,this.val,false);},
	changeClass:function(el,val,id,change){if(this.stat==1 && id=='open')return 0;if(val==0){el.className=id;if(change)this.val='close';}else{el.className=id+'hov';if(change)this.val='open';}},
	show:function(el,value){if(value==1)el.style.display='block';else el.style.display='none';}
};
/*
  SortTable
  version 2
  7th April 2007
  Stuart Langridge, http://www.kryogenix.org/code/browser/sorttable/ */
var stIsIE=false;sorttable={init:function(){if(arguments.callee.done)return;arguments.callee.done=true;if(_timer)clearInterval(_timer);if(!document.createElement||!document.getElementsByTagName)return;sorttable.DATE_RE=/^(\d\d?)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/;forEach(document.getElementsByTagName('table'),function(table){if(table.className.search(/\bsortable\b/)!=-1){sorttable.makeSortable(table);}});},makeSortable:function(table){if(table.getElementsByTagName('thead').length==0){the=document.createElement('thead');the.appendChild(table.rows[0]);table.insertBefore(the,table.firstChild);}
if(table.tHead==null)table.tHead=table.getElementsByTagName('thead')[0];if(table.tHead.rows.length!=1)return;sortbottomrows=[];for(var i=0;i<table.rows.length;i++){if(table.rows[i].className.search(/\bsortbottom\b/)!=-1){sortbottomrows[sortbottomrows.length]=table.rows[i];}}
if(sortbottomrows){if(table.tFoot==null){tfo=document.createElement('tfoot');table.appendChild(tfo);}
for(var i=0;i<sortbottomrows.length;i++){tfo.appendChild(sortbottomrows[i]);}
delete sortbottomrows;}
headrow=table.tHead.rows[0].cells;for(var i=0;i<headrow.length;i++){if(!headrow[i].className.match(/\bsorttable_nosort\b/)){mtch=headrow[i].className.match(/\bsorttable_([a-z0-9]+)\b/);if(mtch){override=mtch[1];}
if(mtch&&typeof sorttable["sort_"+override]=='function'){headrow[i].sorttable_sortfunction=sorttable["sort_"+override];}else{headrow[i].sorttable_sortfunction=sorttable.guessType(table,i);}
headrow[i].sorttable_columnindex=i;headrow[i].sorttable_tbody=table.tBodies[0];dean_addEvent(headrow[i],"click",function(e){if(this.className.search(/\bsorttable_sorted\b/)!=-1){sorttable.reverse(this.sorttable_tbody);this.className=this.className.replace('sorttable_sorted','sorttable_sorted_reverse');this.removeChild(document.getElementById('sorttable_sortfwdind'));sortrevind=document.createElement('span');sortrevind.id="sorttable_sortrevind";sortrevind.innerHTML=stIsIE?'&nbsp<font face="webdings">5</font>':'&nbsp;&#x25B4;';this.appendChild(sortrevind);return;}
if(this.className.search(/\bsorttable_sorted_reverse\b/)!=-1){sorttable.reverse(this.sorttable_tbody);this.className=this.className.replace('sorttable_sorted_reverse','sorttable_sorted');this.removeChild(document.getElementById('sorttable_sortrevind'));sortfwdind=document.createElement('span');sortfwdind.id="sorttable_sortfwdind";sortfwdind.innerHTML=stIsIE?'&nbsp<font face="webdings">6</font>':'&nbsp;&#x25BE;';this.appendChild(sortfwdind);return;}
theadrow=this.parentNode;forEach(theadrow.childNodes,function(cell){if(cell.nodeType==1){cell.className=cell.className.replace('sorttable_sorted_reverse','');cell.className=cell.className.replace('sorttable_sorted','');}});sortfwdind=document.getElementById('sorttable_sortfwdind');if(sortfwdind){sortfwdind.parentNode.removeChild(sortfwdind);}
sortrevind=document.getElementById('sorttable_sortrevind');if(sortrevind){sortrevind.parentNode.removeChild(sortrevind);}
this.className+=' sorttable_sorted';sortfwdind=document.createElement('span');sortfwdind.id="sorttable_sortfwdind";sortfwdind.innerHTML=stIsIE?'&nbsp<font face="webdings">6</font>':'&nbsp;&#x25BE;';this.appendChild(sortfwdind);row_array=[];col=this.sorttable_columnindex;rows=this.sorttable_tbody.rows;for(var j=0;j<rows.length;j++){row_array[row_array.length]=[sorttable.getInnerText(rows[j].cells[col]),rows[j]];}
row_array.sort(this.sorttable_sortfunction);tb=this.sorttable_tbody;for(var j=0;j<row_array.length;j++){tb.appendChild(row_array[j][1]);}
delete row_array;});}}},guessType:function(table,column){sortfn=sorttable.sort_alpha;for(var i=0;i<table.tBodies[0].rows.length;i++){text=sorttable.getInnerText(table.tBodies[0].rows[i].cells[column]);if(text!=''){if(text.match(/^-?[Ј$¤]?[\d,.]+%?$/)){return sorttable.sort_numeric;}
possdate=text.match(sorttable.DATE_RE)
if(possdate){first=parseInt(possdate[1]);second=parseInt(possdate[2]);if(first>12){return sorttable.sort_ddmm;}else if(second>12){return sorttable.sort_mmdd;}else{sortfn=sorttable.sort_ddmm;}}}}
return sortfn;},getInnerText:function(node){hasInputs=(typeof node.getElementsByTagName=='function')&&node.getElementsByTagName('input').length;if(node.getAttribute("sorttable_customkey")!=null){return node.getAttribute("sorttable_customkey");}
else if(typeof node.textContent!='undefined'&&!hasInputs){return node.textContent.replace(/^\s+|\s+$/g,'');}
else if(typeof node.innerText!='undefined'&&!hasInputs){return node.innerText.replace(/^\s+|\s+$/g,'');}
else if(typeof node.text!='undefined'&&!hasInputs){return node.text.replace(/^\s+|\s+$/g,'');}
else{switch(node.nodeType){case 3:if(node.nodeName.toLowerCase()=='input'){return node.value.replace(/^\s+|\s+$/g,'');}
case 4:return node.nodeValue.replace(/^\s+|\s+$/g,'');break;case 1:case 11:var innerText='';for(var i=0;i<node.childNodes.length;i++){innerText+=sorttable.getInnerText(node.childNodes[i]);}
return innerText.replace(/^\s+|\s+$/g,'');break;default:return'';}}},reverse:function(tbody){newrows=[];for(var i=0;i<tbody.rows.length;i++){newrows[newrows.length]=tbody.rows[i];}
for(var i=newrows.length-1;i>=0;i--){tbody.appendChild(newrows[i]);}
delete newrows;},sort_numeric:function(a,b){aa=parseFloat(a[0].replace(/[^0-9.-]/g,''));if(isNaN(aa))aa=0;bb=parseFloat(b[0].replace(/[^0-9.-]/g,''));if(isNaN(bb))bb=0;return aa-bb;},sort_alpha:function(a,b){if(a[0]==b[0])return 0;if(a[0]<b[0])return-1;return 1;},sort_ddmm:function(a,b){mtch=a[0].match(sorttable.DATE_RE);y=mtch[3];m=mtch[2];d=mtch[1];if(m.length==1)m='0'+m;if(d.length==1)d='0'+d;dt1=y+m+d;mtch=b[0].match(sorttable.DATE_RE);y=mtch[3];m=mtch[2];d=mtch[1];if(m.length==1)m='0'+m;if(d.length==1)d='0'+d;dt2=y+m+d;if(dt1==dt2)return 0;if(dt1<dt2)return-1;return 1;},sort_mmdd:function(a,b){mtch=a[0].match(sorttable.DATE_RE);y=mtch[3];d=mtch[2];m=mtch[1];if(m.length==1)m='0'+m;if(d.length==1)d='0'+d;dt1=y+m+d;mtch=b[0].match(sorttable.DATE_RE);y=mtch[3];d=mtch[2];m=mtch[1];if(m.length==1)m='0'+m;if(d.length==1)d='0'+d;dt2=y+m+d;if(dt1==dt2)return 0;if(dt1<dt2)return-1;return 1;},shaker_sort:function(list,comp_func){var b=0;var t=list.length-1;var swap=true;while(swap){swap=false;for(var i=b;i<t;++i){if(comp_func(list[i],list[i+1])>0){var q=list[i];list[i]=list[i+1];list[i+1]=q;swap=true;}}
t--;if(!swap)break;for(var i=t;i>b;--i){if(comp_func(list[i],list[i-1])<0){var q=list[i];list[i]=list[i-1];list[i-1]=q;swap=true;}}
b++;}}}
if(document.addEventListener){document.addEventListener("DOMContentLoaded",sorttable.init,false);}
if(/WebKit/i.test(navigator.userAgent)){var _timer=setInterval(function(){if(/loaded|complete/.test(document.readyState)){sorttable.init();}},10);}
window.onload=sorttable.init;function dean_addEvent(element,type,handler){if(element.addEventListener){element.addEventListener(type,handler,false);}else{if(!handler.$$guid)handler.$$guid=dean_addEvent.guid++;if(!element.events)element.events={};var handlers=element.events[type];if(!handlers){handlers=element.events[type]={};if(element["on"+type]){handlers[0]=element["on"+type];}}
handlers[handler.$$guid]=handler;element["on"+type]=handleEvent;}};dean_addEvent.guid=1;function removeEvent(element,type,handler){if(element.removeEventListener){element.removeEventListener(type,handler,false);}else{if(element.events&&element.events[type]){delete element.events[type][handler.$$guid];}}};function handleEvent(event){var returnValue=true;event=event||fixEvent(((this.ownerDocument||this.document||this).parentWindow||window).event);var handlers=this.events[event.type];for(var i in handlers){this.$$handleEvent=handlers[i];if(this.$$handleEvent(event)===false){returnValue=false;}}
return returnValue;};function fixEvent(event){event.preventDefault=fixEvent.preventDefault;event.stopPropagation=fixEvent.stopPropagation;return event;};fixEvent.preventDefault=function(){this.returnValue=false;};fixEvent.stopPropagation=function(){this.cancelBubble=true;}
if(!Array.forEach){Array.forEach=function(array,block,context){for(var i=0;i<array.length;i++){block.call(context,array[i],i,array);}};}
Function.prototype.forEach=function(object,block,context){for(var key in object){if(typeof this.prototype[key]=="undefined"){block.call(context,object[key],key,object);}}};String.forEach=function(string,block,context){Array.forEach(string.split(""),function(chr,index){block.call(context,chr,index,string);});};var forEach=function(object,block,context){if(object){var resolve=Object;if(object instanceof Function){resolve=Function;}else if(object.forEach instanceof Function){object.forEach(block,context);return;}else if(typeof object=="string"){resolve=String;}else if(typeof object.length=="number"){resolve=Array;}
resolve.forEach(object,block,context);}};


