Travian: Info Building v2.6

By MeXaon Last update Aug 26, 2010 — Installed 16,190 times.

There are 6 previous versions of this script.

Add Syntax Highlighting (this will take a few seconds, probably freezing your browser while it works)

// ==UserScript==
// @name           Travian: Info Building
// @Author         MeXaon, ChuckyBoy
// @version        2.6
// @email          svgmail@mail.ru; chuckyboy007@gmail.com
// @namespace      Travian
// @description    Info Building
// @include        http://*.travian.*/*
// @exclude        http://forum.travian.*/*
// ==/UserScript==

var ScriptName='Travian: Info Building';
var ScriptAutor='MeXaon, ChuckyBoy';
var ScriptVersion='2.6';
var ScriptLink='http://userscripts.org/scripts/show/52305';


const _COOKIE='infobuilding'; 

var Types = new Array();
Types[0] = 'x0'; // _OTHER
Types[1] = 'x1'; // _BUILDING
Types[2] = 'x2'; //_BUILDING2
Types[3] = 'x3'; //_BUILDING3
Types[4] = 'x4'; //_UP_WEAPON
Types[5] = 'x5'; //_UP_ARMORY
Types[6] = 'x6'; //_UP_ACADEMY
Types[7] = 'x7'; //_CR_BARRACKS
Types[8] = 'x8'; //_CR_STABLE
Types[9] = 'x9'; //_CR_WORCKSHOP
Types[10]= 'x10'; // _CR_Rezidenciya
Types[11]= 'x11'; // _CR_Dvorec
Types[12]= 'x12'; // _CR_Taverna
Types[13]= 'x13'; // _PR_Ratuwa

var Links = new Array();
Links[1] = ''; // _BUILDING
Links[2] = ''; //_BUILDING2
Links[3] = ''; //_BUILDING3
Links[4] = '&gid=12'; //_UP_WEAPON
Links[5] = '&gid=13'; //_UP_ARMORY
Links[6] = '&gid=22'; //_UP_ACADEMY
Links[7] = '&gid=19'; //_CR_BARRACKS
Links[8] = '&gid=20'; //_CR_STABLE
Links[9] = '&gid=21'; //_CR_WORCKSHOP
Links[10]= '&gid=25'; // _CR_Rezidenciya
Links[11]= '&gid=26'; // _CR_Dvorec
Links[12]= '&gid=372'; // _CR_Taverna
Links[13]= '&gid=24'; // _PR_Ratuwa

var xmlcookie=document.createElement('tree');
xmlcookie.innerHTML = '';
var activetown='';
var hintdiv;
var hint_offset_x=0;
var hint_offset_y=0;
var hint_length=300;

var XPFirst = XPathResult.FIRST_ORDERED_NODE_TYPE;
var XPList  = XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE;

function find(xpath,xpres){
  var ret = document.evaluate(xpath,document,null,xpres,null);
  return  xpres == XPFirst ? ret.singleNodeValue : ret;
}
function elem(tag,idt,idv,class,content){
	var ret=document.createElement(tag);
	if(content)ret.innerHTML=content;
	if(idt)ret.setAttribute(idt,idv);
	if(class)ret.className=class;
	return ret;
};

function parseIntTime(timePart) {
	var ti = parseInt(timePart.match(/(\d+)/).pop(), 10);
	//GM_log("++++++++++++++++parseTime\ntime='"+timePart+"' timeA='"+tm+"' timeO='"+to+"' timeI='"+ti+"'");
	return ti;
	/*
	if (timePart=="0?") return 0;
	if (timePart.substr(0,1)==0) {
		if (timePart.length >1) {
			return parseInt(timePart.substr(1,1));
		} else {
			return parseInt(timePart);
		}
	} else {
		if (timePart.length >1) {
			return parseInt(timePart.substr(0,2));
		} else {
			return parseInt(timePart);
		}
	}*/
}

