<!--

function onPageLoaded(){
	checkBrowser();
  	initSolitaire();
}

var curscore = 0;
var nummoves = 0;
var taskId;
var playing = false;
var bonus = 48;
var totalPossibleScore = 52 + bonus;

var imagePathHead = baseprefix + "images/";

var primaryParent;
var statisticsdiv;

var cardBackgroundArray = new Array();

cardBackgroundArray.push(imagePathHead + 'cardimages/card_bg2.gif');    
cardBackgroundArray.push(imagePathHead + 'cardimages/card_bg2.gif');    

if(cardBackgroundArray.length==0){
       cardBackgroundArray.push(imagePathHead + 'cardimages/card_bg1.gif');
}

var cardTypes = ['s','d','h','c'];
var cardColors = {'s':0,'d':1,'h':1,'c':0};
var cardObjectArray = new Array();
var cardCounter  = 0;
var cardMoveTarget = false;
var sevenStackArray = new Array();
var acesStackArray = new Array();


var containerdiv;
var containerLeftPos;
var containerTopPos;
var msgsdiv;

var detected_browser;
var version;
var platform;

var cardMoveOffsetX = 0; //60; //130;
var cardMoveOffsetY = 0; //110;



function checkBrowser()
{
    BrowserDetect.init();
    detected_browser = BrowserDetect.browser;
    version = BrowserDetect.version;
    platform = BrowserDetect.OS;

    if (detected_browser == "Firefox"){
        cardMoveOffsetX = -178; 
        cardMoveOffsetY = -219; 
    } else if (detected_browser == "Safari" ){
        cardMoveOffsetX = -178 - 13; //- 62; //-60; //-140; 
        cardMoveOffsetY = -218; //-289; 
    } else if ((detected_browser == "Explorer") && (version == "6")){
        cardMoveOffsetX = -1; 
        cardMoveOffsetY = -234; 
    } else if ((detected_browser == "Explorer") && (version == "7")){
        cardMoveOffsetX = -141; 
        cardMoveOffsetY = -312; 
    }
}

function initialStartGame()
{
  var textdiv = document.getElementById('intro_text');
  textdiv.style.display='none';
  statisticsdiv = document.getElementById('tried_correct_statistics');
  statisticsdiv.style.display='block';
  containerdiv = document.getElementById('klondikecontainer');
  containerdiv.style.display='block'; 
  var msgsdiv = document.getElementById('user_messages');
  msgsdiv.style.display='none'; 
  
  setupStartStop();
  startGame();
}

function startGame()
{
//alert("startGame");
  doResetGame();
  
  playing = true;
  setStopStartBtns(false, true);
 //alert("calling start_timer");
  start_timer();
}


function doResetGame()
{
  curscore = 0;
  nummoves = 0;
  nummovesdiv = document.getElementById('numtried_div');
  nummovesdiv.innerHTML = nummoves;
  numcorrectdiv = document.getElementById('numcorrect_div');
  numcorrectdiv.innerHTML = curscore;
//alert("calling resetGame");
  resetGame();
}

function stopGame()
{
  stop_play();
}

function stop_play()
{
  if (playing)
  {
    var cur_time = new Date();
    elapsed_time = cur_time.getTime() - start_time.getTime();
    stop_timer();
  }
  if (curscore == 52){
    var msgsdiv = document.getElementById('user_messages');
    curscore += bonus;
    numcorrectdiv = document.getElementById('numcorrect_div');
    numcorrectdiv.innerHTML = curscore;
    msgsdiv.innerHTML = "You won! Bonus = " + bonus + " points!";
    msgsdiv.style.display='block';
  }
  playing = false;
  setStopStartBtns(true, false);
  var userNum = sbCookieData.usernum;
  Record.recordNumCorrectPlusMoves(taskId, nummoves,curscore, elapsed_time, userNum);
}

function sortCards(a,b){
    return Math.random() - Math.random();    
}

function dealCards()
{
    var cardCounter = 0;
    for(var no=0;no<7;no++){
 //   alert("dealCards: no="+no+ " cC="+cardCounter);
        for(var no2=no;no2<7;no2++){
            var obj = document.getElementById('bg_seven_card'+no2);
            var subs = obj.getElementsByTagName('DIV');
            if(subs.length==0){
                obj.appendChild(cardObjectArray[cardCounter]);
                cardObjectArray[cardCounter].style.top = '0px';
            }else{
                subs[subs.length-1].appendChild(cardObjectArray[cardCounter]);    
                cardObjectArray[cardCounter].style.top = verticalSpaceBetweenCards + 'px';
            }
            
            if(no2==no)revealCard(cardObjectArray[cardCounter]);
            cardCounter++;
        }            
    }        
}

