﻿var FACE_EMPTY = 0;
var FACE_2 = 2;
var FACE_3 = 3;
var FACE_4 = 4;
var FACE_5 = 5;
var FACE_6 = 6;
var FACE_7 = 7;
var FACE_8 = 8;
var FACE_9 = 9;
var FACE_T = 10;
var FACE_J = 11;
var FACE_Q = 12;
var FACE_K = 13;
var FACE_A = 14;

var SUIT_EMPTY = -1;
var SUIT_S = 0; //SPADES
var SUIT_C = 1; //CLUBS
var SUIT_D = 2; //DIAMONDS
var SUIT_H = 3; //HEARTS


function put_Face(face)
{
    this.face = face;
	
	if(this.suit != SUIT_EMPTY && this.face != FACE_EMPTY)
	{
		this.id = this.suit * 13 + this.face - 1;
	}
}

function get_Face()
{
   return this.face;
}

function put_Suit(suit)
{	
	this.suit = suit;

	if(this.suit != SUIT_EMPTY && this.face != FACE_EMPTY)
	{
		this.id = this.suit * 13 + this.face - 1;
	}
}

function get_Suit()
{
	return this.suit;
}

function put_Id(id)
{	
	this.id = id;

	if(this.id != -1)
	{
	    if(this.id - 1 - 13 * SUIT_H >= 0)
	    {
	        this.suit = SUIT_H;
	    }
	    else
	    if(this.id - 1 - 13 * SUIT_D >= 0)
	    {
	        this.suit = SUIT_D;
	    }
	    else
	    if(this.id - 1 - 13 * SUIT_C >= 0)
	    {
	        this.suit = SUIT_C;
	    }
	    else
	    {
	        this.suit = SUIT_S;
	    }
	    
		this.face = this.id - this.suit * 13 + 1;
	}
	else
	{
		this.suit = SUIT_EMPTY;
		this.face = FACE_EMPTY;
	}
}

function get_Id(id)
{
	return this.id;
}

function getName()
{	
	var name = "";

	switch(this.face)
	{
		case FACE_2:
			name = "2";
			break;

		case FACE_3:
			name = "3";
			break;

		case FACE_4:
			name = "4";
			break;

		case FACE_5:
			name = "5";
			break;

		case FACE_6:
			name = "6";
			break;

		case FACE_7:
			name = "7";
			break;

		case FACE_8:
			name = "8";
			break;

		case FACE_9:
			name = "9";
			break;

		case FACE_T:
			name = "T";
			break;

		case FACE_J:
			name = "J";
			break;

		case FACE_Q:
			name = "Q";
			break;

		case FACE_K:
			name = "K";
			break;

		case FACE_A:
			name = "A";
			break;
	}

    switch(this.suit)
    {
	    case SUIT_S:
		    name += "s";
		    break;

	    case SUIT_C:
		    name += "c";
		    break;

	    case SUIT_D:
		    name += "d";
		    break;

	    case SUIT_H:
		    name += "h";
		    break;
    }

	return name;
}

function Init_Card()
{         
    this.face = FACE_EMPTY;
    this.suit = SUIT_EMPTY;
    this.id = -1;   
    
    this.put_Face = put_Face;
    this.get_Face = get_Face;
    
    this.put_Suit = put_Suit;
    this.get_Suit = get_Suit;
    
    this.put_Id = put_Id;
    this.get_Id = get_Id;
    
    this.getName = getName;
}

function Card(id)
{
    this.Init_Card = Init_Card;
    this.Init_Card();
 
	this.put_Id(id);
}

var cards = new Array();
var opponentsCards = new Array();
var opponentCardsPanels = new Array();
var playerCard1;
var playerCard2;
var flopCard1; 
var flopCard2; 
var flopCard3; 
var turnCard;
var riverCard;
var infoPanels = new Array();
var winPercentageValueLabels = new Array();
var tiePercentageValueLabels = new Array();
var deadCards = new Array();
var moveCardId = -1;
var largeCards = new Array();
var sourceControl = null;
var moveControl;
var moveCard;
var ptX = -1;
var ptY = -1;
var capture = false;
var opponentsCount = 9;
var controlFromPoint = null;
var highlightCounter = 0;
var intervalId = -1;
var xmlHttp;
var calculating = false;