function main(){
	if (!init())return;
	if (build=document.getElementById("building_contract")){
		//alert("build");
		addinfo(Types[1]);
		if(build.childNodes[3].rows.length>2) {
			addinfo(Types[3]);
		} else if(build.childNodes[3].rows.length>1) {
			loadcookie();
			settree(activetown,Types[3],'id','');
			savecookie();
			addinfo(Types[2]);
		} else {
			//alert("lbau1-else");
			loadcookie();
			settree(activetown,Types[2],'id','');
			settree(activetown,Types[3],'id','');
			savecookie();
		}
	}
	/*else if(build=document.getElementById("building_contract")){
		//alert("lbau2");
		addinfo(Types[1]);
		if(build.childNodes[1].rows.length>2) {
			addinfo(Types[3]);
		} else if(build.childNodes[1].rows.length>2) {
			loadcookie();
			settree(activetown,Types[3],'id','');
			savecookie();
			addinfo(Types[2]);
		} else if (location.href.indexOf('dorf2.php') != -1){
			//alert("lbau2-else");
			loadcookie();
			settree(activetown,Types[2],'id','');
			settree(activetown,Types[3],'id','');
			savecookie();
		}
	}*/ else if (location.href.indexOf('dorf1.php') != -1 || location.href.indexOf('dorf2.php') != -1) {
		//alert("dorf1-2 else");
		loadcookie();
		settree(activetown,Types[1],'id','');
		settree(activetown,Types[2],'id','');
		settree(activetown,Types[3],'id','');
		savecookie();
	}
	
	if (location.href.indexOf('build.php') != -1){
		addinfo(Types[0]);
	};
	updatestatus();
	//alert(xmlcookie.innerHTML);
};