function getAvailableEndStack(initID)
{
    var numericID = initID.replace(/[^\d]/g,'');
    if(numericID==1){
        for(var no=0;no<4;no++){
            var obj = document.getElementById('bgEnd' + no);
            var subObj = obj.getElementsByTagName('DIV');
            if(subObj.length==0)return obj;    
        }        
    }else{
        var type = initID.substr(0,1);
        for(var no=0;no<4;no++){
            var obj = document.getElementById('bgEnd' + no);
            var subObj = obj.getElementsByTagName('DIV');
            if(subObj.length>0){
                if(subObj[subObj.length-1].id == type + (numericID-1))return obj;        
            }                
        }            
    }
    
    return false;
}


function finishCard()
{
    var dest = getAvailableEndStack(this.parentNode.id);
    var subDivs = this.parentNode.getElementsByTagName('DIV');
    if (subDivs.length>0){
      return;
    }
    if (this.parentNode.parentNode.id=='bg_deck_shown'){
        var parent = this.parentNode.parentNode;
        var subDivs = parent.getElementsByTagName('DIV');
        if (this.parentNode!=subDivs[subDivs.length-1]){
          return;    
        }
    }
    if(dest){
        this.parentNode.style.top = '0px';
        this.parentNode.style.left = '0px';
        dest.appendChild(this.parentNode);
    }
    var gameFinished = true;
    for(var no=0;no<acesStackArray.length;no++){
        var tmpDivs = acesStackArray[no].getElementsByTagName('DIV');
        if(tmpDivs.length<13)return;            
    }        
    alert("Congratulations! - you did it.");
}

    /*
       bg_deck_inner  (the down-turned part of the stock)
       bg_deck_show   (the up-turned part of the stock)
       bg_aces        (section holding the 4 aces piles)
       bg_seven       (holds the 7 lower stacks, identified below:)
           bg_seven_card<N> (one of 7 stacks on bg_seven)
    */
function getTopDiv(inputDiv)
{
    while(inputDiv.parentNode && inputDiv.tagName!='BODY')
    {
        if (inputDiv.id.indexOf('bg_') >= 0 ) {
            return inputDiv;
        }
        inputDiv = inputDiv.parentNode;
    }        
    return inputDiv;
}

function initRevealCard()
{
    var parentObj = getTopDiv(this);
    if(parentObj.id.indexOf('bg_seven_card')>=0){    // This card is on the "board" of seven cards
        var subDivs = parentObj.getElementsByTagName('DIV');
        if(this.parentNode==subDivs[subDivs.length-1]){
            revealCard(this.parentNode);        
        }        
    }        
    if(parentObj.id=='bg_deck_inner'){
        var subDivs = parentObj.getElementsByTagName('DIV');
        var maxIndex = subDivs.length-1;
        var minIndex = Math.max(-1,maxIndex-3);            
        if(subDivs.length>0){
            var divsShown = document.getElementById('bg_deck_shown').getElementsByTagName('DIV');
            for(var no=0;no<divsShown.length;no++){
                divsShown[no].style.left='0px';
            }                    
        }            
        for(var no=maxIndex;no>minIndex;no--)
        {
            revealCard(subDivs[no]);
            subDivs[no].style.left = (maxIndex-no) * 10 + 'px'; 
            document.getElementById('bg_deck_shown').appendChild(subDivs[no]);
        }
        if(minIndex==-1) parentObj.onmousedown = restartDeck; 
    }    
}

function revealCard(divObj)
{
    var imgs = divObj.getElementsByTagName('IMG');
    imgs[1].style.display='none';
    
}

function coverCard(divObj)
{
    var imgs = divObj.getElementsByTagName('IMG');
    imgs[1].style.display='';        
}

function restartDeck()
{
    var parentObj;
    if(this.id=='bg_deck_inner'){
        parentObj = document.getElementById('bg_deck_shown');
    }else{
        parentObj = getTopDiv(this);
    }
    if(parentObj.id=='bg_deck_shown'){
        var destObj = document.getElementById('bg_deck_inner');
        var subDivs = destObj.getElementsByTagName('DIV');
        if(subDivs.length==0){
            var movingCards = parentObj.getElementsByTagName('DIV');    
            for(var no=movingCards.length-1;no>=0;no--){
                coverCard(movingCards[no]);        
                movingCards[no].style.left = '0px';            
                destObj.appendChild(movingCards[no]);
            }
        }            
    }
}

