var src_symbols, elements, scoreboard;

src_symbols = [
	{
		name: 'zero',
		points: [[0, 1], [0, 2], [0, 3], [0, 4], [0, 5], [0, 6], [0, 7], [0, 8], [0, 9], [1, 0], [1, 1], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 7], [1, 8], [1, 9], [1, 10], [2, 0], [2, 1], [2, 9], [2, 10], [3, 0], [3, 1], [3, 9], [3, 10], [4, 0], [4, 1], [4, 9], [4, 10], [5, 0], [5, 1], [5, 2], [5, 3], [5, 4], [5, 5], [5, 6], [5, 7], [5, 8], [5, 9], [5, 10], [6, 1], [6, 2], [6, 3], [6, 4], [6, 5], [6, 6], [6, 7], [6, 8], [6, 9]]
	},
	{
		name: 'one',
		points: [[0, 3], [0, 9], [0, 10], [1, 2], [1, 3], [1, 9], [1, 10], [2, 1], [2, 2], [2, 3], [2, 9], [2, 10], [3, 0], [3, 1], [3, 2], [3, 3], [3, 4], [3, 5], [3, 6], [3, 7], [3, 8], [3, 9], [3, 10], [4, 0], [4, 1], [4, 2], [4, 3], [4, 4], [4, 5], [4, 6], [4, 7], [4, 8], [4, 9], [4, 10], [5, 9], [5, 10], [6, 9], [6, 10]]
	},
	{
		name: 'two',
		points: [[0, 1], [0, 2], [0, 9], [0, 10], [1, 0], [1, 1], [1, 2], [1, 8], [1, 9], [1, 10], [2, 0], [2, 1], [2, 7], [2, 8], [2, 9], [2, 10], [3, 0], [3, 1], [3, 6], [3, 7], [3, 8], [3, 9], [3, 10], [4, 0], [4, 1], [4, 5], [4, 6], [4, 7], [4, 9], [4, 10], [5, 0], [5, 1], [5, 2], [5, 3], [5, 4], [5, 5], [5, 6], [5, 9], [5, 10], [6, 1], [6, 2], [6, 3], [6, 4], [6, 9], [6, 10]]
	},
	{
		name: 'three',
		points: [[1, 0], [2, 0], [3, 0], [4, 0], [5, 0], [0, 1], [1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [0, 2], [1, 2], [5, 2], [6, 2], [5, 3], [6, 3], [3, 4], [4, 4], [5, 4], [6, 4], [3, 5], [4, 5], [5, 5], [5, 6], [6, 6], [5, 7], [6, 7], [0, 8], [1, 8], [5, 8], [6, 8], [0, 9], [1, 9], [2, 9], [3, 9], [4, 9], [5, 9], [6, 9], [1, 10], [2, 10], [3, 10], [4, 10], [5, 10]]
	},
	{
		name: 'four',
		points: [[0, 4], [0, 5], [0, 6], [0, 7], [0, 8], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 7], [1, 8], [2, 1], [2, 2], [2, 3], [2, 7], [2, 8], [3, 0], [3, 1], [3, 2], [3, 7], [3, 8], [4, 0], [4, 1], [4, 2], [4, 3], [4, 4], [4, 5], [4, 6], [4, 7], [4, 8], [4, 9], [4, 10], [5, 0], [5, 1], [5, 2], [5, 3], [5, 4], [5, 5], [5, 6], [5, 7], [5, 8], [5, 9], [5, 10], [6, 7], [6, 8]]
	},
	{
		name: 'five',
		points: [[0, 0], [0, 1], [0, 2], [0, 3], [0, 4], [0, 5], [0, 8], [0, 9], [1, 0], [1, 1], [1, 2], [1, 3], [1, 4], [1, 5], [1, 8], [1, 9], [1, 10], [2, 0], [2, 1], [2, 4], [2, 5], [2, 9], [2, 10], [3, 0], [3, 1], [3, 4], [3, 5], [3, 9], [3, 10], [4, 0], [4, 1], [4, 4], [4, 5], [4, 9], [4, 10], [5, 0], [5, 1], [5, 4], [5, 5], [5, 6], [5, 7], [5, 8], [5, 9], [5, 10], [6, 0], [6, 1], [6, 5], [6, 6], [6, 7], [6, 8], [6, 9]]
	},
	{
		name: 'six',
		points: [[0, 2], [0, 3], [0, 4], [0, 5], [0, 6], [0, 7], [0, 8], [0, 9], [1, 1], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 7], [1, 8], [1, 9], [1, 10], [2, 0], [2, 1], [2, 2], [2, 4], [2, 5], [2, 9], [2, 10], [3, 0], [3, 1], [3, 4], [3, 5], [3, 9], [3, 10], [4, 0], [4, 1], [4, 4], [4, 5], [4, 9], [4, 10], [5, 0], [5, 1], [5, 4], [5, 5], [5, 6], [5, 7], [5, 8], [5, 9], [5, 10], [6, 5], [6, 6], [6, 7], [6, 8], [6, 9]]
	},
	{
		name: 'seven',
		points: [[0, 0], [0, 1], [1, 0], [1, 1], [2, 0], [2, 1], [2, 5], [2, 6], [2, 7], [2, 8], [2, 9], [2, 10], [3, 0], [3, 1], [3, 4], [3, 5], [3, 6], [3, 7], [3, 8], [3, 9], [3, 10], [4, 0], [4, 1], [4, 3], [4, 4], [4, 5], [5, 0], [5, 1], [5, 2], [5, 3], [5, 4], [6, 0], [6, 1], [6, 2], [6, 3]]
	},
	{
		name: 'eight',
		points: [[1, 0], [2, 0], [3, 0], [4, 0], [5, 0], [0, 1], [1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [0, 2], [1, 2], [5, 2], [6, 2], [0, 3], [1, 3], [5, 3], [6, 3], [0, 4], [1, 4], [2, 4], [3, 4], [4, 4], [5, 4], [6, 4], [1, 5], [2, 5], [3, 5], [4, 5], [5, 5], [0, 6], [1, 6], [5, 6], [6, 6], [0, 7], [1, 7], [5, 7], [6, 7], [0, 8], [1, 8], [5, 8], [6, 8], [0, 9], [1, 9], [2, 9], [3, 9], [4, 9], [5, 9], [6, 9], [1, 10], [2, 10], [3, 10], [4, 10], [5, 10]]
	},
	{
		name: 'nine',
		points: [[1, 0], [2, 0], [3, 0], [4, 0], [5, 0], [0, 1], [1, 1], [2, 1], [3, 1], [4, 1], [5, 1], [6, 1], [0, 2], [1, 2], [5, 2], [6, 2], [0, 3], [1, 3], [5, 3], [6, 3], [0, 4], [1, 4], [5, 4], [6, 4], [0, 5], [1, 5], [2, 5], [3, 5], [4, 5], [5, 5], [6, 5], [1, 6], [2, 6], [3, 6], [4, 6], [5, 6], [6, 6], [5, 7], [6, 7], [0, 8], [1, 8], [5, 8], [6, 8], [0, 9], [1, 9], [2, 9], [3, 9], [4, 9], [5, 9], [6, 9], [1, 10], [2, 10], [3, 10], [4, 10], [5, 10]]
	}
];

