Travian: Text Attack Builder M*Fversion

By Hmmm2 Last update Jun 17, 2008 — Installed 13,261 times. Daily Installs: 7, 6, 11, 2, 4, 8, 6, 5, 1, 1, 7, 7, 4, 8, 3, 4, 7, 2, 3, 6, 4, 2, 5, 4, 2, 10, 2, 5, 4, 2, 4, 1

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

// ==UserScript==
// @name          Travian: Text Attack Builder M*Fversion
// @description   Build attacks in textArea
// @include       *travian*dorf1.php*
// @version 1.0
// ==/UserScript==

//start variabler 
timerIntervalId = 0;
var DID = getActiveDid();
var timedAttacktimer = false;
firstRun = true;
numberattacks = 0;
var totalattacks = 0;
var troops = new Array();
var cord;
var Race = getRaceDorf1();
//var Race = 1;
var fillOut = new Array();
var fillOutTemp = new Array();
var code = new Array();
nwave = 0;
var katjes1 =0;
var katjes2 =0;
var aLangTroops = [];  //Needs to be translated in almost every language..

var attackurl =  document.location.href.split('?')[0].replace('dorf1','a2b');

//Set language manualy or let the script detect it for you
var sLang = "";

detectLanguage();

switch(sLang) {
	case "sk":
		aLangTroops[0] = ["Legionár", "Pretorián", "Imperián", "Equites Legáti", "Equites Imperatoris", "Equites Caesaris", "Rímske baranidlo", "Ohnivý katapult", "Senátor", "Osadník", "Hrdina"];  //Romans
		aLangTroops[1] = ["Pálkar", "Oštepár", "Bojovník so sekerou", "Špeh", "Rytier", "Teuton jazdec", "Germánske baranidlo", "Katapult", "Kmeňový vodca", "Osadník", "Hrdina"];  //Teutons
		aLangTroops[2] = ["Falanx", "Šermiar", "Sliedič", "Theutates Blesk", "Druid jazdec", "Haeduan", "Drevené baranidlo", "Trebušé", "Náčelník", "Osadník", "Hrdina"];  //Gauls
		break;

	case "ba":  //by bhcrow
		aLangTroops[0] = ["Legionar", "Preatorijanac", "Imperijanac", "Equites Legati", "Equites Imperatoris", "Equites Caesaris", "Ratni ovan", "Vatreni katapult", "Senator", "Naseljenik", "Hero"];  //Romans
		aLangTroops[1] = ["Batinar", "Kopljanik", "Borac sa sikirom", "Izviđač", "Paladin", "Teutonski vitez", "Ovan", "Katapult", "Poglavica", "Naseljenik", "Hero"];  //Teutons
		aLangTroops[2] = ["Palanks", "Mačevalac", "Izviđač", "Theutateov Grom", "druidni jahač", "Haeduan", "Ovan", "Katapult", "Starješina", "Naseljenik", "Hero"];  //Gauls
		break;		
		
	case "cz":
		aLangTroops[0] = ["Legionář", "Pretorián", "Imperián", "Equites Legáti", "Equites Imperatoris", "Equites Caesaris", "Římanské beranidlo", "Ohnivý katapult", "Senátor", "Osadník"]; //Romans
		aLangTroops[1] = ["Pálkař", "Oštěpař", "Sekerník", "Zvěd", "Rytíř", "Teuton jezdec", "Germánské beranidlo", "Katapult", "Kmenový vůdce", "Osadník"]; //Teutons
		aLangTroops[2] = ["Falanx", "Šermíř", "Slídič", "Theutates Blesk", "Druid jezdec", "Haeduan", "Dřevěné beranidlo", "Válečný katapult", "Náčelník", "Osadník"]; //Gauls
		break;	
		
	case "de":  //by Metador
		aLangTroops[0] = ["Legionnaire", "Praetorian", "Imperian", "Equites Legati", "Equites Imperatoris", "Equites Caesaris", "Battering Ram", "Fire Catapult", "Senator", "Settler", "Hero"];  //Romans
		aLangTroops[1] = ["Clubswinger", "Spearman", "Axeman", "Scout", "Paladin", "Teutonic Knight", "Ram", "Catapult", "Chief", "Settler", "Hero"];  //Teutons
		aLangTroops[2] = ["Phalanx", "Swordsman", "Pathfinder", "Theutates Thunder", "Druidrider", "Haeduan", "Ram", "Trebuchet", "Chieftain", "Settler", "Hero"];  //Gauls
		break;
		
	case "dk":  //by Ronster Madsen
		aLangTroops[0] = ["Legionnaire", "Praetorian", "Imperian", "Equites Legati", "Equites Imperatoris", "Equites Caesaris", "Battering Ram", "Fire Catapult", "Senator", "Settler", "Hero"];  //Romans
		aLangTroops[1] = ["Kølle", "Spyd", "Økse", "Spy", "Pala", "Teuton", "Ram", "Katas", "StammeF", "Bosæt", "Helt"];  //Teutons
		aLangTroops[2] = ["Phalanx", "Swordsman", "Pathfinder", "Theutates Thunder", "Druidrider", "Haeduan", "Ram", "Trebuchet", "Chieftain", "Settler", "Hero"];  //Gauls
		break;
		
	case "net":  //Spanish - by Carlos R.
		aLangTroops[0] = ["Legionario", "Pretoriano", "Imperano", "Equites Legati", "Equites Imperatoris", "Equites Caesaris", "Ariete Romano", "Catapulta de Fuego", "Senador", "Colono", "Héroe"];  //Romanos
		aLangTroops[1] = ["Luchador de Porra", "Lancero", "Luchador de Hacha", "Explorador", "Paladín", "Caballero Teutón", "Ariete", "Catapulta", "Jefe", "Colono", "Héroe"];  //Germanos
		aLangTroops[2] = ["Falange", "Luchador de Espada", "Rastreador", "Trueno Theutates", "Jinete Druida", "Haeduano", "Ariete", "Fundíbulo", "Cacique", "Colono", "Héroe"];  //Galos
		break;
		
	case "fi":  //by Zypper
		aLangTroops[0] = ["Legionnaire", "Praetorian", "Imperian", "Equites Legati", "Equites Imperatoris", "Equites Caesaris", "Battering Ram", "Fire Catapult", "Senator", "Settler", "Hero"];  //Romans
		aLangTroops[1] = ["Clubswinger", "Spearman", "Axeman", "Scout", "Paladin", "Teutonic Knight", "Ram", "Catapult", "Chief", "Settler", "Hero"];  //Teutons
		aLangTroops[2] = ["Phalanx", "Swordsman", "Pathfinder", "Theutates Thunder", "Druidrider", "Haeduan", "Ram", "Trebuchet", "Chieftain", "Settler", "Hero"];  //Gauls
		break;
		
	case "hk":  //by Angus
		aLangTroops[0] = ["Legionnaire", "Praetorian", "Imperian", "Equites Legati", "Equites Imperatoris", "Equites Caesaris", "Battering Ram", "Fire Catapult", "Senator", "Settler", "Hero"];  //Romans
		aLangTroops[1] = ["Clubswinger", "Spearman", "Axeman", "Scout", "Paladin", "Teutonic Knight", "Ram", "Catapult", "Chief", "Settler", "Hero"];  //Teutons
		aLangTroops[2] = ["Phalanx", "Swordsman", "Pathfinder", "Theutates Thunder", "Druidrider", "Haeduan", "Ram", "Trebuchet", "Chieftain", "Settler", "Hero"];  //Gauls
		break;
		
	case "hu": //by [TAJM]Kobra,
		aLangTroops[0] = ["Légiós", "Testőr", "Birodalmi", "Equites Legati", "Equites Imperatoris", "Equites Caesaris", "Faltörő kos", "Tűzkatapult", "Szenátor", "Telepes"];  //Római
		aLangTroops[1] = ["Buzogányos", "Lándzsás", "Csatabárdos", "Felderítő", "Paladin", "Teuton lovag", "Faltörő kos", "Katapult", "Törzsi vezető", "Telepes"];  //Germán
		aLangTroops[2] = ["Phalanx", "Kardos", "Felderítő", "Theutat villám", "Druida lovas", "Haeduan", "Falromboló", "Harci-katapult", "Főnök", "Telepes"];  //Gall		
		break;
  
	case "it":  //by Tazzicus
		aLangTroops[0] = ["Legionario", "Pretoriano", "Imperiano", "Legionario a cavallo", "Imperiano a cavallo", "Cavalleria romana", "Ariete da sfondamento", "Catapulta", "Senatore", "Decurione", "Hero"];
		aLangTroops[1] = ["Combattente", "Lanciere", "Combattente con ascia", "Esploratore", "Paladino", "Cavalleria teutonica", "Ariete", "Catapulta", "Comandante", "Decurione", "Hero"];
		aLangTroops[2] = ["Lanciere", "Combattente con spada", "Esploratore", "Cavalleria gallica", "Cavalleria di difesa", "Cavalleria avanzata", "Ariete", "Catapulta", "Capo tribu'", "Decurione", "Hero"];		
		break;
	
    case "lt":  //by NotStyle
        	aLangTroops[0] = ["Legionierius", "Pretorionas", "Imperionas", "Raitas legatas", "Imperatoriaus raitelis", "Cezario raitelis", "Mūradaužys", "Ugninė katapulta", "Senatorius", "Romėnų kolonistas", "Herojus"];  //Romėnai
        	aLangTroops[1] = ["Pėstininkas su kuoka", "Ietininkas", "Pėstininkas su kirviu", "Žvalgas", "Paladinas", "Germanų raitelis", "Taranas", "Katapulta", "Germanų vadas", "Germanų kolonistas", "Herojus"];  //Germanai
        	aLangTroops[2] = ["Falanga", "Pėstininkas su kardu", "Pėdsekys", "Raitas perkūnas", "Raitas druidas", "Raitas hedujas", "Taranas", "Trebušetas", "Galų kunigaikštis", "Galų kolonistas", "Herojus"];  //Galai
        	break;	
		
	case "nl":  //by Kris Fripont
		aLangTroops[0] = ["Legionnaire", "Praetorian", "Imperian", "Equites Legati", "Equites Imperatoris", "Equites Caesaris", "Battering Ram", "Fire Catapult", "Senator", "Settler", "Hero"];  //Romans
		aLangTroops[1] = ["Clubswinger", "Spearman", "Axeman", "Scout", "Paladin", "Teutonic Knight", "Ram", "Catapult", "Chief", "Settler", "Hero"];  //Teutons
		aLangTroops[2] = ["Phalanx", "Swordsman", "Pathfinder", "Theutates Thunder", "Druidrider", "Haeduan", "Ram", "Trebuchet", "Chieftain", "Settler", "Hero"];  //Gauls
		break;
		
	case "no":  //by Lordlarm @ S3 [*LORDS* 4 EVER]
        	aLangTroops[0] = ["Legionnaire", "Praetorian", "Imperian", "Equites Legati", "Equites Imperatoris", "Equites Caesaris", "Battering Ram", "Fire Catapult", "Senator", "Settler", "Hero"];  //Romans
		aLangTroops[1] = ["Clubswinger", "Spearman", "Axeman", "Scout", "Paladin", "Teutonic Knight", "Ram", "Catapult", "Chief", "Settler", "Hero"];  //Teutons
		aLangTroops[2] = ["Phalanx", "Swordsman", "Pathfinder", "Theutates Thunder", "Druidrider", "Haeduan", "Ram", "Trebuchet", "Chieftain", "Settler", "Hero"];  //Gauls
		break;
	
	case "br":
		aLangTroops[0] = ["Legionnaire", "Praetorian", "Imperian", "Equites Legati", "Equites Imperatoris", "Equites Caesaris", "Battering Ram", "Fire Catapult", "Senator", "Settler", "Hero"];  //Romans
		aLangTroops[1] = ["Clubswinger", "Spearman", "Axeman", "Scout", "Paladin", "Teutonic Knight", "Ram", "Catapult", "Chief", "Settler", "Hero"];  //Teutons
		aLangTroops[2] = ["Phalanx", "Swordsman", "Pathfinder", "Theutates Thunder", "Druidrider", "Haeduan", "Ram", "Trebuchet", "Chieftain", "Settler", "Hero"];  //Gauls
		break;
	case "pt":  
		aLangTroops[0] = ["Legionário", "Pretoriano", "Imperiano", "Equites Legati", "Equites Imperatoris", "Equites Caesaris", "Aríete", "Catapulta de Fogo", "Senador", "Colonizador"];  //Romans
		aLangTroops[1] = ["Salteador", "Lanceiro", "Bárbaro", "Espiăo", "Paladino", "Cavaleiro Teutăo", "Aríete", "Catapulta", "Chefe", "Colonizador"];  //Teutons
		aLangTroops[2] = ["Falange", "Espadachim", "Batedor", "Trovăo Theutate", "Cavaleiro Druida", "Haeduano", "Aríete", "Trabuquete", "Chefe de Clă", "Colonizador"];  //Gauls
		break;
		
	case "pl":  //by Oskar
        	aLangTroops[0] = ["Legionista", "Pretorianin", "Centurion", "Equites Legati", "Equites Imperatoris", "Equites Caesaris", "Taran", "Ognista katapulta", "Konsul", "Osadnik", "Bohater"];  //Romans
		aLangTroops[1] = ["Pałkarz", "Oszczepnik", "Topornik", "Zwiadowca", "Paladyn", "Germański Rycerz", "Taran", "Katapulta", "Wódz", "Osadnik", "Bohater"];  //Teutons
		aLangTroops[2] = ["Falanga", "Miecznik", "Tropiciel", "Grom Teutatesa", "Jeździec Druidzki", "Haeduan", "Taran", "trebeusz", "Herszt", "Osadnik", "Bohater"];  //Gauls		
		break;
	
	case "ro":  //Dark EingeL
	   	aLangTroops[0] = ["Legionnaire", "Praetorian", "Imperian", "Equites Legati", "Equites Imperatoris", "Equites Caesaris", "Battering Ram", "Fire Catapult", "Senator", "Settler", "Hero"];  //Romans
		aLangTroops[1] = ["Clubswinger", "Spearman", "Axeman", "Scout", "Paladin", "Teutonic Knight", "Ram", "Catapult", "Chief", "Settler", "Hero"];  //Teutons
		aLangTroops[2] = ["Phalanx", "Swordsman", "Pathfinder", "Theutates Thunder", "Druidrider", "Haeduan", "Ram", "Trebuchet", "Chieftain", "Settler", "Hero"];  //Gauls
	    	break;
	case "ru": //by Алексей Головлев
		aLangTroops[0] = ["Legionnaire", "Praetorian", "Imperian", "Equites Legati", "Equites Imperatoris", "Equites Caesaris", "Battering Ram", "Fire Catapult", "Senator", "Settler", "Hero"];  //Romans
		aLangTroops[1] = ["Clubswinger", "Spearman", "Axeman", "Scout", "Paladin", "Teutonic Knight", "Ram", "Catapult", "Chief", "Settler", "Hero"];  //Teutons
		aLangTroops[2] = ["Phalanx", "Swordsman", "Pathfinder", "Theutates Thunder", "Druidrider", "Haeduan", "Ram", "Trebuchet", "Chieftain", "Settler", "Hero"];  //Gauls
		break;
	
	case "tr":
		aLangTroops[0] = ["Lejyoner", "Pretoryan", "Emperyan", "Equites Legati", "Equites Imperatoris", "Equites Caesaris", "Koçbaşi", "Ateş Mancinigi", "Senator", "Göçmen", "Hero"];  //Romalilar
		aLangTroops[1] = ["Tokmak Sallayan", "Mizrakçi", "Balta Sallayan", "Casus", "Paladin", "Toyton", "Koçbaşi", "Mancinik", "Reis", "Göçmen", "Hero"];  //Cermenler
		aLangTroops[2] = ["Phalanx", "Kiliçli", "Casus", "Toytagin Şimşegi", "Druyid", "Haeduan", "Koçbaşi", "Mancinik", "Kabile Reisi", "Göçmen", "Hero"];  //Galyalilar
		break;
	
	case "si":  //by SpEkTr
		aLangTroops[0] = ["Legionar", "Praetorijan", "Imperijan", "Izvidnik", "Equites Imperatoris", "Equites Caesaris", "Oblegovalni oven", "Ognjeni katapult", "Senator", "Kolonist"];  //Romans
		aLangTroops[1] = ["Gorjačar", "Suličar", "Metalec sekir", "Skavt", "Paladin", "Tevtonski vitez", "Oblegovalni oven", "Mangonel", "Vodja", "Kolonist"];  //Teutons
		aLangTroops[2] = ["Falanga", "Mečevalec", "Stezosledec", "Theutatesova Strela", "Druid", "Haeduan", "Oblegovalni oven", "Trebušet", "Poglavar", "Kolonist"];  //Gauls
		break;
		
	case "us":  //by m4rtini
		aLangTroops[0] = ["Legionnaire", "Praetorian", "Imperian", "Equites Legati", "Equites Imperatoris", "Equites Caesaris", "Battering Ram", "Fire Catapult", "Senator", "Settler", "Hero"];  //Romans
		aLangTroops[1] = ["Clubswinger", "Spearman", "Axeman", "Scout", "Paladin", "Teutonic Knight", "Ram", "Catapult", "Chief", "Settler", "Hero"];  //Teutons
		aLangTroops[2] = ["Phalanx", "Swordsman", "Pathfinder", "Theutates Thunder", "Druidrider", "Haeduan", "Ram", "Trebuchet", "Chieftain", "Settler", "Hero"];  //Gauls
		break;
	case "se":
		aLangTroops[0] = ["Legionär", "Praetorian", "Imperiesoldat", "Spårare", "Imperieriddare", "Ceasarriddare", "Murbräcka", "Eld Katapult", "Senator", "Nybyggare", "Hjälte"];  //Romans
        	aLangTroops[1] = ["Klubbman", "Spjutman", "Yxman", "Scout", "Paladin", "Germansk Knekt", "Murbräcka", "Katapult", "Stamledare", "Nybyggare", "Hjälte"];  //Teutons
        	aLangTroops[2] = ["Falanx", "Svärdskämpe", "Spårare", "Theutates Blixt", "Druidryttare", "Haeduan", "Murbräcka", "Krigskatapult", "Hövding", "Nybyggare", "Hjälte"];  //Gauls
        	break;
	case "ro":
		aLangTroops[0] = ["Legionnaire", "Praetorian", "Imperian", "Equites Legati", "Equites Imperatoris", "Equites Caesaris", "Battering Ram", "Fire Catapult", "Senator", "Settler", "Hero"];  //Romans
		aLangTroops[1] = ["Clubswinger", "Spearman", "Axeman", "Scout", "Paladin", "Teutonic Knight", "Ram", "Catapult", "Chief", "Settler", "Hero"];  //Teutons
		aLangTroops[2] = ["Phalanx", "Swordsman", "Pathfinder", "Theutates Thunder", "Druidrider", "Haeduan", "Ram", "Trebuchet", "Chieftain", "Settler", "Hero"];  //Gauls
		break;
	case "en":
		aLangTroops[0] = ["Legionnaire", "Praetorian", "Imperian", "Equites Legati", "Equites Imperatoris", "Equites Caesaris", "Battering Ram", "Fire Catapult", "Senator", "Settler", "Hero"];  //Romans
		aLangTroops[1] = ["Clubswinger", "Spearman", "Axeman", "Scout", "Paladin", "Teutonic Knight", "Ram", "Catapult", "Chief", "Settler", "Hero"];  //Teutons
		aLangTroops[2] = ["Phalanx", "Swordsman", "Pathfinder", "Theutates Thunder", "Druidrider", "Haeduan", "Ram", "Trebuchet", "Chieftain", "Settler", "Hero"];  //Gauls
		break;
	case "com":
		aLangTroops[0] = ["Legionnaire", "Praetorian", "Imperian", "Equites Legati", "Equites Imperatoris", "Equites Caesaris", "Battering Ram", "Fire Catapult", "Senator", "Settler", "Hero"];  //Romans
		aLangTroops[1] = ["Clubswinger", "Spearman", "Axeman", "Scout", "Paladin", "Teutonic Knight", "Ram", "Catapult", "Chief", "Settler", "Hero"];  //Teutons
		aLangTroops[2] = ["Phalanx", "Swordsman", "Pathfinder", "Theutates Thunder", "Druidrider", "Haeduan", "Ram", "Trebuchet", "Chieftain", "Settler", "Hero"];  //Gauls
		break;
	case "uk":
		aLangTroops[0] = ["Legionnaire", "Praetorian", "Imperian", "Equites Legati", "Equites Imperatoris", "Equites Caesaris", "Battering Ram", "Fire Catapult", "Senator", "Settler", "Hero"];  //Romans
		aLangTroops[1] = ["Clubswinger", "Spearman", "Axeman", "Scout", "Paladin", "Teutonic Knight", "Ram", "Catapult", "Chief", "Settler", "Hero"];  //Teutons
		aLangTroops[2] = ["Phalanx", "Swordsman", "Pathfinder", "Theutates Thunder", "Druidrider", "Haeduan", "Ram", "Trebuchet", "Chieftain", "Settler", "Hero"];  //Gauls
		break;
	default: // default is english
		aLangTroops[0] = ["Legionnaire", "Praetorian", "Imperian", "Equites Legati", "Equites Imperatoris", "Equites Caesaris", "Battering Ram", "Fire Catapult", "Senator", "Settler", "Hero"];  //Romans
		aLangTroops[1] = ["Clubswinger", "Spearman", "Axeman", "Scout", "Paladin", "Teutonic Knight", "Ram", "Catapult", "Chief", "Settler", "Hero"];  //Teutons
		aLangTroops[2] = ["Phalanx", "Swordsman", "Pathfinder", "Theutates Thunder", "Druidrider", "Haeduan", "Ram", "Trebuchet", "Chieftain", "Settler", "Hero"];  //Gauls
		break;
}