function cancelEvent()
{
    return false;
}

function resetGame()
{
//alert("resetGame");
    cardObjectArray = cardObjectArray.sort(sortCards);
    var bgDeck = document.getElementById('bg_deck_inner');
    for(var no=0;no<cardObjectArray.length;no++){

        cardObjectArray[no].style.top = '0px';
        coverCard(cardObjectArray[no]);        
        cardObjectArray[no].style.left = '0px';
        bgDeck.appendChild(cardObjectArray[no]);
    }        
 //alert("calling dealCards");   
    dealCards();
    
}

var cardMove_initMouseX;
var cardMove_initMouseY;

var cardInitX;
var cardInitY;

var cardMoveCounter = -1;
var cardToMove = false;

var verticalSpaceBetweenCards = 15;



function getLeftPos(inputObj)
{
  var kccoords = findCoords(containerdiv);
  var thiscoords = findCoords(inputObj);
  returnValue = thiscoords[0] - kccoords[0] ;
  return returnValue;
}

function getTopPos(inputObj)
{
  var returnValue = inputObj.offsetTop;
  while((inputObj = inputObj.offsetParent) != null){
      returnValue += inputObj.offsetTop;
  }
  return returnValue;
}


function initCardMove(e)
{
    if(document.all)e = event;

        // this = the Image element, and this.parentNode = the DIV element
        // for a card, as created in initSolitaire
    cardMoveTarget = this.parentNode.parentNode;
    if( cardMoveTarget.id=='bg_deck_shown' )
    {
        var subDivs = cardMoveTarget.getElementsByTagName('DIV');
        if( subDivs[subDivs.length-1] != this.parentNode )
        {
            return;        
        }
    }
    cardToMove = this.parentNode;
    cardMoveCounter = 0;
    cardMove_initMouseX = e.clientX;
    cardMove_initMouseY = e.clientY;

  var kccoords = findCoords(containerdiv);
  var thiscoords = findCoords(this.parentNode.parentNode);
  cardInitX = thiscoords[0] - kccoords[0] ;
  cardInitY = thiscoords[1] - kccoords[1] ;
//alert("iCM: C[0]="+thiscoords[0]+" kc[0]="+kccoords[0]+" initX="+cardInitX + 
//" C[1]="+thiscoords[1]+" kc[1]="+kccoords[1]+" initY="+cardInitY);

//alert("iCM: leftPos="+leftPos+" topPos="+topPos+" tmpLeft="+tmpLeft+" tmpTop="+tmpTop+" subDivs="+subDivs);

    startCardMove();
    return false;
}

function startCardMove()
{
    if (detected_browser == "Explorer"){
        if(cardMoveCounter>=0 && cardMoveCounter<10){
            cardMoveCounter = cardMoveCounter + 1;
            setTimeout('startCardMove()',10);
        }
    } else {
        cardMoveCounter = 10;
    }
    if(cardMoveCounter>=10){
        //cardToMove.style.left = '0px';
        document.getElementById('movingCardContainer').style.left= ((cardInitX/1) - cardMoveOffsetX) +'px';
        document.getElementById('movingCardContainer').style.top= ((cardInitY/1) - cardMoveOffsetY) +'px';
        document.getElementById('movingCardContainer').appendChild(cardToMove);
    }        
}

function cardMove(e)
{
    if(cardMoveCounter>=10){
    if(document.all)e = event;
        document.getElementById('movingCardContainer').style.left = 
            e.clientX - cardMove_initMouseX + (cardInitX/1  - cardMoveOffsetX) + 'px' ;
        document.getElementById('movingCardContainer').style.top = 
            e.clientY/1 - cardMove_initMouseY/1 + (cardInitY/1  - cardMoveOffsetY) + 'px';
    }
}

