﻿function RichWidgets_SetInputPrompt_bootstrap(inputId, prompt) {
  osjs(function($) {
    var input =  $("#" + inputId);

    var inputData = RichWidgets_SetInputPrompt_GetInputData(input);
    inputData.prompt = prompt;
    inputData.color = "#BBBBBB";

    input.attr("title", prompt);
    input.attr('AUTOCOMPLETE','OFF');

    var focusFunc = function() { RichWidgets_SetInputPrompt_OnFocus(inputId); };
    var blurFunc = function() { RichWidgets_SetInputPrompt_OnBlur(inputId); };
    var beforeSubmitFunc = function() { RichWidgets_SetInputPrompt_OnBeforeSubmit(inputId); };
    var afterSubmitFunc = function() { RichWidgets_SetInputPrompt_OnAfterSubmit(inputId); };

    input.bind("focus", focusFunc);
    input.bind("blur", blurFunc);

    if (!inputData.hasRegisteredGlobalHandlers) {
      if (input.get(0).form) {
        var onsubmit = beforeSubmitFunc;
        if (input.get(0).form.onsubmit) {
          onsubmit = (function(oldsubmit, beforeSubmit, afterSubmit) {
              return function(e) {
                beforeSubmit();
                if (!oldsubmit(e)) {
                  afterSubmit();
                  return false;
                } else {
                  return true;
                }
              };
            })(input.get(0).form.onsubmit, beforeSubmitFunc, afterSubmitFunc);
        }
        input.get(0).form.onsubmit = onsubmit;
        var _f = input.get(0).form;
        $(window).unload(function() {_f.onsubmit = null;})
      }

      if (OsPage_ClientValidate) {
        OsPage_ClientValidate = (function(oldClientValidate, beforeSubmit, afterSubmit) {
            return function(srcElement) {
              beforeSubmit();
              var valid = oldClientValidate(srcElement);
              afterSubmit();
              return valid;
            };
          })(OsPage_ClientValidate, beforeSubmitFunc, afterSubmitFunc);
      }

      osAjaxBackend.BindBeforeSubmit(beforeSubmitFunc);
      osAjaxBackend.BindAfterSubmit(afterSubmitFunc);

      inputData.hasRegisteredGlobalHandlers = true;
    }
    input = null;
    RichWidgets_SetInputPrompt_OnBlur(inputId);
  });
}

function RichWidgets_SetInputPrompt_GetInputData(input) {
  var inputData = {};
  if (input.get(0)) {
    var $ = osjs;
    var data = $(input.get(0).form).data("RichWidgets_SetInputPrompt");
    if (!data)
      $(input.get(0).form).data("RichWidgets_SetInputPrompt", data = {});
    inputData = data[input.attr("id")];
    if (!inputData)
      data[input.attr("id")] = inputData = {};
  }
  return inputData;
}


function RichWidgets_SetInputPrompt_OnFocus(inputId) {
  var $ = osjs;
  var input = $("#" + inputId);
  var data = RichWidgets_SetInputPrompt_GetInputData(input);
  if (RichWidgets_SetInputPrompt_IsEmpty(input, data)) {
    input.attr("value","");
  }
  input.css("color", "");
  return true;
}

function RichWidgets_SetInputPrompt_OnBlur(inputId) {
  var $ = osjs;
  var input = $("#" + inputId);
  var data = RichWidgets_SetInputPrompt_GetInputData(input);
  if (RichWidgets_SetInputPrompt_IsEmpty(input, data)) {
    input.css("color", data.color);
    input.attr("value",data.prompt);
  }
  return true;
}

function RichWidgets_SetInputPrompt_IsEmpty(input, data) {
  return (input.val() == "" ||
          input.val() == data.prompt)
}

function RichWidgets_SetInputPrompt_OnBeforeSubmit(inputId) {
  // This happens to have exactly the same behavior as RichWidgets_SetInputPrompt_OnFocus
  RichWidgets_SetInputPrompt_OnFocus(inputId);
  return true;
}

function RichWidgets_SetInputPrompt_OnAfterSubmit(inputId) {
  var focusedElement = osFocusBackend.GetCurrentFocusedElement();
  if (!focusedElement || focusedElement.id != inputId)
    RichWidgets_SetInputPrompt_OnBlur(inputId);
  return true;
}