/*
Card Shuffler
Interface helper logic

Karl Glasgow
code@keg4.com

Copyright 2009, All Rights Reserved.
*/

var refBlurEvent = null;
var refResetEvent = null;

var aryCards = null;
function RenderDeck(strDeckId, aryCardDeck) 
{ 
    if (!aryCardDeck || !aryCardDeck.length) 
    {
        return false;
    }
    aryCards = aryCardDeck;
    
    PadDeckValues();
    PreLoadCardImages();
    
    var divDeck = document.getElementById(strDeckId);
    if (!divDeck) 
    {
        return false;
    }
    
    for (c = 0; c < aryCards.length; c++) 
    {
        var divCard = document.createElement('div');
        divCard.id = ('card_' + c);
        divCard.style.cssFloat = 'left';
        divCard.style.styleFloat = 'left';
        divCard.style.position = 'absolute';
        divCard.style.left = (aryCards[c]['off_xpos'] + 'px');
        divCard.style.top = (aryCards[c]['off_ypos'] + 'px');
        divCard.style.zIndex = aryCards[c]['index'];
        
        var lnkCard = document.createElement('a');
        lnkCard.href = aryCards[c]['href'];
        if (aryCards[c]['target'] != '') 
        {
            lnkCard.target = aryCards[c]['target'];
        }
        
        lnkCard.onmouseover = function(intCardNumber) 
            { 
                return function() 
                {
                    RaiseCard(intCardNumber);
                }
            }(c);   
                  
        var imgCard = document.createElement('img');
        imgCard.id = ('card_img_' + c);
        SetImageUrlAndSize(imgCard, aryCards[c]['off_img']);
        imgCard.alt = aryCards[c]['alt'];
        imgCard.border = '0';
        
        lnkCard.appendChild(imgCard);
        divCard.appendChild(lnkCard);
        divDeck.appendChild(divCard);
    }
    
    CheckDeck();
    
    return true;    
}

function SetImageUrlAndSize(objImage, strImageUrl) 
{
    if (!objImage) 
    {
        return false;
    }
    
    objImage.src = strImageUrl;
    var reImgSize = /([0-9]{1,3})w([0-9]{1,3})h/i;
    var aryImgSize = reImgSize.exec(strImageUrl);
    objImage.style.width = aryImgSize[1];
    objImage.style.height = aryImgSize[2];

    return true;
}

function PadDeckValues() 
{
    if (!aryCards || !aryCards.length) 
    {
        return false;
    }
    
    for (c = 0; c < aryCards.length; c++) 
    {
        if (!aryCards[c]['on_xpos'] && aryCards[c]['off_xpos']) 
        {
            aryCards[c]['on_xpos'] = (aryCards[c]['off_xpos'] - 5);
        }
        if (!aryCards[c]['on_ypos'] && aryCards[c]['off_ypos']) 
        {
            aryCards[c]['on_ypos'] = (aryCards[c]['off_ypos'] - 10);
        }
    }
    
    return true;
}

function PreLoadCardImages() 
{
    if (!aryCards || !aryCards.length) 
    {
        return false;
    }
    
    arySoundsToPreLoad = Array();
    for (c = 0; c < aryCards.length; c++) 
    {
        var imgOff = document.createElement('img');
        SetImageUrlAndSize(imgOff, aryCards[c]['off_img']);
        aryCards[c]['off_img_obj'] = imgOff;
        
        var imgOn = document.createElement('img');
        SetImageUrlAndSize(imgOn, aryCards[c]['on_img']);
        aryCards[c]['on_img_obj'] = imgOn;
        
        if (PlaySound && aryCards[c]['sound']) 
        {
            if (('|' + arySoundsToPreLoad.join('|') + '|').indexOf('|' + aryCards[c]['sound'] + '|') == -1) 
            {
                arySoundsToPreLoad[arySoundsToPreLoad.length] = aryCards[c]['sound'];
            }
        }
    }
    if (PlaySound) 
    {
        //PreLoadSounds(arySoundsToPreLoad);
    }
    
    return true;
}

var intLowestCard = 1;
var intHighestCard = 1;
function CheckDeck() 
{
    for (c = 0; c < aryCards.length; c++) 
    {
        if (intLowestCard > aryCards[c]['index']) 
        {
            intLowestCard = aryCards[c]['index'];
        }
        if (intHighestCard < aryCards[c]['index']) 
        {
            intHighestCard = aryCards[c]['index'];
        }
    }
        
    var intOrderAdj = (intLowestCard - 1);
    if (intOrderAdj > 0) 
    {
        for (c = 0; c < aryCards.length; c++) 
        {
            aryCards[c]['index'] = (aryCards[c]['index'] - intOrderAdj);
            
            var divCard = document.getElementById('card_' + c);
            if (divCard) 
            {
                divCard.style.zIndex = aryCards[0]['index'];
            }
        }
        intLowestCard = 1;
        intHighestCard = (intHighestCard - intOrderAdj);
    }
}

var intPrevCardNumber = -1;
function RaiseCard(intCardNumber) 
{
    clearTimeout(refBlurEvent);
    clearTimeout(refResetEvent);
    if (intCardNumber != intPrevCardNumber) 
    {
        LowerCard();
    }
    
    var divCard = document.getElementById('card_' + intCardNumber);
    var imgCard = document.getElementById('card_img_' + intCardNumber);
    if (!divCard || !imgCard || !aryCards[intCardNumber]) 
    {
        return false;
    }
    
    intHighestCard++;
    divCard.style.zIndex = intHighestCard;
    divCard.style.left = (aryCards[intCardNumber]['on_xpos'] + 'px');
    divCard.style.top = (aryCards[intCardNumber]['on_ypos'] + 'px');
    
    SetImageUrlAndSize(imgCard, aryCards[intCardNumber]['on_img']);

    if (PlaySound) 
    {
        PlaySound(aryCards[intCardNumber]['sound']);
    }
    
    CheckDeck();

    intPrevCardNumber = intCardNumber;
    refBlurEvent = setTimeout('LowerCard()', 5000);
    refResetEvent = setTimeout('ResetDeck()', 15000);
    return true;
}

function LowerCard() 
{
    if (intPrevCardNumber < 0) 
    {
        return false;
    }
    
    var divCard = document.getElementById('card_' + intPrevCardNumber);
    var imgCard = document.getElementById('card_img_' + intPrevCardNumber);
    if (!divCard || !imgCard || !aryCards[intPrevCardNumber]) 
    {
        return false;
    }
    
    intHighestCard++;
    divCard.style.zIndex = intHighestCard;
    divCard.style.left = (aryCards[intPrevCardNumber]['off_xpos'] + 'px');
    divCard.style.top = (aryCards[intPrevCardNumber]['off_ypos'] + 'px');
    
    SetImageUrlAndSize(imgCard, aryCards[intPrevCardNumber]['off_img']);

    return true;
}

function ResetDeck() 
{
    for (c = 0; c < aryCards.length; c++) 
    {
        aryCards[c]['index'] = (aryCards.length - c);

        var divCard = document.getElementById('card_' + c);
        if (!divCard || !aryCards[c]) 
        {
            return false;
        }
        divCard.style.zIndex = aryCards[c]['index'];
    }
    CheckDeck();
    if (StopSound) 
    {
        StopSound();
    }
    
    return true;    
}