function addinfo(t){
	var tt=new Date();
	loadcookie();
	switch(t){
		case Types[1]: {
			//alert(build.childNodes[1].rows[0].tagName)
			buildname=build.childNodes[3].rows[0].cells[1].textContent;
			//alert(buildname);
			time=build.childNodes[3].rows[0].cells[2].textContent.split(':');
		//	GM_log("time server='"+tt+"'");
		//	GM_log("Build timeleft='"+time+"'");
			tt.setSeconds(tt.getSeconds() + parseIntTime(time[2]));
			tt.setMinutes(tt.getMinutes() + parseIntTime(time[1]));
			tt.setHours(tt.getHours() + parseIntTime(time[0]));
			//GM_log("Build time='"+tt+"'");
			settree(activetown,Types[1],'id',buildname);
			settree(activetown,Types[1],'time',tt);
			settree(activetown,Types[0], 'act1', build.childNodes[1].rows[0].cells[0].textContent);
			break;
		}
		case Types[2]: {
			buildname=build.childNodes[3].rows[1].cells[1].textContent;
			time=build.childNodes[3].rows[1].cells[2].textContent.split(':');
			tt.setSeconds(tt.getSeconds() + parseIntTime(time[2]));
			tt.setMinutes(tt.getMinutes() + parseIntTime(time[1]));
			tt.setHours(tt.getHours() + parseIntTime(time[0]));
			settree(activetown,Types[2],'id',buildname);
			settree(activetown,Types[2],'time',tt);
			settree(activetown,Types[0], 'act1', build.childNodes[1].rows[0].cells[0].textContent);
			break;
		}
		case Types[3]: {
			buildname=build.childNodes[3].rows[2].cells[1].textContent;
			time=build.childNodes[3].rows[2].cells[2].textContent.split(':');
			tt.setSeconds (tt.getSeconds() + parseIntTime(time[2]));
			tt.setMinutes (tt.getMinutes() + parseIntTime(time[1]));
			tt.setHours (tt.getHours() + parseIntTime(time[0]));
			settree (activetown,Types[3], 'id', buildname);
			settree (activetown,Types[3], 'time', tt);
			settree(activetown,Types[0], 'act1', build.childNodes[1].rows[0].cells[0].textContent);
			break;
		}
		case Types[0]: {
			var a = find("//table[@class='under_progress']/tbody", XPFirst);
//			alert(a.childNodes.length);
			
			//alert(a.childNodes.length);
			// FIXME: Apanyo para Firefox. FF mete varios nodos extras entre las columnas
	    //    if (a == null || (a.childNodes.length != 2 && a.childNodes.length != 4 && a.childNodes.length != 5)) return;
	    if(a!=null)
				buildname=a.parentNode.childNodes[1].rows[0].cells[0].textContent;
				
			aTimer = document.getElementById("timer1");
			pheader = document.getElementsByTagName("h1");
			treeName = '';
			
			//alert(pheader);
			
			// weapon
			f = find("//a[contains(@href, 'gid=12')]", XPFirst);
			if (f) {
				tempBuildname = 'RESEARCH';
				treeName = Types[4];
			}
			
			// armory
			if (!f) {
				f = find("//a[contains(@href, 'gid=13')]", XPFirst);
				if (f) {
					tempBuildname = 'RESEARCH';
					treeName = Types[5];
				}
			}
			
			// academy
			if (!f) {
				f = find("//a[contains(@href, 'gid=22')]", XPFirst);
				if (f) {
					tempBuildname = 'RESEARCH';
					treeName = Types[6];
				}
			}
			
			// barack
			if (!f) {
				f = find("//a[contains(@href, 'gid=19')]", XPFirst);
				if (f) {
					tempBuildname = 'PRODUCT';
					treeName = Types[7];
				}
			}
			
			//stable
			if (!f) {
				f = find("//a[contains(@href, 'gid=20')]", XPFirst);
				if (f) {
					tempBuildname = 'PRODUCT';
					treeName = Types[8];
				}
			}
			
			// workshop
			if (!f) {
				f = find("//a[contains(@href, 'gid=21')]", XPFirst);
				if (f) {
					tempBuildname = 'PRODUCT';
					treeName = Types[9];
				}
			}
			
			// rezidenciya
			if (!f) {
				f = find("//a[contains(@href, 'gid=25')]", XPFirst);
				if (f) {
					tempBuildname = 'PRODUCT';
					treeName = Types[10];
				}
			}

			// Dvorec
			if (!f) {
				f = find("//a[contains(@href, 'gid=26')]", XPFirst);
				if (f) {
					tempBuildname = 'PRODUCT';
					treeName = Types[11];
				}
			}

			// Taverna
		/*	if (!f) {
				f = find("//a[contains(@href, 'gid=37')]", XPFirst);
				if (f) {
					tempBuildname = 'PRODUCT';
					treeName = Types[12];
				}
			}*/

			// Ratuwa
			if (!f) {
				f = find("//a[contains(@href, 'gid=24')]", XPFirst);
				if (f) {
					tempBuildname = 'PRAZDNIK';
					treeName = Types[13];
				}
			}

			if (!f) { tempBuildname = ''; }
			
			if (treeName != '') {
				if (!aTimer){
					settree(activetown,treeName,'id','');
					tempBuildname = '';
				}
			}
			
			switch (tempBuildname) {
				case 'RESEARCH': {
					var pname = aTimer.parentNode.parentNode.childNodes[1].childNodes[3].textContent;
					var time = aTimer.textContent.split(':');
					//alert(time);
					
					tt.setSeconds(tt.getSeconds() + parseIntTime(time[2]));
					tt.setMinutes(tt.getMinutes() + parseIntTime(time[1]));
					tt.setHours(tt.getHours() + parseIntTime(time[0]));
					
					settree(activetown,treeName,'id', pheader[0].textContent + ':<br>' + pname);
					settree(activetown,treeName,'time',tt);
					settree(activetown,Types[0],'act2', a.parentNode.childNodes[1].rows[0].cells[0].textContent);
					break;
				}
				case 'PRAZDNIK': {
					//alert(aTimer.parentNode.parentNode.childNodes[1].innerHTML);
					var pname = aTimer.parentNode.parentNode.childNodes[1].textContent;
					var time = aTimer.textContent.split(':');
					//alert(time);
					
					tt.setSeconds(tt.getSeconds() + parseIntTime(time[2]));
					tt.setMinutes(tt.getMinutes() + parseIntTime(time[1]));
					tt.setHours(tt.getHours() + parseIntTime(time[0]));
					
					settree(activetown,treeName,'id', pheader[0].textContent + ':<br>' + pname);
					settree(activetown,treeName,'time',tt);
					settree(activetown,Types[0],'act4', a.parentNode.childNodes[1].rows[0].cells[0].textContent);
					break;
				}
				case 'PRODUCT': {
					var troopCount = 0;
					var troopName = '';
					//alert(aTimer.parentNode.parentNode.parentNode.tagName);
					var tbody = aTimer.parentNode.parentNode.parentNode;
					for (i=0; i< tbody.rows.length-1; i++) {
						pname = tbody.rows[i].cells[0];
						
						//alert(tbody.rows[i].cells[0].getElementsByTagName('div')[2].textContent);
						
						troopCount += parseInt(pname.innerHTML.match(/>(\d+)<\/div>/).pop());
						if (troopName.indexOf(tbody.rows[i].cells[0].getElementsByTagName('div')[2].textContent) == -1) {
							if (troopName == '') {
								troopName = tbody.rows[i].cells[0].getElementsByTagName('div')[2].textContent;
							} else {
								troopName += ', ' + tbody.rows[i].cells[0].getElementsByTagName('div')[2].textContent;
							}
						}
						
						if (i == aTimer.parentNode.parentNode.parentNode.rows.length-2) {
							time=tbody.rows[i].cells[1].textContent.split(':');
							tt.setSeconds(tt.getSeconds() + parseIntTime(time[2]));
							tt.setMinutes(tt.getMinutes() + parseIntTime(time[1]));
							tt.setHours(tt.getHours() + parseIntTime(time[0]));
						}
					}
					
					settree(activetown,treeName,'id',pheader[0].textContent + ':<br>' + troopCount + ' ' + troopName);
					settree(activetown,treeName,'time',tt);
					settree(activetown,Types[0],'act3', aTimer.parentNode.parentNode.parentNode.parentNode.rows[0].cells[0].textContent);
					break;
				}
			}
			break;
		}
		default: {
			break;
		}
	}
	//alert('savecookie');
	savecookie();
}

