/*

	(c) copyright 2008 pattrns.com
*/
var soundOn = false;
var lock = false;
var bldDetailedMessage='';
var imode = '';
var hintSelected =0;
var selectedCards = new Array();
var manySelected = 0;
var gameStart;
var gameTime;
var ppm = 0;
var leveladvance = 0;
var levelgoal = 5;
var nlevel = 10;
var backg = 'white';
var pausetime=0;
var gamePause;
var fadeTask = null;


var curPattrns = 0;
var curHintedPattrns = 0;


var objectHeight = 50;
var cardHeight = objectHeight * 3;
var ASobjectHeight = 50;
var AScardHeight = objectHeight * 3;


var ctr;
var rhs = false;
var matchexampleCount = 0;


// validateLogin
// createUser
// embed


var hadAHint=false;

var bolCompA = false;
var shapes = new Array('star', 'circle', 'cross','heart','cloud');//,'star');
var maxnum = 3;
var colors = new Array('red', 'green', 'blue','purple','yellow','orange','black','burlywood','cyan','HotPink');
var fill = new Array('solid', 'empty', 'hatch');
//fill = new Array('solid');
var cardDeck = new Array();
var activeBoard = new Array();
var windowTimes = new Array();
var modi = '';


function clearSelection()
{

for(ir=0;ir<selectedCards.length;ir++)
{
document.getElementById('card' + selectedCards[ir]).parentNode.style.background=backg;
 document.getElementById('card' + selectedCards[ir]).style.background = backg;


}
    manySelected = 0;
    selectedCards = new Array();
}


if(  get_cookie('lastlevel'))
{
setLevel(get_cookie('lastlevel'));
levelgoal=997;

}
else
{
setLevel(0);
}

function setLevel(lId)
{
set_cookie('lastlevel',lId,2015,01,01);

curLevel = lId;

if(lId=='0')
{
shapes = new Array('star', 'circle', 'cross','heart','cloud');//,'star');
var allcolors = new Array('red', 'green', 'blue','purple');
fisherYates(allcolors);


colors = new Array(allcolors[0],allcolors[0],allcolors[0],allcolors[0]);//,'green','blue','red','green','blue');//, 'green', 'blue','purple','yellow','orange','black','burlywood','cyan','HotPink');
maxnum = 1;
fill = new Array('solid','solid','solid');//, 'empty');//, 'hatch');
levelgoal=5;
}

if(lId=='1')
{
shapes = new Array('star','star');//, 'circle', 'cross','heart','cloud');//,'star');
colors = new Array('red','green','blue','red','green','blue');//, 'green', 'blue','purple','yellow','orange','black','burlywood','cyan','HotPink');
maxnum = 1;
fill = new Array('solid','solid','solid');//, 'empty');//, 'hatch');
levelgoal=5;
}


if(lId=='2')
{
shapes = new Array('star','star','star');//, 'circle', 'cross','heart','cloud');//,'star');
colors = new Array('green','green','green');//, 'green', 'blue','purple','yellow','orange','black','burlywood','cyan','HotPink');
maxnum = 1;
fill = new Array('solid', 'empty');
levelgoal=5;
}



if(lId=='3')
{
shapes = new Array('star', 'circle', 'cross','heart','cloud');//,'star');
colors = new Array('green', 'blue','purple','yellow','orange','black','burlywood','cyan','HotPink');
maxnum = 1;
fill = new Array('solid');
levelgoal=5;
}

if(lId=='4')
{
shapes = new Array('star','star','star');//, 'circle', 'cross','heart','cloud');//,'star');
colors = new Array('green','green','green');//, 'green', 'blue','purple','yellow','orange','black','burlywood','cyan','HotPink');
maxnum = 1;
fill = new Array('solid', 'empty','hatch');
levelgoal=5;
}

if(lId=='5')
{
shapes = new Array('star','star','star');//, 'circle', 'cross','heart','cloud');//,'star');
colors = new Array('green','blue','purple','yellow','orange','black','burlywood','cyan','HotPink');
maxnum = 1;
fill = new Array('solid', 'empty','hatch');
levelgoal=5;
}


if(lId=='6')
{
shapes = new Array('star', 'circle', 'cross','heart','cloud');//, 'circle', 'cross','heart','cloud');//,'star');
colors = new Array('green','blue','purple','yellow','orange','black','burlywood','cyan','HotPink');
maxnum = 1;
fill = new Array('solid', 'empty','hatch');
levelgoal=5;
}


if(lId=='7')
{
shapes = new Array('star', 'circle', 'cross','heart','cloud');//, 'circle', 'cross','heart','cloud');//,'star');
colors = new Array('green');
maxnum = 2;
fill = new Array('solid', 'empty','hatch');
levelgoal=5;
}

if(lId=='8')
{
shapes = new Array('star', 'circle', 'cross','heart','cloud');//, 'circle', 'cross','heart','cloud');//,'star');
colors = new Array('green','blue','purple','yellow','orange','black','burlywood','cyan','HotPink');
maxnum = 2;
fill = new Array('solid', 'empty','hatch');
levelgoal=5;
}


if(lId=='9')
{
shapes = new Array('star', 'circle', 'cross','heart','cloud');//, 'circle', 'cross','heart','cloud');//,'star');
colors = new Array('green','cyan','HotPink');
maxnum = 3;
fill = new Array('solid');
levelgoal=8;
}


if(lId=='10')
{
shapes = new Array('star', 'circle', 'cross');//,'heart','cloud');//, 'circle', 'cross','heart','cloud');//,'star');
colors = new Array('green','blue','red');//,'purple','yellow','orange','black','burlywood','cyan','HotPink');
maxnum = 3;
fill = new Array('solid','empty');
levelgoal=8;
}


if(lId=='11' || lId=='12')
{

shapes = new Array('star', 'circle', 'cross','heart','cloud');
colors = new Array('red', 'green', 'blue','purple','yellow','orange','black','burlywood','cyan','HotPink');


maxnum = 3;
fill = new Array('solid','empty','hatch');


levelgoal=5;
}



if(lId=='120x')
{

var allshapes = new Array('star', 'circle', 'cross','heart');
 fisherYates(allshapes);
var allcolors = new Array('red', 'green', 'blue');


shapes = new Array(allshapes[0],allshapes[1],allshapes[2]);
colors = new Array(allcolors[0],allcolors[1],allcolors[2]);
maxnum = 3;
fill = new Array('solid','empty','hatch');


levelgoal=997;
}



if(lId=='99')
{
shapes = new Array('cross','cross','cross');//, 'circle', 'cross','heart','cloud');//,'star');
colors = new Array('green','green','green');//, 'green', 'blue','purple','yellow','orange','black','burlywood','cyan','HotPink');
maxnum = 2;
fill = new Array('solid', 'empty');//'empty', 'hatch');
}

}

