/*
Elevator Solitaire, ©Copyright 2007 - bezumie.com, All Rights Reserved
Пасианс Асансьор, ©Copyright 2007 - bezumie.com, Всички права запазени
*/

var oTable, tableau, stock, waste;
var defDeck=2, defSize=5, widthInx=9, heightInx=4, maxWidth=0.8, maxHeight=0.9;
var result, drawn, line, col, gameIsOver=true;
var drawTO=25;

function closeHelp(){
	document.getElementById('help').style.display='none';
}
function showHelp(){
	var h=document.getElementById('help');
	oTable.div.appendChild(h);
	h.style.display='inline';
}
function setResult(newResult){
	result=newResult;
	document.getElementById('result').innerHTML=newResult;
}
function setCardsLeft(){
	document.getElementById('cardsLeft').innerHTML=stock.cards.length;
}
function win(){
	gameIsOver=true;
	oTable.showWin();
}
function faceStock(){
	var card=stock.lastCard();
	card.faceUp(true);
	oTable.addCardToStack(card, waste, 0, 0);
	setCardsLeft();
}
function findCard(row,col){
	var i;
	for(i=0;i<tableau.cards.length;i++){
		if((tableau.cards[i].myRow==row)&&(tableau.cards[i].myCol==col))return tableau.cards[i];
	}
	return false;
}
function isTop(card){
	if(card.stack!=tableau)return;
	var r=card.myRow, c=card.myCol;
	var card1=findCard(r+1, c-1);
	if(card1)return false;
	var card2=findCard(r+1, c+1);
	if(card2)return false;
	return true;
}
function tableauMouseDown(card){
	if(gameIsOver)return;
	var lc;
	var i;
	if(isTop(card)){
		lc=waste.lastCard().value;
		if((card.value==lc+1)||(card.value==lc-1)||((card.value==1)&&(lc==13))||((card.value==13)&&(lc==1))){
			oTable.addCardToStack(card, waste, 0, 0);
			setResult(result+1);
			if(result==28){win();}
			else{
				for(i=0;i<tableau.cards.length;i++){
					if((!tableau.cards[i].face)&&isTop(tableau.cards[i])){
						tableau.cards[i].faceUp(true);
					}
				}
			}
		}
	}
	return false;
}
function stockMouseDown(card){
	if(gameIsOver)return;
	if(card.stack==stock)faceStock();
	return false;
}
function drawTheCards(){
	var n=drawn;
	var card=oTable.lastCard();
	if (n<28){
		var t=0.4*line;
		var l=0.6*col;
		oTable.addCardToStack(card, tableau, l, t);
		card.faceUp(n>20);
		card.myRow=line;
		card.myCol=col;
		card.onmousedown=tableauMouseDown;
		drawn++;
		col+=2;
		if(col>line){
			line++;
			col=-line;
		}
		setTimeout('drawTheCards()',drawTO);
		return;
	}
	var i=-5;
	while(card=oTable.lastCard()){
		card.faceUp(false);
		card.onmousedown=stockMouseDown;
		oTable.addCardToStack(card, stock, i/200, i/300);
		i++;
	}
	gameIsOver=false;
	faceStock();
}
function startGame(){
	oTable.shuffle();
	setResult(0);
	drawn=0;
	line=0;
	col=0;
	drawTheCards();
}
function newGame(){
	oTable.hideWin();
	var card;
	while(card=tableau.lastCard()){
		oTable.removeCardFromStack(card);
	}
	while(card=waste.lastCard()){
		oTable.removeCardFromStack(card);
	}
	while(card=stock.lastCard()){
		oTable.removeCardFromStack(card);
	}
	startGame();
}
function changeWidth(){
	document.getElementById('infoLine').style.width=oTable.width+'px';
}
function changeSize(size){
	oTable.setSize(size);
	changeWidth();
	oTable.loadCards(null);
}
function plus(){
	if(oTable.cardSize<9)
		changeSize(oTable.cardSize+1);
}
function minus(){
	if(oTable.cardSize>1)
		changeSize(oTable.cardSize-1);
}
function init2(){
	stock=oTable.addStack('stock', 53, 0.25, 0.2);
	waste=oTable.addStack('waste', 53, 1.5, 0.2);
	tableau=oTable.addStack('tableau', false, 4, 0.2);
	oTable.addLabel('cardsLeft', 0.67, 1.3);
	startGame();
}
function init(containerName){
	oTable=new Table(containerName, defDeck, defSize, widthInx, maxWidth, heightInx, maxHeight, lang);
	changeWidth();
	oTable.loadCards(init2);
}