function settree(town,com,idname,idvalue){
//	GM_log("settree\ntown='"+town+"' com='"+com+"' idname='"+idname+"' idvalue='"+idvalue+"'");
	var tnode=null;
	var cnode;
	n=xmlcookie.getElementsByTagName('town');
	for(var i=0;i<n.length;i++){
		if(n[i].id==town){
			tnode=n[i];
			break;
		};
	};
	if(tnode==null){
		tnode=elem('town','id',town,'','');
		xmlcookie.appendChild(tnode);
	};
	cnode=tnode.getElementsByTagName(com);
	if(cnode.length==0){
		cnode=elem(com,idname,idvalue);
		tnode.appendChild(cnode);
		cnode.setAttribute(idname,idvalue);
	}else{
		cnode[0].setAttribute(idname,idvalue);
	};
};

function gettree(town,com,idname){
	var tnode=null;
	var cnode;
	n=xmlcookie.getElementsByTagName('town');
	for(var i=0;i<n.length;i++){
		if(n[i].id==town){
			tnode=n[i];
			break;
		};
	};
	if(tnode==null)return false;
	cnode=tnode.getElementsByTagName(com);
	if(cnode.length==0){
		return false;
	}else{
		return cnode[0].getAttribute(idname);
	};
}
function updatestatus(){
	var sw=document.getElementById('statuswork');
	sw.textContent=' Work';
	loadcookie();
	var listtown=xmlcookie.getElementsByTagName('town');
	//alert(listtown.length);
	for(var i=0;i<listtown.length;i++){
		var nametown=listtown[i].id;
		var stown=document.getElementById(nametown);
		var newdID = "?newdid="+nametown;
		if(stown){
			var n = new Array();
			for (j=1;j<Types.length;j++) {
				n[j]=gettree(nametown,Types[j],'id');
			}
			
			var t = new Array();
			for (j=1;j<Types.length;j++) {
				t[j]=gettree(nametown,Types[j],'time');
			}
			
			var linkPoz = 0;
			var itime=0;
			var clmain = 'c3 f10 b';
			var curtime=new Date();
			
			for(var j=1;j<Types.length;j++){
				if (n[j] && n[j]!='') {
					curtime = new Date(t[j]);
					if(!istime(curtime)) {
						clmain = 'c2 f10 b';
						linkPoz = j;
					}
					
					if (itime==0) {
						var time=new Date(t[j]);
						var mtime=new Date(t[j]);
						itime=1;
					} else {
						time=new Date(t[j]);
						mtime=new Date(mintime(mtime, time));
					}
				}
			}
			
			if (itime==1) {
				stown.className=clmain;
				
				// invalid date like 00:00:0?
				try {
					stown.textContent=mtime.toLocaleTimeString().match(/(\d+:\d+)/).pop()+' ';
				} catch (e) {
					stown.textContent = "00:00:0?"
					settree(nametown,Types[j],'time','');
				}
				
				/*var newdID = stown.parentNode.lastChild.search;
				poz = newdID.indexOf('&');
				if (poz != -1) {
					newdID = newdID.substr(0, poz);
				}*/
				
				if (linkPoz == 0)	
					stown.parentNode.firstChild.innerHTML = '•';
				else {
					if (linkPoz > 3) {
						linkOut = 'build.php' + newdID + Links[linkPoz] ;
					} else {
						linkOut = 'dorf2.php' + newdID;
					}
					if (stown.parentNode.innerHTML.indexOf('href') == -1) {
						stown.innerHTML = '<a href="javascript:void(0)" onclick="this.href=\''+ linkOut + '\'"><b>•</b></a>' + stown.innerHTML;
					}
				}
			}else{
				stown.className='c2 f10 b';
				if(activetown==nametown){
					stown.textContent=' --:--';
					for (j=1;j<Types.length;j++) {
						if(t[j]==mtime){
							settree(nametown,Types[j],'time','');
							break;
						}
					}
				};
			};
		};
	};
	savecookie();
	sw.textContent='';
};