function help()
{
	openBox();
	clearAllTimeouts();
	document.getElementById('outsideBox').onclick=null;

	msg = 'Welcome to Pattrns<p>Match 3 cards. Elements (shape/color/fill/number) must be the same or different to make a match. <br>';
msg +='<center><p><button style="width:200px" onclick="setLevel(11); resetGame();closeBox();">Start Game (Challenging)</button><br><button style="width:200px" onclick="resetGame();closeBox();">Start Game (Easy)</button><br><br><button style="width:200px" onclick="setLevel(0);resetGame();closeBox();">Start Training Game</button><br><button style="width:200px" onclick="setLevel(11);levelgoal=997;resetGame();closeBox();">Play Fun Level (11)</button><br>';
msg+=	'<br/><br/><select style="width:200px" onchange="setLevel(this.value);levelgoal=997;resetGame();closeBox();"><option>Or Choose a Level...</option><option value=0>0 To Easy</option><option value=1>1</option><option value=2>2</option><option value=3>3</option><option value=4>4</option><option value=5>5</option><option value=6>6</option><option value=7>7</option><option value=8>8</option><option value=9>9</option><option value=10>10</option><option value=11>11 Fun</option></select><br/><a href="http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=300756675&mt=8">Get Pattrns for the iPhone</a></center>';
if(imode=='iPhone'){
msg+='<center><iframe src=amazonai.htm width=180 height=150 frameborder=0></iframe></center>';
}
else
{
msg+='<center><iframe src=amazonad.htm width=730 height=90 frameborder=0></iframe></center>';
}

	document.getElementById('insideBox').innerHTML = msg;


}



function pause()
{
	gamePause += (new Date().getTime())-gameStart;
	document.getElementById('insideBox').innerHTML = '<button onclick="gameStart =  new Date().getTime();   clearSelection(); fisherYates(cardDeck); 	validateBoard(); renderBoard();closeBox();">Resume Game</button><br><iframe src=pause.htm width=750 height=500 frameborder=0></iframe>';
openBox();
}

function gameOver()
{

gameTime = new Date().getTime();
ppm = (curPattrns/(((new Date().getTime())-gameStart+gamePause)/1000/60)).toFixed(2);
if(ppm=='NaN') ppm=0;

openBox();
clearAllTimeouts();
document.getElementById('outsideBox').onclick=null;
//document.getElementById('insideBox').innerHTML= '<iframe align=right src="http://rcm.amazon.com/e/cm?t=andrewdsmithshom&o=1&p=8&l=as1&asins=B00000IV34&fc1=000000&IS2=1&lt1=_blank&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>';

document.getElementById('insideBox').innerHTML ='';
if(leveladvance>=levelgoal && curLevel!=12) 
{
document.getElementById('insideBox').innerHTML = '<b>You have completed level ' + curLevel + '</b><br>Remember each separate element must be the same<b> or different</b> on each card. (The Elements are shapes, colors, fills, and number of shapes)';
document.getElementById('insideBox').innerHTML+='<p><button onclick="setLevel(Math.round(curLevel)+1); resetGame();">Advance to next level!</button></p>';
}
else
{
document.getElementById('insideBox').innerHTML+='<p> <div id=trk>';
if(  get_cookie('u'))
{
	recordHS();
}
else
{
rhs=true;
document.getElementById('insideBox').innerHTML+= '<p>Track your best scores, and see how you rank against others. Sign in<p> ' +  getLogScreen() + '<p>';
recordHSA();
}
document.getElementById('insideBox').innerHTML+='</div>';
}



document.getElementById('insideBox').innerHTML+= '<center>' +getScoreBoard()+'</center>';

msg +='<center>Welcome to Pattrns<p><button style="width:200px" onclick="resetGame();closeBox();">Play Current Level Again</button><br><br><button style="width:200px" onclick="setLevel(0);resetGame();closeBox();">Start Training Game</button><br><button style="width:200px" onclick="setLevel(11);levelgoal=997;resetGame();closeBox();">Play Fun Level (11)</button><br>';
msg+=	'<br/><br/><select style="width:200px" onchange="setLevel(this.value);levelgoal=997;resetGame();closeBox();"><option>Or Choose a Level...</option><option value=0>0 To Easy</option><option value=1>1</option><option value=2>2</option><option value=3>3</option><option value=4>4</option><option value=5>5</option><option value=6>6</option><option value=7>7</option><option value=8>8</option><option value=9>9</option><option value=10>10</option><option value=11>11 Fun</option></select></center>';
if(imode=='iPhone'){
msg+='<center><iframe src=amazonai.htm width=180 height=150 frameborder=0></iframe></center>';
}
else
{
msg+='<center><iframe src=amazonad.htm width=730 height=90 frameborder=0></iframe></center>';
}
document.getElementById('insideBox').innerHTML+=msg;


//document.getElementById('insideBox').innerHTML+= '<form action="https://www.paypal.com/cgi-bin/webscr" method="post"><input type="hidden" name="cmd" value="_s-xclick"><input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donate_SM.gif" style="border:0px" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"><img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1"><input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----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-----END PKCS7-----"></form>';


		return;      

}

function clearAllTimeouts()
{
	for( ixo =0;ixo<windowTimes.length;ixo++)
{
try{



		window.clearTimeout(windowTimes[ixo]);
}catch(e){}
}
windowTimes = new Array();
}