function detectLanguage() {
	if(sLang != "") {return;}
	var re = null; re = new RegExp("^http://[^/]*\.([a-zA-Z]{2,3})\/.*$", "i");
	var lang = window.location.href.match(re);
	if(!lang) {
		return;
	} else {
		sLang = lang.pop();
	}
}





  
function getNumber(tekst)
{
	var terug;
	//alert(tekst.indexOf("'")+1+"      "+tekst.lastIndexOf("'"));
	if((tekst.indexOf("=")+1 ) == 0 &&  tekst.lastIndexOf(";") == -1)
	{
		return 0;
	}else
	{
		return tekst.substring(tekst.indexOf("=")+1, tekst.indexOf(";"));
	}
}

function Random(minimum, maximum)
{	
	if(minimum == null && maximum == null )
	{
		minimum = 1000;
		maximum = 10000;
	}
	return Math.random()*(maximum-minimum+1);
		
};


/////////////////////////////////////////////////
/////////////////Angrep//////////////////////////
/////////////////////////////////////////////////

function attack(Nwave){
  saveList();
  
 
  if (firstRun){
  cord = myFarmArea.innerHTML.split("\n");
  c = document.getElementById('typeAttack').value;
  check=false;
  
  spy = false;
      if (c>4)
      {
      spy = c-4;
      c=3;
      }
      
  troops = getTotalUnitDorf1();
  code = troops.split("|");
  		var type1 = parseInt(code[0]);
		var type2 = parseInt(code[1]);
		var type3 = parseInt(code[2]);
		var type4 = parseInt(code[3]);
		var type5 = parseInt(code[4]);
		var type6 = parseInt(code[5]);
		var type7 = parseInt(code[6]);
		var type8 = parseInt(code[7]);
		var type9 = parseInt(code[8]);
		var type10 = parseInt(code[9]);
  		
		//alert(type1+type2+type3+type4+type5);
		fillOut = myFarmArea.innerHTML.split("\n");
  		
  		var type = new Array(10);
  		type[0]=type1;
  		type[1]=type2;
  		type[2]=type3;
  		type[3]=type4;
  		type[4]=type5;
  		type[5]=type6;
  		type[6]=type7;
  		type[7]=type8;
  		type[8]=type9;
  		type[9]=type10;
  		
  		//alert("før " + totalTroops);
		for(i=0;i<cord.length;i++){
			fillOut[i] = fillOut[i].split("|");
			fillOut[i][0] = fillOut[i][0].split(",");
			fillOut[i][1] = fillOut[i][1].split(",");
			//errorMsg("før" + totalTroops + ":" + parseInt(fillOutTemp[i][1][1]));
			//troopsWave = -1;
			//errorMsg("før" + totalTroops + ":" + parseInt(fillOutTemp[i][1][0])+fillOutTemp[i][1][1]+fillOutTemp[i][1][2]+fillOutTemp[i][1][3]+fillOutTemp[i][1][4]));
			//parseInt(fillOutTemp[i][1][0]+fillOutTemp[i][1][1]+fillOutTemp[i][1][2]+fillOutTemp[i][1][3]+fillOutTemp[i][1][4]);
			//errorMsg("før" + totalTroops + ":" + parseInt(fillOutTemp[i][1][0]+fillOutTemp[i][1][1]+fillOutTemp[i][1][2]+fillOutTemp[i][1][3]+fillOutTemp[i][1][4]));
			if(parseInt(fillOut[i][1][0])>0)
			{
				type[0] = type[0] - parseInt(fillOut[i][1][0]);
			}
			if(parseInt(fillOut[i][1][1])>0){
				type[1] = type[1] - parseInt(fillOut[i][1][1]);
			}
			if(parseInt(fillOut[i][1][2])>0){
				type[2] = type[2] - parseInt(fillOut[i][1][2]);
			}
			if(parseInt(fillOut[i][1][3])>0){
				type[3] = type[3] - parseInt(fillOut[i][1][3]);
			}
			if(parseInt(fillOut[i][1][4])>0){
				type[4] = type[4] - parseInt(fillOut[i][1][4]);
			}
			if(parseInt(fillOut[i][1][5])>0){
				type[5] = type[5] - parseInt(fillOut[i][1][5]);
			}
			if(parseInt(fillOut[i][1][6])>0){
				type[6] = type[6] - parseInt(fillOut[i][1][6]);
			}
			if(parseInt(fillOut[i][1][7])>0){
				type[7] = type[7] - parseInt(fillOut[i][1][7]);
			}
			if(parseInt(fillOut[i][1][8])>0){
				type[8] = type[8] - parseInt(fillOut[i][1][8]);
			}
			if(parseInt(fillOut[i][1][9])>0){
				type[9] = type[9] - parseInt(fillOut[i][1][9]);
			}
			if(parseInt(fillOutTemp[i][1][10])>0){
				type[10] = type[10] - parseInt(fillOutTemp[i][1][10]);
			}
			
			//totalTroops = totalTroops-(parseInt(fillOutTemp[i][1][0])+parseInt(fillOutTemp[i][1][1])+parseInt(fillOutTemp[i][1][2])+parseInt(fillOutTemp[i][1][3])+parseInt(fillOutTemp[i][1][4]));
		}
  //alert("efter " + totalTroops);
  var check=true;
  for(var j=0;j<10;j++){
  if (parseInt(type[j])<0)
  {
  errorMsg("Not Enough: " + aLangTroops[Race][j]);
  check=false;
  }
  	
  }
  if(!check){
  	abort();
  	return;
  }


totalattacks = cord.length;
firstRun = false;
addCount("<b>Starting</b>");
	var xcord;
	var ycord;
	var postvar;
	Nwave=0;
}


nwave=Nwave;
if(nwave<=totalattacks){
        //alert("før fejl");
	//xcord = fillOut[nwave][0][0];
	//ycord = fillOut[nwave][0][1];
	katjes1 = fillOut[nwave][1][11]
 	katjes2 = fillOut[nwave][1][12]
 	
 	
	var url = attackurl + '?' + DID;
	postvar = 'b=1&t1='+ fillOut[nwave][1][0] +'&t2='+ fillOut[nwave][1][1] +'&t3='+ fillOut[nwave][1][2] +'&t4='+ fillOut[nwave][1][3] +'&t5='+ fillOut[nwave][1][4] +'&t5='+ fillOut[nwave][1][4] +'&t6='+ fillOut[nwave][1][5] +'&t7='+ fillOut[nwave][1][6] +'&t8='+ fillOut[nwave][1][7] +'&t9='+ fillOut[nwave][1][8] +'&t10='+ fillOut[nwave][1][9] +'&t11='+ fillOut[nwave][1][10]+'&c='+ c +'&dname=&x='+fillOut[nwave][0][0]+'&y='+fillOut[nwave][0][1]+'&s1=ok';
	//alert(nwave+":"+totalattacks+":"+postvar);
	//alert(postvar);
	post(url, postvar, fillOut[nwave][0][0], fillOut[nwave][0][1], katjes1, katjes1,spy);
	nwave++;
	
	//if(fillOut[nwave][2][0]=="Clean" || fillOut[nwave][2][0]=="Pult1" || fillOut[nwave][2][0]=="Pult2"){
	//setTimeout(function(){attack(nwave)},100); 
	//}else if(fillOut[nwave][2][0]=="Clean2" || fillOut[nwave][2][0]=="Pult21" || fillOut[nwave][2][0]=="Pult22" ){
	//setTimeout(function(){attack(nwave)},100); 
	//}else{
	setTimeout(function(){attack(nwave)},document.getElementById('lag').value);
	//}




	
}else{
alert("stopped");
return;
}

}




