/*
Cruel Solitaire, ©Copyright 2007 - bezumie.com, All Rights Reserved
Пасианс Жестокост, ©Copyright 2007 - bezumie.com, Всички права запазени
*/
var defDeck=2, defSize=5, widthInx=6+1/4*7, heightInx=3+1/6*4, maxWidth=0.9, maxHeight=0.8;
var oTable, stock, tableau=[], foundation=[];
var result, pile, drawn, 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 showStockInfo(ox){
//	stock.div.style.background="url('img/stock"+ox+".png') no-repeat";
}
function checkGameOver(){
	var i;
	for(i=1;i<=4;i++){
		if(foundation[i].lastCard()!=13){
			return false;
		}
	}
	return true;
}
function checkHasMoves(){
	var i, j, card, card2;
	for(i=1;i<=12;i++){
		card=tableau[i].lastCard();
		if(card){
			for(j=1;j<=12;j++){
				card2=tableau[j].lastCard();
				if(card2&&(card2.value==card.value+1)&&(card2.suit==card.suit))return true;
			}
			for(j=1;j<=4;j++){
				card2=foundation[j].lastCard();
				if(card2&&(card2.value==card.value-1)&&(card2.suit==card.suit))return true;
			}
		}
	}
	return false;
}
function drawFromStock(){
	var i=1;
	var j=0;
	while(stock.cards.length){
		while(tableau[i].cards.length==4){
			i++;
		}
		card=stock.lastCard();
		tableau[i].addCard(card);
		zInd++;
		card.div.style.zIndex=zInd;
		tableau[i].div.appendChild(card.div);
		stock.trunc();
		j++;
		if(j==4){
			setTimeout('drawFromStock()',20);
			return;
		}
	}
	if(!checkHasMoves()){
		showStockInfo('x');
	}
}
function cardDragStart(card){
	card.stack.div.style.zIndex=++zInd;
	card.div.style.zIndex=++zInd;
}
function setNotDraggable(card){
	card.ondragstart=null;
	card.ondrop=null;
	card.ondblclick=null;
}
function drawTheCards(){
	var card;
	card=oTable.lastCard();
	if(!card){
		gameIsOver=false;
		// proverka dali ima hod
		return;
	}
	if(card.value==1){
		switch(card.suit){
			case 'S':n=1;
				break;
			case 'H':n=2;
				break;
			case 'D':n=3;
				break;
			case 'C':n=4;
				break;
		}
		oTable.addCardToStack(card, foundation[n], 0, 0);
	}
	else{
		oTable.addCardToStack(card, tableau[pile], 0, 0);
		setDraggable(card);
		zInd++;
		card.div.style.zIndex=zInd;
		if(tableau[pile].cards.length==4)pile++;
	}
	setTimeout('drawTheCards()',drawTO);
}
function stockMouseDown(e){
	if(gameIsOver)return;
	var i,card;
	for(i=12;i>0;i--){
		if(tableau[i].cards.length){
			card=tableau[i].lastCard();
			oTable.removeCardFromStack(card);
			setTimeout('stockMouseDown()', drawTO);
			return;
		}
	}
	pile=1;
	drawTheCards();	
	return false;
}
function moveToTableau(card,stack){
	var lc=stack.lastCard();
	if((lc.suit==card.suit)&&(lc.value-1==card.value)){
		oTable.addCardToStack(card, stack, 0, 0);
		return true;
	}
	return false;
}
function moveToFoundation(card, stack){
	var lc=stack.lastCard();
	if((lc.suit==card.suit)&&(lc.value+1==card.value)){
		oTable.addCardToStack(card, stack, 0, 0);
		setNotDraggable(card);
		setResult(result+1);
		return true;
	}
	return false;
}
function cardDrop(card){
	if(gameIsOver)return;
	var stack=oTable.cardPos2Stack(card);
	if((stack)&&(stack!=card.stack)){
		if(stack.myType=='foundation'){
			if(moveToFoundation(card, stack)){return true;}
		}
		else if(stack.myType=='tableau'){
			if(moveToTableau(card,stack)){return true;}
		}
	}
	oTable.resetCardPos(card);
	return false;
}
function cardDblClick(card){
	if(gameIsOver)return;
	var i;
	for(i=1;i<=4;i++){
		if(moveToFoundation(card, foundation[i]))return;
	}
	return;
}
function setDraggable(card){
	card.ondragstart=cardDragStart;
	card.ondrop=cardDrop;
	card.ondblclick=cardDblClick;
}
function startGame(){
	oTable.shuffle();
	setResult(0);
	pile=1;
	drawTheCards();
}
function newGame(){
	gameIsOver=true;
	oTable.removeAll();
	oTable.hideWin();
	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(){
	var hgap=1/4;
	var vgap=1/6;
	var i,j;
	stock=oTable.addStack('stock', 55, hgap, vgap);
	stock.onmousedown=stockMouseDown;
	for(i=1;i<=4;i++){
		foundation[i]=oTable.addStack('foundation_'+i, 54, (1+hgap)*i+2*hgap+1, vgap);
		foundation[i].myType='foundation';
	}
	var n=0;
	for(j=1;j<=2;j++){
		for(i=1;i<=6;i++){
			n++;
			tableau[n]=oTable.addStack('tableau'+n, 53, (hgap)*i+i-1, vgap*j+j+vgap);
			tableau[n].myType='tableau';
		}
	}
	startGame();
}
function init(containerName){
	oTable=new Table(containerName, defDeck, defSize, widthInx, maxWidth, heightInx, maxHeight, lang);
	changeWidth();
	oTable.loadCards(init2);
}