function RefreshCards()
{
    for(iLargeCard = 0; iLargeCard < largeCards.length; iLargeCard++)
	{
	    if(sourceControl != largeCards[iLargeCard])
	    {
	         largeCards[iLargeCard].src = GetCardFace(GetControlCardId(largeCards[iLargeCard]));   
	    }
	}	

	for(iCard = 1; iCard <= 52; iCard++)
	{
		if(moveCardId != iCard)
		{
			if(!IsCardUsed(iCard))
			{
				cards[iCard - 1].src = GetSmallCardFace(iCard);
			}
			else
			{
				cards[iCard - 1].src = GetSmallCardFace(-1);
			}
		}
	}

	for(iOpponentCard = 0; iOpponentCard < opponentsCards.length; iOpponentCard++)
	{
		if(sourceControl != opponentsCards[iOpponentCard])
		{
		    opponentsCards[iOpponentCard].src = GetSmallCardFace(GetControlCardId(opponentsCards[iOpponentCard]));
		}
	}
}
		
function smallCard_MouseEnter(e)
{
    var o;
    
    if(e == null)
    {
      e = window.event;
      o = event.srcElement;
    }
    else
    {
       o = e.target;
    }
 
    if(!IsCardUsed(GetControlCardId(o)))   
    {
        o.style.cursor = 'url("Cursors/hnwse.cur"), pointer;';
    }
    else
    {
        o.style.cursor = 'auto';
    }
}

function smallCard_MouseLeave(e)
{
	var o;
    
    if(e == null)
    {
      e = window.event;
      o = event.srcElement;
    }
    else
    {
       o = e.target;
    }
    
    if(!capture)
    {
        o.cursor = 'auto';
    }
}

function opponentCard_MouseEnter(e)
{
    var o;
    
    if(e == null)
    {
      e = window.event;
      o = event.srcElement;
    }
    else
    {
       o = e.target;
    }
 
    if(GetControlCardId(o) != -1)   
    {
        o.style.cursor = 'url("Cursors/hnwse.cur"), pointer;';
    }
    else
    {
        o.style.cursor = 'auto';
    }
}

function opponentCard_MouseLeave(e)
{
	var o;
    
    if(e == null)
    {
      e = window.event;
      o = event.srcElement;
    }
    else
    {
       o = e.target;
    }
    
    if(!capture)
    {
        o.cursor = 'auto';
    }  
}

function card_MouseEnter(e)
{
    var o;
    
    if(e == null)
    {
      e = window.event;
      o = event.srcElement;
    }
    else
    {
       o = e.target;
    }
 
    if(GetControlCardId(o) != -1)   
    {
        o.style.cursor = 'url("Cursors/hnwse.cur"), pointer;';
    }
    else
    {
        o.style.cursor = 'auto';
    }
}

function card_MouseLeave(e)
{
	var o;
    
    if(e == null)
    {
      e = window.event;
      o = event.srcElement;
    }
    else
    {
       o = e.target;
    }
    
    if(!capture)
    {
        o.cursor = 'auto';
    }
}

function makeUrl(relUrl)
{
    var url = document.URL.substring(0, document.URL.lastIndexOf('/'));
    return url + relUrl;
}

function GetSmallCardFace(cardId)
{
    return cardId == -1 ? makeUrl('/SmallCards/deck.gif') : makeUrl('/SmallCards/card' + cardId.toString() + '.gif');
}

function GetCardFace(cardId)
{
    return cardId == -1 ? makeUrl('/SmallCards/deck.gif') : makeUrl('/SmallCards/card' + cardId.toString() + '.gif');
}

function findPosX(obj)
{
    var curleft = 0;
    if (obj.offsetParent != null)
    {
        while (obj.offsetParent != null)
        {
            curleft += obj.offsetLeft;
            obj = obj.offsetParent;
        }
    }
    else 
    if (obj.x)
    {
        curleft += obj.x;
    }
    return curleft;
}

function findPosY(obj)
{
    var curtop = 0;
    
    if (obj.offsetParent != null)
    {
        while (obj.offsetParent != null)
        {
            curtop += obj.offsetTop;
            obj = obj.offsetParent;
        }
    }
    else 
    if (obj.y)
    {
        curtop += obj.y;
    }
       
    return curtop;
}

function control_DragStart(e)
{
    window.event.cancelBubble = true;
    window.event.returnValue = false;
    
    return false;
}

