(function($) {
  $.querystringvalues = $.queryStringValues = $.QueryStringValues = $.QueryStringvalues = $.queryStringValues = $.queryStringvalues = $.querystringValues = $.getqueryString = $.queryString = $.querystring = $.QueryString = $.Querystring = $.getQueryString = $.getquerystring = $.getQuerystring  = function(options)
  {
    defaults = { defaultvalue: null };
    options = $.extend(defaults , options);
    qs = location.search.substring(1, location.search.length);
    if (qs.length == 0) return options.defaultvalue;
      qs = qs.replace(/\+/g, ' ');
      var args = qs.split('&');
      for (var i = 0; i < args.length; i ++ )
      {
        var value;
        var pair = args[i].split('=');
        var name = unescape(pair[0]);

      if (pair.length == 2)
      {
        value = unescape(pair[1]);
      }
      else
      {
        value = name;
      }
      if (name == options.id || i == options.id-1)
      {
          return value;
      }
      }
    return options.defaultvalue
  };
})(jQuery);

Number.prototype.px = function(){ return this.toString() + "px" }

// app code
$(function(){

  $("a[name=about]").click(function(){ $("#about").toggle(); return false; })

  $("#about p").each(function() {
    $(this).html($(this).text().replace(/(@([a-zA-Z0-9]+))/g, '<a href="http://twitter.com/$2">$1</a>'))
  })

  var searchString = $.getQueryString({ id: "q" })
  var inputField   = $("input[type=text]")
  var fakeMouse    = $("#fake_mouse")
  var instructions = $("#instructions > div")
  var button       = ($.getQueryString({ id: "l" }) == "1") ? $("#lucky") : $("#search")

  if (searchString && searchString.length > 0) googleItForThem()
  else getTheSearchTerms()

  function instruct(words){
    instructions.html(words)
  }

  function getTheSearchTerms(){
    $("form").submit(function(){ $("#search").click(); return false; })
    instruct("Digite a pesquisa, clique em um botao.")
    inputField.focus().select()

    $("input[type=button]").click(clicked)

    function clicked(e){
      instruct("Compartilhe o link abaixo.")

      var l = window.location
      var url = l.protocol + "//" + l.hostname + l.pathname + "?"

      strings = [ "q=" + escape(inputField.val()).replace(/\+/g, "%2B").replace(/%20/g, "+") ]
      if (this.id == "lucky")
        strings.push("l=1")

      url += strings.join("&")
      var link = "<a href='" + url + "'>" + url + "</a>"
      $("#link").html(link)
    }
  }

  function googleItForThem(){
    $("body").css("cursor", "wait")
    fakeMouse.show()
      instruct("Passo 1: Digite sua pesquisa")

    fakeMouse.animate({
      top:  (inputField.position().top  + 15).px(),
      left: (inputField.position().left + 10).px()
    }, 3500, 'swing', function(){
      inputField.focus()
      fakeMouse.animate({ top: "+=18px", left: "+=10px" }, 'fast')
      type(searchString, 0)
    })

    function type(string, index){
      var val = string.substr(0, index + 1)
      inputField.attr('value', val)
      if (index < string.length) {
        setTimeout(function(){ type(string, index + 1) }, Math.random() * 2400)
      }
      else {
        doneTyping()
      }
    }

    function doneTyping(){
      instruct("Passo 2: Click no botao Pesquisa Google")
      fakeMouse.animate({
        top:  (button.position().top  + 10).px(),
        left: (button.position().left + 30).px()
      }, 3000, 'swing', function(){
        instruct("Foi tao dificil assim?")
        button.focus()
        setTimeout(redirect, 4000)
      })
    }

    function redirect(){
      if ($.getQueryString({ id: "debug" })) return
      var escapedString = escape(searchString).replace(/\+/g, "%2B").replace(/%20/g, "+")
      if (button.attr("id") == $("#lucky").attr("id")) {
        window.location="http://www.google.com.br/search?q=" + escapedString + "&btnI=" + escape(button.attr("value"))
      }
      else {
        window.location="http://www.google.com.br/search?q=" + escapedString + "&btnG=" + escape(button.attr("value"))
      }
    }
  }

})
