var fieldContext;
var field;
var fieldImage;
var lettersImage;
var size;
var pixelSize;
var pixelFullSize;
var pixelPerLetter;
var pixelOffset;
var pixelLetterWidth;
var pixelLetterHeight;
var pixelLetterTopOffset;
var pixelLetterLeftOffset;
var pixelFieldX;
var pixelFieldY;
var loadReady = 3;
var loadingReady;
var clickRoute = new Array();

function fieldPreloadImages(iPixelSize, iPixelFullSize, iSize, iPixelLetterLeftOffset, iPixelLetterTopOffset, iLoadingReady) {
	pixelSize = iPixelSize;
	pixelFullSize = iPixelFullSize;
	size = iSize;
	loadingReady = iLoadingReady;
	pixelLetterLeftOffset = iPixelLetterLeftOffset;
	pixelLetterTopOffset = iPixelLetterTopOffset;
	pixelPerLetter = Math.floor(pixelSize / size);
	pixelOffset = Math.floor((pixelSize - pixelPerLetter * size) / 2);
	
	field = new Array(size);
	for (x=0; x<size; x++) field[x] = new Array(size);

	fieldImage = new Image();     
	fieldImage.onload = function() { minusLoading(); }
	fieldImage.src = 'img/field_'+pixelSize+'.png';
	
	lettersImage = new Image();      
	lettersImage.onload = function() {
		pixelLetterWidth = lettersImage.width / 26;
		pixelLetterHeight = lettersImage.height / 2;
		minusLoading();
	}
	lettersImage.src = 'img/letters'+size+'_'+pixelSize+'.png';
	
	$('#wortopia_field').mouseup(field_click).dblclick(field_dblclick);
	
	if ($.browser.msie) {
		$('#wortopia_field_ie').addClass('wortopia_field_ie_'+size);
		for (y=0; y<size; y++) {
			var inner = '';
			for (x=0; x<size; x++) {
				inner += '<td id="wortopia_field_ie_'+x+'_'+y+'">#</td>'
			}
			$('#wortopia_field_ie').append('<tr>'+inner+'</tr>');
		}
		
	}	
}



function minusLoading() {
	if (loadReady>0) loadReady--;
	if (loadReady == 0)
		loadingReady();
}



function _waitUntilLoaded() {
	while (loadReady>0);
}

function setField(iFieldCanvas) {
	fieldContext = document.getElementById(iFieldCanvas).getContext('2d');
	
	if (!fieldContext) { alert('Dein Browser unterstützt nicht das Canvas-Element.\nEs wird wirklich Zeit für ein Update :-)'); }
	
	minusLoading();
	
	doonresize();
	$(window).resize(doonresize);
	/*
	$('#'+iFieldCanvas).click('click',function(e){ 
            $("#log").text("e.pageX: " + e.pageX + ", e.pageY: " + e.pageY);*/
}

function initField(iField) {
	iField = iField.toUpperCase();
	for (y = 0; y < size; y++) 
		for (x = 0; x < size; x++) 
			field[x][y] = iField.charAt(y * size + x);
	
	minusLoading();
}

function doonresize() {
	
}

function drawWait(sec){
	$('#wortopia_field').css('visibility','visible');
	if (sec <= 30) {
		fieldContext.fillStyle = "rgb(169,169,169)";
		fieldContext.fillRect(0, 0, pixelFullSize, pixelFullSize);
		
		fieldContext.lineWidth = 19;
		fieldContext.lineCap = 'butt';
		fieldContext.strokeStyle = 'rgb(200,200,200)';
		fieldContext.beginPath();
		fieldContext.arc(pixelSize / 2, pixelSize / 2, pixelSize / 5, -Math.PI / 2, Math.PI / 15 * sec - Math.PI / 2, false);
		fieldContext.stroke();
		
		if (!$.browser.msie) {
			if ((sec > 3) && (sec < 30)) {
				fieldContext.drawImage(lettersImage, (sec - 4) * pixelLetterWidth, // sX
					 0, // sY
					 pixelLetterWidth, // sWidth
					 pixelLetterHeight, // sHeight
					 pixelSize / 2 - pixelLetterWidth / 2, // dX
					 pixelSize / 2 - pixelLetterHeight / 2 + 5, // dY
					 pixelLetterWidth, // dWidth
					 pixelLetterHeight // dHeight
					);
			}
			fieldContext.drawImage(fieldImage, 0, 0);
			
		}
		
	}	
}

function _getRandom( min, max ) {
	if( min > max ) {
		return( -1 );
	}
	if( min == max ) {
		return( min );
	}
	return( min + parseInt( Math.random() * ( max-min+1 ) ) );
}

function drawField(route) {
	 
	//if ($.browser.mozilla) console.time("Feld zeichnen");
	
	//_waitUntilLoaded(); 
	if (!$.browser.msie) {
		fieldContext.fillStyle = "rgb(169,169,169)";
		fieldContext.fillRect(0, 0, pixelFullSize, pixelFullSize);
	
	
		if (route.length > 1) {
	
			fieldContext.lineWidth = 9;  
			fieldContext.lineCap = 'round';
			fieldContext.lineJoin = 'round';
			fieldContext.strokeStyle = 'rgb(200,200,200)';
			fieldContext.beginPath();
			fieldContext.moveTo(_getCenterX(route[0].x)+0.5,_getCenterY(route[0].y)+0.5); 
			for (i = 1; i < route.length; i++) {
				fieldContext.lineTo(_getCenterX(route[i].x)+0.5, _getCenterY(route[i].y)+0.5);
				//alert(route[i].x+' '+ route[i].y+' '+_getCenterX(route[i].x)+' '+_getCenterY(route[i].y));
			}
			
			fieldContext.stroke();
		}
	}
	else
	{
		$('#wortopia_field').css('visibility','hidden');
	}
	for (y = 0; y < size; y++) 
		for (x = 0; x < size; x++) {
			IsInList = 0;
			for (i=0; i<route.length; i++) 
				if ((route[i].x==x) && (route[i].y==y)) {
					IsInList = 1;
					break;
				}
			if (!$.browser.msie) {
				_drawLetterToPosition(field[x][y], x, y, IsInList);
			}	
			else
			{
				$('#wortopia_field_ie_'+x+'_'+y).text(field[x][y]).css('color', IsInList?'#000000':'#ffffff');
			}
		}	
	if (!$.browser.msie) {
		fieldContext.drawImage(fieldImage, 0, 0);
	}
	//if ($.browser.mozilla) console.timeEnd("Feld zeichnen")
} 

function _getCenterX(x) {
	return Math.floor(pixelOffset+(x+0.5)*pixelPerLetter);
}
function _getCenterY(y) {
	return Math.floor(pixelOffset+(y+0.5)*pixelPerLetter);
}

function _drawLetterToPosition(letter, x, y, highlight) {
	if (!highlight) highlight = 0;
	
	var position = letter.charCodeAt(0) - 65;
	
	fieldContext.drawImage(lettersImage, 
							position*pixelLetterWidth,    // sX
							highlight*pixelLetterHeight,  // sY
							pixelLetterWidth,             // sWidth
							pixelLetterHeight,            // sHeight
							pixelOffset+x*pixelPerLetter + pixelLetterLeftOffset, // dX
							pixelOffset+y*pixelPerLetter + pixelLetterTopOffset, // dY
							pixelLetterWidth,             // dWidth
							pixelLetterHeight             //dHeight
							);
}