function opponentsCount_SelectedIndexChanged(e)
{
    ClearStatistics();
    
    var o;
    
    if(e == null)
    {
      e = window.event;
      o = event.srcElement;      
    }
    else
    {
       o = e.target;       
    }   
    
    opponentsCount = parseInt(o.value);
    
    for(iOpponentCardsPanels = 0; iOpponentCardsPanels < opponentCardsPanels.length; iOpponentCardsPanels++)
    {
        if(iOpponentCardsPanels < opponentsCount)
        {
            opponentCardsPanels[iOpponentCardsPanels].style.visibility = 'visible';
        }
        else
        {
            opponentCardsPanels[iOpponentCardsPanels].style.visibility = 'hidden';
            opponentsCards[iOpponentCardsPanels * 2].setAttribute('CardId', (-1).toString());
            opponentsCards[iOpponentCardsPanels * 2 + 1].setAttribute('CardId', (-1).toString());
        }
    }
    
    for(iInfoPanels = 1; iInfoPanels < infoPanels.length; iInfoPanels++)
    {
        if(iInfoPanels <= opponentsCount)
        {
            infoPanels[iInfoPanels].style.visibility = 'visible';
        }
        else
        {
            infoPanels[iInfoPanels].style.visibility = 'hidden';
            winPercentageValueLabels[iInfoPanels].innerHTML = "";
            tiePercentageValueLabels[iInfoPanels].innerHTML = "";
        }
    }
    
    RefreshCards();
}

function StopCapture()
{
	capture = false;
	
	moveCard.src = GetSmallCardFace(-1);
	moveControl.style.visibility = 'hidden';
	moveControl.style.left = (0).toString() + 'px';
	moveControl.style.top = (0).toString() + 'px';
	moveCard.style.cursor = 'auto';
	
	ptX = -1;
    ptY = -1;
    
    moveCardId = -1;
    sourceControl = null;
    
    RefreshCards();
}

function FFStopCapure()
{
    window.releaseEvents(Event.MOUSEMOVE);
    window.releaseEvents(Event.MOUSEUP);
    moveCard.onmouseout = null;
	window.onmousemove = null;
	window.onmouseup = null;
	window.onmouseout = null;
	
	StopCapture();
}

function moveCard_FFMouseOut(e) 
{
    if(e.relatedTarget == null)
    {
        FFStopCapure();
    }
}

function window_FFMouseOut(e) 
{    
    if(e.relatedTarget == null)
    {
        FFStopCapure();
    }
}

function MouseMove(control)
{
    if(controlFromPoint != control)
    {
        RefreshCards();

        if(control != null)
        {            
            if(moveCardId != -1)
	        {	    
	             var controlTmp = null;
    	         
	             for(iLargeCard = 0; iLargeCard < largeCards.length; iLargeCard++)
                 {
                    if(largeCards[iLargeCard] == control)
                    {
                        controlTmp = control;
                        break;
                    }
                 }
                 
                 if(controlTmp != null)
                 {
                    controlTmp.src = GetCardFace(moveCardId);
                 }
                 else
                 {
                    for(iOpponentCard = 0; iOpponentCard < opponentsCount * 2; iOpponentCard++)
                    {
                        if(opponentsCards[iOpponentCard] == control)
                        {
                            control.src = GetSmallCardFace(moveCardId);
                            break;
                        }
                    }
                 }
	        }
	        else
	        {
	            if(control != sourceControl)
	            {
	                 var controlTmp = null;
    	         
	                 for(iLargeCard = 0; iLargeCard < largeCards.length; iLargeCard++)
                     {
                        if(largeCards[iLargeCard] == control)
                        {
                            controlTmp = control;
                            break;
                        }
                     }
                     
                     if(controlTmp != null)
                     {
                        controlTmp.src = GetCardFace(GetControlCardId(sourceControl));
                     }
                     else
                     {
                        for(iOpponentCard = 0; iOpponentCard < opponentsCount * 2; iOpponentCard++)
                        {
                            if(opponentsCards[iOpponentCard] == control)
                            {
                                control.src = GetSmallCardFace(GetControlCardId(sourceControl));
                                break;
                            }
                        }
                     }
	            }
	        }    	    
        }
    }
   
    controlFromPoint = control;
}