function drawAll() {
    msg = '<table>';

    for (s = 0; s < shapes.length; s++) {
        for (c = 0; c < colors.length; c++) {
            for (f = 0; f < fill.length; f++) {
                msg += '<tr><td>' + drawObject(colors[c], shapes[s], fill[f]);
                msg += '</td><td><A href=shapes.asp?color=' + colors[c] + '&fill=' + fill[f] + '&shape=' + shapes[s] + '>';
                msg += 'shapes.asp?color=' + colors[c] + '&fill=' + fill[f] + '&shape=' + shapes[s] + '</a><br/>';

                msg += '</td></tr>';

            }
        }
    }
    msg += '</table>';
    document.getElementById('scoreArea').innerHTML = msg;

}

function printURLs() {
    msg = '';

    for (s = 0; s < shapes.length; s++) {
        for (c = 0; c < colors.length; c++) {
            for (f = 0; f < fill.length; f++) {
                msg += '<A href=s4.asp?color=' + colors[c] + '&fill=' + fill[f] + '&shape=' + shapes[s] + '&sv=1>';
                msg += 's3.asp?color=' + colors[c] + '&fill=' + fill[f] + '&shape=' + shapes[s] + '</a><br/>';


            }
        }
    }

    document.getElementById('scoreArea').innerHTML = msg;

}


function loadDeck() {
    for (s = 0; s < shapes.length; s++) {
        for (c = 0; c < colors.length; c++) {
            for (f = 0; f < fill.length; f++) {
                for (n = 0; n < maxnum; n++) {

                    cardDeck.push(new Array(n + 1, colors[c], shapes[s], fill[f], false));

                }
            }
        }

    }


if(document.getElementById('leaderboard'))
{

document.getElementById('leaderboard').src = 'engine.php?l=1&a=' + (new Date().getTime());
}

    fisherYates(cardDeck);
if(curLevel==11)
{
var newDeck =new Array();
for(ix=0;ix<90;ix++)
{
	newDeck.push(cardDeck[ix]);	
}
cardDeck = newDeck;
}
    ctr = 0;
//ctr = 9*7;

//ctr = 9*7;

maxr = 12;
if(curLevel==11) maxr = 18;    

	for(i=0;i<maxr;i++)
		{
		ctr++;
		activeBoard.push(ctr-1);

}
	validateBoard();

// Now start the timer
     gameStart =  new Date().getTime();
gamePause=0;
}

function updateScoreBoard()
{

    document.getElementById('scoreArea').innerHTML =getScoreBoard();
}

function getScoreBoard()
{
var msg;
	msg = '<table style="font-size:8pt;border:1px solid black">';
if(levelgoal==997)
{
	msg += '<tr><td align=center><b>Level ' + curLevel + '</b></td></tr>';	
msg+= '<tr><td>Cards remaining :</td><td> ' + (cardDeck.length - ctr + activeBoard.length) + '</td></tr>';
}else{
	msg += '<tr><td align=center><b>Training Level ' + curLevel +'</b></td></tr>';
	msg += '<tr><td>Pattrns Left:</td><td>' + (levelgoal - leveladvance) + '</td></tr>';
}
msg+= '<tr><td>Found:</td><td> ' + curPattrns +'</td></tr>' ;
//msg+= '<tr><td>Assisted Finds:</td><td>' + curHintedPattrns + '</td></tr>';  
ppm = (curPattrns/(((new Date().getTime())-gameStart+gamePause)/1000/60)).toFixed(2);
if(ppm=='NaN') ppm=0;

msg += '<tr><td>Pattrns Per Min:</td><td>' + ppm + '</td></tr>';

	msg+= "</table>"

return(msg);
}

function renderBoard()
{
var nxr,i,mystr;

	nxr = activeBoard.length;
	nxrc1 = -1;

for (r = 0; r < 3; r++) {
        mystr = "<table><tr>"
        for (i = 0; i < nxr/3; i++) {
nxrc1++;

if(activeBoard[nxrc1]>=cardDeck.length) break;

msgn = cardDeck[activeBoard[nxrc1]][0] + ' / ' + cardDeck[activeBoard[nxrc1]][1]+ ' / ' + cardDeck[activeBoard[nxrc1]][2]+ ' / ' + cardDeck[activeBoard[nxrc1]][3];
if(imode=='iPhone')
        mystr += '<td  height="' + cardHeight + '" style="border:1px solid white;background:' + backg + '"   ><div style="width:100%;height:100%" onclick="push(' + activeBoard[nxrc1] + ');" id="card' + activeBoard[nxrc1]+ '">' + drawCard(cardDeck[activeBoard[nxrc1]][0], cardDeck[activeBoard[nxrc1]][1], cardDeck[activeBoard[nxrc1]][2], cardDeck[activeBoard[nxrc1]][3]) + '</div></td>';
else
            mystr += '<td  title="'+ msgn +'" height="' + cardHeight + '" style="border:1px dotted #AAAAAA;background:' + backg + '" onmouseover="this.style.border=\'1px solid #000000\';"  onmouseout="this.style.border=\'1px dotted #AAAAAA\';"><div style="width:100%;height:100%" onclick="push(' + activeBoard[nxrc1] + ');" id="card' + activeBoard[nxrc1]+ '">' + drawCard(cardDeck[activeBoard[nxrc1]][0], cardDeck[activeBoard[nxrc1]][1], cardDeck[activeBoard[nxrc1]][2], cardDeck[activeBoard[nxrc1]][3]) + '</div></td>';

        }
        mystr += "</tr></table>";
	document.getElementById('layout' + r).innerHTML = mystr;
    }

updateScoreBoard();
}