////////////////////////////////////////////////////




function post(url, data, xcord, ycord,kat, kat2,spy) {
  GM_xmlhttpRequest({
    method: "POST",
    url: url,
    headers:{'Content-type':'application/x-www-form-urlencoded'},
    data:encodeURI(data),
    onload: function(responseDetails) 
      {
	pulled = document.createElement('div');
  	pulled.innerHTML = responseDetails.responseText; 
	
	idValue = getValue(pulled, 'id');
	aValue = getValue(pulled, 'a');
	cValue = getValue(pulled, 'c');
	kidValue = getValue(pulled, 'kid');
	t1Value = getValue(pulled, 't1');
	t2Value = getValue(pulled, 't2');
	t3Value = getValue(pulled, 't3');
	t4Value = getValue(pulled, 't4');
	t5Value = getValue(pulled, 't5');
	t6Value = getValue(pulled, 't6');
	t7Value = getValue(pulled, 't7');
	t8Value = getValue(pulled, 't8');
	t9Value = getValue(pulled, 't9');
	t10Value = getValue(pulled, 't10');
	t11Value = getValue(pulled, 't11');
	
if (!idValue && !aValue && !cValue && !kidValue)
{
//alert('id:'+idValue + 'a:'+ aValue + 'c'+ cValue + 'kid'+ kidValue);
errorMsg("(" + xcord +',' + ycord + ") Probably bad cords."  );
return;
}


var postData = 'id='+idValue+'&a='+aValue+'&c='+cValue+'&kid='+kidValue+'&t1='+t1Value+'&t2='+t2Value+'&t3='+t3Value+'&t4='+t4Value+'&t5='+t5Value+'&t6='+t6Value+'&t7='+t7Value+'&t8='+t8Value+'&t9='+t9Value+'&t10='+t10Value+'&t11='+t11Value;
if (kat != 0){postData = postData + '&kata='+kat;}
if (kat2 != 0){postData = postData + '&kata2='+kat2; } 
postData = postData + '&s1=ok&attacks=&cords=';


if (spy)
{
    if (Race == 2 && t3Value > 0)
	{
    var postData = 'id='+idValue+'&a='+aValue+'&c='+cValue+'&kid='+kidValue+'&t1=0&t2=0&t3=' +t3Value +'&t4=0&t5=0&t6=0&t7=0&t8=0&t9=0&t10=0&t11=0&s1=ok&attacks=&cords=&spy=' + spy;
  }
  else if (Race != 2 && t4Value >0)
  {
  var postData = 'id='+idValue+'&a='+aValue+'&c='+cValue+'&kid='+kidValue+'&t1=0&t2=0&t3=0&t4='+t4Value+'&t5=0&t6=0&t7=0&t8=0&t9=0&t10=0&t11=0&s1=ok&attacks=&cords=&spy=' + spy;
  }else{
  errorMsg(text[7]);
  return;
  }
}
  
post2(url, postData);
    }
  });
}

