// ==UserScript==
// @name 	stnkvcmls Ikariam CR Converter
// @namespace 
// @description Converts combat reports for Ikariam browser game
// @include 	http://s666.ikariam.*/*
// @exclude 
// @exclude 
// @require	http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js
// @require	http://ikariamscriptresources.googlecode.com/svn/tags/Latest/IkariamLanguageDetection.js
// @require http://stnkvcmls.110mb.com/ikariam_formater/funkcije.js
// ==/UserScript==

const lang = getLang();

var language = { 
		en: {battleLand: "Battle", forCity: "for", battleSea: "Sea battle", nearCity: "near", from: " from ",
			attacker: "Attackers", attackers: "Attackers", defender: "Defender", defenders: "Defenders", winner: "Winner",
			winners: "Winners", loser: "Loser", losers: "Losers", loot: "Loot", wood: "Building matterial",
			wine: "Wine", marble: "Marble", glass: "Crystal glass", sulphur: "Sulphur", damageR: "Damage received", created: "Created with",
			show: "Show", cities: "Cities", align: "Align", left: "Left", center: "Center", right: "Right",
			damage: "Damage", generals: "Generals", resources: "Resources", preview: "Preview", bbcode: "BB Code",
			plaintext: "Plain text"},
		};

var unitsLang = {   
		en: {slinger: "Slinger", swordsman: "Swordsman", hoplite: "Hoplite", marksman: "Marksman", mortar: "Mortar",
			catapult: "Catapult", batteringRam: "Battering Ram", steamGiant: "Steam Giant", balloonBombardier: "Balloon-Bombardier", cook: "Cook",
			doctor: "Doctor", gyrocopter: "Gyrocopter", archer: "Archer", wall: "Wall", spearThrower: "Spear Thrower", barbarianAxeSwinger: "Barbarian-Axe Swinger",
			ramShip: "Ram-Ship", lightvessel: "Lightvessel", divingBoat: "Diving Boat", ballistaShip: "Ballista Ship",
			catapultShip: "Catapult Ship", mortarShip: "Mortar Ship", paddleWheelRam: "Paddle-Wheel-Ram"},
		};
		    
var unitsCost = {
		slinger: { wood: 20, luxuryGoods: 0},
		swordsman: {wood: 30, luxuryGoods: 30},
		hoplite: {wood: 40, luxuryGoods: 30},
		marksman: {wood: 50, luxuryGoods: 150},
		mortar: {wood: 300, luxuryGoods: 1250},
		catapult: {wood: 260, luxuryGoods: 300},
		batteringRam: {wood: 220, luxuryGoods: 0},
		steamGiant: {wood: 130, luxuryGoods: 180},
		balloonBombardier: {wood: 40, luxuryGoods: 250},
		cook: {wood: 50, luxuryGoods: 150},
		doctor: {wood: 350, luxuryGoods: 450},
		gyrocopter: {wood: 25, luxuryGoods: 100},
		archer: {wood: 30, luxuryGoods: 25},
		wall: {wood: 0, luxuryGoods: 0},
		spearThrower: {wood: 30, luxuryGoods: 0},
		barbarianAxeSwinger: {wood: 0, luxuryGoods: 0},
		ramShip: {wood: 220, luxuryGoods: 50},
		lightvessel: {wood: 80, luxuryGoods: 230},
		divingBoat: {wood: 160, luxuryGoods: 750},
		ballistaShip: {wood: 180, luxuryGoods: 160},
		catapultShip: {wood: 180, luxuryGoods: 140},
		mortarShip: {wood: 220, luxuryGoods: 900},
		paddleWheelRam: {wood: 300, luxuryGoods: 1500},
}

var textArea;

var reportElements = {
	type: null,
	for_near: null,
	place: null,
	time: null,
	attackers: [],
	defenders: [],
	attackersCities: createArray(100,15),
	defendersCities: createArray(100,15),
	units: {codes: [], leftAttacker: [], lostAttacker: [], leftDefender: [], lostDefender: []},
	winners: [],
	losers: [],
	loot: createArray(100,5)
};

var colors = {attacker: "#182BE8", defender: "#CF15E4", attackerUnits: "#23AAAB",
				defenderUnits: "#DF24D0", deadUnits: "#FF0000", otherNumbers: "#D0A025",
				text: "#342626", title: "#1D6E22"};
var cities = false;
var loot = false;
var align = "Center";
var damage = "Generals";

var aIndex = 1;
var dIndex = 1;
var aCityIndex = createArray(100);
var dCityIndex = createArray(100);
var unitIndex = 0;

function createArray(length) {
    var a = new Array(length || 0);

    if (arguments.length > 1) {
        var args = Array.prototype.slice.call(arguments, 1);
        for (var i = 0; i < length; i++) {
            a[i] = createArray.apply(this, args);
        }
    }

    return a;
}


