var regex_stuff = function (str) {
    return str.replace(/\?/g, "blank")
              .replace(/\!/g, "blank2")
              .replace(/\+/g, "good_O")
              .split(/\s+/) };

var solver_data =
    [{ title: "Petrus S1",
       url: "new_solvers/PetrusS1.cgi",
       sides: regex_stuff("? ? ? ? U ? ? ? ?   ? ? ? ? D D ? D D " +
                          "? ? ? ? F ? ? ? ?   ? ? ? ? B B ? B B " +
                          "? ? ? ? R ? ? ? ?   ? ? ? ? L L ? L L "),
       places: [["UFR","URB","UBL","ULF"],
                ["DRF","DBR","DLB","DFL"]] },
     { title: "S1+2", longtitle: "Petrus S1+2",
       url: "new_solvers/PetrusS1S2.cgi",
       sides: regex_stuff("? ? ? ? U ? ? ? ?   ? D D ? D D ? D D " +
                          "? ? ? ? F F ? F F   ? ? ? ? B B ? B B " +
                          "? ? ? ? R ? ? ? ?   ? ? ? L L L L L L "),
       places: [["UF","UR","UB","UL"],
                ["DF","DR","DB","DL"],
                ["FR","FL","BR","BL"]] },
     { title: "S2+3", longtitle: "Petrus S2+3",
       url: "new_solvers/PetrusS2S3.cgi",
       sides: regex_stuff("? U ? U U U ? U ?   ? D D U ! ! ? ! ! " +
                          "? R ? U F F ? F F   ? R ? U ! ! ? ! ! " +
                          "? R ? R R R ? R ?   ? R ? L ! ! L ! ! "),
       places: [//["UBL S2->S3" ,"DBR S2->S3" ,"DFL S2->S3"],
                ["UBL <U,F,R>", "DBR <U,F,R>", "DFL <U,F,R>"]] },
     { title: "S4", longtitle: "Petrus S4",
       url: "new_solvers/PetrusS4.cgi",
       sides: regex_stuff("? U ? U U U ? U ?   D ! ! D ! ! D ! ! " +
                          "? ? ? F ! ! F ! !   ? ? ? B ! ! B ! ! " +
                          "? ? ? R R R R R R   ? ? ? ! ! ! ! ! ! "),
       places: [["UL <U,R>", "DR <U,R>"]] },
//     { title: "LL",
//       url: "new_solvers/LL.cgi",
//       sides: regex_stuff("U U U U U U U U U   ! ! ! ! ! ! ! ! ! " +
//                          "F F F ! ! ! ! ! !   B B B ! ! ! ! ! ! " +
//                          "R R R ! ! ! ! ! !   L L L ! ! ! ! ! ! "),
//       places: [["<U,D,F,B,R,L>", "<U,F,R>",
//                 "<U,R,L>", "<U,R>"]] },
//     { title: "1x2x3 block",
//       url: "new_solvers/Block1x2x3.cgi",
//       sides: regex_stuff("? ? ? ? U ? ? ? ?   ? ? D ? D D ? ? D " +
//                          "? ? ? ? F F ? ? F   ? ? ? ? B B ? ? B " +
//                          "? ? ? ? R ? ? ? ?   ? ? ? L L L L L L "),
//       places: [["UF","UR","UB","UL"],
//                ["DF","DR","DB","DL"],
//                ["FU","FR","FD","FL"],
//                ["BU","BR","BD","BL"],
//                ["RU","RF","RD","RB"],
//                ["LU","LF","LD","LB"]] },
     { title: "EO Line",
       url: "new_solvers/EOLine.cgi",
       sides: regex_stuff("? U ? U U U ? U ?   ? D ? U D U ? D ? " +
                          "? R ? U F U ? F ?   ? R ? U B U ? B ? " +
                          "? R ? R R R ? R ?   ? R ? R R R ? R ? "),
       places: [["UF UB","DF DB","FU FD","BU BD"],
                ["UR UL","DR DL","RU RD","LU LD"],
                ["FR FL","BR BL","RF RB","LF LB"]] },
     { title: "ZZ 1x2x3",
       url: "new_solvers/ZZ1x2x3.cgi",
       sides: regex_stuff("? U ? U U U ? U ?   ? ! D U ! D ? ! D " +
                          "? R ? U ! F ? ! F   ? R ? U ! B ? ! B " +
                          "? R ? R R R ? R ?   ? R ? L L L L L L "),
//       sides: regex_stuff("? + ? + + + ? + ?   ? ! D + ! D ? ! D " +
//                          "? + ? + ! F ? ! F   ? + ? + ! B ? ! B " +
//                          "? + ? + + + ? + ?   ? + ? L L L L L L "),
       places: [["LD <U,R,L>", "RD <U,R,L>"]] },
     { title: "Cross",
       url: "new_solvers/Cross.cgi",
       sides: regex_stuff("? ? ? ? U ? ? ? ?   ? D ? D D D ? D ? " +
                          "? ? ? ? F ? ? F ?   ? ? ? ? B ? ? B ? " +
                          "? ? ? ? R ? ? R ?   ? ? ? ? L ? ? L ? "),
       places: [["U","D","F"],["B","R","L"]] },
     { title: "XCross",
       url: "new_solvers/XCross.cgi",
       sides: regex_stuff("? ? ? ? U ? ? ? ?   ? D ? D D D ? D D " +
                          "? ? ? ? F ? ? F ?   ? ? ? ? B B ? B B " +
                          "? ? ? ? R ? ? R ?   ? ? ? ? L L ? L L "),
       places: [["UFR","URB","UBL","ULF"],
                ["DRF","DBR","DLB","DFL"],
                ["FRU","FUL","FDR","FLD"],
                ["BUR","BLU","BRD","BDL"],
                ["RUF","RBU","RFD","RDB"],
                ["LFU","LUB","LDF","LBD"]] },
     { title: "Roux S1",
       url: "new_solvers/RouxS1.cgi",
       sides: regex_stuff("? ? ? ? ? ? ? ? ?   ? ? D ? ? D ? ? D " +
                          "? ? ? ? ? F ? ? F   ? ? ? ? ? B ? ? B " +
                          "? ? ? ? ? ? ? ? ?   ? ? ? L L L L L L "),
       places: [["UF","UR","UB","UL"],
                ["DF","DR","DB","DL"],
                ["FU","FR","FD","FL"],
                ["BU","BR","BD","BL"],
                ["RU","RF","RD","RB"],
                ["LU","LF","LD","LB"]] },
     { title: "S2", longtitle: "Roux S2",
       url: "new_solvers/RouxS2.cgi",
       sides: regex_stuff("? ? ? ? ? ? ? ? ?   D ? ! D ? ! D ? ! " +
                          "? ? ? F ? ! F ? !   ? ? ? B ? ! B ? ! " +
                          "? ? ? R R R R R R   ? ? ? ! ! ! ! ! ! "),
       places: [["<U,R,Rw> FTM", "<U,R,Rw> STM"]] },
//     { title: "CMLL",
//       url: "new_solvers/CMLL.cgi",
//       sides: regex_stuff("U ? U ? ? ? U ? U   ! ? ! ! ? ! ! ? ! " +
//                          "F ? F ! ? ! ! ? !   B ? B ! ? ! ! ? ! " +
//                          "R ? R ! ! ! ! ! !   L ? L ! ! ! ! ! ! "),
//       places: [["CMLL"]] },
     { title: "S4", longtitle: "Roux S4",
       url: "new_solvers/MU.cgi",
       sides: regex_stuff("! U ! U U U ! U !   ! D ! ! D ! ! D ! " +
                          "! F ! ! F ! ! F !   ! B ! ! B ! ! B ! " +
                          "! R ! ! ! ! ! ! !   ! L ! ! ! ! ! ! ! "),
       places: [["<U,M> STM", "Void <U,M> STM", "EO <U,M> STM"]] },
     { title: "B2Bomber",
       url: "new_solvers/B2Bomber.cgi",
       sides: regex_stuff("U U U U U ? U ? ?   ? ? ? ? ? ? ? ? ? " +
                          "F F F ? ? ? ? ? ?   B ? ? ? ? ? ? ? ? " +
                          "R R R ? ? ? ? ? ?   L ? ? ? ? ? ? ? ? "),
       places: [["UFR","URB","UBL","ULF"],
                ["DFR","DRB","DBL","DLF"],
                ["FUR","FRD","FDL","FLU"],
                ["BUR","BRD","BDL","BLU"],
                ["RUF","RFD","RDB","RBU"],
                ["LUF","LFD","LDB","LBU"]] },
     { title: "1x2x2",
       url: "new_solvers/WatermanS1a.cgi",
       sides: regex_stuff("? ? ? ? ? ? ? ? ?   ? ? ? ? D D ? D D " +
                          "? ? ? ? ? ? ? ? ?   ? ? ? ? ? ? ? B B " +
                          "? ? ? ? ? ? ? ? ?   ? ? ? ? ? ? ? L L "),
       places: [["UFR","URB","UBL","ULF"],
                ["DFR","DRB","DBL","DLF"],
                ["FUR","FRD","FDL","FLU"],
                ["BUR","BRD","BDL","BLU"],
                ["RUF","RFD","RDB","RBU"],
                ["LUF","LFD","LDB","LBU"]] },
/*     { title: "S1b",
       url: "new_solvers/WatermanS1b.cgi",
       sides: regex_stuff("? ? ? ? ? ? ? ? ?   D D D D ! ! D ! ! " +
                          "? ? ? ? ? ? F F F   ? ? ? ? ? ? B ! ! " +
                          "? ? ? ? ? ? R R R   ? ? ? ? ? ? L ! ! "),
       places: [["<U,F,R,Uw> FTM"]] },*/
/*     { title: "U,Rw2",
       url: "new_solvers/Rw2U.cgi",
       sides: regex_stuff("? ? ? ? ? ? ? ? ?   D ? ! D ? ! D ? ! " +
                          "? ? ? F ? ! F ? !   ? ? ? B ? ! B ? ! " +
                          "? ? ? R R R R R R   ? ? ? ! ! ! ! ! ! "),
       places: [["<U,Rw2> FTM"]] },*/
     { title: "CFL",
       url: "new_solvers/CFL.cgi",
       sides: regex_stuff("? ? ? ? ? ? ? ? ?   D ? D ? D ? D ? D " +
                          "? ? ? ? ? ? F ? F   ? ? ? ? ? ? B ? B " +
                          "? ? ? ? ? ? R ? R   ? ? ? ? ? ? L ? L "),
       places: [["U","D","F"],["B","R","L"]] },
     { title: "CFL2",
       url: "new_solvers/CFL2.cgi",
       sides: regex_stuff("? ? ? ? ? ? ? ? ?   D ? D ? ? ? D ? D " +
                          "? ? ? ? ? ? F ? F   ? ? ? ? ? ? B ? B " +
                          "? ? ? ? ? ? R ? R   ? ? ? ? ? ? L ? L "),
       places: [["U","D","F"],["B","R","L"]] },
     { title: "3x3x3",
       url: "new_solvers/Kociemba.cgi",
       sides: regex_stuff("U U U U U U U U U   D D D D D D D D D " +
                          "F F F F F F F F F   B B B B B B B B B " +
                          "R R R R R R R R R   L L L L L L L L L "),
       places: [["Kociemba (UD)", "Kociemba (FB)", "Kociemba (RL)"]] }];