function post2(url, data) {
  GM_xmlhttpRequest({
    method: "POST",
    url: url,
    headers:{'Content-type':'application/x-www-form-urlencoded'},
    data:encodeURI(data),
    onload: function(responseDetails) {
	
	numberattacks++;
	
	//alert();
	if (numberattacks < totalattacks)
	{
 		addCount(".");
	}else{


        urlFinished = "http://" + document.domain + "/build.php?id=39";
    	addCount(". <a href=" + urlFinished + ">Done</a>");  //legg inn delay her 
      //resetting the start values
      //pausecomp(Random(500,1500));
      abort();
      //setTimeout(window.location.reload(),1000); 
	 
  
   //alert(numberattacks);
   }    
  
  }
  });
}



/////////////////////////////////////////////////
/////////////////interface///////////////////////
/////////////////////////////////////////////////

  var lright1DIV = document.createElement('div');
  var lmidlcDIV = document.getElementById('lplz1');
  
  lright1DIV.setAttribute('id','lright1');
 // rightSidebar = lmidlcDIV.parentNode.appendChild(lmidlcDIV);

  rightSidebar = lmidlcDIV.parentNode.appendChild(lright1DIV);


//attack interface 

if(Race!=4){

var  attackInterface = document.createElement("div");
attackInterface.innerHTML = '<fieldset><legend>Attack setup:</legend><table><tr><td><div id=start>' +
 '<table>'+
  '<tr><td>'+
  'Status:</td><td>' +
  '<div id=\"count\"></div>' +
  '<div id=\"err\"></div>' +
  '</td></tr><td>'+
  '<button id=\"myFarmabutton\" >swEEt jesus =)</button>' +
  '</td><td>' +
  '<div id=\"arrivalTimeDiv\"></div><div id=\"TravelTimeDiv\"></div>'+
  '</td></tr><tr><td>' +
  '<button id=\"arrivalTime\">getArrivalTime</button>'+
  '</td><td>' +
  'Lag i milli sekunder<input id=\"lag\" value=\"500">' + 
  '</td></tr>' +
  '<tr><td colspan=\"2\">' +
  '<select name=\"typeAttack\" id=\"typeAttack\">' +
  '<option value=\"3\">Attack</option>' +
  '<option value=\"2\">Raid</option>' +
  '<option value=\"4\">BackUp</option>' +
  '<option value=\"5\">Spy-Resources</option>' +
  '<option value=\"6\">Spy-ResidencePalace</option>' +
  '</select>' +
  '</td></tr>' +
  '<tr><td  colspan=\"2\">' +
  '<textarea id=\"Coordlist\" style=\"top:0px;left:850px;width:400px;height:475px;\">' +
  'paste towns in form xx,yy|'+ aLangTroops[Race][0] +','+ aLangTroops[Race][1] +','+ aLangTroops[Race][2] +','+ aLangTroops[Race][3] +','+ aLangTroops[Race][4] +','+ aLangTroops[Race][5] +','+ aLangTroops[Race][6] +','+ aLangTroops[Race][7] +','+ aLangTroops[Race][8] +','+ aLangTroops[Race][9] +','+ aLangTroops[Race][10] +',[KataTarget1],[KataTarget2]|[Somename]' +
  '</textarea>' +
  '</tr>' +
  '</table>' +
  '</td>' +
  '</tr>' +
  '</table>' 
   
  

rightSidebar.appendChild(attackInterface);


/////////////////////////////////////////////////
/////////////////Events//////////////////////////
/////////////////////////////////////////////////



var myFarmArea = document.getElementById('Coordlist');

var myimbabutton = document.getElementById('myFarmabutton');
myimbabutton.addEventListener("click", attack, true);

//var SaveButton = document.getElementById('SaveB');
//SaveButton.addEventListener("click", saveList, true);

var arrivalButton = document.getElementById('arrivalTime');
arrivalButton.addEventListener("click", getArrivalTime, true);

//var timedArrivalButton = document.getElementById('setTimeButton');
//timedArrivalButton.addEventListener("click", setArrivalTimer, true);


//document.addEventListener("keydown", function(){hotKeys(event)},true);
//document.addEventListener("keydown",hotKeys,true); 

}