function istime(time){
	var curtime=new Date();
	var btime=new Date(time);
	//GM_log("+++++++istime\n ct='"+curtime+"'\nbt='"+btime+"'");
	if(btime>curtime)return true;
	return false;
}
function mintime(a,b){
	//GM_log("+++++++Mintime\n a='"+a+"'\nb='"+b+"'");
	if(!a)return b;
	if(!b)return a;
	var a=new Date(a);
	var b=new Date(b);
	if(a.getTime()==0 && b.getTime()!=0)return b;
	if(b.getTime()==0 && a.getTime()!=0)return a;
	if(a.getTime()>b.getTime())return b;else return a;
}

function getElementsByClassName(oElm, strTagName, strClassName){ // searches the oElm for strTagName objects with strClassName class
    var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
     
    var arrReturnElements = new Array();
    strClassName = strClassName.replace(/\-/g, "\\-");
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for(var i=0; i<arrElements.length; i++){
        oElement = arrElements[i];      
        if(oRegExp.test(oElement.className)){
       arrReturnElements.push(oElement);
        }   
    }
    return (arrReturnElements)
}

function savecookie(){
	if (typeof GM_setValue == "undefined"){
		var date = new Date();
		date.setTime(date.getTime() + (365 * 24 * 60 * 60 * 1000));
		var expires = "; expires=" + date.toGMTString();
		document.cookie = _COOKIE + "=" + escape(xmlcookie.innerHTML) + expires + "; path=/";
	}else GM_setValue(_COOKIE, escape(xmlcookie.innerHTML));
}

function loadcookie(){
	if (typeof GM_getValue == 'undefined'){
		var ca = document.cookie.split(';');
		var nameEQ = _COOKIE + "=";
		for(var i = 0; i < ca.length; i++) {
			var c = ca[i];
			while (c.charAt(0) == ' ') c = c.substring(1, c.length); // Elimina espacios
			if (c.indexOf(nameEQ) == 0) {
				xmlcookie.innerHTML=unescape(c.substring(nameEQ.length, c.length));
				break;
			}
		}
	}else xmlcookie.innerHTML=unescape(GM_getValue(_COOKIE, null));
}

function hint_on(z){
	if(z.target.textContent=='--:--:-- ')return;
	hint_text=genhint(z.target.id,z);
	hintdiv.innerHTML=hint_text;
	hintdiv.style.display='';
	var x=680-hint_length;
	var y=130+window.pageYOffset;
	hintdiv.style.top=y+hint_offset_y+'px';
	hintdiv.style.left=x+hint_offset_x+'px';
}
function hint_off(){
	hintdiv.style.display='none';
}