function MouseUp()
{
    ClearStatistics();
    
    if(controlFromPoint != null)
	{
		if(moveCardId != -1)
		{
		     var controlTmp = null;
    	         
             for(iLargeCard = 0; iLargeCard < largeCards.length; iLargeCard++)
             {
                if(largeCards[iLargeCard] == controlFromPoint)
                {
                    controlTmp = controlFromPoint;
                    break;
                }
             }
             
             if(controlTmp != null)
             {
                controlTmp.setAttribute('CardId', moveCardId.toString());
             }
             else
             {
                for(iOpponentCard = 0; iOpponentCard < opponentsCount * 2; iOpponentCard++)
                {
                    if(opponentsCards[iOpponentCard] == controlFromPoint)
                    {
                        controlFromPoint.setAttribute('CardId', moveCardId.toString());
                        break;
                    }
                }
             }
		}
		else
		{
		    if(controlFromPoint != sourceControl)
	        {
	             var controlTmp = null;
        	         
                 for(iLargeCard = 0; iLargeCard < largeCards.length; iLargeCard++)
                 {
                    if(largeCards[iLargeCard] == controlFromPoint)
                    {
                        controlTmp = controlFromPoint;
                        break;
                    }
                 }
                 
                 if(controlTmp != null)
                 {
                    controlTmp.setAttribute('CardId', GetControlCardId(sourceControl).toString());
                 }
                 else
                 {
                    for(iOpponentCard = 0; iOpponentCard < opponentsCount * 2; iOpponentCard++)
                    {
                        if(opponentsCards[iOpponentCard] == controlFromPoint)
                        {
                            controlFromPoint.setAttribute('CardId', GetControlCardId(sourceControl).toString());                            
                            break;
                        }
                    }
                 }
                 
                 sourceControl.setAttribute('CardId', (-1).toString());
	        }
		}		
    }
    else
	{
	    if(sourceControl != null)
        {
            sourceControl.setAttribute('CardId', (-1).toString());
        }
	}
    
    controlFromPoint = null;
	moveCardId = -1;
	sourceControl = null;

	RefreshCards();	
}

function GetXmlNode(rootnode, nodeName)
{
    if(rootnode.nodeName == nodeName)
    {
        return rootnode;
    }
    
    for(iNode = 0; iNode < rootnode.childNodes.length; iNode++)
    {
        var node = GetXmlNode(rootnode.childNodes[iNode], nodeName);
        if(node != null)
        {
            return node;
        }        
    }
    
    return null;
}

function onLoadXML()
{ 
    if (xmlHttp.readyState == 4 || xmlHttp.readyState == 'complete')
    { 
        var winStatistics = new Array();
        var tieStatistics = new Array();
        
        var handsCountNode = GetXmlNode(xmlHttp.responseXML.documentElement, 'HandsCount');
        
        var value = handsCountNode.nodeValue;
        
        if(value == null)
        {
            value = handsCountNode.firstChild.nodeValue;
        }
        
        var handsCount = parseInt(value, 10);
                
	    var winStatisticsNode = handsCountNode.nextSibling;
	    
	    var valueNode = GetXmlNode(winStatisticsNode, 'int');
	        
	    while(valueNode != null)
	    {
	        value = valueNode.nodeValue;
	        
	        if(value == null)
	        {
	            value = valueNode.firstChild.nodeValue;
	        }
	        
	        winStatistics.push(parseInt(value, 10));	        
	        	        
	        valueNode = valueNode.nextSibling;
	    }
	    
	    var tieStatisticsNode = winStatisticsNode.nextSibling;
	    
	    valueNode = GetXmlNode(tieStatisticsNode, 'int');
	    
	    while(valueNode != null)
	    {
	        value = valueNode.nodeValue;
	        
	        if(value == null)
	        {
	            value = valueNode.firstChild.nodeValue;
	        }
	        
	        tieStatistics.push(parseInt(value, 10));	        
	        	        
	        valueNode = valueNode.nextSibling;
	    }
	    
	    ShowStatistics(winStatistics, tieStatistics, handsCount);
	    
	    calculating = false;
    } 
}

function ShowStatistics(winStatistics, tieStatistics, handsCount)
{
    var percent = winStatistics[0] * 100.0 / handsCount;
    
	if(percent >= 0.01)
	{
		winPercentageValueLabels[0].innerHTML = percent.toFixed(2);
	}
	else
	{
		if(percent != 0.0)
		{
			winPercentageValueLabels[0].innerHTML = '< ' + (0.01).toFixed(2);
		}
		else
		{
			winPercentageValueLabels[0].innerHTML = (0.00).toFixed(2);
		}
	}

	percent = tieStatistics[0] * 100.0 / handsCount;

	if(percent >= 0.01)
	{
		tiePercentageValueLabels[0].innerHTML = percent.toFixed(2);
	}
	else
	{
		if(percent != 0.0)
		{
			tiePercentageValueLabels[0].innerHTML = '< ' + (0.01).toFixed(2);
		}
		else
		{
			tiePercentageValueLabels[0].innerHTML = (0.00).toFixed(2);
		}
	}
	
	var index = 1;
	 
	for(iOpponent = 0; iOpponent < opponentsCount; iOpponent++)
	{
		if(GetControlCardId(opponentsCards[iOpponent * 2]) != -1)
		{
			percent = winStatistics[index] * 100.0 / handsCount;
    
            if(percent >= 0.01)
            {
	            winPercentageValueLabels[iOpponent + 1].innerHTML = percent.toFixed(2);
            }
            else
            {
	            if(percent != 0.0)
	            {
		            winPercentageValueLabels[iOpponent + 1].innerHTML = '< ' + (0.01).toFixed(2);
	            }
	            else
	            {
		            winPercentageValueLabels[iOpponent + 1].innerHTML = (0.00).toFixed(2);
	            }
            }

            percent = tieStatistics[index] * 100.0 / handsCount;

            if(percent >= 0.01)
            {
	            tiePercentageValueLabels[iOpponent + 1].innerHTML = percent.toFixed(2);
            }
            else
            {
	            if(percent != 0.0)
	            {
		            tiePercentageValueLabels[iOpponent + 1].innerHTML = '< ' + (0.01).toFixed(2);
	            }
	            else
	            {
		            tiePercentageValueLabels[iOpponent + 1].innerHTML = (0.00).toFixed(2);
	            }
            }

			index++;
		}
	}
}