function getElementsByClassName(oElm, strTagName, strClassName){
	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 addCss(cssCode) {
var styleElement = document.createElement("style");
  styleElement.type = "text/css";
  if (styleElement.styleSheet) {
    styleElement.styleSheet.cssText = cssCode;
  } else {
    styleElement.appendChild(document.createTextNode(cssCode));
  }
  document.getElementsByTagName("head")[0].appendChild(styleElement);
}

function createTextArea(){

	var tmp = document.getElementById("troopsReport");
	if( tmp != null ){
		tmp = document.location.href.indexOf("combatId");
		if ( tmp != -1 ){

			addCss('#top {	overflow: hidden;	height: 120px; width: 508px; }' +
				'#top-naslov{	overflow: hidden;	width: 124px;	padding: 4px 10px;	background-color: #FEDC9C;	font-weight: bold;	color: #542C32;}' +
				'#top-frame{	overflow: hidden;	padding: 4px 10px;	border: solid 2px #FEDC9C;	width: 120px;	height: 50px;}' +
				'#report {	width: 558px;	height: 150px;	background-color: #FDF7DD;	margin-top: 0px;	margin-right: auto;	margin-bottom: 0px;	margin-left: auto;' +
					'border-color: #FEDC9C;	border-style: solid;	border-top-style: none;	border-left-width: 3px;	border-right-width: 3px;	border-bottom-width: 3px;	overflow: hidden;}'	+
				'#CRPreview {	background-color:#FDF7DD;	height: 14px;	width: 50px;	float: left;	padding: 3px;	text-align: center;	border-right-width: 3px;	border-left-width: 3px;' +
					'border-top-style: none;	border-right-style: solid;	border-bottom-style: none;	border-left-style: solid;	border-top-color: #FEDC9C;	border-right-color: #FEDC9C;' +
					'border-bottom-color: #FEDC9C;	border-left-color: #FEDC9C;	cursor: hand;}' +
				'#BBCode {	background-color:#FEDC9C;	height: 14px;	width: 50px;	float: left;	padding: 3px;	text-align: center;	border-right-width: 3px;	border-top-style: none;' +
					'border-right-style: solid;	border-bottom-style: none;	border-left-style: none;	border-top-color: #FEDC9C;	border-right-color: #FEDC9C;	border-bottom-color: #FEDC9C;' +
					'border-left-color: #FEDC9C;	cursor: hand;}	' +
				'#plainText {	background-color:#FEDC9C;	height: 14px;	width: 50px;	float: left;	padding: 3px;	text-align: center;	border-right-width: 3px;	border-top-style: none;' +
					'border-right-style: solid;	border-bottom-style: none;	border-left-style: none;	border-top-color: #FEDC9C;	border-right-color: #FEDC9C;	border-bottom-color: #FEDC9C;' +
					'border-left-color: #FEDC9C;	cursor: hand;}	' +					
				'#for-buttons {	width: 558px;	height: 20px;	background-color: #FDF7DD;	margin: 0 auto; 	border: solid 3px #FEDC9C;	border-bottom: 0px;}' +
				'#for-buttons-left{	height: 20px;	width: 10px;	background-color: #FEDC9C;	float: left;}' +
				'#for-buttons-right{	height: 20px;	width: 368px;	background-color: #FEDC9C;	float: left;}' +
				'#text3{	border: none; 	width: 100%; 	height: 100%;	overflow: auto;	background-color:#FDF7DD;}'
				
				);		
		
			var parent = getElementsByClassName(document,"p","link");
			var reportDiv = document.createElement('div');
			reportDiv.setAttribute('id',"reportDiv");
			//reportDiv.setAttribute('align','center');
			reportDiv.innerHTML = 
				'<br>' +
				'<div align="center">' +
					"<p ><br>stnkvcmls' Ikariam CR Converter<br>Greasemonkey edition</p><br>" +
					'<div id="top" align="left">' +
						'<div style="float: left; margin: 5px 10px 5px 18px;">' +
							'<div id="top-naslov">' +
								language[lang].show +
							'</div>' +
							'<div id="top-frame">' +
								'<input type="checkbox" id="checkbox1" name="checkbox1" /> ' + language[lang].cities + '<br/>' +
								'<input type="checkbox" id="checkbox2" name="checkbox2" />  ' + language[lang].loot + '<br/>' +
							'</div>' +
						'</div>' +
						'<div style="float: left; margin: 5px 10px 5px 10px;">' +
							'<div id="top-naslov">' +
								language[lang].align +
							'</div>	' +
							'<div id="top-frame">		' +	
								'<input type="radio" id="radio1" name="radio1" value="left"/>  ' + language[lang].left + '<br/>' +
								'<input type="radio" id="radio1" name="radio1" value="center" checked="checked" />  ' + language[lang].center + '<br/>' +
								'<input type="radio" id="radio1" name="radio1" value="right"/>  ' + language[lang].right +
							'</div>' +
						'</div>' +
						'<div style="float: left; margin: 5px 18px 5px 10px;">' +
							'<div id="top-naslov">' +
								language[lang].damage +
							'</div>	' +
							'<div id="top-frame">			' +
								'<input type="radio" id="radio2" name="radio2" value="Generals" checked="checked" />  ' + language[lang].generals + '<br/>' +
								'<input type="radio" id="radio2" name="radio2" value="Resources" />  ' + language[lang].resources + '<br/>' +
								'</div>' +
						'</div>' +		
					'</div>' +
				'</div>' +
				'<div id="for-buttons">' +
					'<div id="for-buttons-left"></div>' +
					'<div id=CRPreview>' + language[lang].preview + '</div>' +
					'<div id=BBCode>' + language[lang].bbcode + '</div>' +
					'<div id=plainText>' + language[lang].plaintext + '</div>' +
					'<div id="for-buttons-right"></div>' +
					'<div style="display: none" id=sel>' + language[lang].preview + '</div>' +
				'</div>	' +
				'<div id="report">' +
					'<div id="previewDiv" style="overflow: auto; height: 100%; width: 100%;">' +
						'<div id="text3" name="text3"></div>' +
					'</div>' +
					'<textarea id="stnkvcmlsTextArea" readonly style="border: none; width: 100%; height: 100%; overflow: auto; background-color:#FDF7DD;" name="text2"  id="text2" value=""></textarea>' +
				'</div>';
				 //"<textarea id='stnkvcmlsTextArea' rows='10' cols='75' >" + lang + "\n\n" + language + "(" + tmp +")"+ "</textarea>";
				 
			if( parent != null) parent[0].appendChild(reportDiv);
			textArea = document.getElementById('stnkvcmlsTextArea');
			if( textArea == null ) alert('aaaa');
			
			
			var script = document.createElement('script');
			script.setAttribute('src','http://stnkvcmls.110mb.com/ikariam_formater/funkcije.js');
			document.body.appendChild(script); 
			
			var crPreview = document.getElementById("CRPreview");
			$("div#CRPreview").click(function (){
				onMouseClick('CRPreview',['BBCode','plainText'],'previewDiv','stnkvcmlsTextArea');
				convertReport();
			});			
			crPreview.setAttribute('onmouseover',"onMouseOver('CRPreview')");
			crPreview.setAttribute('onmouseout',"onMouseOut('CRPreview')");
			
			var bbCode = document.getElementById("BBCode");
			$("div#BBCode").click(function (){
				onMouseClick('BBCode',['CRPreview','plainText'],'stnkvcmlsTextArea','previewDiv');
				convertReport();
			});
			bbCode.setAttribute('onmouseover',"onMouseOver('BBCode')");
			bbCode.setAttribute('onmouseout',"onMouseOut('BBCode')");
			
			var plainText = document.getElementById("plainText");
			$("div#plainText").click(function (){
				onMouseClick('plainText',['BBCode','CRPreview'],'stnkvcmlsTextArea','previewDiv');
				convertReport();
			});			
			plainText.setAttribute('onmouseover',"onMouseOver('plainText')");
			plainText.setAttribute('onmouseout',"onMouseOut('plainText')");	
			
			$("input#checkbox1").click(function(){
									if(cities == false) cities = true;
									else cities = false;
									convertReport();
									});
			$("input#checkbox2").click(function(){
									if(loot == false) loot = true;
									else loot = false;
									convertReport();
									});		
			$("input#radio1").click(function(){
									var input = document.getElementsByTagName("input");

									for (var i=0; i < input.length; i++)
										if (input[i].id == "radio1" && input[i].checked) align = input[i].value;		
									convertReport();
									});		
			$("input#radio2").click(function(){
									var input = document.getElementsByTagName("input");

									for (var i=0; i < input.length; i++)
										if (input[i].id == "radio2" && input[i].checked) damage = input[i].value;		
									convertReport();
									});		
			
			parseReport();
			convertReport();
		}
	}
}

function parseReport(){

	textArea.value = "";
	var attackersReport = 0;
	var tmp = getElementsByClassName(document,"h3","header")[2];	
	var tmp2;
	var i, j, k;
	/* battle type */
	tmp2 = tmp.childNodes[0].nodeValue;
	if( tmp2.indexOf(language[lang].battleLand) != -1) reportElements.type = language[lang].battleLand;
	else reportElements.type = language[lang].battleSea;
	
	/* for_near / place */
	if( (i = tmp2.indexOf(language[lang].forCity)) != -1) reportElements.for_near = language[lang].forCity;
	else reportElements.for_near = language[lang].nearCity;
	reportElements.place = tmp2.substring( i + reportElements.for_near.length + 1, tmp2.length - 1);
	
	/* time */
	tmp2 = tmp.childNodes[1].lastChild.nodeValue;
	reportElements.time = tmp2[0] + " " + tmp2.substring( 1, tmp2.length - 1) + " " + tmp2[tmp2.length-1];

	/* attacker */
	tmp = getElementsByClassName(document,"div","attacker textgreen");
	attackersReport = 1;
	if( tmp[0] == null ){ tmp = getElementsByClassName(document,"div","attacker"); attackersReport = 0; }
	tmp = tmp[0].childNodes[3].childNodes;

	for( i = 0, k = 0; i < tmp.length; i++ ){
		tmp2 = tmp[i].nodeName;
		if( tmp2 == "A" ){ reportElements.attackers[k] = tmp[i].childNodes[0].nodeValue; i++; k++; }
		else if( tmp2 == "#text"){ 
			if( tmp[i].nodeValue != ", " ){
				reportElements.attackers[k] = tmp[i].nodeValue.substring(0,tmp[i].nodeValue.indexOf(language[lang].from));
				k++; 
			}
		}
		else if( tmp2 == "B"){
			aCityIndex[k-1] = 0;
			for( j = 0; j < tmp[i].childNodes.length; j++){
				tmp2 = tmp[i].childNodes[j].nodeName;
				if( tmp2 == "A" ){
					reportElements.attackersCities[k-1][j] = tmp[i].childNodes[j].childNodes[0].nodeValue;
					aCityIndex[k-1] ++;
				}
				else if( tmp2 == "#text"){
					reportElements.attackersCities[k-1][j] = tmp[i].childNodes[j].nodeValue;
					aCityIndex[k-1] ++;
				}
			}
		}
	}
	aIndex = k;

	/* test attacker */
	var tmp3 = "";
	var t;
	for( i = 0; i < k; i++){
		tmp3 += reportElements.attackers[i] + language[lang].from;
		for( t = 0; t < j; t++){
			if(reportElements.attackersCities[i][t] != null) tmp3 += reportElements.attackersCities[i][t];
			if( t < j-1 ) tmp3 += ", ";
		}
		tmp3 += "\n";
	}	
	tmp3 += "\n";
	
	/* defender */
	tmp = getElementsByClassName(document,"div","defender textgreen");
	if( tmp[0] == null ) tmp = getElementsByClassName(document,"div","defender");
	tmp = tmp[0].childNodes[3].childNodes;
	
	for( i = 0, k = 0; i < tmp.length; i++ ){
		tmp2 = tmp[i].nodeName;
		if( tmp2 == "A" ){ reportElements.defenders[k] = tmp[i].childNodes[0].nodeValue; i++; k++; }
		else if( tmp2 == "#text"){ 
			if( tmp[i].nodeValue != ", " ){
				reportElements.defenders[k] = tmp[i].nodeValue.substring(0,tmp[i].nodeValue.indexOf(language[lang].from));
				k++; 
			}
		}
		else if( tmp2 == "B"){
			dCityIndex[k-1] = 0;
			for( j = 0; j < tmp[i].childNodes.length; j++){
				tmp2 = tmp[i].childNodes[j].nodeName;
				if( tmp2 == "A" ){
					reportElements.defendersCities[k-1][j] = tmp[i].childNodes[j].childNodes[0].nodeValue;
					dCityIndex[k-1] ++;
				}
				else if( tmp2 == "#text"){
					reportElements.defendersCities[k-1][j] = tmp[i].childNodes[j].nodeValue;
					dCityIndex[k-1] ++;
				}
			}
		}
	}	
	dIndex = k;
	
	/* test defender */
	for( i = 0; i < k; i++){
		tmp3 += reportElements.defenders[i] + language[lang].from;
		for( t = 0; t < j; t++){
			if(reportElements.defendersCities[i][t] != null) tmp3 += reportElements.defendersCities[i][t];
			if( t < j-1 ) tmp3 += ", ";
		}
		tmp3 += "\n";
	}	
	tmp3 += "\n";
	
	
	/* units */
	var table = getElementsByClassName(document,"table","overview");
	var thead = table[0].childNodes[1];

	/* codes */
	var unitsCodes;
	if( attackersReport == 1 ) unitCodes = getElementsByClassName(document,"th","col1 textgreen");
	else unitCodes = getElementsByClassName(document,"th","col1 textred");
	
	k = 0;
	for( i = 0; i < unitCodes.length; i++ ){
		var next = unitCodes[i].nextSibling;
		while( next != null ){
			if( next.nodeName != "#text" ){
				if( next.childNodes.length != 0 ){
					reportElements.units.codes[k] = next.childNodes[0].className.substring(next.childNodes[0].className.indexOf("s") + 1);
					k++;
				}
			}
			next = next.nextSibling;
		}
	}
	unitIndex = k;
	
	/* attacker / defender */
	var units1 = getElementsByClassName(document,"tr","textgreen");
	var units2 = getElementsByClassName(document,"tr","textred");
	var uNum = 0;
	
	textArea.value = "";
	k = 0;
	for( i = 0; i < units1.length; i++ ){
		var tr = units1[i];
		textArea.value += "\n";
		if( tr.childNodes[1].childNodes[0].nodeValue == "Allied Troops") k = uNum;		
		
		uNum = k;
		for( j = 3; j < tr.childNodes.length; j+= 2){		
			var td = tr.childNodes[j];
			var left = 0;
			var lost = 0;
			if(td.childNodes.length != 0 ){
				if( reportElements.units.leftAttacker[k] == null ) reportElements.units.leftAttacker[k] = 0;
				if( reportElements.units.lostAttacker[k] == null ) reportElements.units.lostAttacker[k] = 0;
				if( reportElements.units.leftDefender[k] == null ) reportElements.units.leftDefender[k] = 0;
				if( reportElements.units.lostDefender[k] == null ) reportElements.units.lostDefender[k] = 0;			
				if(td.childNodes.length == 1) tmp2 = td.childNodes[0].nodeValue.replace( /\s/g, "" );
				else tmp2 = td.childNodes[1].childNodes[0].nodeValue.replace( /\s/g, "" );
				if( tmp2 != "-" ){
					left = parseFloat(tmp2.substring(0,tmp2.indexOf("(")));
					lost = parseFloat(tmp2.substring(tmp2.indexOf("-")+1,tmp2.indexOf(")")));
					
					
				}
				textArea.value += i + "  " + reportElements.units.codes[k] + ": " + left + "(-" + lost + ")\n";
				if( attackersReport == 1 ){
					reportElements.units.leftAttacker[k] += left;
					reportElements.units.lostAttacker[k] += lost;
				}
				else{
					reportElements.units.leftDefender[k] += left;
					reportElements.units.lostDefender[k] += lost;
				}
				k++;
			}
		}
	}

	k = 0;
	for( i = 0; i < units2.length; i++ ){
		var tr = units2[i];
		textArea.value += "\n";
		if( tr.childNodes[1].childNodes[0].nodeValue == "Allied Troops") k = uNum;
		
		uNum = k;
		for( j = 3; j < tr.childNodes.length; j+= 2){	
			var td = tr.childNodes[j];
			var left = 0;
			var lost = 0;
			if(td.childNodes.length != 0 ){
				if( reportElements.units.leftAttacker[k] == null ) reportElements.units.leftAttacker[k] = 0;
				if( reportElements.units.lostAttacker[k] == null ) reportElements.units.lostAttacker[k] = 0;
				if( reportElements.units.leftDefender[k] == null ) reportElements.units.leftDefender[k] = 0;
				if( reportElements.units.lostDefender[k] == null ) reportElements.units.lostDefender[k] = 0;				
				if(td.childNodes.length == 1) tmp2 = td.childNodes[0].nodeValue.replace( /\s/g, "" );
				else tmp2 = td.childNodes[1].childNodes[0].nodeValue.replace( /\s/g, "" );
				if( tmp2 != "-" ){
					left = parseFloat(tmp2.substring(0,tmp2.indexOf("(")));
					lost = parseFloat(tmp2.substring(tmp2.indexOf("-")+1,tmp2.indexOf(")")));
				}
				textArea.value += i + "  " + reportElements.units.codes[k] + ": " + left + "(-" + lost + ")\n";
				if( attackersReport == 0 ){
					reportElements.units.leftAttacker[k] += left;
					reportElements.units.lostAttacker[k] += lost;
				}
				else{
					reportElements.units.leftDefender[k] += left;
					reportElements.units.lostDefender[k] += lost;
				}
				k++;
			}
		}
	}	
	
	/* test for units */
	for( i = 0; i < reportElements.units.codes.length; i++ ){
		tmp3 += reportElements.units.codes[i] + " ";
	}
	tmp3 += "\n";
	
	for( i = 0; i < reportElements.units.leftAttacker.length; i++ ){
		tmp3 += reportElements.units.leftAttacker[i] + " ";
	}
	tmp3 += "\n";

	for( i = 0; i < reportElements.units.lostAttacker.length; i++ ){
		tmp3 += reportElements.units.lostAttacker[i] + " ";
	}
	tmp3 += "\n";

	for( i = 0; i < reportElements.units.leftDefender.length; i++ ){
		tmp3 += reportElements.units.leftDefender[i] + " ";
	}
	tmp3 += "\n";

	for( i = 0; i < reportElements.units.lostDefender.length; i++ ){
		tmp3 += reportElements.units.lostDefender[i] + " ";
	}
	tmp3 += "\n\n";	
	
	
	
	
	/* winners */
	tmp = getElementsByClassName(document,"div","winners");
	if( tmp[0] != null ){
		tmp2 = tmp[0].childNodes[2].nodeValue;
		reportElements.winners = tmp2.split(", ");
	}
	
	/* losers */
	tmp = getElementsByClassName(document,"div","losers");
	if( tmp[0] != null ){
		tmp2 = tmp[0].childNodes[2].nodeValue;
		reportElements.losers = tmp2.split(", ");
	}	
	
	/* test for winners / losers */
	for( i = 0; i < reportElements.winners.length; i++) tmp3 += reportElements.winners[i] + "\n"; tmp3 += "\n";
	for( i = 0; i < reportElements.losers.length; i++) tmp3 += reportElements.losers[i] + "\n"; tmp3 += "\n";
	
	
	/* loot */
	
	
	
	textArea.value = reportElements.type + " " + reportElements.for_near + " " + reportElements.place + " " + reportElements.time + "\n\n" + tmp3;
	
}

function convertReport(){

	var line = "";
	var i;
	var  font = "[font='Courier New, Courier, mono']";
	
	for(i = 0; i < 50; i++) line += "-";

	/* battle for - city */
	var textBattleFor = "[size=10][color=" + colors.text + "]" + line + "[/color][/size]" + "\n";
	if(cities == true) textBattleFor += "[b][size=12][color=" + colors.title + "]" + reportElements.type + " " + reportElements.for_near + " " + reportElements.place + "[/color][/size][/b]";
	else textBattleFor += "[b][size=12][color=" + colors.title + "]" + reportElements.type + "[/color][/size][/b]";
	textBattleFor += "\n";
	
	/* battle for - time/date */
	textBattleFor += "[b][size=12][color=" + colors.otherNumbers + "]" + reportElements.time + "[/color][/size][/b]";
	textBattleFor += "\n" + "[size=10][color=" + colors.text + "]" + line + "[/color][/size]" + "\n";	

	/* attacker */
	var counter = 0;
	var attacker;
	if(aIndex > 1) attacker = language[lang].attackers;
	else attacker = language[lang].attacker;
	var textAttacker = "[size=10][color=" + colors.title + "]" + attacker + ":[/color]" + "\n";
	for(i = 0; i < aIndex; i++){
		counter += reportElements.attackers[i].length;
		if(counter > 40) { textAttacker += "\n"; counter = 0; }
		textAttacker += "[color=" + colors.attacker + "]" +  reportElements.attackers[i];
		if(cities == true){
			counter += language[lang].from.length;
			if(counter > 40) { textAttacker += "\n"; counter = 0; }
			textAttacker += language[lang].from;
			for(j = 0; j < aCityIndex[i]; j++){
				counter += reportElements.attackersCities[i][j].length;
				if(counter > 40) { textAttacker += "\n"; counter = 0; }
				textAttacker += reportElements.attackersCities[i][j];
				if(j != aCityIndex[i]-1) textAttacker += ", ";
			}
		}
		if(i < aIndex-1) { textAttacker += "; "; counter += 2; }
		textAttacker += "[/color]";
	}
	textAttacker += "\n[color=" + colors.text + "]" + line + "[/color][/size]" + "\n";	
	
	/* defender */
	counter = 0;
	var defender;
	if(dIndex > 1) defender = language[lang].defenders;
	else defender = language[lang].defender;
	var textDefender = "[size=10][color=" + colors.title + "]" + defender + ":[/color]" + "\n";
	for(i = 0; i < dIndex; i++){
		counter += reportElements.defenders[i].length;
		if(counter > 40) { textDefender += "\n"; counter = 0; }
		textDefender += "[color=" + colors.defender + "]" +  reportElements.defenders[i];
		if(cities == true){
			counter += language[lang].from.length;
			if(counter > 40) { textDefender += "\n"; counter = 0; }
			textDefender += language[lang].from;
			for(j = 0; j < dCityIndex[i]; j++){
				counter += reportElements.defendersCities[i][j].length;
				if(counter > 40) { textDefender += "\n"; counter = 0; }
				textDefender += reportElements.defendersCities[i][j];
				if(j != dCityIndex[i]-1) textDefender += ", ";
			}
		}
		if(i < dIndex-1) { textDefender += "; "; counter += 2; }
		textDefender += "[/color]";
	}
	textDefender += "\n[color=" + colors.text + "]" + line + "[/color][/size]" + "\n";	
	
	
	/* attacker.........defender */
	var dots = "";
	while(50 - attacker.length - dots.length > defender.length) dots += ".";
	var textUnits = "[size=10][color=" + colors.attacker + "]" + attacker + "[/color]" +
				"[color=#F6EBBD]" + dots +"[/color]" + 
				"[color=" + colors.defender + "]" + defender + "[/color]" + "\n";	
	
	/* units */
	var units = createArray(2,44);
	var textUnitsTmp = createArray(2,44);
	var unitsTmp = "";

	for(i = 0; i < unitIndex; i++){
		units[0][i] = reportElements.units.leftAttacker[i] + " ( -" + reportElements.units.lostAttacker[i] + " )";
		textUnitsTmp[0][i] = "[color=" + colors.attackerUnits + "]" + reportElements.units.leftAttacker[i] + "[/color][color=" + colors.deadUnits + "] ( -"  + reportElements.units.lostAttacker[i] + " )[/color]";
		if(units[0][i] == "0 ( -0 )"){ units[0][i] = ""; textUnitsTmp[0][i] = "";}
		units[1][i] = reportElements.units.leftDefender[i] + " ( -" + reportElements.units.lostDefender[i] + " )";
		textUnitsTmp[1][i] = "[color=" + colors.defenderUnits + "]" + reportElements.units.leftDefender[i] + "[/color][color=" + colors.deadUnits + "] ( -"  + reportElements.units.lostDefender[i] + " )[/color]";
		if(units[1][i] == "0 ( -0 )"){ units[1][i] = ""; textUnitsTmp[1][i] = "";}
	}

	for(i = 0; i < unitIndex; i++){
		unitsTmp = unitsLang[lang][codeToName(parseInt(reportElements.units.codes[i]))];
		var l = unitsTmp.length;
		dots = "";
		while(25-l/2-units[0][i].length - dots.length > 0) dots += ".";
		unitsTmp = units[0][i] + dots + unitsTmp;
		textUnits += textUnitsTmp[0][i] + "[color=#F6EBBD]" + dots +"[/color][color=" + colors.text + "]" + unitsLang[lang][codeToName(parseInt(reportElements.units.codes[i]))] + "[/color]";

		dots = "";
		while(unitsTmp.length + units[1][i].length + dots.length < 50) dots += ".";
		unitsTmp += dots + units[1][i];
		textUnits += "[color=#F6EBBD]" + dots +"[/color]" + textUnitsTmp[1][i] + "\n";

	}
	textUnits += "[color=" + colors.text + "]" + line + "[/color][/size]" + "\n";


	var winColor;
	if( findInArray(reportElements.attackers, reportElements.winners[0]) == 1 ) winColor = colors.attacker;
	else winColor = colors.defender;
	
	counter = 0;
	var textWinner = "[size=10][color=" + colors.title + "]";
	if( reportElements.winners.length > 1 ) textWinner +=  language[lang].winners;
	else textWinner += language[lang].winner;
	textWinner += "[/color][color=" + winColor + "]\n";
	for(i = 0; i < reportElements.winners.length; i++){
		counter += reportElements.winners[i].length;
		if( counter > 40 ) { textWinner += "\n"; counter = 0; }
		textWinner += reportElements.winners[i];
		if(i < reportElements.winners.length-1) textWinner += ", ";
	}
	textWinner += "[/color]\n" + "[color=" + colors.text + "]" + line + "[/color][/size]" + "\n";
	
	

	/* calculate damage */
	var damageAttacker = 0;
	var damageDefender = 0;
	var tmpInt = "";
	var tmpInt2 = 0;
	for(i = 0; i < 22; i++){
		if(reportElements.units.codes[i] != null){
			tmpInt = codeToName(parseInt(reportElements.units.codes[i]));
			
			tmpInt2 = (unitsCost[tmpInt].wood + unitsCost[tmpInt].luxuryGoods)*reportElements.units.lostAttacker[i];
			damageAttacker += tmpInt2;
		
			tmpInt2 = (unitsCost[tmpInt].wood + unitsCost[tmpInt].luxuryGoods)*reportElements.units.lostDefender[i];
			damageDefender += tmpInt2;
		}
	}
	if(damage == "Generals" ){
		damageAttacker /= 50;
		damageDefender /= 50;
	}
	damageAttacker += '';
	damageDefender += '';

	/* damage */
	var textDamage = "[size=10][color=" + colors.title + "]" + language[lang].damageR + "[/color]\n";
	var tmp = "";
	if(aIndex > 1) tmp = language[lang].attackers;
	else tmp = language[lang].attacker;
	dots = "";
	while(50 - tmp.length - dots.length > damageAttacker.length) dots += ".";
	textDamage += "[color=" + colors.text + "]" + tmp + "[/color][color=#F6EBBD]" + dots +
				"[/color][color=" + colors.otherNumbers + "]" + damageAttacker + "[/color]\n";
	if(dIndex > 1) tmp = language[lang].defenders;
	else tmp = language[lang].defender;
	dots = "";
	while(50 - tmp.length - dots.length > damageDefender.length) dots += ".";
	textDamage += "[color=" + colors.text + "]" + tmp + "[/color][color=#F6EBBD]" + dots +
				"[/color][color=" + colors.otherNumbers + "]" + damageDefender + "[/color]\n";

	textDamage += "[color=" + colors.text + "]" + line + "[/color][/size]" + "\n";











	

	var bbCodeText = "";
	var plainTextText = "";
	
	bbCodeText = "[align=" + align + "]" + font +
		textBattleFor +
		textAttacker +
		textDefender +
		textUnits +
		//textLoot +
		textWinner +
		textDamage +
		"\n\n\n[b][i][color=#999999]" + language[lang].created + " stnkvcmls' Ikariam CR Converter" + "[/i][/b]" +
		"[/font][/align]";
	
	plainTextText = bbCodeText;
	textArea.value = bbCodeText;
	
	do{
		i = plainTextText.indexOf("[");
		if(i != -1){
			j = plainTextText.indexOf("]");
			plainTextText = plainTextText.substring(0, i) + plainTextText.substring(j+1);
		}
	}while(i != -1);
	
	var sel = document.getElementById('sel');
	//textArea.value = sel.innerHTML;
	if( sel.innerHTML == "BB Code" ) textArea.value = bbCodeText;
	else if( sel.innerHTML == "Plain text") textArea.value = plainTextText;
	else if( sel.innerHTML == "Preview" ) document.getElementById("text3").innerHTML = bbcode2html(bbCodeText);

	
	
	
}

function codeToName(code){
	switch(code){
		case 301: return "slinger";
		case 302: return "swordsman";
		case 303: return "hoplite";
		case 304: return "marksman";
		case 305: return "mortar";
		case 306: return "catapult";
		case 307: return "batteringRam";
		case 308: return "steamGiant";
		case 309: return "balloonBombardier";
		case 310: return "cook";
		case 311: return "doctor";
		case 312: return "gyrocopter";
		case 313: return "archer";
		case 314: return "wall";
		case 315: return "spearThrower";
		case 316: return "barbarianAxeSwinger";
		case 210: return "ramShip";
		case 211: return "lightvessel";
		case 212: return "divingBoat";
		case 213: return "ballistaShip";
		case 214: return "catapultShip";
		case 215: return "mortarShip";
		case 216: return "paddleWheelRam";
	}
	return 0;
}

function findInArray(array, item){
	for( var i = 0; i < array.length; i++){
		if( array[i] == item.replace(/^\s+/, '').replace(/\s+$/, '') ) return 1;
	}
	return 0;
}

function bbcode2html(text){
	var i;
	var j;
	
	//text = text.replace(/\r\n|\r|\n/g,'');
	while((i = text.indexOf("\n")) != -1){
		/*if(text.substring(i-2,i) != "e]" && text.substring(i-2,i) != "b]")*/ text = text.replace("\n",'<br/>');
		/*else{
			if(text.substring(i,i+1) == "\n") text = text.replace("\n",'<br/>');
			else text = text.replace("\n",'');
		}*/
	}
	text = text.replace("']","'>");
	
	text = text.replace("[font='","<span style='font-family: ");
	text = text.replace("[/font]","</span>");
	
	
	while(text.indexOf("[size=") != -1){
		text = text.replace("[size=","<span style='font-size:");
		text = text.replace("[/size]","</span>");
	}
	
	while(text.indexOf("[color=") != -1){
		text = text.replace("[color=","<span style='color:");
		text = text.replace("[/color]","</span>");
	}
	
	
	text = text.replace("[align=","<div style='text-align: ");
	text = text.replace("[/align]","</div>");
	
	while(text.indexOf("[b]") != -1) text = text.replace("[b]","<b>");
	while(text.indexOf("[/b]") != -1) text = text.replace("[/b]","</b>");
	while(text.indexOf("[i]") != -1) text = text.replace("[i]","<i>");
	while(text.indexOf("[/i]") != -1) text = text.replace("[/i]","</i>");
	
	text = text.replace("[url=","<a href=");
	text = text.replace("[/url]","</a>");

	while(text.indexOf("]") != -1)
		text = text.replace("]","'>");	
	
	return text;
}


createTextArea();