function push(ct) {

if(lock)
	return;
if(soundOn) 
{

soundManager.play('select');
}

if(fadeTask)
{
		window.clearTimeout(fadeTask);	
lock=true;
fadingElements = new Array();
    manySelected = 0;
    selectedCards = new Array();
validateBoard();
fadeTask = null;
lock = false;

}



bolSeld = false;
for(ir=0;ir<selectedCards.length;ir++)
{
	if(selectedCards[ir]==ct) bolSeld = true;
}
if(bolSeld)
{
 document.getElementById('card' + ct).parentNode.style.background = backg;
 document.getElementById('card' + ct).style.background = backg;
        manySelected--;
        selectedCards = removeVal(selectedCards, ct);

}
else
 {

        if (manySelected == 3) {
            alert('you already have 3 selected!');
        } else {
try{

            manySelected++;
            selectedCards.push(ct);

            cardDeck[ct][4] = true;
            document.getElementById('card' + ct).parentNode.style.background = '#AAAAAA';
            document.getElementById('card' + ct).style.background = '#AAAAAA';

            if (selectedCards.length == 3) {

                validateMatch()
            }
}catch(e)
{
alert(ct);
}

        }
    }

/*    msg2 = '';
    if (selectedCards.length >= 1) msg2 += selectedCards[0];
    if (selectedCards.length == 2) msg2 += ',' + selectedCards[1];
*/

//Update the aid box
if(document.getElementById('aid'))
{
if(curPattrns<16){

if(selectedCards.length==2)
{

	document.getElementById('aid').innerHTML=  'Your Pattrn is: ' + uberGetPattrns(0,'number') + ', ' +uberGetPattrns(1,'colors') + ',' +uberGetPattrns(2,'shapes')+',' +uberGetPattrns(3,'fills') ; ;
}
else
{
document.getElementById('aid').innerHTML='&nbsp;';
}}
else
{
document.getElementById('aid').innerHTML='&nbsp;';
}
}
updateScoreBoard();
}


/* fisherYates taken from http://sedition.com/perl/javascript-fy.html */
function fisherYates(myArray) {
    var i = myArray.length;
    if (i == 0) return false;
    while (--i) {
        var j = Math.floor(Math.random() * (i + 1));
        var tempi = myArray[i];
        var tempj = myArray[j];
        myArray[i] = tempj;
        myArray[j] = tempi;
    }
}

function uberGetPattrns(vlAttribute,nm)
{
if(cardDeck[selectedCards[0]][vlAttribute]==cardDeck[selectedCards[1]][vlAttribute])
{
return(nm + ' same (' + cardDeck[selectedCards[0]][vlAttribute] + ')');
}
else
{

return( nm + ' different');
}
}


function uberValidate(arCards, vlAttribute,wA) {

try{
    //Validate Colors--either all different or all the same
    if (cardDeck[arCards[0]][vlAttribute] == cardDeck[arCards[1]][vlAttribute] && cardDeck[arCards[0]][vlAttribute] == cardDeck[arCards[2]][vlAttribute]) {

        return (1);
    } else {
        if (cardDeck[arCards[0]][vlAttribute] != cardDeck[arCards[1]][vlAttribute] && cardDeck[arCards[0]][vlAttribute] != cardDeck[arCards[2]][vlAttribute] && cardDeck[arCards[1]][vlAttribute] != cardDeck[arCards[2]][vlAttribute]) {
            return (2);
        } else {


//It doesn't work for some reason... why?
if(cardDeck[arCards[0]][vlAttribute]==cardDeck[arCards[1]][vlAttribute])
{
bldDetailedMessage = "<b>You have two " + cardDeck[arCards[0]][vlAttribute] + "s</b><br>The " + wA + " must be all the same on every card or all different on every card.<p>";
}
else
{
bldDetailedMessage = "<b>You have two " + cardDeck[arCards[2]][vlAttribute] +  "s</b><br>The " + wA + " must be all the same on every card or all different on every card.<p>";
}


            return (0);
        }

    }
}catch(e)
{
return(0);
}

}

function validateMatch() {

var goodMatch;
    hintSelected=0;
    msg = '';
bldDetailedMessage = '';
    matchLevel = 0;
    goodMatch = true;
    colorResults = uberValidate(selectedCards, 1,'colors');
    if (colorResults == 1 || colorResults == 2) {} else {
        goodMatch = false;
        msg += bldDetailedMessage;
    }

    countResults = uberValidate(selectedCards, 0,'number of items');
    if (countResults == 1 || countResults == 2) {} else {
        goodMatch = false;
//        msg += ('<b>Number</b> of shapes must be the same or different<br>');
        msg += bldDetailedMessage;

    }

    countResults = uberValidate(selectedCards, 2,'shapes');
    if (countResults == 1 || countResults == 2) {} else {
        goodMatch = false;
//        msg += ('<b>Type</b> of shape must be the same or different<br>');
        msg += bldDetailedMessage;
    }


    countResults = uberValidate(selectedCards, 3,'fill');
    if (countResults == 1 || countResults == 2) {} else {
        goodMatch = false;
//        msg += ('<b>Fill pattern</b> must be the same or different<br>');
        msg += bldDetailedMessage;
    }

    if (goodMatch == false) {



			openBox();
 			windowTimes.push(window.setTimeout('badMatch();',15000));
	document.getElementById('outsideBox').onclick = function() {badMatch();};
				document.getElementById('insideBox').innerHTML="<span>" + msg + "<br><br>Pattrn is not valid. Try again<p>Click to Close</span>";
if(soundOn) 
{

soundManager.play('bad');
}

		}

    if (goodMatch==true) 
	{
if(soundOn) 
{

soundManager.play('good');
}

leveladvance++;
	curPattrns++; 

	processMatch(1);
if(leveladvance>=levelgoal)
{
	gameOver();
	return;
}

	//document.getElementById('outsideBox').onclick = function() {processMatch();};
	}
	

}

function drawCard(itemNum, color, shape, pattern) {

    var template2;
    if (itemNum == 1) {

        template2 = document.getElementById('template2_3').innerHTML;
        template2 = template2.replace(/\[h\]/, cardHeight);
        template2 = template2.replace(/\[wx\]/g,(Math.round((objectHeight / 50) * 50) *2) );
        template2 = template2.replace(/\[1\]/, drawObject(color, shape, pattern));


    }
    if (itemNum == 2) {
        template2 = document.getElementById('template2_2').innerHTML;
        template2 = template2.replace(/\[h\]/, cardHeight);
        template2 = template2.replace(/\[wx\]/g,(Math.round((objectHeight / 50) * 50) *2) );

        template2 = template2.replace(/\[1\]/, drawObject(color, shape, pattern));
        template2 = template2.replace(/\[2\]/, drawObject(color, shape, pattern));

    }
    if (itemNum == 3) {

        template2 = document.getElementById('template2').innerHTML;
        template2 = template2.replace(/\[h\]/, cardHeight);
        template2 = template2.replace(/\[wx\]/g,(Math.round((objectHeight / 50) * 50) *2) );
        template2 = template2.replace(/\[1\]/, drawObject(color, shape, pattern));
        template2 = template2.replace(/\[2\]/, drawObject(color, shape, pattern));
        template2 = template2.replace(/\[3\]/, drawObject(color, shape, pattern));

    }

    return (template2);
}

