// Copyright Ben Lisbakken 2008
if(typeof console == "undefined") {
	console = {
		log : function(){}
	}
}
var chosenMateria = [];
var results = [];

function returnResult(m1, m2) {
	// c-class, g-grade, s-symbol, l-level

	// console.debug(m1);
	// console.debug(m2);

	// console.debug(m1.n + m1.g + '/' + m1.l + " - " + m2.n + m2.g + '/' + m2.l);
	var base = null;
	var other = null;
	if(m1.g == m2.g) {
		baseL = Math.max(m1.l,m2.l);
		if(baseL == m1.l) {
			base = m1;
			other = m2;
		} else {
			base = m2;
			other = m1;
		}
	} else {
		baseG = Math.max(m1.g,m2.g);
		if(baseG == m1.g) {
			base = m1;
			other = m2;
		} else {
			base = m2;
			other = m1
		}
	}

	// var tempB = (m1.g == m2.g) ? 'l'+Math.max(m1.l,m2.l) : 'g'+Math.max(m1.g,m2.g);
	// var wType = tempB[0];
	// var wNum = parseInt(tempB[1]);
	// var base = (m1[wType] == wNum) ? m1 : m2;
	// var other = (base == m1) ? m2 : m1;
	// problem here

	// base.g = (m1.l = 5) ? parseInt(base.g) + 1 : base.g;
	// base.g = (m2.l = 5) ? parseInt(base.g) + 1 : base.g;
	// base.g = (base.g > 8) ? 8 : base.g;

	var arrayjunk = base.s + '["'+other.s+'"]';
	var resultSymbol = eval(arrayjunk);
	var resultGrade = base.g;
	if(m1.l == 5)
	resultGrade++;
	if(m2.l == 5)
	resultGrade++;
	if(resultGrade > 8)
	resultGrade = 8;
	var resultClass = null;
	for(i in types) {
		if(types[i] == resultSymbol) {

			// console.log("GOT IT",i,types[i],resultSymbol)
			resultClass = i;
			break;
		}
	}
	// console.debug(resultSymbol);

	if(!resultClass) {
		console.debug(m1,m2)
		alert("we haz a problem");
		return;
	}

	var possibleMatches = [];
	for(i in materiaToType) {
		var splitMType = materiaToType[i].split('|');
		for (var z=0; z < splitMType.length; z++) {
			splitVersion = splitMType[z].split(',');
			if(splitVersion[0] == resultClass) {
				possibleMatches.push({
					grade : parseInt(splitVersion[1]),
					skillName : i
				});
			}
		}
	}
	var found = false;
	while(!found) {
		for(i in possibleMatches) {
			// console.log(resultClass)
			// console.debug(m1,m2,possibleMatches[i].grade,resultGrade)
			if(possibleMatches[i].grade == resultGrade) {
				var rO = {
					result : {
						n : possibleMatches[i].skillName,
						g : resultGrade
					},

					m1 : base,
					m2 : other
				}
				// console.log(resultGrade,possibleMatches[i].skillName)

				return rO;
				// return possibleMatches[i].skillName;
				// // console.debug(possibleMatches[i].skillName);
				found = true;
				break;
			}
		}
		if(resultGrade == 0) {
			return null;
			break;
		}
		resultGrade--;
	}


	// TODO:  now i need to look up in the array of base.s to see what the key other.s results.  that result is our result class
	// the resulting base is base.g
	// then I need to look up what result class + base.g gives us in materia..

}

function _gel(id) {
	return document.getElementById(id)
}

function exportList() {
	var body = document.body;
	var tArea = document.createElement('textarea');
	var html = '';

	var mlist = _gel('mList');

	for (var i=2; i < mlist.childNodes.length; i++) {
		html += mlist.childNodes[i].childNodes[0].innerHTML + ',' + mlist.childNodes[i].childNodes[1].innerHTML + '\n';
	}
	tArea.rows = '15';
	tArea.innerHTML = html;
	body.appendChild(tArea);
}