/////////////////////////////////////////////////
/////////////////misc////////////////////////////
/////////////////////////////////////////////////

function saveList(){
myFarmArea.innerHTML = myFarmArea.value; 
}

function getRaceDorf1()
{
var ex = "//img[@class='unit']";
	result = document.evaluate( 
  	ex,
    	document,
    	null,
    	XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
    	null);
  if (result.snapshotLength)
  {
  for(var i=1;i<result.snapshotLength;i++){
  	 src = result.snapshotItem(i).src.split("/");
  //alert(parseInt(src[6].replace(".gif","")));
  if (parseInt(src[6].replace(".gif",""))>20){
  return 2; //gaul 
  }else if(parseInt(src[6].replace(".gif",""))<21 && parseInt(src[6].replace(".gif",""))>10){
    return 1; //teutons 
      }else if(parseInt(src[6].replace(".gif",""))<11){
        return 0; //Romans
          }
  }
  }else{
return 4; 
} 
}


function getTotalUnitDorf1()
{
		var troopArray=new Array(10);
    	      troopArray[0]=0;
    	      troopArray[1]=0;
    	      troopArray[2]=0;
    	      troopArray[3]=0;
    	      troopArray[4]=0;
    	      troopArray[5]=0;
    	      troopArray[6]=0;
    	      troopArray[7]=0;
    	      troopArray[8]=0;
    	      troopArray[9]=0;
    	      troopArray[10]=0;
       var troopString;
		var ex = "id('ltrm')/table/tbody/tr[*]";
	result = document.evaluate( 
  	ex,
    	document,
    	null,
    	XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
    	null);
if (result.snapshotLength)
{
for(var i=0;i<result.snapshotLength;i++){
	var columns = result.snapshotItem(i).getElementsByTagName("TD");
	//var troopType = columns[0].innerHTML.match(/.gif/)[1];
	var troopType = parseInt(columns[0].innerHTML.match(/(\d*).gif/)[1]);
	if(troopType)
	{
	//alert(troopType);
	var troopsNumber = parseInt(columns[1].innerHTML.match(/\d+/)[0]);
	troopArray[troopType-(Race*10)-1] = troopsNumber;
	//alert(troopArray[troopType-(Race*10)-1]);
	}
	else{
	troopArray[10]=1
	}

	//alert(troopType + ":" + troopsNumber);
}
troopString = troopArray[0]+'|'+troopArray[1]+'|'+troopArray[2]+'|'+troopArray[3]+'|'+troopArray[4]+'|'+troopArray[5]+'|'+troopArray[6]+'|'+troopArray[7]+'|'+troopArray[8]+'|'+troopArray[9]+'|'+troopArray[10];
//alert(troopString);
return troopString
}else{
      return 0;
	}
}

