ÿþ<HTML> <HEAD><TITLE> Hand/Bidding Diagram </TITLE> <STYLE TYPE="TEXT/CSS"> BODY {font-size: 18px} td {font-size: 16px} A:link {background-color:#eeffff; font-size: 100%} /* unvisited links */ A:visited {background-color:#eeffff; font-size: 100% } /* visited links */ A:hover { color:red; text-transform:uppercase; color: teal; background:#eeeedc} A:active { color: lime } /* active links */ P.BigFirst:first-letter { font-size: 160%} </STYLE> <script type="text/javascript"><!-- //footnoting the last pass fails, bug fix if(navigator.appName!="Microsoft Internet Explorer" && navigator.userAgent.search("Firefox")==-1){ alert("This webpage not developed outside of Internet Explorer and Firefox") } //pseudo code: If URL is loosely "handTEMPLATE.htm", write a link to some default hand including an anchor in the 52 digit style, or some style to be developed /*Consider: using separate textbox for auction, with default auction using the directional transformation function to have SHDC strings as input in the 52digit entry possibility Aj62.kqj.aq4.ak7,t4.95432.kt873.2,q75.a6.j92.qt543,k983.t87.65.j986 notation line just above the "link to the story" link having quarter rotation options besides the "dealer South" link test for all methods of entry in next twenty lines, amend */ /////////////////////////////////////////////////////////////////////////////////////////////// var defaultMailto= "editForYourFriendsEmailAddress@eastontario.com" var title = "Change this Title"; var auction = "Dealer:N,Vul:0,ScoreMethod:M,Auction:1Cp1s2sfp2nfppp"; var hand = "AJ62.kqj.aq4.ak7,t4.95432.kt873.2,q75.a6.j92.qt543,k983.t87.65.j986" // South,West,North then East suitSymbolFolder = 0 // 0 is relative, 1 is absolute // from this file, not entry.htm, S,W,N,E in order, suits period separated, hands comma separated for alphanumeric format // Aj62.kqj.aq4.ak7,t4.95432.kt873.2,q75.a6.j92.qt543,k983.t87.65.j986 // SAQJHK5DAQ9CQJ654,SK654H876DKT87C87,S2HAQ432DJ432CA32,ST9873HJT9D65CKT9 // 0012132123121003200303232100123332202101020321311133 has NWES as standard 0123 order //var hand = "Aj62.kqj.aq4.ak7,t4.95432.kt873.2,q75.a6.j92.qt543,k983.t87.65.j986" //var hand = "aj2.432.AQ92.akq,...,kq6543.AJ.3.J543,..." //var hand = "aj2.432.AQ92.akq,...,...,..." //var auction = "Dealer:N,Vul:0,ScoreMethod:M,Auction:1c1d1h1s1nfxfrfpfpp"; /////////////////////////////////////////////////////////////////////////////////////////////// // Script: Gord Murray (service@eastontario.com) // standard 'free' release via MIT license http://en.wikipedia.org/wiki/MIT_License presumedPostPoundDealBase = "1z3030203230322130012131323121231031210312002101201023" suitSymbolFolder = suitSymbolFolder==0? "./images/":"http://www.eastontario.com/handStories/images/" auctionReset = auction; //var nameAnchorStart = location.href.substring(0,location.href.lastIndexOf('#')+1); var vulDealer = location.href.substring(0,location.href.lastIndexOf('#')+1); var url = location.href.substring(location.href.length-52,location.href.length); document.write() /* use converter to change alphanumerics to 52digit format and offer link to same if from alphanumeric, rough start is: if(location.href.lastIndexOf('#')==-1){ document.write("<a href=" + location.href+ "#17z" + "Aj62.kqj.aq4.ak7,t4.95432.kt873.2,q75.a6.j92.qt543,k983.t87.65.j986" + ">" + "Click Here</a>") } */ var vulDealer = location.href.substring(location.href.lastIndexOf('#')+1,location.href.lastIndexOf('z')); possibleName = location.href.substring(location.href.lastIndexOf('#')+1,location.href.length+1) vulDealer = vulDealer-1 //actually board number range 0+? var vulX = (vulDealer +(vulDealer-vulDealer%4)/4)%4 //actually vulnerability range 0to3 var dealerX = (vulDealer)%4 //actually dealer vulArray = new Array("0","N","E","B") dealerArray = new Array("N","E","S","W") var bidString = location.href.substring(location.href.lastIndexOf('z')+1,location.href.length-52); realPartOfAuctionString = auction.substring(auction.lastIndexOf(':')+1,auction.length) var preDeal = location.href.substring(0,location.href.lastIndexOf('z')+1); //document.write(preDeal) var postPreDeal = location.href.substring(location.href.lastIndexOf('z')+1,location.href.length); //document.write(postPreDeal) //var auctionL = postPreDeal.substring(0,postPreDeal.lastIndexOf('ppp')) + 'ppp'; //document.write(auctionL) sampleAuction2 = '1sf2hf3d4c5nfxfrppp' var sampleUrl = preDeal + sampleAuction2 + postPreDeal; var postPound = location.href.substring(location.href.lastIndexOf('.htm')+5,location.href.length); //document.write(postPound) notNovice="true"; if (bidString.length<1){bidString = realPartOfAuctionString} else{notNovice="false"} //document.write('notNovice=' +notNovice) auction = "\nDealer:"+dealerArray[dealerX]+",Vul:"+vulArray[vulX]+",ScoreMethod:M,Auction:"+bidString+"" if(location.href.lastIndexOf('#')!=-1){ document.write('<table bgcolor="#f0ffff" align="top" width="100%"><tr><td>') document.write("<b>Insert auction into <a href='images/addressBar.JPG' target='_blank'>address bar</a> (above) between 'z' and the 52-digit-number ending the URL.") document.write('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eg. <img src="images/here2.JPG"><br>') //document.write('<img src="images/refresh2.JPG"><br>') document.write("Hit <img src=\"images/enter.gif\"><b>Enter</b> and <img src=\"images/refresh2.JPG\"><b>'<font color='teal'>REFRESH</font color>'</b>." + " &nbsp;&nbsp;(<a href=" + sampleUrl + " target=_blank"+">"+"Example"+"</a>:" + sampleAuction2+ ": <img src=\"images/here4.JPG\">"+" + "+"<img src=\"images/enter.gif\">"+" + "+"<img src=\"images/refresh2.JPG\">)") document.write("<br>") document.write("<a href=mailto:") document.write(defaultMailto) document.write("?") document.write("subject=") document.write("Bridge&nbsp;Story&nbsp;Link") document.write("&body=") document.write("Here's&nbsp;a&nbsp;deal&nbsp;and&nbsp;auction&nbsp;you&nbsp;might&nbsp;enjoy!&nbsp;") document.write("http://eastontario.com/handStories/handTEMPLATE.htm#") document.write(postPound) document.write(">Email friends</a>") //document.write('<a href=mailto:larry,dan?cc=mike&bcc=sue&subject=test&body=type+your&body=message+here>Hey</a>') document.write(" &nbsp;&nbsp;&nbsp;<i>or</i>&nbsp;&nbsp;&nbsp; Click <input type='button' value='Show Code' onClick='make();window.document.calendar_form.source_code.select();'> button (lower centre) to fill textbox with html and ") document.write("<b><u>Copy</u></b> (Ctrl-C) into an <a href='http://www.liquidninja.com/metapad/' target='_blank'>html editor</a>. &nbsp;&nbsp;<br>" ) indentPastEmailFriendsOr = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" document.write(indentPastEmailFriendsOr) document.write("IE users: Open <a href=temp.htm target='_blank'>temp.htm</a>" + " and Edit, pasting in html code (final instructions there).") document.write(" &nbsp;&nbsp;") //document.write(" &nbsp;&nbsp;<u>F</u>ile Sa<u>v</u>e <u>A</u>s suggested at text bottom (<a href='images/suggestedNewFileNameLocationTextBottom.JPG'>location example bolded</a>).<br>") //document.write("Edit (<b>V</b>iew <b>S</b>ource) and Paste (Ctrl-V) text into that editor (possibly Notepad).<br>") //document.write("Write your story in new document." + "</b>") document.write('</table><br>') //document.write('<br>') } if(location.href.lastIndexOf('#')==-1){ document.write("<b><a href=" +"handTEMPLATE.htm#"+ presumedPostPoundDealBase +" target='_blank'>Click here for Superior Demo</a>.</b><br><br>") document.write("<b>Edit the source of this file including hand, auction, etc., resave and relaunch.</b>") } if(location.href.substring(location.href.lastIndexOf('.htm'),location.href.length)==".htm"){auction=auctionReset} //document.write("<center>" + url + "</center>" + "url length = " + url.length); if(url.length=52 && url.substring(0,1)=="0"||url.substring(0,1)=="1"||url.substring(0,1)=="2"||url.substring(0,1)=="3"){ handIsInURL = 1; hand = url } //document.write("<br>" +hand + "<br>" + url.substring(0,1) + "<br>") //fix for 52base4 string as input rather than other input options above function directionChange(old1,new1,stringOf52){ stringA = old1 //"snwe" // stringA.toUpperCase() stringB = new1 //"swne" // stringB.toUpperCase() // if(stringA.sort()!=stringB.sort()){document.write("Strings not equivalents. Recheck your strings.")} oldOrder = new Array() newOrder = new Array() associativeOldOrder = new Array() associativeNewOrder = new Array() //start with the old and revalue the new using the relationship between oldOrder elements and newOrder elements oldString52digits = stringOf52 newString52digits = "4444444444444444444444444444444444444444444444444444" for(a=0;a<stringA.length;a++){ oldOrder[a] = stringA.charAt(a) newOrder[a] = stringB.charAt(a) associativeOldOrder[stringA.charAt(a)] = a associativeNewOrder[stringA.charAt(a)] = a } new52 = "" for(b=0;b<oldString52digits.length;b++){ //document.write(associativeOldOrder[newOrder[oldString52digits.charAt(b)]]) new52 += associativeOldOrder[newOrder[oldString52digits.charAt(b)]] } // document.write(new52) hand=new52 } //transfromFromHandTemplateEntryToEntryHtmsNWES = 3102 //SWNE->NWES: if 0123->3102 //standard order from entry.htm: NWES, top to bottom, left to write, in auction diagram //fromEntryOrder= 0123 // North if 0, West if 1, East if 2 and South if 3 //3011 becomes 12003 for 1 turn, 03221 for 2, 21330 for 3 var transformationArray = new Array("0123","2031","3210","1302") //number of quarter clockwise rotations incremental indices function rotate(digit52Thing,quarterClockwiseTurns){ newDigit52thing = "" for(a=0;a<digit52Thing.length;a++){ newDigit52thing += transformationArray[quarterClockwiseTurns%4].charAt(digit52Thing.charAt(a)) } //document.write('<br>' + 'digit52Thing' + digit52Thing + '<br>') //document.write('quarterClockwiseTurns'+ quarterClockwiseTurns + '<br>') //document.write('newDigit52thing'+ newDigit52thing + '<br>') return newDigit52thing; } /////////////////////////////////////////////////////////////////////////////////////////////// var auctionNote = new Array(); /////////////////////////////////////////////////////////////////////////////////////////////// var nameArray = new Array("South","West","North","East"); var suitArray = new Array("Spades","Hearts","Diamonds","Clubs"); var suitGifArray = new Array("s","h","d","c"); var note = ""; var lead = "" var code = ""; function dealCheck(x){ //code += ( x[1][0].length); //code += ( "<br>" + x[1][0]); /* for (a=0;a<4;a++){ var suitLength = 13; for (b=0;b<4;b++){ suitLength = suitLength - x[b][a].length; code += x[b][a].length; } if (suitLength!=0) { code += "<big><big><big>Error</big></big></big>"; } } */ } // FUNCTION THAT SORTS STRINGS// function sorter(a) { var aArray = new Array(a.length); for (b=0;b<a.length;b++) { aArray[b]= a.charAt(b); } aArray.sort(); c = ""; for (b=0;b<aArray.length;b++) { c+= aArray[b]; } return (c); } // END STRING SORT FUNCTION// stringIfToDigits = "" function stringToDigits(dottedCommadString){ precedenceArray = new Array("A","K","Q","J","T","9","8","7","6","5","4","3","2") associativePrecedenceArray = new Array() for(a=0;a<precedenceArray.length;a++){ associativePrecedenceArray[precedenceArray[a]] = a } stringOf52bArray = new Array() for (b=0;b<stringOf52bArray;b++){ stringOf52bArray[b] = 4; } dottedCommadString = dottedCommadString.toUpperCase() a=0 //location to be checked in "Aj62.kqj.aq4.ak7,t4.95432.kt873.2,q75.a6.j92.qt543,k983.t87.65.j986" string suit = 0 //spades by convention the first suit, hearts second, diamonds third, clubs fourth direction = 0 //0 by convention the S direction, 1 the West direction,2 the N direction, 3 the E direction b=0 //for ignorance necessary for proper operation of while below while(a<dottedCommadString.length){ if(dottedCommadString.charAt(a)=="."){ suit++; a++ } else if(dottedCommadString.charAt(a)==","){ direction++; suit=0; a++ } else { stringOf52bArray[associativePrecedenceArray[dottedCommadString.charAt(a)]+suit*13] = direction a++ b++ } } crap = stringOf52bArray.join() newCrap = "" for (b=0;b<crap.length;b++){ if(crap.charAt(b)!=","){ newCrap+=crap.charAt(b) } } return (newCrap); } //stringIfToDigits = "" //document.write(stringToDigits(hand)+"<p>") //stringToDigits(hand) // FUNCTION THAT DEVELOPS THE HAND STRING function Hand(HandString){ if(HandString=="0"||HandString=="1"||HandString=="2"||HandString=="3"){ directionChange("SWNE","SENW",hand) //calls the function } HandString = HandString.replace("..",". .") HandString = HandString.replace("..",". .") HandString = HandString.replace("..",". .") HandString = HandString.replace("..",". .") HandString = HandString.replace("..",". .") HandString = HandString.replace("..",". .") HandString = HandString.replace(".,",". ,") HandString = HandString + " "; var handsArray = new Array("","","",""); for(a=0;a<4;a++){ handsArray[0][a] = "" handsArray[1][a] = "" handsArray[2][a] = "" handsArray[3][a] = "" } handsArray = HandString.split(","); //document.write(handsArray+"<br><br>") for (var i=0;i<handsArray.length;i++) { re1= /\./; handsArray[i] = handsArray[i].split(re1); } for (var a=0;a<4;a++) { for (var b=0;b<4;b++) { if (handsArray[a][b]=="undefined") { handsArray[a][b]=""; } } dealCheck (handsArray); } var spades=""; var hearts=""; var diamonds=""; var clubs=""; for (a=0;a<4;a++) { spades+=handsArray[a][0] hearts+=handsArray[a][1] diamonds+=handsArray[a][2] clubs+=handsArray[a][3] } for (a=0;a<4;a++) { spades=sorter(spades); hearts=sorter(hearts); diamonds=sorter(diamonds); clubs=sorter(clubs); } //document.write(possibleName.length) if(possibleName.length!=54){ // Error testing and reporting // if (spades!="23456789AJKQT" && spades!=" 23456789AJKQT"&& spades!=" 23456789AJKQT"&& spades!=" 23456789AJKQT"&& spades!=" 23456789AJKQT"&& spades!=" 23456789AJKQT") { document.write ("spade error : <br>" + spades + " are not <br>23456789AJKQT<br>"); document.write ("spades are : <br>" + spades); } if (hearts!="23456789AJKQT" && hearts!=" 23456789AJKQT"&& hearts!=" 23456789AJKQT"&& hearts!=" 23456789AJKQT"&& hearts!=" 23456789AJKQT"&& hearts!=" 23456789AJKQT") { document.write ("spade error : <br>" + hearts + " are not <br>23456789AJKQT<br>"); document.write ("hearts are : <br>" + hearts); } if (diamonds!="23456789AJKQT" && diamonds!=" 23456789AJKQT"&& diamonds!=" 23456789AJKQT"&& diamonds!=" 23456789AJKQT"&& diamonds!=" 23456789AJKQT"&& diamonds!=" 23456789AJKQT") { document.write ("spade error : <br>" + diamonds + " are not <br>23456789AJKQT<br>"); document.write ("diamonds are : <br>" + diamonds); } if (clubs!="23456789AJKQT" && clubs!=" 23456789AJKQT"&& clubs!=" 23456789AJKQT"&& clubs!=" 23456789AJKQT"&& clubs!=" 23456789AJKQT"&& clubs!=" 23456789AJKQT") { document.write ("spade error : <br>" + clubs + " are not <br>23456789AJKQT<br>"); document.write ("clubs are : <br>" + clubs); } } testX = location.href.substring(location.href.length-1,location.href.length) if(testX=='m'||testX=='l'){ document.write("23456789AJKQT" + "&nbsp;&nbsp;&nbsp;&nbsp;" + "23456789AJKQT" + "&nbsp;&nbsp;&nbsp;&nbsp;" + "23456789AJKQT" + "&nbsp;&nbsp;" + "23456789AJKQT" + "<br>"); document.write(spades + "&nbsp;&nbsp;&nbsp;&nbsp;" + hearts + "&nbsp;&nbsp;&nbsp;&nbsp;" + diamonds + "&nbsp;&nbsp;" + clubs + "<br>"); } code += "<table border='0'>\n"; function spaceDeleter(aString){ newString = "" for(a=0;a<aString.length;a++){ if(aString.charAt(a)!=" "){ newString+=aString.charAt(a) } } return newString } // NORTH hand row if(handsArray.length>1) { code += "<tr>\n<td width=60></td>\n<td colspan=2><font size=3><strong><u><b>NORTH</b></u></strong>"; for(suit=0;suit<4;suit++) { code += "\n<br><img src="+suitSymbolFolder+suitGifArray[suit]+ ".gif>" + spaceDeleter(handsArray[2][suit]); //".gif>&nbsp;" } code += "</font></td>\n<td></td></tr>\n"; } // EW Hand Row // WEST Data if(handsArray.length>2) { code += "\n<tr>\n<td colspan=2><font size=3>\n"; for(suit=0;suit<4;suit++) { code += ("<img src="+suitSymbolFolder+suitGifArray[suit]+ ".gif>" + spaceDeleter(handsArray[1][suit]) + "<br>\n"); } code += ("</font></td>\n"); // code += ("<td>&nbsp;</td>\n"); // EAST Data code += ("<td colspan=2><font size=3>\n"); for(suit=0;suit<4;suit++) { code += ("<img src="+suitSymbolFolder+suitGifArray[suit]+ ".gif>" + spaceDeleter(handsArray[3][suit]) + "<br>\n"); } code += ("</font></td>\n</tr>\n"); } // SOUTH Hand Row code += ("<tr>\n<td>&nbsp;</td>\n<td colspan=2><font size=3>\n"); for(suit=0;suit<4;suit++) { code += ("<img src="+suitSymbolFolder+suitGifArray[suit]+ ".gif>" + spaceDeleter(handsArray[0][suit]) + "<br>\n"); } code += ("</font></td>\n<td></td>\n</tr></table>\n"); } // END HAND FUNCTION function digitsToString(digits){ hand = digits; //document.write(hand+"TESTZZZ") character = ""; hand2 = ""; cardArray = new Array("0","1","2","3"); cardNameArray = new Array("A","K","Q","J","T","9","8","7","6","5","4","3","2"); // setting up an Array for the deck, eventually to be recognized as cardArray[direction][suit] // for format akq.akq.akq.akq2,jt9.jt9.jt9.jt93,876.876.876.8764,5432.5432.5432.5 for (a=0;a<4;a++){ cardArray[a] = new Array(" "," "," "," "); } for (suit=0;suit<4;suit++){ for (rank=0;rank<13;rank++){ cardArray[hand.charAt(suit*13 + rank)][suit]+=cardNameArray[rank]; } } for (direction=0;direction<4;direction++){ switch(direction) { case 0: temp=3; break; case 2: temp=0; break; case 3: temp=2; break; case 1: temp=1; break; } for (suit=0;suit<4;suit++){ hand2+=cardArray[temp][suit] if (suit<3){ hand2+="."; } } if (direction<3){ hand2+=","; } } //document.write(hand2+"TESTZZZ") return hand2; } //document.write(digitsToString("0012132123121003200303232100123332202101020321311133")) // AUCTION FUNCTION function Auction(auctionString){ var auctionArray = auctionString.split(","); for (var i=0;i<auctionArray.length;i++) { auctionArray[i] = auctionArray[i].split(":"); } re = /(\d*)(\D)/g; var auction31Array = auctionArray[3][1].match(re); //document.write('<br>dealerX='+dealerX+"<br>") //turnsFromDealerToDeclarer = //document.write('\n<br>dealerX='+dealerX+"<br>") var footlessAuction31Array = auctionArray[3][1] //document.write(footlessAuction31Array.join()+"<br>") tempString="" for(a=0;a<footlessAuction31Array.length;a++){ tempString += footlessAuction31Array.charAt(a)!="F"? footlessAuction31Array.charAt(a):"" } //document.write(tempString+"<br>") var auction31ArrayFootless = tempString.match(re); //document.write("auction31ArrayFootless="+auction31ArrayFootless+"<br>") //take the dealer in the range of 0 to 3, assume 2, as in board 3, South Deals EW Vul //calculate the number of turns to declarer, in the case of 7 turns later, East //add together dealer's start position, 2, to number of turns, 7, and arrive at 9, with reference to start position 0 being North, 9 is two full rotations 8 plus 1, which is East //that number is the absolute position of declarer 0 = North 1 = East, etc. //number of turns to rotate East to effect East new dealer South = absoluteDeclarer position = 1 subtracted from (South 2 plus 4(to keep positive))%4 = 2 - ((2+4)-1)%4 = 2 - 5%4 = 2-1 = 1 //number of rotations to effect declarer South = 1 //if relative vulnerability were EW, as in board 3, and South dealt, new vulnerability is simply flipped from EW to NS, with of course, South dealing //the only possible boards, given South declarers, are board 3,7,11 and 15, given the rotation is always to South //relative vulnerability simply flips, or stays the same, based on whether or not there have been an odd, or even number of rotations finalDenomination = "" finalBid = "" for(a=0;a<=tempString.length;a++){ finalDenomination = tempString.charAt(tempString.length-a) //document.write("<br>"+finalDenomination+"<br>") if(finalDenomination=="C"||finalDenomination=="D"||finalDenomination=="H"||finalDenomination=="S"||finalDenomination=="N"){ finalBid= tempString.charAt(tempString.length-a-1) + finalDenomination break;} } //document.write(finalDenomination) //document.write("<br>tempString="+tempString+"<br>") //document.write("finalBid ="+finalBid+"<br>") finalBiddersTurn = -1 declarerTurn = 4 //0 is first turn, 1 is 2nd turn, 2 is 3rd turn, and 3 is 4th turn (4 is out of range) firstOddToBidDenomination = 4 //(4 is out of range) firstEvenToBidDenomination = 4 //(4 is out of range) //document.write(auction31ArrayFootless[0]) function determineFinalBiddersTurn(){ for(a=0;a<=auction31ArrayFootless.length;a++){ //document.write(auction31ArrayFootless[a]+"<br>") auction31ArrayFootless[a]==finalBid? finalBiddersTurn = a:x=0; } } determineFinalBiddersTurn() //document.write("<br>finalBiddersTurn="+finalBiddersTurn) function determineDeclarersTurn(){ for(a=0;a<=finalBiddersTurn;a++){ tempZZ = "" + auction31ArrayFootless[a] if(tempZZ.length==2 && tempZZ.charAt(1)==finalDenomination){ return a; //document.write(a) break; } } } //declarersTurn = determineDeclarersTurn()%4 declarersTurn = determineDeclarersTurn() numberOfQuarterRotationsFromDealerToDeclarer= declarersTurn mod4QuarterRotationsFromDealerToDeclarer= declarersTurn%4 //document.write("<br>numberOfQuarterRotationsFromDealerToDeclarer="+numberOfQuarterRotationsFromDealerToDeclarer) //document.write("<br>mod4QuarterRotationsFromDealerToDeclarer="+mod4QuarterRotationsFromDealerToDeclarer) //document.write(numberOfQuarterRotationsToDeclarer) linkToRotatedDeal = "" rotated52digit = "" /* rotated52digits = rotate(hand,0) document.write("\n<br>rotate(hand,0)="+rotate(hand,0)+"\n<br>") */ //thisUrl + "#" + new board number + "z" + translated string as link oldDealer = -1; function boardNumber(dealer,vulnerability){ from1to16number = dealer + 4*(((vulnerability+4-dealer)%4+16)%16) + 1 return from1to16number; } //document.write(boardNumber(2,2)) quarterTurnsDeal = 0; function newDealNumber(oldBoardNumber,numberOfQuarterRotationsToNewDealer){ var newBoardNumber=-1; oldDealer= (oldBoardNumber-1)%4 //0=North 1=East 2=South 3=West //document.write('<br>oldDealer='+oldDealer+'<br>') var newDealer= (4 + oldDealer + numberOfQuarterRotationsToNewDealer)%4 //ranges from 0 to 3 //the dealer that would make declarer South??? //document.write('<br>newDealer='+newDealer+'<br>') var quarterTurnsToMakeDeclarerSouth = (2 - newDealer + 4)%4 //South is 2 //document.write('<br>quarterTurnsToMakeDeclarerSouth='+quarterTurnsToMakeDeclarerSouth+'<br>') quarterTurnsDeal = quarterTurnsToMakeDeclarerSouth newDealer = (quarterTurnsToMakeDeclarerSouth + oldDealer + 4)%4 var oldRelativeVulnerability = ((oldBoardNumber-1)%4 + Math.floor((((oldBoardNumber%16)-1)/4)))%4 //document.write('<br>oldRelativeVulnerability='+oldRelativeVulnerability+'<br>') var newRelativeVulnerability = numberOfQuarterRotationsToNewDealer%2==0?oldRelativeVulnerability==1?2:oldRelativeVulnerability==2?1:oldRelativeVulnerability:oldRelativeVulnerability //document.write('<br>newRelativeVulnerability='+newRelativeVulnerability+'<br>') newBoardNumber = boardNumber(newDealer,newRelativeVulnerability) //document.write('<br>newDealer='+newDealer+'<br>') newBoardNumber = newBoardNumber + 48 + 16*oldBoardNumber originalBoard = (newBoardNumber-48)/16 //work backwards using the board number in the address bar to find the original board number before the rotation //in the new file, if you have a number such as 280, which represents the proper dealer and vulnerability after a shift of 48 boards up AND x incremental 16 board shifts, where x represents the board number before all shifts, create the javascript that produces a message indicating that there has been a shift to the new board number AND the original board number before the shift //if the original board number was 18 and the auction dictates that 2 quarter rotations are required to make South declarer, with the proper new relative vulnerability, coincidentally the same, then new dealer is to be West //(newBoardNumber - 48 - withinRange1to16)/16 = oldBoardNumber //newBoardNumber = newBoardNumber + 48 + 16*oldBoardNumber //if (oldBoardNumber>48){} //document.write('<br>newBoardNumber='+newBoardNumber+'<br>') return newBoardNumber; } oldBoardNumberZ = vulDealer+1 //document.write(oldBoardNumberZ) newDealNumberZZZ = newDealNumber(oldBoardNumberZ,numberOfQuarterRotationsFromDealerToDeclarer) //document.write("newDealNumberZZZ="+newDealNumberZZZ) rotated52digits = rotate(hand,quarterTurnsDeal) //document.write("<br>rotated52digits="+rotated52digits+"<br>") /* Take the board number sent via the address bar and from it derive the original board number. After the title table in the webpage, and after footnotes if any, write out, if applicable, that original board number and fact of rotation. Number of rotations? NOW you're talking!!! */ //document.write("<br>"+newDealNumberZZZ) //document.write(declarersTurn%4) //document.write('newDealNumberZZZ= '+newDealNumberZZZ+"<br>") //document.write('newDealNumberZZZ before translation = '+newDealNumberZZZ+"<br>") // if the board has been translated up out of the played board set below 48, calculate the original board number so that a 'board translated' message can be generated from the new 49+ dealNumber //oldBoardNumber# = (presentBoardNumber - 48) - oldBoardNumber*16 //document.write("<br>old boardNumber = " + oldBoardNumberZ + "<br>") //document.write("<br>old boardNumber - 48 = " + ((oldBoardNumberZ-48)-oldBoardNumberZ%16) + "<br>") // AUCTION HEADER code += ("\n\n\n<table align='center'>\n<tr>\n<td><font size=2>"); code += ("\n<u>Dealer</u>: <b>"); switch(auctionArray[0][1]) { case "S": code += ("\nSouth");dealer=1;break; case "N": code += ("\nNorth");dealer=3;break; case "E": code += ("\nEast");dealer=2;break; case "W": code += ("\nWest");dealer=4;break; } code += ("</b> &nbsp;&nbsp;&nbsp;<u>Vul</u>: "); switch(auctionArray[1][1]) { case "N": code += ("\n<font color='red'>NS</font color>");break; case "E": code += ("\n<font color='red'>EW</font color>");break; case "0": code += ("\n<font color='green'>None</font color>");break; case "o": code += ("\n<font color='green'>None</font color>");break; case "O": code += ("\n<font color='green'>None</font color>");break; case "L": code += ("\n<font color='green'>None</font color>");break; case "B": code += ("\n<font color='red'>Both</font color>");break; case "A": code += ("\n<font color='red'>Both</font color>");break; } code += ("&nbsp;&nbsp;&nbsp;<b><i>"); switch(auctionArray[2][1]) { case "M": code += ("<u>MP");break; case "I": code += ("<u>IMP");break; } code += (" Scoring</u></i></b>"); code += ("</font></td>\n</tr></table>\n"); footNumber=0; foot = 0; auction31ArrayProduct = new Array() footedAuction = auction31Array.join(); // RESETS auction31 ARRAY with formatted bids for (loop=0;auction31Array.length>(loop+foot);loop++){ auction31Array[loop]=auction31Array[loop+foot] if(auction31Array[loop]=="F"){ auction31Array[loop-1]+= "\n<small><small><font color='red'>" + (foot+1) + "</font color></small></small>"; foot++; auction31Array[loop]=auction31Array[loop+foot]; } switch(auction31Array[loop]) { case "P": auction31Array[loop]= "<font color='green'>Pass</font color>"; break; case "X": auction31Array[loop]= "<font color='red'>X</font color>"; break; case "R": auction31Array[loop]= "<font color=blue>XX</font color>"; break; case "?": auction31Array[loop]= "???"; break; default: var temp= auction31Array[loop].charAt(1).toLowerCase(); if(temp=="n"){ auction31Array[loop]= auction31Array[loop].charAt(0) + "N"; } else{ auction31Array[loop]= auction31Array[loop].charAt(0) + "<img src="+suitSymbolFolder + auction31Array[loop].charAt(1).toLowerCase() + ".gif>" };break; } } code += ("<table border=0 width=\"220\" align='center'><tr><td valign='top' align='center' width=\"25%\" height=\"89\"><p><font size=3>\n<b><big>West</big></b>"); // West if (dealer<4){ code += ("\n<br>"); } for (loop=0;(loop*4+dealer%4)<auction31Array.length-foot;loop++) { code += ("\n<br><b>" + auction31Array[loop*4+dealer%4] + "</b>"); } code += ("</font></p></td>\n<td valign='top' align='center' width=\"25%\" height=\"89\"><font size=3>\n<b><big>North</big></b>"); // North if (dealer<3){ code += ("\n<br>"); } for (loop=0;(loop*4+(dealer+1)%4)<auction31Array.length-foot;loop++){ code += ("\n<br><b>" + auction31Array[loop*4+(dealer+1)%4] + "</b>") } code += ("</font></td>\n<td valign='top' align='center' width=\"25%\" height=\"89\"><p><font size=3>\n<b><big>East</big></b>"); // East if (dealer<2){ code += ("\n<br>"); } for (loop=0;(loop*4+(dealer+2)%4)<auction31Array.length-foot;loop++){ code += ("\n<br><b>" + auction31Array[loop*4+(dealer+2)%4] + "</b>"); } code += ("</font></td>\n<td valign='top' align='center' width=\"25%\" height=\"89\"><p><font size=3>\n<b><big>South</big></b>"); // South for (loop=0;(loop*4+(dealer+3)%4)<auction31Array.length-foot;loop++){ code += ("\n<br><b>" + auction31Array[loop*4+(dealer+3)%4] + "</b>"); } code += ("</font></p></td>\n</tr></table>\n"); } // END AUCTION // NOTES Row function Lead(noteString){ code += ("<table align=\"center\" border=.5 bordercolorlight><tr><td align=\"center\"><big><big><big><b><center>&nbsp;"); code += (noteString); code += ("&nbsp;</center></b></big></big></big></td>\n</tr></table>\n"); } // Lead Row function Lead(leadString){ code += ("<table align=\"center\" border=.5 bordercolorlight bgcolor=''><tr><td align=\"center\"><big><big><big><b><center>&nbsp;"); code += (leadString); code += ("&nbsp;</center></b></big></big></big></td>\n</tr></table>\n"); } title1="" // Title Box function Title(titleString){ title1 += ("<table align=\"center\" border='0' bordercolorlight cellpadding='4' bgcolor='0fffee'><tr><td align=\"center\"><big><big><big><b><center>&nbsp;"); title1 += (titleString); title1 += ("&nbsp;</center></b></big></big></big></td>\n</tr></table>\n"); } function make() { //code += calendar_form.source_code.value possibleNameTable = '<!--\n'; possibleNameTable += possibleName + '.htm'; possibleNameTable += '\n//-->'; code +=code2 code += '<!--\n'; code += '//-->\n\n'; code += "<br><br><br><br><br><br><br><br><br>" code += linkTable code += "\n" code += possibleNameTable code += ""//"\n" window.document.calendar_form.source_code.value = code; } //--></script> </HEAD> <BODY> <script type="text/javascript"><!-- //<body onLoad="make()"> if instructions are to be found elsewhere code += ("<table align='left' border='1' cellpadding='0' cellspacing='0'>\n<tr>\n<td>\n"); hand = hand.toUpperCase(); character = ""; aGlobalArray = new Array() function oneForOneCharacterSetFunction(stringOne,stringTwo){ if (stringOne.length!=stringTwo.length){ document.write("oneForOneCharacterSetFunction(stringOne,stringTwo) sent different length strings") } for(a=0;a<stringOne.length;a++){ aGlobalArray[stringOne.charAt(a)]= stringTwo.charAt(a) } } oneForOneCharacterSetFunction("SHDC/*-+01AKQJT98765432,. ","SHDCJQK,TAAKQJT98765432,. ") //document.write(aGlobalArray["/"]) if (hand.charAt(0)=="S"){ hand2 = ""; for (a=0;a<hand.length;a++) { hand2+= aGlobalArray[hand.charAt(a)] } document.write(hand2) hand = hand2 } test = -1 if(hand.charAt(0)=="0"||hand.charAt(0)=="1"||hand.charAt(0)=="2"||hand.charAt(0)=="3"){ Hand(digitsToString(hand)) test = 1 } else { Hand(hand)} code += ("</td>\n</tr>\n<tr>\n<td>"); auction = auction.toUpperCase(); Auction(auction); code += ("</td>\n</tr>\n<tr>\n<td>"); //Notes("");code += ("</td>\n</tr>\n<tr>\n<td>"); //Lead("");code += ("</td>\n</tr>\n<tr>\n<td>"); code += ("</td>\n</tr>\n</table>\n"); document.write("<table align='left'><tr><td>") document.write(code) conditionalToSouthLink = "" conditionalToSouthLink += "<tr><td>" conditionalToSouthLink += "<a href='handTEMPLATE.htm#" +newDealNumberZZZ+"z"+bidString+rotated52digits+"' target='self'>" conditionalToSouthLink += "<table border='0' cellpadding='4' align='center'><tr><td bgcolor='grey'>" conditionalHREF = 'handTEMPLATE.htm#' +newDealNumberZZZ+'z'+bidString+rotated52digits conditionalToSouthLink += "<a href='handTEMPLATE.htm#" +newDealNumberZZZ+"z"+bidString+rotated52digits+"' target='self'>" //conditionalToSouthLink +="To Declarer South" conditionalToSouthLink += '<input type="button" value="Make Declarer South" onClick="window.open(conditionalHREF, \'\', \'\',\'\');">' conditionalToSouthLink +="</a>" conditionalToSouthLink += "</table>" conditionalToSouthLink +="</a>" if(quarterTurnsDeal%4!=0 && (test==1)){ document.write(conditionalToSouthLink) } document.write("</table></table>") code2 = "" Title(title) code2 += title1 if(oldBoardNumberZ>48){ originalBoardNumber = ((oldBoardNumberZ - oldBoardNumberZ%16 - (oldBoardNumberZ%16==0?16:0))-48)/16 //+ (oldBoardNumberZ%16?1:0) code2 += "<br>Rotated to South declarer: <u>originally board: " + originalBoardNumber + "</u><br>" } for (loop=0;loop<foot;loop++){ code2 += "\n<b><small><small><font color='red'>" + (loop+1) + "</font color></small></small></b>\n\n<br>"; } code2 += "\n<br>\n<br>\n<br>\n<br>\n"; code2 += '\n<!--\n'; code2 += '<br>\n<table border="0" cellspacing="6" cellpadding="6">\n <tr>\n <td>\n <table cellspacing="0" cellpadding="0" align="left" border="1">\n <tr> \n <td> \n <table border="0" align="left">\n <tr> \n <td width=60></td>\n <td colspan=2><font size=3><strong><u><b>NORTH</b></u></strong> \n <br>\n <img src=./images/s.gif width="12" height="12">&nbsp;<br>\n <img src=./images/h.gif> <br>\n <img src=./images/d.gif> <br>\n <img src=./images/c.gif> </font></td>\n <td></td>\n </tr>\n <tr> \n <td colspan=2><font size=3><img src=./images/s.gif width="12" height="12">&nbsp;<br>\n <img src=./images/h.gif> irr<br>\n <img src=./images/d.gif> <br>\n <img src=./images/c.gif> <br>\n </font></td>\n <td colspan=2><font size=3> <img src=./images/s.gif width="12" height="12">&nbsp;<br>\n <img src=./images/h.gif> <br>\n <img src=./images/d.gif> <br>\n <img src=./images/c.gif> </font></td>\n </tr>\n <tr> \n <td>&nbsp;</td>\n <td colspan=2><font size=3> <img src=./images/s.gif>&nbsp;<br>\n <img src=./images/h.gif>&nbsp;<br>\n <img src=./images/d.gif> <br>\n <img src=./images/c.gif> </font></td>\n <td></td>\n </tr>\n </table>\n </td>\n </tr>\n </table>\n</table>\n' code2 += '\n//-->\n\n'; document.write(code2); linkTable = '<br><br><br>' linkTable += '<table width=100% align="center" border=1 cellpadding=3 cellborder=3><tr><td>' linkTable += 'Links: ' linkTable += '<td><a href=http://www.eastontario.com/handStories/entry.htm>Online Hand Records</a>' linkTable += '<td><a href=http://www.eastontario.com/handStories/handTEMPLATE.htm>HTML Bridge Story Editor</a>' linkTable += '<td><a href=http://www.eastontario.com/conventions>Conventions</a> ' linkTable += '<td><a href=mailto:entry@eastontario.com>Comments/Suggestions</a>' linkTable += '</table>' linkTable += '\n' //--></script> <div name='lastDiv' align='center'> <form name="calendar_form"> <!-- Print these directions now for calls from entry.htm. Edit source code otherwise. Type your auction into the address bar AFTER the 'z' and BEFORE all the numbers under 4. Hit "REFRESH" and/or "RELOAD" and/or "ENTER". Click the "show code" button below and simple html source code will replace these directions. Copy that text (Control C). Click on the link "to temp.htm" to launch an empty window in this directory. In that "temp.htm" click View Source and Notepad.exe should be launched. Paste the text (Ctrl V) into Notepad.exe and File Save. Use your favourite html editor to write your story in that new file, then name it properly and make "temp.htm" an empty file. --> <textarea rows="13" cols=80" name="source_code"> Press Show Code button and html should appear here. </textarea> <div align='center'> <input type="button" value="Show Code" onClick="make();window.document.calendar_form.source_code.select();"> </div> </form> <!--Story Text--> <script type="text/javascript"><!-- document.write("<table align='right' width='75%'><tr>") document.write("<td align='center'>") document.write("&nbsp;&nbsp;&nbsp;&nbsp;<a href=temp.htm target='_blank'>to temp.htm</a>") document.write("<td align='center'>") document.write("&nbsp;&nbsp;&nbsp;&nbsp;<a href='temp.txt' target='_blank'>to temp.txt</a>") if(postPound.length!=0){ document.write("<td align='center'>") document.write("<a href=./>to this directory</a>") document.write("<td align='center'><a href='dealEditing.htm' target='_blank'>About Editing the Deal</a>") } document.write("</table>") document.write("</div>") document.write(linkTable) document.write("<br><br><br><br><br><br><br><br><br><br><br><br>") document.write("<a href=entry.htm target='_blank'><font color='white'>to entry.htm</font color></a>") document.write("&nbsp;&nbsp;&nbsp;&nbsp;<a href="+postPound+".htm><font color='white'>to .htm file not yet there</font color></a>") //--></script> </BODY> </HTML>