/*
Pyramid 6 Solitaire, ©Copyright 2007 - bezumie.com, All Rights Reserved
Пасианс Пирамида 6, ©Copyright 2007 - bezumie.com, Всички права запазени
*/
var drawn,line,col;
var oTable, tableau, tableau2, single, row, waste, stock;
var defDeck=2, defSize=4, widthInx=8.8, heightInx=5.8, maxWidth=0.8, maxHeight=0.9;
var result, gameIsOver=true;
var zInd=100, 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 gameOver(){
	gameIsOver=true;
	oTable.showWin();
}
function z(o){
	o.div.style.zIndex=++zInd;
}
function discard(card){
	card.faceUp(false);
	oTable.addCardToStack(card, waste, 0, 0);
	setResult(result+1);
	if(waste.cards.length==52){gameOver();}
}
function faceStock(){
	var card=stock.lastCard();
	if(!card)return;
	var scard=single.lastCard();
	if(scard){
		oTable.addCardToStack(scard, row, row.cards.length/6, 0);
		z(scard);
	}
	oTable.addCardToStack(card, single, 0, 0);
	z(card);
	card.faceUp(true);
}
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 dragStart(card){
	if(gameIsOver)return false;
	if(((card.stack==tableau)&&(isTop(card)))
			||((card.stack==single)&&(card==single.lastCard()))
			||((card.stack==row)&&(card==row.lastCard()))
			||(card.stack==tableau2)){
		z(card.stack);
		z(card);
		return true;
	}
	return false;
}
function dragDrop(card){
	if(gameIsOver)return false;
	var c=oTable.cardPos2Card(card);
	if(c){
		if(card.value+c.value==13){
			if((c.stack==tableau)&&(isTop(c))){
				discard(card);
				discard(c);
				return;
			}
			if((c.stack==row)&&(row.lastCard()==c)){
				discard(card);
				discard(c);
				return;
			}
			if((c.stack==single)&&(single.lastCard()==c)){
				discard(card);
				discard(c);
				faceStock();
				return;
			}
			if(c.stack==tableau2){
				discard(card);
				discard(c);
			}
		}
	}
	oTable.resetCardPos(card);
}
function mouseDown(card){
	if(gameIsOver)return false;
	if(card.stack==stock){
		faceStock();
	}
	else if(card.value==13){
		if((card.stack==single)&&(single.lastCard()==card)){
			discard(card);
			faceStock();
		}
		else if((card.stack==row)&&(row.lastCard()==card)){
			discard(card);
		}
		else if((card.stack==tableau)&&(isTop(card))){
			discard(card);
		}
		else if(card.stack==tableau2){
			discard(card);
		}
	}
}
function drawTheCards(){
	var n=drawn;
	var card=oTable.lastCard();
	if (n<21){
		var t=0.4*line;
		var l=0.6*col;
		oTable.addCardToStack(card, tableau, l, t);
		z(card);
		card.faceUp(true);
		card.myRow=line;
		card.myCol=col;
		drawn++;
		col+=2;
		if(col>line){
			line++;
			col=-line;
		}
		setTimeout('drawTheCards()',drawTO);
		return;
	}
	else if(n<27){
		if(n==21){
			col=0;
		}
		oTable.addCardToStack(card, tableau2, 0.7+col*1.2, 0);
		z(card);
		card.faceUp(true);
		card.myRow=line;
		card.myCol=col;
		drawn++;
		col++;
		setTimeout('drawTheCards()',drawTO);
		return;
	}
	var i=-5;
	while(card=oTable.lastCard()){
		card.faceUp(false);
		oTable.addCardToStack(card, stock, i/200, i/300);
		z(card);
		i++;
	}
	gameIsOver=false;
	faceStock();
}
function startGame(){
	oTable.shuffle();
	setResult(0);
	drawn=0;
	line=0;
	col=0;
	drawTheCards();
}
function newGame(){
	gameIsOver=true;
	oTable.hideWin();
	oTable.removeAll();
	startGame();
}
function changeSize(size){
	oTable.setSize(size);
	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.9, 4.5);
	single=oTable.addStack('row', 53, 2.1, 4.5);
	row=oTable.addStack('row', 53, 3.3, 4.5);
	tableau=oTable.addStack('tableau', false, (widthInx-1)/2, 1/5);
	tableau2=oTable.addStack('tableau2', false, 1/5, 3.25);
	waste=oTable.addStack('waste', 53, 7.4, 1/5);
	for(i=0;i<52;i++){
		oTable.oCards.cards[i].ondragstart=dragStart;
		oTable.oCards.cards[i].ondrop=dragDrop;
		oTable.oCards.cards[i].onmousedown=mouseDown;
	}
	startGame();
}
function init(containerName){
	oTable=new Table(containerName, defDeck, defSize, widthInx, maxWidth, heightInx, maxHeight);
	oTable.loadCards(init2);
}