function errorMsg (msg)
{
errDiv = document.getElementById('err');
errDiv.innerHTML = errDiv.innerHTML +  "<br><b>ERROR:</b>" + msg;
}

function errorMsgReset()
{
errDiv = document.getElementById('err');
errDiv.innerHTML = "";
}


function getActiveDid()
{

var ex = "//a[contains(@href,'newdid')][@class='active_vl']";
	tag = document.evaluate( 
  	ex,
    	document,
    	null,
    	XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
    	null);

if (tag.snapshotLength)
{
		temp = tag.snapshotItem(0).href.split("?")[1].split('&');
	return temp[0];
	}else{
	errorMsg("Unable to get active village.");
  return "";
    }
}

function getValue(doc, name)
{
var ex = ".//input[@type='hidden'][@name='" + name + "']";
tag = document.evaluate( 
  	ex,
    	doc,
    	null,
    	XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
    	null);
if (tag.snapshotLength)
  {
	aTag = tag.snapshotItem(0);
	return(aTag.value);
	}else{
  return 0;
  }

}

function addCount(msg)
{
countDiv = document.getElementById('count');
countDiv.innerHTML = countDiv.innerHTML + msg;
}

function setArrivalTimer()
{
getArrivalTime();
timedAttacktimer = document.getElementById('timedArrivalInput').value;
addCount("Timed arrival set at:" + timedAttacktimer); 
}

