IkariamWebConverter = {
	lang:null,
	report:null,
	translations:null,
	version:null,
	init:function(settings) {
		IkariamWebConverter.report = {
			info:   { id:null, type:null, place:null, time:null, attackers:null, defenders:null, wall:null },
			battle: { attackers:{}, defenders:{}, victors:null, results:null, attacking_totals:[0,0,0], defending_totals:[0,0,0], wall:'', walltext:'' },
			loot:   { total:0, resource:{} }
		};
		IkariamCRFormatter.init();
		IkariamCRFormatter.format = $('#ikcrcFormat').attr('value'); 
		IkariamWebConverter.Settings.init(settings);
		IkariamWebConverter.updateLanguage();
	},
	createReport:function() { 
		// Get the results 
		var events = true;
		var results = '';
		var ConverterEngine = IkariamCRCEngine.Engines[IkariamWebConverter.version];
		if (ConverterEngine != null) {
			results = ConverterEngine.BuildReport(
				IkariamCRFormatter,
				IkariamWebConverter.report,
				IkariamWebConverter.translations,false).replace(/&lt;/g, '<').replace(/&gt;/g, '>',
				events);
		}

		// Spit out the results 
		document.getElementById('ikcrcWebSource').value = IkariamCRFormatter.ReplaceColors(results);
	},
	saveSource:function() {
		// Add the report html to this page 
		document.getElementById('ikcrcWebHidden').innerHTML = document.getElementById('ikcrcWebSource').value;

		// Update Ikariam Version
		IkariamWebConverter.version = $("#ikcrcWebHidden li.version span").text().substr(0, 7); 
		IkariamWebConverter.version = IkariamWebConverter.version != "v.0.3.1" ? "v.0.3.2" : IkariamWebConverter.version;

		// Initialize report
		IkariamWebConverter.report = {
			info:   { id:null, type:null, place:null, time:null, attackers:null, defenders:null, wall:null },
			battle: { attackers:{}, defenders:{}, victors:null, results:null, attacking_totals:[0,0,0], defending_totals:[0,0,0], wall:'', walltext:'' },
			loot:   { total:0, resource:{} }
		};

		// Parse the report 
		var ConverterEngine = IkariamCRCEngine.Engines[IkariamWebConverter.version];
		if (ConverterEngine != null) { 
			ConverterEngine.ParseReport(IkariamWebConverter.report);
		}

		// Remove source from page, no point in keeping it around
		document.getElementById('ikcrcWebHidden').innerHTML = '';
	},
	updateFormat:function(format) {
		IkariamCRFormatter.format = format;
		IkariamWebConverter.createReport();
	},
	updateLanguage:function() {
		// Update the language code, if not already set
		IkariamWebConverter.lang = IkariamLanguageDetection.serverToLanguageMap[$('#ikcrcServer').attr('value')]; 

		// Get the matching language 
		var language = IkariamLanguageDetection.getLanguage(IkariamWebConverter.lang); 

		// Update the translation(s) object.
		IkariamWebConverter.translations = {
			"highscore"	: language_highscore[language],
			"report"	: language_crconverter[IkariamWebConverter.lang],
			"resources"	: language_resources[language],
			"ships"		: language_ships[IkariamWebConverter.lang],
			"units"		: language_units[IkariamWebConverter.lang]
		}; 
	},
	Settings: {
		init:function(settings) {
			settings = settings.split(','); 
			for (var i = 0; i < settings.length; i++) {
				var setting = settings[i].split('.');
				if (setting != null) {
					switch (setting[0]) {
					case 'colors': 
						if (setting.length != 2) continue;
						var col = setting[1].split('=')[0]; var val = setting[1].split('=')[1]; 
						IkariamCRFormatter.Colors[col] = val; 
					break;
					case 'format':
						if (setting.length != 2) continue;
						var format = setting[1].split('=')[1];
						IkariamWebConverter.Settings.Tabs.Tags.changeFormat(format);
					break;
					case 'formatter':
						if (setting.length != 3) continue;
						var format = setting[1]; var tag = setting[2].split('=')[0]; var val = setting[2].split('=')[1];
						IkariamCRFormatter.Formats[format][tag] = val;
					break;
					default:
					break;
					}
				}				
			}
		},
		show:function() {
			var tabs = ['Color', 'Tags'];
			ScriptDialog.init("Settings", "300px", tabs);
			ScriptDialog.show(IkariamWebConverter.Settings);
		},
		onshown:function() {
			// Add in each tab
			for (var t in IkariamWebConverter.Settings.Tabs) {
				IkariamWebConverter.Settings.Tabs[t].add();
			}
			// Add the quicklink, used to let users save custom formatting options
			IkariamWebConverter.Settings.Quicklink.add();
			IkariamWebConverter.Settings.Quicklink.update();
		},
		Quicklink: {
			add:function()
			{
				var qhtml = new Array();
				qhtml.push('<form id="ikWebSettingsQuicklink" action="' + document.location + '" method="get" style="display:none">');
				qhtml.push('</form>');
				$('#ScriptDialogFooter').append(qhtml.join(''));
			},
			update:function()
			{
				var settings = '';
				for (var c in IkariamCRFormatter.Colors) {
					if (IkariamCRFormatter.Colors[c] != IkariamCRFormatter.Defaults.Colors[c]) {
						settings += 'colors.' + c + '=' + IkariamCRFormatter.Colors[c] + ',';
					}
				}
				if (IkariamCRFormatter.format != 'bbcode') {
					settings += 'format.current=' + IkariamCRFormatter.format + ',';
				}
				for (var f in IkariamCRFormatter.Formats) {
					for (var t in IkariamCRFormatter.Formats[f]) {
						if (IkariamCRFormatter.Formats[f][t] != IkariamCRFormatter.Defaults.Formats[f][t]) {
							settings += 'formatter.' + f + '.' + t + '=' + IkariamCRFormatter.Formats[f][t] + ',';
						}
					}
				}
				
				postItems = new Array();
				if (IkariamWebConverter.lang != 'en')
					postItems.push('<input type="text" name="lang" value="' + IkariamWebConverter.lang + '"style="display:none;" />');
				if (settings != '')
					postItems.push('<input type="text" name="settings" value="' + settings + '" style="display:none;" />');
				postItems.push('<input type="submit" value="Quick-Link" style="width:85px; background-image:url(settings.png)" ');
				postItems.push('title="User-Defined Settings URL" />');
				
				$('#ikWebSettingsQuicklink').html(postItems.join(''));
				$('#ikWebSettingsQuicklink').attr('style', (settings != '' || IkariamWebConverter.lang != 'en' ? '' : 'display:none;'));
			}
		},
		Tabs: {
			Color: {
				add:function() 
				{
					var tab = ScriptDialog.getTab('Color'); if (tab == null) return;
					var html = new Array();
					html.push('<p><table style="margin-left: 25px; margin-right: 25px;" border="0" cellspacing="5px">');
						html.push('<tr valign="top" height="30px">');
						html.push('<td colspan="4" align="center">');
							html.push('<input type="button" id="ikcrcColorDefault" style="cursor:pointer;" value="Restore Defaults"/>');
						html.push('</td></tr>');
						for (var c in IkariamCRFormatter.Colors) { 
						html.push('<tr height="20px">');
							html.push('<td>' + c + '</td>');
							html.push('<td class="ikcrcColorExample" width="50px" style="background-color:#');
							html.push(IkariamCRFormatter.Colors[c]);
							html.push('">&nbsp;</td>');
							html.push('<td><input class="textfield" type="text" name="' + c + '" value="');
							html.push(IkariamCRFormatter.Colors[c]);
							html.push('" size="10"></td>');
						html.push('</tr>'); }
					html.push('</table></p>');
					tab.innerHTML = html.join('');
					$('input.textfield', tab).blur(function() { 
						var color = $(this).attr('name'); var value = $(this).attr('value');
						IkariamCRFormatter.Colors[color] = value;
						$(this).parent().siblings("td.ikcrcColorExample").attr('style', 'background-color:#' + value);
						IkariamWebConverter.Settings.Quicklink.update();
					});
					$('#ikcrcColorDefault').click(function() {
						this.blur(); IkariamCRFormatter.defaultColors(); 
						$('input.textfield', tab).each(function() {
							var color = $(this).attr('name'); var value = IkariamCRFormatter.Colors[color];
							$(this).attr('value', value); 
							$(this).parent().siblings("td.ikcrcColorExample").attr('style', 'background-color:#' + value);
							IkariamWebConverter.Settings.Quicklink.update();
						});
					});
				}
			},
			Tags: {
				add:function()
				{
					var tab = ScriptDialog.getTab('Tags'); if (tab == null) return;
					var html = new Array();
					html.push('<p><table style="margin-left: 25px; margin-right: 25px;" border="0" cellspacing="5px">');
						html.push('<tr valign="top" height="30px">');
						html.push('<td colspan="2" align="center">');
							html.push('<input type="button" id="ikcrcTagsDefault" style="cursor:pointer;" value="Restore Defaults"/>');
						html.push('</td></tr>');
						html.push('<tr height="20px"><td align="right" colspan="2">');
						html.push('<select id="ikcrcCurrentTag" style="width:100px;">');
						for (var f in IkariamCRFormatter.Formats) {
							html.push('<option value="' + f + '"');
							if (IkariamCRFormatter.format == f) html.push(' selected="selected" ');
							html.push('>' + f + '</option>');
						}
						html.push('</select>');
						html.push('</td></tr>');
						for (var t in IkariamCRFormatter.get()) {
							html.push('<tr>');
							html.push('<td width="75px">' + t + '</td>');
							html.push('<td><input class="ikcrcTagsField" style="width:150px;" type="text" name="' + t + '" value="');
							html.push(IkariamCRFormatter.get()[t]);
							html.push('" size="18"></td>');
							html.push('</tr>');
						}
					html.push('</table></p>');
					tab.innerHTML = html.join('');
					$('#ikcrcTagsDefault').click(function() {
						this.blur(); 
						IkariamCRFormatter.defaultFormat(IkariamCRFormatter.format);
						IkariamWebConverter.Settings.Tabs.Tags.changeFormat(IkariamCRFormatter.format);
					});
					$('#ikcrcCurrentTag').change(function() {
						IkariamWebConverter.Settings.Tabs.Tags.changeFormat(this.value);
					});
					$('input.ikcrcTagsField').blur(function() {
						IkariamWebConverter.Settings.Tabs.Tags.updateTag(this.name, this.value);
					});
				},
				changeFormat:function(format)
				{
					IkariamCRFormatter.format = format;
					for (var t in IkariamCRFormatter.get()) { 
						$("input.ikcrcTagsField[name='" + t + "']").attr('value', IkariamCRFormatter.get()[t]);
					}
					$('#ikcrcFormat').attr('value', format);
					IkariamWebConverter.createReport();
					IkariamWebConverter.Settings.Quicklink.update();
				},
				updateTag:function(name, value)
				{
					IkariamCRFormatter.updateTag(name, value);
					IkariamWebConverter.createReport();
					IkariamWebConverter.Settings.Quicklink.update();
				}
			}
		}
	},
	BugReport: {
		show:function() {
			ScriptDialog.init("Bug Submittal", "50%", null);
			ScriptDialog.show(IkariamWebConverter.BugReport);
		},
		onshown:function() {
			var body = ScriptDialog.getBody(); if (body == null) return;
			body.innerHTML = "<p>This feature is currently under construction.</p>"; 
		}
	}
};
