/*
Aces Up, ©Copyright 2008-bezumie.com, All Rights Reserved
Aces Up, ©Copyright 2008-bezumie.com, Всички права запазени
*/
var oTable, tableau=[], stock, waste;
var defDeck=2, defSize=6, widthInx=7.75, heightInx=3.2, maxWidth=0.92, maxHeight=0;
var result, gameIsOver=true;
var zInd=100, drawTO=35;

function closeHelp(){
	document.getElementById('help').style.display='none';
}
function showHelp(){
	oTable.div.appendChild(document.getElementById('help'));
	document.getElementById('help').style.display = 'inline';
}
function changeWidth(){
	document.getElementById('infoLine').style.width=oTable.width+'px';
}
function changeDeck(id){
	oTable.setDeck(id);
	changeWidth();
	oTable.loadCards(null);
}
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 setResult(newResult){
	result=newResult;
	var r=document.getElementById('result');
	r.innerHTML=newResult;
}
function setStockLeft(left){
	oStockLeft.innerHTML = left;
}
function win(){
	oTable.showWin();
}
function hidewin(){
	oTable.hideWin();
}
function wasteCard(card){
	oTable.addCardToStack(card, waste, 0, 0);
	setResult(waste.cards.length);
	if(result==48)win();
}
function canMove(card){
	var suit=card.suit;
	var value=card.value;
	if(value===1)return false;// Асата не се хвърлят
	var i,lc;
	for(i=0;i<4;i++){
		lc=tableau[i].lastCard();
		if(lc && (lc!==card) && (lc.suit==suit) && ((lc.value>value) || (lc.value===1))){
			return true;
		}
	}
}
function dragStart(card){
	if(card.stack.lastCard()!==card)return false;
	if(card.stack==waste)return false;
	if(card.stack==stock)return false;
	card.stack.div.style.zIndex=++zInd;
	card.div.style.zIndex=++zInd;
}
function dragDrop(card){
	var stack=oTable.cardPos2Stack(card);
	var lc;
	var cs=card.stack;
	if((stack)&&(stack!=cs)){
		if((stack==waste)&&(canMove(card))){
			wasteCard(card);
			return;
		}
		if(((stack==tableau[0])||(stack==tableau[1])||(stack==tableau[2])||(stack==tableau[3]))&&(!stack.cards.length)){
			oTable.addCardToStack(card, stack, 0, 0);
			return;
		}
	}
	oTable.resetCardPos(card);
	return false;
}
function cardClick(card){
	if(card.stack==stock){
		draw4();
	}
}
function cardDblClick(card){
	if(card.stack==waste)return;
	if(card.stack==stock)return;
	if(card.stack.lastCard()!==card)return;
	if(canMove(card))wasteCard(card);
}
function draw4(){
	var i=(stock.cards.length-1)%4;
	var card=stock.lastCard();
	card.div.style.zIndex=++zInd;
	oTable.addCardToStack(card, tableau[3-i], 0, tableau[3-i].cards.length*0.15);
	card.faceUp(true);
	setStockLeft(stock.cards.length);
	if(stock.cards.length%4) setTimeout('draw4()', drawTO);
}
function newGame(){
	oTable.hideWin();
	oTable.removeAll();
	oTable.shuffle();
	setResult(0);
	var gap=1/500;
	var i=0;
	var card;
	while(card=oTable.lastCard()){
		card.div.style.zIndex=++zInd;
		card.faceUp(false);
		oTable.addCardToStack(card, stock, (i-40)*gap, (i-40)*gap);
		i++;
	}
	setStockLeft(stock.cards.length);
	draw4();
	gameIsOver=false;
}
function init2(){
	var hgap=0.1;
	var vgap=0.05;
	var i,c;
	var card;
	for(i=0;i<4;i++){
		tableau[i]=oTable.addStack('tableau'+i, 53, (i*(hgap+1)+1.75), 0.2);
	}
	stock=oTable.addStack('stock', 56, 0.25, 0.2);
	waste=oTable.addStack('waste', 54, 6.5, 0.2);
	for(i=0;i<52;i++){
		card=oTable.oCards.cards[i];
		card.onclick=cardClick;
		card.ondblclick=cardDblClick;
		card.ondragstart=dragStart;
		card.ondrop=dragDrop;
	}
	newGame();
}
function init(containerName){
	oTable=new Table(containerName, defDeck, defSize, widthInx, maxWidth, heightInx, maxHeight, lang);
	oStockLeft=oTable.addLabel('stockLeft', 0.35, 1.3);
	changeWidth();
	oTable.loadCards(init2);
}