function ClearStatistics()
{
    for(iInfoPanels = 0; iInfoPanels < infoPanels.length; iInfoPanels++)
    {
        if(iInfoPanels <= opponentsCount)
        {            
            winPercentageValueLabels[iInfoPanels].innerHTML = "";
            tiePercentageValueLabels[iInfoPanels].innerHTML = "";
        }
    }    
}

function Calculate(params)
{ 
    xmlHttp = GetXmlHttpObject(onLoadXML); 
   
    if (xmlHttp != null)
    {
        xmlHttp_Get(xmlHttp, makeUrl('/PokerCalculatorHandler.ashx?' + params)); 
       
        return true;
    }
    
    return false;    
}

function xmlHttp_Get(xmlhttp, url) 
{ 
    xmlhttp.open('GET', url, true); 
    xmlhttp.send(null); 
} 

function GetXmlHttpObject(handler) 
{ 
    var objXmlHttp = null;
    
    try 
    {
      objXmlHttp = new ActiveXObject('Msxml2.XMLHTTP');
      objXmlHttp.onreadystatechange = handler;
    }
    catch (e1)
    {
        try 
        {
            objXmlHttp = new ActiveXObject('Microsoft.XMLHTTP');
            objXmlHttp.onreadystatechange = handler;
        }
        catch (e2) 
        {
            try 
            {
                objXmlHttp = new XMLHttpRequest();
                objXmlHttp.onload = handler;
                objXmlHttp.onerror = handler;
            }
            catch (e3) 
            {
                objXmlHttp = null;
            }
        }
    }

    return objXmlHttp;
}

function help_Click(e)
{
    window.open('http://www.bluffmagazine.com/calc/help.asp', '_blank');
}

function calculate_Click(e)
{
    if(!calculating)
    {        
        ClearStatistics();
    
        var canCalculate = true;
        
        for(iOpponnent = 0; iOpponnent < opponentsCount && canCalculate; iOpponnent++)
	    {
		    canCalculate = GetControlCardId(opponentsCards[iOpponnent * 2]) == -1 && GetControlCardId(opponentsCards[iOpponnent * 2 + 1]) == -1 || GetControlCardId(opponentsCards[iOpponnent * 2]) != -1 && GetControlCardId(opponentsCards[iOpponnent * 2 + 1]) != -1;
	    }
    	
	    if(canCalculate)
	    {
	        canCalculate = GetControlCardId(playerCard1) != -1 && GetControlCardId(playerCard2) != -1 && 
	        (GetControlCardId(flopCard1) == -1 && GetControlCardId(flopCard2) == -1 && GetControlCardId(flopCard3) == -1 && GetControlCardId(turnCard) == -1 && GetControlCardId(riverCard) == -1 ||
		    GetControlCardId(flopCard1) != -1 && GetControlCardId(flopCard2) != -1 && GetControlCardId(flopCard3) != -1 && GetControlCardId(turnCard) == -1 && GetControlCardId(riverCard) == -1  ||
		    GetControlCardId(flopCard1) != -1 && GetControlCardId(flopCard2) != -1 && GetControlCardId(flopCard3) != -1 && GetControlCardId(turnCard) != -1 && GetControlCardId(riverCard) == -1 ||
		    GetControlCardId(flopCard1) != -1 && GetControlCardId(flopCard2) != -1 && GetControlCardId(flopCard3) != -1 && GetControlCardId(turnCard) != -1 && GetControlCardId(riverCard) != -1);
	    }
    	
	    if(canCalculate)
	    {
            calculating = true;

	        var params = 'PlayersCount=' + (opponentsCount + 1).toString() + '&';
    	   
	        if(GetControlCardId(flopCard1) != -1)
	        {
	            params += 'FlopCard1=' + GetControlCardId(flopCard1).toString() + '&' + 'FlopCard2=' + GetControlCardId(flopCard2).toString() + '&' + 'FlopCard3=' + GetControlCardId(flopCard3).toString() + '&';
	        }
    	    
	        if(GetControlCardId(turnCard) != -1)
	        {
	            params += 'TurnCard=' + GetControlCardId(turnCard).toString() + '&';
	        }
    	    
	        if(GetControlCardId(riverCard) != -1)
	        {
	            params += 'RiverCard=' + GetControlCardId(riverCard).toString() + '&';
	        }
    	    
	        params += 'Player1Card1=' + GetControlCardId(playerCard1).toString() + '&' + 'Player1Card2=' + GetControlCardId(playerCard2).toString();
    	    	
	        for(iOpponnent = 0; iOpponnent < opponentsCount; iOpponnent++)
	        {
	            if(GetControlCardId(opponentsCards[iOpponnent * 2]) != -1)
	            {
	                 params += '&' +  'Player' + (iOpponnent + 2).toString() + 'Card1=' + GetControlCardId(opponentsCards[iOpponnent * 2]).toString() + '&' + 'Player' + (iOpponnent + 2).toString() + 'Card2=' + GetControlCardId(opponentsCards[iOpponnent * 2 + 1]).toString();
	            }
	        }	
    	    
	        Calculate(params);    
	    }
	    else
	    {	
	        if(intervalId == -1)
	        {
	            highlightCounter = 0;     
                intervalId = window.setInterval(TimeoutProc, 500);
            }
	    }
	}
}