function drawObject(color, shape, pattern) {
    //	return('<object type="image/svg+xml" data="shapes.asp?color=' + color + '&fill=' + pattern + '&shape=' + shape + '" width="50" height="50"></object>');

    return ('<img src="pattrn_n/shape_' + pattern + '_' + color + '_' + shape + '_' + modi + '.png" width="' + ( Math.round((objectHeight / 50) * 50)) + '" height="' + objectHeight + '"/>');

}

function drawObject2(color, shape, pattern) {
    //	return('<object type="image/svg+xml" data="shapes.asp?color=' + color + '&fill=' + pattern + '&shape=' + shape + '" width="100" height="50"></object>');
    return ('<img src="pattrn_n/shape_' + pattern + '_' + color + '_' + shape + '_' + modi + '.png" width="' + ( Math.round((objectHeight / 50) * 50)) + '" height="' + objectHeight + '"/>');
}



function validateBoard(doRedraw)
{
lock= true;


if(curLevel==11) {
ctr++;activeBoard.push(ctr-1);ctr++;	activeBoard.push(ctr-1);	ctr++;activeBoard.push(ctr-1);
if ((cardDeck.length - ctr) <=1) {
ctr++;activeBoard.push(ctr-1);ctr++;	activeBoard.push(ctr-1);	ctr++;activeBoard.push(ctr-1);
}
}


if(isThereAPattrn()==false)
{


if ((cardDeck.length - ctr) <=1) {
gameOver();
lock=false;
return;

 }



//	alert('This layout doesn\'t have a Pattrn. We will add a few more cards to this round.');
ctr++;activeBoard.push(ctr-1);ctr++;	activeBoard.push(ctr-1);	ctr++;activeBoard.push(ctr-1);
if(isThereAPattrn()==false)
{
if ((cardDeck.length - ctr) <=1) {
gameOver();
lock=false;
return;
       }
ctr++;activeBoard.push(ctr-1);ctr++;	activeBoard.push(ctr-1);	ctr++;activeBoard.push(ctr-1);
if(isThereAPattrn()==false)
{
if ((cardDeck.length - ctr) <=1) {
gameOver();
lock=false;
return;
      }
ctr++;activeBoard.push(ctr-1);ctr++;	activeBoard.push(ctr-1);	ctr++;activeBoard.push(ctr-1);
}


}


//renderBoard();
}

if(activeBoard.length<12)
{
	renderBoard();
}
else
if(doRedraw!=1 )
{
//alert('r');
//	renderBoard();
}

renderBoard();
lock=false;
}


function processMatch()
{ 
var nx;

clearAllTimeouts();

	fillStr = '<table><tr>';
//Last match box fill
    for (nx = 0; nx < 3; nx++) {
                oldObjectHeight = objectHeight;
                objectHeight = 25;
		oldmodi = modi;
		modi='h';
                cardHeight = objectHeight * 3;
                fillStr += '<td><div style="background:white">' + drawCard(cardDeck[selectedCards[nx]][0], cardDeck[selectedCards[nx]][1], cardDeck[selectedCards[nx]][2], cardDeck[selectedCards[nx]][3]) + '</div></td>';
                objectHeight = oldObjectHeight;
		modi=oldmodi;
                cardHeight = objectHeight * 3
	}

	        document.getElementById('lastMatch').innerHTML = '<font style="font-size:8pt">last match</font>' + fillStr + "</tr></table>";
	        document.getElementById('lastMatch').style.border = '1px solid black';






//alert('processMatch');
	if(activeBoard.length==12 && (cardDeck.length-ctr)>2)
	{	
		    for (nx = 0; nx < 3; nx++) {
//	activeBoard = removeVal(activeBoard, selectedCards[nx]);
ctr++;
activeBoard = replaceVal(activeBoard, selectedCards[nx],ctr-1);
fade('card' + selectedCards[nx],selectedCards[nx],ctr,nx);
document.getElementById('card' + selectedCards[nx]).onclick=null;
   //     document.getElementById('card' + selectedCards[nx]).parentNode.innerHTML = '<div  style="background:white" onclick="push(' + (ctr -1) + ');" id="card' + (ctr-1) + '" >' + drawCard(cardDeck[(ctr-1)][0], cardDeck[(ctr-1)][1], cardDeck[ctr-1][2], cardDeck[ctr-1][3]) + '</div>';
	//        activeBoard.push(ctr-1);
//	
		}
        
	    }
else
{	    for (nx = 0; nx < 3; nx++) {
                activeBoard = removeVal(activeBoard, selectedCards[nx]);

		fade('card' + selectedCards[nx],selectedCards[nx],-5,nx);

		}
}



	

updateScoreBoard();


        

/*for (nx = 0; nx < 3; nx++) {
          
	if(document.getElementById('card' + selectedCards[nx]))
		 document.getElementById('card' + selectedCards[nx]).style.background = backg;

}
*/

	

closeBox();



}

function resetGame()
{
leveladvance =0;
rhs=false;
curPattrns = 0;
curHintedPattrns = 0;
		clearAllTimeouts();
fadingElements = new Array();
    manySelected = 0;
    selectedCards = new Array();
fadeTask = null;
lock = false;


closeBox();
cardDeck = new Array(); activeBoard = new Array();loadDeck();
updateScoreBoard();
}
function isThereAPattrn()
{
    curl = 1;
    for (io = 0; io < activeBoard.length; io++) {
        for (ib = curl - 1; ib < activeBoard.length; ib++) {

            for (ic = curl - 1; ic < activeBoard.length; ic++) {
                if (ic != ib && io != ib && io != ic) {

                    myCards = new Array(activeBoard[io], activeBoard[ib], activeBoard[ic]);
                    //document.getElementById('scoreArea').innerHTML+= activeBoard[io] + ','+ activeBoard[ib] + ',' + activeBoard[ic] + '<br>';
                    msg = '';
                    goodMatch = true;
                    colorResults = uberValidate(myCards, 1);
                    if (colorResults == 1 || colorResults == 2) {
	                    countResults = uberValidate(myCards, 0);
        	            if (countResults == 1 || countResults == 2)
                                    countResults = uberValidate(myCards, 2);
                		    if (countResults == 1 || countResults == 2) 
			                    countResults = uberValidate(myCards, 3);
				                    if (countResults == 1 || countResults == 2) 
								{
					                   return(true);
                        ib = 999;
                        io = 999;
                        ic = 999;

								}
                     
		                    }

                }

            }

        }
        curl++;
    }
return(false);
}


