(function($){
    $.log("Loading review widget")
    $.fn.reviewWidget = function(options){
      console.log("review widget enabled on", this)
      var defaults = {
      }

      var settings = $.extend({}, defaults, options)
      var $renderEditForm = function(responseData, postData){

        $( "#dialog:ui-dialog" ).dialog( "destroy" );
        var responseText = $(responseData.response)
        var $form = $(responseText.get(0))
        var $formTitle = $form.attr("data-widget-title")
        var widgetEditDialog = $("<div class='form'>").html( $form.html() )

              widgetEditDialog.dialog({
                  title: $formTitle,
                  autoOpen: true,
                  height: 'auto',
                  width: '640px',
                  modal: true,
                  position: 'center',
                  zIndex: 3999 ,
                  create: function(event, ui){
                      $("#field-wrapper-captcha .field-widget .inner").append(
                          $("<div>").attr("id", "recaptcha_container")
                      )
                      Recaptcha.create(
                          settings.captchaKey,
                          "recaptcha_container",{
                              theme: "plain",
                              callback: Recaptcha.focus_response_field
                      })


                  },
                  buttons: [{
                      text: 'Ok',
                      click: function(event) {
                          event.preventDefault();

                          $.log("Submitting review")
                          var $widgetEditForm = $(this).find("form")
                          postData.widget_edit_mode='submission'


                          $widgetEditForm.ajaxSubmit({
                              data: postData,
                              beforeSubmit: function(arr, $form, options) {
                                  $.log("BeforeSubmit: ", arr)
                              },
                              complete: function(jqXHR, response){
                                  $.log("ajaxForm Submit response: ", jqXHR, response)
                                  var data = null

                                  if("response" in jqXHR){
                                      var data = jqXHR.response
                                  }else if("responseText" in jqXHR){
                                      var data = jqXHR.responseText
                                  }

                                  if (data){
                                      if (data.substring(0, 5) == "<pre "){
                                          data = $(data).text()
                                      }
                                      data = $.parseJSON(data)
                                  }

                                  $.log("converted xhrData to JSON", data)

                                  if(data && "result" in data){
                                      $.log("ServerLogiceResponse : ", data.result)

                                      switch(data.result){
                                          case "ok" :
                                              $("#site-messages").jnotifyAddMessage({
                                                  text: data.message,
                                                  type : 'success'
                                              })
                                                  widgetEditDialog.dialog('close')
                                              break;

                                          default :
                                              $("#site-messages").jnotifyAddMessage({
                                                  text: data.message,
                                                  type : data.result
                                              })
                                              break;
                                      }
                                  }
                              }
                          })
                      },
                  },{
                      text:'Cancel',
                      click: function(event) {
                          $( this ).dialog( "close" );
                      }
                  }]
              })

          }


          /*
           *
           */
          var submitReviewButtonClick = function(event){
              event.preventDefault();
              var $widget = $(this).parents(".widget")

              var postData = {
                      "widget_id": $widget.attr("data-widget-id"),
                      "widget_type_id": $widget.attr("data-widget-type-id"),
                      "business_profile_id": $widget.attr("data-business-profile-id"),
                      "business_stub_id": $widget.attr("data-business-stub-id"),
                      "widget_edit_mode": 'details',
                      "area_slug": $widget.parents(".widget-area").attr("data-area-slug"),
                  }
              $.log("requesting review submission form for business", $widget.attr("data-business-profile-id"))
              $.ajax({
                  type: "POST",
                  url: settings.submissionUrl,
                  data:  postData,
                  complete: function(jqXHR, response){
                      $.log("ajax call to get widget completed", jqXHR, response)

                      if (jqXHR.statusText == "OK"){
                          if("response" in jqXHR){
                              var data = $.parseJSON(jqXHR.response)
                          }else if("responseText" in jqXHR){
                              var data = $.parseJSON(jqXHR.responseText)
                          }

                          if(data && "result" in data){
                              switch(data.result){
                                  case "ok":
                                      $("#site-messages").jnotifyAddMessage({
                                          text: data.message,
                                          type : 'success'
                                      })
                                      $.log("Form HTML Retrieved.", data.response)
                                      $renderEditForm(data, postData )

                                      break;

                                  default :
                                      $("#site-messages").jnotifyAddMessage({
                                          text: data.message,
                                          type : data.result
                                      })
                                      break;
                              }
                          }
                      }
                  }
              });

          }


      var $widget = $(this);
      var $widget_id = $widget.attr("data-widget-id")
      var $submitReviewButton = $widget.find("a")
      var $moderateReviewButton = $widget.find(".moderate-review-button")

          options.submissionUrl = $submitReviewButton.attr("href")
          $submitReviewButton.attr("href", "#")
          $submitReviewButton.click(submitReviewButtonClick)

    }
    $.log("review widget loaded")

})(jQuery)