function stopMoveCard(e)
{
    if(cardMoveCounter==-1){
        return;
    }
    cardMoveCounter = -1;
    if(document.all)e = event;

    var divs = document.getElementById('movingCardContainer').getElementsByTagName('DIV');
    if(divs.length==0){
        return;
    }
    var moveObj = document.getElementById('movingCardContainer');
    var leftPos = (moveObj.style.left.replace('px','')/1) + cardMoveOffsetX;
    var topPos =  (moveObj.style.top.replace('px','')/1)  + cardMoveOffsetY;

    nummoves++;
    nummovesdiv = document.getElementById('numtried_div');
    nummovesdiv.innerHTML = nummoves;
    
    var kccoords = findCoords(containerdiv);
    for(var no=0;no<sevenStackArray.length;no++)
    {
        var thiscoords = findCoords(sevenStackArray[no]);
        tmpLeft = thiscoords[0] - kccoords[0] ;
        tmpTop = thiscoords[1] - kccoords[1] ;
        var subDivs = sevenStackArray[no].getElementsByTagName('DIV').length;
//alert("stopMove: leftPos="+leftPos+" topPos="+topPos+" tmpLeft="+tmpLeft+" tmpTop="+tmpTop+" subDivs="+subDivs);
        if( leftPos >= tmpLeft-70 && leftPos <= tmpLeft+70 
            && topPos >= tmpTop-100 
            && topPos <= (tmpTop+100 + (subDivs*10)) )
        {
            var topDivTarget = getTopDiv(cardMoveTarget);
//alert("topDivTarget.id="+topDivTarget.id+ "no="+no+" 7stk[no]="+sevenStackArray[no].id);
            if(topDivTarget!=sevenStackArray[no])
            {
                var tmpDivs = sevenStackArray[no].getElementsByTagName('DIV');                    
                var cardTypeThis = divs[0].id.substr(0,1);
                var numericIDThis = divs[0].id.replace(/[^\d]/g,'');                    
                if(tmpDivs.length==0){
                    if(numericIDThis==13){
                        divs[0].style.left = '0px';
                        divs[0].style.top = '0px';
                        sevenStackArray[no].appendChild(divs[0]);
                        return; 
                    }                        
                }else{                        
                    var destDiv = tmpDivs[tmpDivs.length-1];                        
                    var cardTypeDest = destDiv.id.substr(0,1);                        
                    var numericIDDest = destDiv.id.replace(/[^\d]/g,'');                        
                    if(cardColors[cardTypeDest]!=cardColors[cardTypeThis] && numericIDDest-1==numericIDThis)
                    {
                        divs[0].style.top = verticalSpaceBetweenCards + 'px';
                        divs[0].style.left = '0px';
                        destDiv.appendChild(divs[0]);
                        return; 
                    }
                }
            }    
        }            
    }
    
    var gameFinished = true;

    for(var no=0;no<acesStackArray.length;no++)
    {
        var kccoords = findCoords(containerdiv);
        var thiscoords = findCoords(acesStackArray[no]);
        tmpLeft = thiscoords[0] - kccoords[0] ;
        tmpTop = thiscoords[1] - kccoords[1] ;
//alert("stopMove-aces: leftPos="+leftPos+" topPos="+topPos+" tmpLeft="+tmpLeft+" tmpTop="+tmpTop);

        var tmpDivs = acesStackArray[no].getElementsByTagName('DIV');            
        
        if(leftPos>=tmpLeft-70 && leftPos<=tmpLeft+70 && topPos>=tmpTop-100 && topPos<=tmpTop+100)
        {
            var topDivTarget = getTopDiv(cardMoveTarget);
            if(topDivTarget!=acesStackArray[no]){
                var cardTypeThis = divs[0].id.substr(0,1);
                var numericIDThis = divs[0].id.replace(/[^\d]/g,'');
                if(tmpDivs.length==0){
                    if(numericIDThis==1){
                        divs[0].style.left = '0px'
                        divs[0].style.top = '0px' 
                        acesStackArray[no].appendChild(divs[0]);
                        checkScore();
                        return; 
                    }
                    
                }else{
                    var destDiv = tmpDivs[tmpDivs.length-1];                        
                    var cardTypeDest = destDiv.id.substr(0,1);                        
                    var numericIDDest = destDiv.id.replace(/[^\d]/g,'');                        
                    if(cardTypeDest==cardTypeThis && numericIDDest==(numericIDThis-1)){
                        divs[0].style.left = '0px';
                        divs[0].style.top = '0px';
                        destDiv.appendChild(divs[0]);
                        checkScore();
                        return; 
                    }
                }   
            }    
        }
        if(tmpDivs.length<13)gameFinished=false;                        
    }
    checkScore();
    
    if(gameFinished){
        alert("Congratulations! - you beat solitaire!.");
    }
    if(divs.length>0){
        if(cardMoveTarget.id!='bg_deck_shown')divs[0].style.left = '0px';
        cardMoveTarget.appendChild(divs[0]);            
    }
}

function checkScore()
{
  curscore=0;
  for (var k=0; k< acesStackArray.length; k++)
  {
      curscore +=  acesStackArray[k].getElementsByTagName('DIV').length;
  }
  numcorrectdiv = document.getElementById('numcorrect_div');
  numcorrectdiv.innerHTML = curscore;
}