function hint() {
if(hadAHint!=true)
{
	rs = confirm('Every time you take a hint you will lose one point score. Click OK to take the hint');
	if(rs)
		{	hadAHint=true;
		}
	else
{
return;	
}
		
}
for(ir=0;ir<selectedCards.length;ir++)
{
	document.getElementById('card' + selectedCards[ir]).style.background=backg;
}
selectedCards = new Array();

//		document.getElementById('insideBox').innerHTML="<b>Finding Computer Assisted Pattrn</b>";
//	openBox();
    curl = 1;
    for (io = 0; io < activeBoard.length; io++) {
        for (ib = curl - 1; ib < activeBoard.length; ib++) {

            for (ic = curl - 1; ic < activeBoard.length; ic++) {
                if (ic != ib && io != ib && io != ic) {

                    myCards = new Array(activeBoard[io], activeBoard[ib], activeBoard[ic]);
                    //document.getElementById('scoreArea').innerHTML+= activeBoard[io] + ','+ activeBoard[ib] + ',' + activeBoard[ic] + '<br>';
                    msg = '';
                    goodMatch = true;
                    colorResults = uberValidate(myCards, 1);
                    if (colorResults == 1 || colorResults == 2) {
	                    countResults = uberValidate(myCards, 0);
        	            if (countResults == 1 || countResults == 2)
                                    countResults = uberValidate(myCards, 2);
                		    if (countResults == 1 || countResults == 2) 
			                    countResults = uberValidate(myCards, 3 );
				                    if (countResults == 1 || countResults == 2) 
								{
if(hintSelected==0)
{
document.getElementById('card' + activeBoard[io]).style.background = 'yellow';
manySelected=0;
selectedCards = new Array();
push(activeBoard[io]);
hintSelected = 1;
curPattrns--;
updateScoreBoard();
}
else
if(hintSelected==1)
{
		document.getElementById('card' + activeBoard[io]).style.background = 'yellow';
		document.getElementById('card' + activeBoard[ib]).style.background = 'yellow';
manySelected=0;
selectedCards = new Array();
push(activeBoard[io]);
push(activeBoard[ib]);

hintSelected = 2;

curPattrns--;
updateScoreBoard();
}
else
if(hintSelected==2)
{
		document.getElementById('card' + activeBoard[io]).style.background = 'yellow';
		document.getElementById('card' + activeBoard[ib]).style.background = 'yellow';
                document.getElementById('card' + activeBoard[ic]).style.background = 'yellow';
manySelected=0;
selectedCards = new Array();
hintSelected = 0;
curPattrns-=2;

push(activeBoard[io]);
push(activeBoard[ib]);
push(activeBoard[ic]);

//updateScoreBoard();
//validateMatch();
}


					                    
//			msg = "<table><tr><td style='border:1px solid black'>" + document.getElementById('card' + activeBoard[io]).innerHTML;
//			msg+= "</td><td width=25></td><td style='border:1px solid black'>" + document.getElementById('card' + activeBoard[ib]).innerHTML;
//			msg+= "</td><td width=25></td><td style='border:1px solid black'>" + document.getElementById('card' + activeBoard[ic]).innerHTML;			
//			msg+= "</td></tr></table><br><b>Computer Assisted Move<br><span onclick='closeBox();'>close</span>";
//			bolCompA = true;	
//			document.getElementById('insideBox').innerHTML="<b>Computer Assisted Move</b>";
//			window.setTimeout('closeBox();',1000);
//	selectedCards = new Array(activeBoard[io],activeBoard[ib],activeBoard[ic]);
//	manySelected = 3;
//                validateMatch()

                        return;

								}
                     
		                    }

                }

            }

        }
        curl++;
    }


}

function removeVal(nArr, vl) {
    myNewArr = new Array();
    for (zz = 0; zz < nArr.length; zz++) if (nArr[zz] != vl) myNewArr.push(nArr[zz]);

    return (myNewArr);

}


function replaceVal(nArr, vl,nv) {
    myNewArr = new Array();
    for (zz = 0; zz < nArr.length; zz++) if (nArr[zz] != vl) myNewArr.push(nArr[zz]); else myNewArr.push(nv);

    return (myNewArr);

}


function removeVal2(nArr, vl) {
    myNewArr = new Array();
    for (zz = 0; zz < nArr.length; zz++) if (nArr[zz][0] != vl) myNewArr.push(nArr[zz]);

    return (myNewArr);

}



function closeBox()
{
	document.getElementById('outsideBox').style.display='none';
	document.getElementById('outsideBoxBk').style.display='none';

}

function openBox()
{
	document.getElementById('outsideBox').style.display='';
	document.getElementById('outsideBoxBk').style.display='';

}

function badMatch()
{
var nx;
	clearAllTimeouts();
//alert('badMatch');
	for (nx = 0; nx < 3; nx++) 
	{	if(document.getElementById('card' + selectedCards[nx]))
		 document.getElementById('card' + selectedCards[nx]).style.background = backg ;

	}


    manySelected = 0;
    selectedCards = new Array();
	
	closeBox();
}

function showEmbed()
{
	clearAllTimeouts();
	openBox();
	document.getElementById('insideBox').innerHTML='Embed the game in your blog, copy the HTML below and paste it into your blog or website <p><textarea style="width:90%"><iframe src="http://www.pattrns.com/e.htm" frameborder="0" width=300 height=380 style="border:0px solid black"></iframe></textarea>';
	document.getElementById('insideBox').innerHTML+='<p><button onclick="closeBox();">Close</button>';

}

