/* ------------------------------------------------------------
 * Fast string concatenation
 */
function StringBuilder() {
  this.strings = new Array();
}

StringBuilder.prototype.append = function(str) {
  this.strings.push(str);
}

StringBuilder.prototype.toString = function() {
  return this.strings.join("");
}

/* ------------------------------------------------------------
 * Search a store
 */
function searchStore( site , postData, i, finished ) {
  $.ajax({
    url: site["func"],
    dataType: 'json',
    data: postData,
    type: 'POST',
    error: function(xhr, msg, err) {
      //alert("Error in " + site["func"] + ": " + err + " - " + msg);
    },
    success: function(json){
      var html = resultTemplate(site["name"], json);
      $("#messageArea").append(html);
    },
    complete: function( ) {
      if( finished )
        $("#ajaxIndicator").hide();
    }
  });//ajax
}

/* ------------------------------------------------------------
 * HTML template for search results
 */
function resultTemplate( site, records ) {
  var sbuf = new StringBuilder();

  sbuf.append("<table class='resultSet' cellspacing='0' summary=' ");
    sbuf.append(site);
    sbuf.append(" results");
  sbuf.append("'>");
  sbuf.append("<caption>");
    sbuf.append(site);
    sbuf.append(" results");
  sbuf.append("</caption>");
  /* a larger string we can skip appending on */
  sbuf.append(<r><![CDATA[
      <tr>
        <th class="store"  scope="col" abbr="Store">Store</th>
        <th class="name"   scope="col" abbr="Name">Name</th>
        <th class="couple" scope="col" abbr="Couple Name">Couple Name</th>
        <th class="date"   scope="col" abbr="Wedding Date">Wedding Date</th>
        <th class="state"  scope="col" abbr="State">State</th>
        <th class="link"   scope="col" abbr="Link">Link</th>
      </tr>
      ]]></r>
  );
  
  for( var i = 0; i < records.length; i++ ) {

    sbuf.append("<tr>");
      sbuf.append("<th scope='row' class='rowHead'>")
        sbuf.append(site)
      sbuf.append("</th>");
      sbuf.append("<td>");
        sbuf.append(records[i].name);
      sbuf.append("</td><td>");
        sbuf.append(records[i].coupleName);
      sbuf.append("</td><td>");
        sbuf.append(records[i].weddingDate);
      sbuf.append("</td><td>");
        sbuf.append(records[i].weddingLoc);
      sbuf.append("</td><td>");
        sbuf.append("<a href='");
          sbuf.append(records[i].link)
        sbuf.append("' target='_blank'>view registry</a>");
      sbuf.append("</td>");
    sbuf.append("</tr>");
  }

  sbuf.append("</table>");

  return sbuf.toString();
}

function processQuery( ) {
  $("#ajaxIndicator").show();
    $("#messageArea").empty();
    //var siteSearches = [ "seekCrateAndBarrel","seekPotteryBarn", "seekTarget", "seekWalmart" ];
    //var siteSearches = [ {"name" : "Walmart", "func" : "seekWalmart"} ];
    var siteSearches = [ 
      {"name" : "Pottery Barn", "func" : "seekPotteryBarn" },
      {"name" : "Crate And Barrel", "func" : "seekCrateAndBarrel" },
      {"name" : "Target", "func" : "seekTarget" },
      {"name" : "Bed Bath and Beyond", "func" : "seekBedBathAndBeyond" },
      {"name" : "Walmart"    , "func" : "seekWalmart" }              
    ];
    
    var splits = $("#searchBox").val().split(" ")
    var postData = "firstName=" + splits[0] + "&lastName=" + splits[1];
    var theFinisher = false;

    for( var i = 0; i < siteSearches.length; i++ ) {
      var site = siteSearches[i];
      if( i == siteSearches.length - 1 )
        theFinisher = true;

      searchStore( site, postData, i, theFinisher ); 
  }
}
/* ------------------------------------------------------------
 * Process the submit button click event
 *
 */
$(document).ready( function() {
  $("#submitButton").click(function(){
    processQuery();
  });//click

  $("#searchBox").keypress(function(e) {
    if( e.which == 13 ) // Enter key in IE/FF
      processQuery();
  });

});//ready