function initSolitaire()
{
//alert("initSolitaire");
    var imageArray = new Array();
    var bgImageNo = Math.floor(Math.random()*cardBackgroundArray.length);
        /* create all card objects */

    for(var no=0;no<cardTypes.length;no++){
        imageArray[no] = new Array();
        
        for(var no2=1;no2<=13;no2++){
            imageArray[no][no2] = new Image();
//            imageArray[no][no2].src = '/' + sbContext + '/images/cardimages/bg_' + cardTypes[no] + no2 + '.gif';
//var imgsrcpath = '/strongbrain/images/cardimages/bg_' + cardTypes[no] + no2 + '.gif';
//alert(imgsrcpath);

 //           imageArray[no][no2].src = '/strongbrain/images/cardimages/bg_' + cardTypes[no] + no2 + '.gif';
            imageArray[no][no2].src = imagePathHead + 'cardimages/bg_' + cardTypes[no] + no2 + '.gif';
 //document.images[0].src=imgsrcpath;           
            var div = document.createElement('DIV');
            div.id = cardTypes[no] + no2;
            div.className='card';
            div.style.left = '0px';
            var img = document.createElement('IMG');
            img.src = imageArray[no][no2].src;
            img.style.position = 'absolute';
            img.style.top = '0px';
            img.style.paddingLeft = '1px';
            img.style.paddingRight = '2px';
            img.style.paddingTop = '5px';
            img.style.paddingBottom = '1px';
            img.style.backgroundColor='#FFF';
            img.onselectstart = cancelEvent;
            img.ondragstart = cancelEvent;
            img.ondblclick = finishCard;
            img.style.border = '1px solid #000000';
        
            img.onmousedown = initCardMove;
            
            var coverImage = document.createElement('IMG');
            
//            coverImage.src = '/' + sbContext + cardBackgroundArray[bgImageNo];
            coverImage.src = cardBackgroundArray[bgImageNo];
            coverImage.style.position = 'absolute';
            //coverImage.style.zIndex = '2';                
            coverImage.onselectstart = cancelEvent;
            coverImage.ondragstart = cancelEvent;
            coverImage.onclick = initRevealCard;
            coverImage.style.border = '1px solid #000000';            
            coverImage.style.paddingLeft = '0px';
            coverImage.style.paddingRight = '0px';
            coverImage.style.backgroundColor='#CCC';
            div.appendChild(img);
            div.appendChild(coverImage);                
            cardObjectArray.push(div);                
            cardCounter++;
        } 
    }    
    document.body.onmousemove = cardMove;
    document.body.onmouseup = stopMoveCard;
    
        /* create stacks on the aces pad */
    var bg_aces = document.getElementById('bg_aces');
    for(var no=0;no<4;no++){
        var div = document.createElement('DIV');
        div.style.width = '72px';
        div.style.position = 'absolute';
        div.style.top = '10px';
        div.style.left = 17 + (no*107) + 'px';
        div.style.height = '100px';
        /* div.style.backgroundImage = 'url(\'images/stack_bg1.gif\')'; */
        div.style.backgroundRepeat = 'no-repeat';
        div.style.border='1px dotted #CCC';
        div.id = 'bgEnd' + no;            
        bg_aces.appendChild(div);    
        acesStackArray.push(div);    
    }
    
        /* create stacks on the 7 stack pad */
    var bg_seven = document.getElementById('bg_seven');
    for(var no=0;no<7;no++){
        var div = document.createElement('DIV');
//        div.style.width = '130px';
        div.style.width = '70px';
        div.style.position = 'absolute';
        div.style.top = '10px';
        div.id = 'bg_seven_card'+no;
//        div.style.left = 20 + (no*105) + 'px';
        var spread = 88;
        div.style.left = 10 + (no*spread) + 'px';
        div.style.height = '120px';
        div.style.border='1px dotted black';
        //div.style.backgroundImage = 'url(\'images/stack_bg1.gif\')';
        div.style.backgroundRepeat = 'no-repeat';
        bg_seven.appendChild(div);    
        sevenStackArray.push(div);
                    
    }    
//    var obj = document.getElementById('bg_deck_inner');
//    obj.onclick = restartDeck;
}

function showInstructions()
{
  var ipath= "klondike-solitaire-instructions";
  var entry_win=window.open(
                     ipath,
                     'Klondike_Solitaire_Instructions',
                     'height=400,width=650,scrollbars=yes');
  return false;
}


	//-------- Performance Display code -------------

function displayPerfData(response)
{
    genericDisplayPerfData('Klondike', response);
    return false;
}

// -->