function about()
{

	clearAllTimeouts();
	document.getElementById('insideBox').innerHTML='Embed the game in your blog, copy the HTML below and paste it into your blog or website <p><textarea style="width:90%"><iframe src="http://www.pattrns.com/e.htm" frameborder="0" width=300 height=380 style="border:0px solid black"></iframe></textarea>';
msg='<table><tr valign="top"><td width=500 height=440><iframe src=about.htm width=500 height=440 frameborder=0></iframe>';
msg+='</center></td></tr>';

msg+='<tr><td><br><p align=center><a href="javascript: closeBox();">Close</a></p><center style="font-size:8pt"><i>(c) copyright 2008 pattrns.com -- not liable for loss of productivity</i><br><br>';
msg+='</td><td></td></tr></table></center>';	
document.getElementById('insideBox').innerHTML=msg;
	openBox();
	

}



function login()
{
	//Check local cookie
	//If logged in then note it
	//Otherwise put a sign in link at the top of the page
	if(get_cookie('u'))
	{
	document.getElementById('lg').innerHTML='<nobr>Welcome back ' + get_cookie('u') + ' <a href="engine.php?cmd=mr" target="_blank" style="font-size:8pt" title="See more information about you">[i]</a></nobr><br><a href="javascript: if(confirm(\'Continue with logout?\')) { delete_cookie(\'u\'); login();  }"><span style="font-size:8pt">(not you?)</span></a>';

	if(rhs){ recordHS();}

	}	
	else
	{
	document.getElementById('lg').innerHTML='<a href="javascript:signin();">sign in</a>';
	}
	
}



function createAccount()
{

		document.getElementById('cmsg').innerHTML = "<font color=green>contacting server...</font>"

	if(getval('cpass')!=getval('cpass2')) 
	{
		document.getElementById('cmsg').innerHTML =('<b>Your passwords don\'t match. Try again</b>');
		return;
	}
	if(getval('cpass').length<5)
	{
		document.getElementById('cmsg').innerHTML ='<b>Your password must be at least 5 characters long.</b>';
		return;
	}

	if(getval('cnick').length<5)
	{
		document.getElementById('cmsg').innerHTML ='<b>Your nickname needs to be at least 5 characters</b>';
		return;
	}
	if(getval('cmail').length<5)
	{
		document.getElementById('cmsg').innerHTML ='<b>Your e-mail address must be at least 5 characters</b>';
		return;
	}
	

	resp1 = sRH('cmd=c&cnick=' + getval('cnick') + '&cpass=' + getval('cpass') + '&cmail=' + getval('cmail') );
	if(resp1=='g')
	{
		login();
		document.getElementById('lg').innerHTML += '<iframe style="display:none" src="/w.htm"></iframe>'
		
		closeBox();
	}
	else
	{
		document.getElementById('cmsg').innerHTML = resp1;
	}
}


function loadMyScores()
{
	var resp1;
//	resp1 = sRH('cmd=ms');
//	return(resp1);
return('<a href=engine.php?cmd=ms target=_new>See your detailed scores/ranking here</a>')

}

function loadAllScores()
{
	var resp1;
	resp1 = sRH('cmd=as');
	return(resp1);

}

function recordHSA()
{
if(levelgoal!=997) return;
if(curPattrns<3 ) return;

resp1 = sRH('cmd=hs&anon=1&hs=' +curPattrns + '&ppm=' + ppm  +'&level='+curLevel);
	if(resp1=='!')
{
document.getElementById('trk').innerHTML +='...';
}
}


function recordHS()
{
if(levelgoal!=997) return;
	if(curPattrns<3 )
	{
		document.getElementById('trk').innerHTML='If you get more than 3 pattrns we can track your standing against others and your average. ';
		return;
	}
	resp1 = sRH('cmd=hs&hs=' +curPattrns + '&ppm=' + ppm  +'&level='+curLevel);
	if(resp1=='!')
	{
		delete_cookie('u');	
	document.getElementById('trk').innerHTML ='<p>Track your best scores, and see how you rank against others. sign in<p> ' +  getLogScreen() + '<p>';
recordHSA();
	}
else
{
	if(resp1=='g') 
{
document.getElementById('lg').innerHTML += '<iframe style="display:none" src="/r.htm"></iframe>'
document.getElementById('trk').innerHTML=loadMyScores();
return;
}
else
{
document.getElementById('trk').innerHTML='<b><font color=red>' + resp1 +'</font></b>';
}
}

}

function getval(nm2)
{
	return(URLEncode(document.getElementById(nm2).value));
}

function mailpass()
{
	if(getval('lmail').length<5)
	{
		document.getElementById('lmsg').innerHTML ='<b>Enter your e-mail address and then click forgot password to have your password e-mailed to you.</b>';
		return;
	}
			document.getElementById('lmsg').innerHTML = "<font color=green>contacting server...</font>"
	resp1 = sRH('cmd=f&lmail=' + getval('lmail') );
		document.getElementById('lmsg').innerHTML = resp1;



}

function performSignin()
{

	if(getval('lmail').length<5)
	{
		document.getElementById('lmsg').innerHTML ='<b>Incorrect e-mail/password combination</b>';
		return;
	}
	if(getval('lpass').length<5)
	{
		document.getElementById('lmsg').innerHTML ='<b>Incorrect e-mail/password combination</b>';
		return;
	}
		document.getElementById('lmsg').innerHTML = "<font color=green>contacting server...</font>"
	resp1 = sRH('cmd=l&lmail=' + getval('lmail') + '&lpass=' + getval('lpass') );
	if(resp1=='g')
	{
		login();

	if(rhs) {  rhs=false; }
else
{
		closeBox();
}
	}	
else
{

		document.getElementById('lmsg').innerHTML = resp1;

}
	


}