function TimeoutProc()
{
    HighlightCard(highlightCounter % 2 == 0);
    highlightCounter++;
    if(highlightCounter % 6 == 0)
    {
        window.clearInterval(intervalId);
        intervalId = -1;
    }
}

function HighlightCard(highlight)
{    
    if(GetControlCardId(playerCard1) == -1)
    {
        if(highlight)
        {
            playerCard1.style.borderStyle = 'solid';
            playerCard1.style.borderColor = '#FF0000';
            playerCard1.style.borderWidth = '3px';
        }
        else
        {
            playerCard1.style.borderWidth = '0px';
        }
    }
    
    if(GetControlCardId(playerCard2) == -1)
    {
        if(highlight)
        {
            playerCard2.style.borderStyle = 'solid';
            playerCard2.style.borderColor = '#FF0000';
            playerCard2.style.borderWidth = '3px';
        }
        else
        {
            playerCard2.style.borderWidth = '0px';
        }
    }	   
    
    for(iOpponnent = 0; iOpponnent < opponentsCount; iOpponnent++)
    {
        if(GetControlCardId(opponentsCards[iOpponnent * 2]) != -1 || GetControlCardId(opponentsCards[iOpponnent * 2 + 1]) != -1)
        {
            if(GetControlCardId(opponentsCards[iOpponnent * 2]) == -1)
            {
                if(highlight)
                {
                    opponentsCards[iOpponnent * 2].style.borderStyle = 'solid';
                    opponentsCards[iOpponnent * 2].style.borderColor = '#FF0000';
                    opponentsCards[iOpponnent * 2].style.borderWidth = '3px';
                }
                else
                {
                    opponentsCards[iOpponnent * 2].style.borderWidth = '0px';
                }
            }
	        
            if(GetControlCardId(opponentsCards[iOpponnent * 2 + 1]) == -1)
            {
                if(highlight)
                {
                    opponentsCards[iOpponnent * 2 + 1].style.borderStyle = 'solid';
                    opponentsCards[iOpponnent * 2 + 1].style.borderColor = '#FF0000';
                    opponentsCards[iOpponnent * 2 + 1].style.borderWidth = '3px';
                }
                else
                {
                    opponentsCards[iOpponnent * 2 + 1].style.borderWidth = '0px';
                }
            }
        }
    }
    
    if(GetControlCardId(flopCard1) == -1 && (GetControlCardId(riverCard) != -1 || GetControlCardId(turnCard) != -1 || GetControlCardId(flopCard2) != -1 || GetControlCardId(flopCard3) != -1))
    {
        if(highlight)
        {
            flopCard1.style.borderStyle = 'solid';
            flopCard1.style.borderColor = '#FF0000';
            flopCard1.style.borderWidth = '3px';
        }
        else
        {
            flopCard1.style.borderWidth = '0px';
        }
    }
    
    if(GetControlCardId(flopCard2) == -1 && (GetControlCardId(riverCard) != -1 || GetControlCardId(turnCard) != -1 || GetControlCardId(flopCard1) != -1 || GetControlCardId(flopCard3) != -1))
    {
        if(highlight)
        {
            flopCard2.style.borderStyle = 'solid';
            flopCard2.style.borderColor = '#FF0000';
            flopCard2.style.borderWidth = '3px';
        }
        else
        {
            flopCard2.style.borderWidth = '0px';
        }
    }
    
    if(GetControlCardId(flopCard3) == -1 && (GetControlCardId(riverCard) != -1 || GetControlCardId(turnCard) != -1 || GetControlCardId(flopCard1) != -1 || GetControlCardId(flopCard2) != -1))
    {
        if(highlight)
        {
            flopCard3.style.borderStyle = 'solid';
            flopCard3.style.borderColor = '#FF0000';
            flopCard3.style.borderWidth = '3px';
        }
        else
        {
            flopCard3.style.borderWidth = '0px';
        }
    }
    
    if(GetControlCardId(turnCard) == -1 && GetControlCardId(riverCard) != -1)
    {
        if(highlight)
        {
            turnCard.style.borderStyle = 'solid';
            turnCard.style.borderColor = '#FF0000';
            turnCard.style.borderWidth = '3px';
        }
        else
        {
            turnCard.style.borderWidth = '0px';
        }
    }    
}