function abort()
{
setTimeout(function(){realAbort()},500);
}

function realAbort ()
{
firstRun = true;
nwave = 0;
numberattacks = 0;
totalattacks = 0;
myimbabutton.innerHTML = "Whoop some ass =)"
}

function getCheckTroops()
{
  saveList()
  check=false;
  cord = myFarmArea.innerHTML.split("\n");
 
  troops = getTotalUnitDorf1();
  code = troops.split("|");
  		var type1 = parseInt(code[0]);
		var type2 = parseInt(code[1]);
		var type3 = parseInt(code[2]);
		var type4 = parseInt(code[3]);
		var type5 = parseInt(code[4]);
		var type6 = parseInt(code[5]);
		var type7 = parseInt(code[6]);
		var type8 = parseInt(code[7]);
		var type9 = parseInt(code[8]);
		var type10 = parseInt(code[9]);
		var type11 = parseInt(code[10]);
  		
		//alert(type1+type2+type3+type4+type5);
		fillOutTemp = myFarmArea.innerHTML.split("\n");
  		
  		//alert(fillOutTemp);
  		var type = new Array(10);
  		type[0]=type1;
  		type[1]=type2;
  		type[2]=type3;
  		type[3]=type4;
  		type[4]=type5;
  		type[5]=type6;
  		type[6]=type7;
  		type[7]=type8;
  		type[8]=type9;
  		type[9]=type10;
  		
  		//alert("før " + totalTroops);
		for(i=0;i<cord.length;i++){
			fillOutTemp[i] = fillOutTemp[i].split("|");
			fillOutTemp[i][0] = fillOutTemp[i][0].split(",");
			fillOutTemp[i][1] = fillOutTemp[i][1].split(",");
			//errorMsg("før" + totalTroops + ":" + parseInt(fillOutTemp[i][1][1]));
			//troopsWave = -1;
			//errorMsg("før" + totalTroops + ":" + parseInt(fillOutTemp[i][1][0])+fillOutTemp[i][1][1]+fillOutTemp[i][1][2]+fillOutTemp[i][1][3]+fillOutTemp[i][1][4]));
			//parseInt(fillOutTemp[i][1][0]+fillOutTemp[i][1][1]+fillOutTemp[i][1][2]+fillOutTemp[i][1][3]+fillOutTemp[i][1][4]);
			//errorMsg("før" + totalTroops + ":" + parseInt(fillOutTemp[i][1][0]+fillOutTemp[i][1][1]+fillOutTemp[i][1][2]+fillOutTemp[i][1][3]+fillOutTemp[i][1][4]));
			if(parseInt(fillOutTemp[i][1][0])>0)
			{
				type[0] = type[0] - parseInt(fillOutTemp[i][1][0]);
			}
			if(parseInt(fillOutTemp[i][1][1])>0){
				type[1] = type[1] - parseInt(fillOutTemp[i][1][1]);
			}
			if(parseInt(fillOutTemp[i][1][2])>0){
				type[2] = type[2] - parseInt(fillOutTemp[i][1][2]);
			}
			if(parseInt(fillOutTemp[i][1][3])>0){
				type[3] = type[3] - parseInt(fillOutTemp[i][1][3]);
			}
			if(parseInt(fillOutTemp[i][1][4])>0){
				type[4] = type[4] - parseInt(fillOutTemp[i][1][4]);
			}
			if(parseInt(fillOutTemp[i][1][5])>0){
				type[5] = type[5] - parseInt(fillOutTemp[i][1][5]);
			}
			if(parseInt(fillOutTemp[i][1][6])>0){
				type[6] = type[6] - parseInt(fillOutTemp[i][1][6]);
			}
			if(parseInt(fillOutTemp[i][1][7])>0){
				type[7] = type[7] - parseInt(fillOutTemp[i][1][7]);
			}
			if(parseInt(fillOutTemp[i][1][8])>0){
				type[8] = type[8] - parseInt(fillOutTemp[i][1][8]);
			}
			if(parseInt(fillOutTemp[i][1][9])>0){
				type[9] = type[9] - parseInt(fillOutTemp[i][1][9]);
			}
			if(parseInt(fillOutTemp[i][1][10])>0){
				type[10] = type[10] - parseInt(fillOutTemp[i][1][10]);
			}
			
			//totalTroops = totalTroops-(parseInt(fillOutTemp[i][1][0])+parseInt(fillOutTemp[i][1][1])+parseInt(fillOutTemp[i][1][2])+parseInt(fillOutTemp[i][1][3])+parseInt(fillOutTemp[i][1][4]));
		}
  //alert("efter " + totalTroops);
  var check=true;
  for(var j=0;j<10;j++){
  if (parseInt(type[j])<0)
  {
  errorMsg("Not Enough: " + aLangTroops[Race][j]);
  check=false;
  }
  	
  }
  if(!check){
  	abort();
  	return;
  }else{
	errorMsgReset()
	}

}