function genhint(town,z){
	
	var time=new Date();
	var newdID = "?newdid="+town;

	var gtOk = new Array();
	var gt = new Array();
	var gtOut='<table bgcolor=#7d99ff cellpadding="2" style="border-collapse:separate;width:100%;">'
	gtOk[1] = 0;
	gt[1] =			'<tr bgColor="#cbe7f9" color="#400000">'+
							'<td colspan="2"><b>'+gettree(town,Types[0],'act1')+'</b></td>'+
						'</tr>';
	gtOk[2] = 0;
	gt[2] = 			'<tr bgColor="#edefa0" color="#400000">'+
							'<td colspan="2"><b>'+gettree(town,Types[0],'act2')+'</b></td>'+
						'</tr>';
	gtOk[3] = 0;
	gt[3] = 			'<tr bgColor="#e8b95e" color="#400000">'+
							'<td colspan="2"><b>'+gettree(town,Types[0],'act3')+'</b></td>'+
						'</tr>';
	gtOk[4] = 0;
	gt[4] = 			'<tr bgColor="#ff9f3e" color="#400000">'+
							'<td colspan="2"><b>'+gettree(town,Types[0],'act4')+'</b></td>'+
						'</tr>';
	clmain = 'c3 f10 b';
	linkPoz = 0;
	
	for (var i=1; i<Types.length; i++) {
		switch (i) {
			case 1: {}
			case 2: {}
			case 3: {
				gtPoz = 1;
				break;
			}
			case 4: {}
			case 5: {}
			case 6: {
				gtPoz = 2;
				break;
			}
			case 7: {}
			case 8: {}
			case 9: {}
			case 10: {}
			case 11: {}
			case 12: {
				gtPoz = 3;
				break;
			}
			case 13: {
				gtPoz = 4;
				break;
			}
		}
		name = gettree(town,Types[i],'id');
		if(name){
			time = new Date(gettree(town,Types[i],'time'));
			if(!istime(time)) {
				cl='c2 f10 b';
				clmain='c2 f10 b';
				linkPoz = i;
			} else cl='c3 f10 b';
			
			if (gtOk[gtPoz] == 0) {
				gtOk[gtPoz] = 1;
				gtOut += gt[gtPoz];
			}
			gtOut+=		'<tr bgColor=#f1f3fd>'+
								'<td>'+name+'</td>'+
								'<td class="'+cl+'" width="50" align="center">'+time.toLocaleTimeString()+'</td>'+
							'</tr>';
		}
	}
	
	gtOut+=	'</table>';
	z.target.className=clmain;

	//var currTown = document.getElementById(town);
	var currTown = z.target;
	/*var newdID = currTown.parentNode.lastChild.search;
	poz = newdID.indexOf('&');
	if (poz != -1) {
		newdID = newdID.substr(0, poz);
	}*/
	
	if (linkPoz == 0)	
		currTown.parentNode.firstChild.innerHTML = '•';
	else {
		if (linkPoz > 3) {
			linkOut = 'build.php' + newdID + Links[linkPoz] ;
		} else {
			linkOut = 'dorf2.php' + newdID;
		}
		if (currTown.parentNode.innerHTML.indexOf('href') == -1) {
			currTown.innerHTML = '<a href="'+ linkOut + '"><b>•</b></a>' + currTown.innerHTML;
		}
	}
	
	return gtOut;
}

function init(){

GM_registerMenuCommand(ScriptName +' v' + ScriptVersion + " > Check new version", function(){ GM_openInTab(ScriptLink)});
GM_registerMenuCommand(ScriptName + ' > Press is crashed', function(){xmlcookie.innerHTML='';savecookie();window.location.reload()});

	var z=find('//td[contains(@class, "dot hl")]',XPList);
	if(z.snapshotLength==0)return false;
	activetown=z.snapshotItem(0).parentNode.innerHTML.match(/newdid\=(\d+)/).pop();
	//alert(activetown);
	var tl=document.getElementById('vlist');
	var d3 = find('//table[@id="vlist"]/thead/tr/td/a[contains(@href, "dorf3.php")]', XPFirst);
	var refr=elem('a','href','javascript:void(0)	','',' RefreshIB');
	refr.addEventListener('click',updatestatus,false);
	//alert(d3);
	d3.parentNode.appendChild(refr);
	var statusrefr=elem('span','id','statuswork','c2 b','');
	d3.parentNode.appendChild(statusrefr);
	var tdtown=tl.getElementsByTagName('td');
	for(var i=0;i<tdtown.length;i++){
		if(tdtown[i].className.match('dot')){
			var town=tdtown[i+1].innerHTML.match(/newdid\=(\d+)/).pop();
			//alert(town);
			insnode=elem('span','id',town,'c2 f10 b',' --:--');
			insnode.style.cursor = "help";
			insnode.setAttribute('width','200');
			nextNode=tdtown[i].childNodes[2];
			tdtown[i].insertBefore(insnode,nextNode);
			insnode.addEventListener('mouseover',hint_on,false);
			insnode.addEventListener('mouseout',hint_off,false);
		};
	};
	hintdiv=document.createElement('div');
	hintdiv.setAttribute("id","hintinfo");
	hintdiv.setAttribute("style","position:absolute;z-index:1000;display:none;top:0px;left:0px;width:"+hint_length+"px");
	document.body.appendChild(hintdiv);
	return true;
};


main();

/////////