function clearAll_Click(e)
{
    ClearStatistics();
    
    for(iLargeCard = 0; iLargeCard < largeCards.length; iLargeCard++)
    {
       largeCards[iLargeCard].setAttribute('CardId', (-1).toString());
    }
        
    for(iOpponentCard = 0; iOpponentCard < opponentsCount * 2; iOpponentCard++)
    {
        opponentsCards[iOpponentCard].setAttribute('CardId', (-1).toString());  
    }    
    
    RefreshCards();
}

function FindControl(e)
{
    for(iLargeCard = 0; iLargeCard < largeCards.length; iLargeCard++)
    {
        var x = findPosX(largeCards[iLargeCard]) - largeCards[iLargeCard].ownerDocument.documentElement.scrollLeft;
        var y = findPosY(largeCards[iLargeCard]) - largeCards[iLargeCard].ownerDocument.documentElement.scrollTop;
        
        var clientX = e.clientX;
        var clientY = e.clientY;
    
        if(clientX >= x && clientX <= x + largeCards[iLargeCard].offsetWidth && clientY >= y && clientY <= y + largeCards[iLargeCard].offsetHeight)
        {
            return largeCards[iLargeCard];
        }
    }
        
    for(iOpponentCard = 0; iOpponentCard < opponentsCount * 2; iOpponentCard++)
    {
        var x = findPosX(opponentsCards[iOpponentCard]) - opponentsCards[iOpponentCard].ownerDocument.documentElement.scrollLeft;
        var y = findPosY(opponentsCards[iOpponentCard]) - opponentsCards[iOpponentCard].ownerDocument.documentElement.scrollTop;
                    
        if(clientX >= x && clientX <= x + opponentsCards[iOpponentCard].offsetWidth && clientY >= y && clientY <= y + opponentsCards[iOpponentCard].offsetHeight)
        {
            return opponentsCards[iOpponentCard];
        }            
    }    
    
    return null;
}

function window_FFMouseMove(e) 
{
    moveControl.style.left = (findPosX(moveControl) + e.screenX - ptX).toString() + 'px';
    moveControl.style.top = (findPosY(moveControl) + e.screenY - ptY).toString() + 'px';
    
    ptX = e.screenX;
    ptY = e.screenY;
    
    MouseMove(FindControl(e));
}

function window_FFMouseUp(e) 
{
    MouseUp();
    FFStopCapure();
}

function window_IEMouseMove() 
{
    moveControl.style.left = (findPosX(moveControl) + window.event.screenX - ptX).toString() + 'px';
    moveControl.style.top = (findPosY(moveControl) + window.event.screenY - ptY).toString() + 'px';
    
    ptX = window.event.screenX;
    ptY = window.event.screenY;
    
    MouseMove(FindControl(window.event));
}

function window_IEMouseUp() 
{
    MouseUp();
    
    moveCard.onmousemove = null;
    moveCard.releaseCapture();
  
    StopCapture();
}