function createImportBox() {
	var body = document.body;
	var tArea = document.createElement('textarea');
	var input = document.createElement('input');
	input.type = 'button';
	// input.onclick = importClickClosure(tArea);
	input.onclick = function() {
		var materiaLists = tArea.value.split('\n');
		alert(materiaLists.length)
		// alert(tArea.value)
	};
	input.value = 'import';
	tArea.rows = '10';
	tArea.innerHTML = 'materia,level\nmateria,level\netc...';
	body.appendChild(tArea);
	body.appendChild(input);
}

function importClickClosure(tArea) {
	return function() {
		alert(tArea.innerHTML);
	}
}

function appendToMateriaList(name, l) {
	var tr = document.createElement('tr');
	var mtd = document.createElement('td');
	var ltd = document.createElement('td');
	mtd.innerHTML = name;
	ltd.innerHTML = l;
	tr.appendChild(mtd);
	tr.appendChild(ltd);
	var mlist = _gel('mList');
	for (var i=2; i < mlist.childNodes.length; i++) {
		if(mlist.childNodes[i].childNodes[0].innerHTML > name) {
			mlist.insertBefore(tr, mlist.childNodes[i]);
			return;
		}
	}
	mlist.appendChild(tr);

	// _gel('mList').appendChild(tr);
}

function addMateria(m, l) {
	m = m[m.selectedIndex];
	var name = m.text;
	m = m.value;
	m = m.split(',');
	g = m[1];
	m = m[0]
	name = name[0].toUpperCase() + name.slice(1);

	appendToMateriaList(name, l);

	chosenMateria.push({
		c : m,
		g : parseInt(g),
		l : parseInt(l),
		n : name,
		s : types[m]
	});
	// console.log(chosenMateria)
}

function addToResults(rs) {
	var addIt = true;
	for (var z=0; z < results.length; z++) {
		if(results[z].result.n == rs.result.n){
			if((results[z].m1.n == rs.m1.n && results[z].m2.n == rs.m2.n)){
				// console.log('dont add')
				addIt = false;
				break;
			} 
			if(results[z].m2.n == rs.m1.n && results[z].m1.n == rs.m2.n) {
				// console.log('dont add')
				addIt = false;
				break;
			}
		}
	}

	if(addIt == true) {

    results.push(rs);

		// console.log('added')
	}
}

function calculateResults() {
	var rT = _gel('results');
	rT.innerHTML = '<tr class="items"><td colspan="3"><div class="tab">Results</div></td></tr><th align="left">Result</th><th align="left">Materia 1</th><th align="left">Materia 2</th>';
	for(var i = 0; i < chosenMateria.length; i++) {
		for(var j = 0; j < chosenMateria.length; j++) {
			if(i != j) {
				// console.debug(i + '/' + j);

				// what do i want back?  result materia, the 2 materia that went in with their levels, and the order in which to put them
				// rs has result, m1 and m2
				// console.log(i,j,chosenMateria[i],chosenMateria[j])
        // console.log(chosenMateria[i].n,chosenMateria[j].n);
				var rs = returnResult(chosenMateria[i],chosenMateria[j]);
				// console.log(rs.result)
				if(rs) {
					addToResults(rs);
				}

				// console.debug(returnResult(chosenMateria[i],chosenMateria[j]));

			}
		}
	}
	// console.log(results)
	// console.log(typeof results)
	for(var i=0; i < results.length; i++) {
		var tr = document.createElement('tr');
		var rTD = document.createElement('td');
		var m1TD = document.createElement('td');
		var m2TD = document.createElement('td'); 
		rTD.innerHTML = results[i].result.n + " (gr "+results[i].result.g+")";
		m1TD.innerHTML = results[i].m1.n + '(lvl '+results[i].m1.l+')';
		m2TD.innerHTML = results[i].m2.n + '(lvl '+results[i].m2.l+')';
		tr.appendChild(rTD);
		tr.appendChild(m1TD);
		tr.appendChild(m2TD);
		rT.appendChild(tr);
	}
}

function checkKey(event) {
	if(event.keyCode == 13) {
		addMateria(_gel('m1'), _gel('m1l').value);
		calculateResults();
	}
}