function signin()
{
			clearAllTimeouts();

	openBox();
	document.getElementById('outsideBox').onclick=null;
	document.getElementById('insideBox').innerHTML='When you sign in with pattrns you can save your score in the standings, track your average, be eligible for contests, and play with friends on a shared board.<p>' + getLogScreen() +
		'<p><a href="javascript:closeBox();">Close</a>' ;



}
function getLogScreen()
{
	return(' Already a user?<table style="width:350px"><tr><td align=middle style="width:150px;border:1px solid black" onclick="document.getElementById(\'ca\').style.display=\'none\';document.getElementById(\'login\').style.display=\'\';">Yes</td><td> </td><td align=middle  style="border:1px solid black; width:150px;"  onclick="document.getElementById(\'login\').style.display=\'none\'; document.getElementById(\'ca\').style.display=\'\';">No</td></tr></table> <table id="login" style="display:none;width:350px;border:1px solid black"><tr><td colspan=2 style="color:red" id="lmsg"></td></tr><tr><td>e-mail</td><td align=right><input type=text id=lmail></td></tr>'+
							'<tr><td>password</td><td align=right><input  type=password id=lpass></td></tr>'+
							'<tr><td colspan=2 align=right><input type=button onclick="performSignin();" value="Login"><br/><a href="javascript:mailpass();" style="font-size:8pt;">(forgot password?)</a></td></table>' +
							'<table id="ca" style="display:none;width:350px;border:1px solid black"><tr><td colspan=2 id="cmsg" align=center style="color:red"></td></tr><tr><td>e-mail</td><td align=right><input  type=text id=cmail></td></tr>'+
							'<tr><td>nickname</td><td align=right><input  type=text id=cnick></td></tr>' +
							'<tr><td>password</td><td align=right><input type=password id=cpass></td></tr>' +
							'<tr><td>confirm password</td><td align=right><input  type=password id=cpass2></td></tr>'+
							'<tr><td colspan=2 align=right><input type=button onclick="createAccount();" value="Create Account"></td></table>');
}
function set_cookie ( name, value, exp_y, exp_m, exp_d, path, domain, secure )
{
  var cookie_string = name + "=" + escape ( value );
  if ( exp_y )
  {
    var expires = new Date ( exp_y, exp_m, exp_d );
    cookie_string += "; expires=" + expires.toGMTString();
  }
  if ( path )
        cookie_string += "; path=" + escape ( path );

  if ( domain )
        cookie_string += "; domain=" + escape ( domain );
  
  if ( secure )
        cookie_string += "; secure";
  
  document.cookie = cookie_string;
}

function delete_cookie ( cookie_name )
{
  var cookie_date = new Date ( );  // current date & time
  cookie_date.setTime ( cookie_date.getTime() - 1 );
  document.cookie = cookie_name += "=; expires=" + cookie_date.toGMTString();
}

function get_cookie ( cookie_name )
{
  var results = document.cookie.match ( cookie_name + '=(.*?)(;|$)' );

  if ( results )
    return ( unescape ( results[1] ) );
  else
    return null;
}






function sRH(data)
{
	url="engine.php";
	method="post";
	mode=false;
	header='Content-Type:application/x-www-form-urlencoded; charset=UTF-8';
	objhttp=(window.XMLHttpRequest)?new XMLHttpRequest():new ActiveXObject('Microsoft.XMLHTTP');
    	objhttp.open(method,url,mode);
	objhttp.setRequestHeader(header.split(':')[0],header.split(':')[1]);
	objhttp.send(data);
	
	if (objhttp.status != 200)
	{
		alert(objhttp.responseText)
	 }
	
    return objhttp.responseText;
}


function URLEncode( plaintext )
{
	if (!plaintext) return '';
	// The Javascript escape and unescape functions do not correspond
	// with what browsers actually do...
	var SAFECHARS = "0123456789" +					// Numeric
					"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +	// Alphabetic
					"abcdefghijklmnopqrstuvwxyz" +
					"-_.!~*'()";					// RFC2396 Mark characters
	var HEX = "0123456789ABCDEF";

	//var plaintext = document.URLForm.F1.value;
	var encoded = "";
	for (var i = 0; i < plaintext.length; i++ ) {
		var ch = plaintext.charAt(i);
	    if (ch == " ") {
		    encoded += "+";				// x-www-urlencoded, rather than %20
		} else if (SAFECHARS.indexOf(ch) != -1) {
		    encoded += ch;
		} else {
		    var charCode = ch.charCodeAt(0);
			if (charCode > 255) {
				encoded += "+";
			} else {
				encoded += "%";
				encoded += HEX.charAt((charCode >> 4) & 0xF);
				encoded += HEX.charAt(charCode & 0xF);
			}
		}
	} // for
	return encoded;
}
function URLDecode( encoded )
{
	return unescape(encoded.replace(/\+/g,  " "));
}

var TimeToFade = 1000.0;
// Fade code from http://blog.paranoidferret.com/index.php/2007/12/20/javascript-tutorial-simple-fade-animation/


var fadingElements = new Array();

function fade(eid,toc,fromt,fx)
{
  var element = document.getElementById(eid).parentNode;

 if(element == null)
    return;
   
  if(element.FadeState == null)
  {
    if(element.style.opacity == null 
        || element.style.opacity == '' 
        || element.style.opacity == '1')
    {
      element.FadeState = 2;
    }
    else
    {
      element.FadeState = -2;
    }
  }

	fadingElements.push(new Array(eid,toc,fromt));
    
  if(element.FadeState == 1 || element.FadeState == -1)
  {
    element.FadeState = element.FadeState == 1 ? -1 : 1;
    element.FadeTimeLeft = TimeToFade - element.FadeTimeLeft;
  }
  else
  {
    element.FadeState = element.FadeState == 2 ? -1 : 1;
    element.FadeTimeLeft = TimeToFade;

}
if(fx==2)
{
if(!fadeTask)
{ fadeTask =    setTimeout("animateFade(" + new Date().getTime() 
        + ")", 33);

} }  
}
var ranit=0;
function animateFade(lastTick)
{  

lock = true;
  var blx=false;
 
 var curTick = new Date().getTime();
  var elapsedTicks = curTick - lastTick;

for(iox=0;iox<fadingElements.length;iox++)
{
if(document.getElementById(fadingElements[iox][0]))
{
  var element = document.getElementById(fadingElements[iox][0]).parentNode;

  if(element.FadeTimeLeft <= elapsedTicks)
  {


fadingElements = new Array();
    manySelected = 0;
    selectedCards = new Array();
validateBoard();
fadeTask = null;
lock = false;
	    	return;
	 } 
else
{
  element.FadeTimeLeft -= elapsedTicks;
  var newOpVal = element.FadeTimeLeft/TimeToFade;
  if(element.FadeState == 1)
    newOpVal = 1 - newOpVal;

  element.style.opacity = newOpVal;
  element.style.filter = 
      'alpha(opacity = ' + (newOpVal*100) + ')';
}
}}

	if(fadingElements.length!=0)
	{

fadeTask =   setTimeout("animateFade(" + curTick 
      + ")", 33);
}

lock = false;
}