elements = [
	{vertical: false, size: 1, html: '<div class="single"><input type="checkbox" checked="true" /></div>'},
	{vertical: false, size: 1, html: '<div class="single"><input type="checkbox" /></div>'},
	{vertical: false, size: 1, html: '<div class="single"><input type="radio" checked="true" /></div>'},
	{vertical: false, size: 1, html: '<div class="single"><input type="radio" /></div>'},
	{vertical: false, size: 2, html: '<div class="double_horizontal"><input type="button" /></div>'},
	{vertical: false, size: 3, html: '<div class="triple_horizontal"><select><option></option><option></option><option></option></select></div>'},
	{vertical: false, size: 4, html: '<div class="quatro_horizontal"><span class="scrollbar"><span></span></span></div>'},
	{vertical: true, size: 4, html: '<div class="quatro_vertical"><span class="scrollbar"><span></span></span></div>'}
	//{vertical: false, size: 5, html: '<div class="punto_horizontal"><span class="scrollbar"><span></span></span></div>'}
	//{vertical: true, size: 5, html: '<div class="punto_vertical"><span class="scrollbar"><span></span></span></div>'}
];

function write(str) {
	var arr = str.split(''), symbols = [];
	for (var i=0; i<arr.length; i++) {
		var n = parseInt(arr[i], 10);
		var s = {points: []};
		s.points = src_symbols[n].points.clone();
		symbols.push(s);
	}
	scoreboard.init(symbols);
}

scoreboard = {
	init: function(symbols) {
		this.container = $('score');
		this.container.select('div').invoke('remove');
		this.container.style.width = symbols.length * 128 + 'px';
		this.container.style.marginLeft = -(symbols.length * 128 / 2) + 'px';
		
		for (var i=0, ilen=symbols.length; i<ilen; i++) {
			var symbol = symbols[i], e = document.createElement('div');
			e.className = 'symbol';
			this.container.appendChild(e);
			
			for (var j=0, jlen=symbol.points.length; j<jlen; j++) {
				var point = symbol.points[j], element = this.random_element();
				if (point !== null) {
					while (this.space_test(symbol, point, element.vertical, element.size) != true) {
						element = this.random_element();
					}
					
					e.innerHTML += element.html;
					var divs = e.getElementsByTagName('div'), last = divs[divs.length-1];
					last.style.left = point[0] * 16 + 'px';
					last.style.top = point[1] * 16 + 'px';
				}
			}
		}
	},
	space_test: function(s, point, is_vertical, size) {
		var points = [], v = 0, h = 0;
		if (is_vertical) {v = 1;}
		else {h = 1;}

		for (var i=0; i<size; i++) {
			var test = [point[0] + h * i, point[1] + v * i], pos = this.indexof(s.points, test);
			if (pos >= 0) {points.push(pos);}
		}

		if (points.length == size) {
			this.lock_points(s, points);
			return true;
		}
		
		return false;
	},
	lock_points: function(s, points) {
		for (var i=0; i<points.length; i++) {
			s.points[points[i]] = null;
		}
	},
	indexof: function(a1, a2) {
		for (var i=0; i<a1.length; i++) {
			if (a1[i] !== null) {
				var p = a1[i];
				if (p[0] == a2[0] && p[1] == a2[1]) {
					return i;
				}
			}
		}
		return -1;
	},
	random_element: function() {
		return elements[Math.floor(random(0, elements.length))];
	}
}