function smallCard_MouseDown(e)
{
    var result = true;
    var FF = false;
    
    var o;
    
    if(e == null)
    {
      e = window.event;
      o = event.srcElement;      
    }
    else
    {
       o = e.target;       
       e.cancelBubble = true;
       result = false; 
       FF = true;       
    }   
       
	var cardId = parseInt(o.getAttribute('CardId'));
	
	if(!IsCardUsed(cardId))
	{
		moveCardId = cardId;

		o.style.cursor = 'auto';
		
		moveCard.src = GetSmallCardFace(cardId);
		moveControl.style.visibility = 'visible';
		moveControl.style.left = findPosX(o).toString() + 'px';
		moveControl.style.top = findPosY(o).toString() + 'px';
		moveCard.style.cursor = 'url("Cursors/hmove.cur"), pointer;';
		
		if(FF)
		{
		    moveCard.onmouseout = moveCard_FFMouseOut;
		    window.captureEvents(Event.MOUSEMOVE);
		    window.captureEvents(Event.MOUSEUP);
		    window.onmousemove = window_FFMouseMove;
		    window.onmouseup = window_FFMouseUp;
		    window.onmouseout = window_FFMouseOut;
		}
		else
		{
		    moveCard.onmousemove = window_IEMouseMove;
		    moveCard.onmouseup = window_IEMouseUp;
		    moveCard.setCapture();
		}
		
		ptX = e.screenX;
		ptY = e.screenY;
		
		capture = true;
		
		o.src = GetSmallCardFace(-1);
	}
	
	return result;
}

function opponentCard_MouseDown(e)
{
    var result = true;
    var FF = false;
    
    var o;
    
    if(e == null)
    {
      e = window.event;
      o = event.srcElement;      
    }
    else
    {
       o = e.target;       
       e.cancelBubble = true;
       result = false; 
       FF = true;       
    }   
       
	var cardId = parseInt(o.getAttribute('CardId'));
	
	if(cardId != -1)
	{
		sourceControl = o;

		o.style.cursor = 'auto';
		
		moveCard.src = GetSmallCardFace(cardId);
		moveControl.style.visibility = 'visible';
		moveControl.style.left = findPosX(o).toString() + 'px';
		moveControl.style.top = findPosY(o).toString() + 'px';
		moveCard.style.cursor = 'url("Cursors/hmove.cur"), pointer;';
		
		if(FF)
		{
		    moveCard.onmouseout = moveCard_FFMouseOut;
		    window.captureEvents(Event.MOUSEMOVE);
		    window.captureEvents(Event.MOUSEUP);
		    window.onmousemove = window_FFMouseMove;
		    window.onmouseup = window_FFMouseUp;
		    window.onmouseout = window_FFMouseOut;
		}
		else
		{
		    moveCard.onmousemove = window_IEMouseMove;
		    moveCard.onmouseup = window_IEMouseUp;
		    moveCard.setCapture();
		}
		
		ptX = e.screenX;
		ptY = e.screenY;
		
		capture = true;
		
		o.src = GetSmallCardFace(-1);
	}
	
	return result;
}

function card_MouseDown(e)
{
    var result = true;
    var FF = false;
    
    var o;
    
    if(e == null)
    {
      e = window.event;
      o = event.srcElement;      
    }
    else
    {
       o = e.target;       
       e.cancelBubble = true;
       result = false; 
       FF = true;       
    }   
       
	var cardId = parseInt(o.getAttribute('CardId'));
	
	if(cardId != -1)
	{
		sourceControl = o;

		o.style.cursor = 'auto';
		
		moveCard.src = GetSmallCardFace(cardId);
		moveControl.style.visibility = 'visible';
		moveControl.style.left = (e.clientX - (moveControl.offsetWidth >> 1) + moveControl.ownerDocument.documentElement.scrollLeft).toString() + 'px';
		moveControl.style.top = (e.clientY - (moveControl.offsetHeight >> 1) + moveControl.ownerDocument.documentElement.scrollTop).toString() + 'px';
		moveCard.style.cursor = 'url("Cursors/hmove.cur"), pointer;';
		
		if(FF)
		{
		    moveCard.onmouseout = moveCard_FFMouseOut;
		    window.captureEvents(Event.MOUSEMOVE);
		    window.captureEvents(Event.MOUSEUP);
		    window.onmousemove = window_FFMouseMove;
		    window.onmouseup = window_FFMouseUp;
		    window.onmouseout = window_FFMouseOut;
		}
		else
		{
		    moveCard.onmousemove = window_IEMouseMove;
		    moveCard.onmouseup = window_IEMouseUp;
		    moveCard.setCapture();
		}
		
		ptX = e.screenX;
		ptY = e.screenY;
		
		capture = true;
		
		o.src = GetCardFace(-1);
	}
	
	return result;
}

function GetControlCardId(control)
{
    return parseInt(control.getAttribute('CardId'), 10);    
}

function IsCardUsed(cardId)
{
	for(iDeadCard = 0; iDeadCard < deadCards.length; iDeadCard++)
	{
		if(GetControlCardId(deadCards[iDeadCard]) == cardId)
		{
			return true;
		}
	}

	return false;
}