function getArrivalTime()
{
getCheckTroops()
c = document.getElementById('typeAttack').value;
var tempUrl = attackurl + '?' +DID;
var tempPostvar = 'b=1&t1='+ fillOutTemp[nwave][1][0] +'&t2='+ fillOutTemp[nwave][1][1] +'&t3='+ fillOutTemp[nwave][1][2] +'&t4='+ fillOutTemp[nwave][1][3] +'&t5='+ fillOutTemp[nwave][1][4] +'&t5='+ fillOutTemp[nwave][1][4] +'&t6='+ fillOutTemp[nwave][1][5] +'&t7='+ fillOutTemp[nwave][1][6] +'&t8='+ fillOutTemp[nwave][1][7] +'&t9='+ fillOutTemp[nwave][1][8] +'&t10='+ fillOutTemp[nwave][1][9] +'&t11='+ fillOutTemp[nwave][1][10]+'&c='+ c +'&dname=&x='+fillOutTemp[nwave][0][0]+'&y='+fillOutTemp[nwave][0][1]+'&s1=ok';


  GM_xmlhttpRequest({
    method: "POST",
    url: tempUrl,
    headers:{'Content-type':'application/x-www-form-urlencoded'},
    data:encodeURI(tempPostvar),
    onload: function(responseDetails) 
      {
	pulled = document.createElement('div');
  pulled.innerHTML = responseDetails.responseText;

  var ex = ".//span[@id='tp2']";
  var ex2 = ".//td[@width='50%']";


  
tag = document.evaluate( 
  	ex,
    	pulled,
    	null,
    	XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
    	null);
tag2 = document.evaluate( 
  	ex2,
    	pulled,
    	null,
    	XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
    	null);
if (tag.snapshotLength || tag2.snapshotLength)
  {
	document.getElementById('TravelTimeDiv').innerHTML = "Travael time " + tag2.snapshotItem(0).innerHTML;
	document.getElementById('arrivalTimeDiv').innerHTML = 'Arrive at:' + tag.snapshotItem(0).innerHTML;
	//document.getElementById('TravelTimeDiv').innerHTML = 'Travel time:' + tag2.snapshotItem(0).innerHTML;
	referenceTime = new Date().getTime();
	clearInterval(timerIntervalId);
	timerIntervalId = setInterval(function(){arrivalCounter()},1000);
    	arrivalCounter();
	errorMsgReset()
  }else{
  	errorMsg("Bad Coordinates or/and missing troops");
  }
	}
  });
}

function arrivalCounter()
{
diffTime = Math.round((new Date().getTime() - referenceTime)/1000);
if (diffTime >= 1)
{
 count2 = document.getElementById('arrivalTimeDiv').innerHTML;
 count = count2.split(':');
 hours = count[1];
 minutes = count[2];
 seconds = count[3];
seconds = parseInt(seconds,10) + parseInt(diffTime,10);
 if (seconds >= 60)
 {
 minutes++;
 seconds = seconds - 60;
 }
 if (minutes >= 60)
 {
 hours++
 minutes = minutes - 60;
 }
 if (hours >= 24)
 {
 hours = 0;
 }

 seconds = seconds.toString(); 
 minutes = minutes.toString(); 
 hours = hours.toString(); 
 seconds = seconds.replace(/\b(\d)\b/g, '0$1');
 minutes = minutes.replace(/\b(\d)\b/g, '0$1');
 hours = hours.replace(/\b(\d)\b/g, '0$1');
  
if (timedAttacktimer)
{

  tTimer = timedAttacktimer.split(':');
  if (tTimer.length == 3)
    {
    tSeconds = tTimer[2]
    tMinutes = tTimer[1]
    tHours = tTimer[0]

    //errorMsg(tSeconds + ":" + tMinutes + ':' + tHours);

    if (tHours == hours && tMinutes == minutes && tSeconds == seconds || tSeconds == seconds + 1 )
      {
      myimbabutton.click();
      timedAttacktimer = false;
    }
  }
}
document.getElementById('arrivalTimeDiv').innerHTML = 'Arrival time:' + hours + ":" + minutes + ":" + seconds;  
referenceTime = new Date().getTime();
}
}

function hotKeys (event) {

if((event.altKey==1)&&((event.shiftKey==1)&&(event.ctrlKey==0)))  //If Shift & Alt keys are pressed but Ctrl isn't
        {
            if(event.keyCode==74)                   //If j key was pressed
            {
                alert("test");
            }
        }
    
//keynum = event.which
//keychar = String.fromCharCode(keynum)
//alert(keychar);
}