var nwp = {
  NS: function (ns) {
    var nsParts = ns.split('.');
    var root = nwp;

    for (var i = 0; i <nsParts.length; i++) {
      if (typeof root[nsParts[i]] == "undefined")
        root[nsParts[i]] = new Object();
      root = root[nsParts[i]];
    }
  }
}

window.app = {};

nwp.NS("window");
nwp.NS("util.url");
nwp.NS('form.websnap');
nwp.NS('Math');

nwp.Math.Min = function () {
  if (typeof arguments == "undefined") { return null; }
  if (arguments.length <1) { return null; }

  var result = Number.MAX_VALUE;

  for (i = 0; i <arguments.length; i++) {
    var tmp = arguments[i];
    if (tmp <result)
      result = tmp;
  }
  return result;
}

nwp.Math.Max = function () {
  if (typeof arguments == "undefined") { return null; }
  if (arguments.length <1) { return null; }

  var result = Number.MIN_VALUE;

  for (i = 0; i <arguments.length; i++) {
    var tmp = arguments[i];
    if (tmp > result)
      result = tmp;
  }
  return result;
}

nwp.form.websnap.send = function (formName, actValue) {
  var formIdent = '*[name="' + formName + '"]';
  var actIdent = 'input[name="__act"]';

  var form = $(formIdent);
  form.children(actIdent).val(actValue);
  form.submit();
}

nwp.util.url.combine = function() {
  var result = '';
  if (typeof arguments === "undefined") { return null; }
  if (arguments.length <1) {return null; }

  result = arguments[0];
  for (var i = 1; i <arguments.length; i++) {
    result += '/' + arguments[i];
  }
  return result;
}

nwp.util.paramsToString = function(params, sep) {
  var result = [];

  for (attr in params) {
    result.push(attr + '=' + params[attr]);
  }

  return result.join(sep);
};

nwp.util.ReplaceSpecialCharacters = function(input) {
 if (Number(input) == NaN) {
   return input.replace(/&/g, "&amp;")
               .replace(/>/g, "&gt;")
               .replace(/</g, "&lt;")
               .replace(/"/g, "&quot;");
  }
  else
    return input;
}

nwp.util.postDynamicForm = function(url, params, target) {
    var form = [ '<form method="POST" action="', url, '" ' + (target ? 'target="' + target + '"' : '') + '>' ];

    for(var key in params)
        form.push('<input type="hidden" name="', key, '" value="', nwp.util.ReplaceSpecialCharacters(params[key]), '"/>');

    form.push('</form>');

    jQuery(form.join('')).appendTo('body')[0].submit();
};

nwp.util.initConfig = function(defaultValues, configValues, requiredValues) {
  var result = $.extend(true, {}, defaultValues, configValues),
     errors = [];

  if (requiredValues) {
    $.each(requiredValues, function(idx, itm) {
      var current = result,
          parts = itm.split('.');

      $.each(parts, function(idx, itm) {
        if (!current[itm]) {
          parts.splice(idx +1);
          errors.push('[' + parts.join('.') + '] is not set!');
          return false;
        }
        current = current[this];
        return true;
      });
    });

  }

  if (errors.length > 0) {
    console.dir(errors);
    throw "Not all required Values are set. See console log for more details.";
  }

  return result;
};

nwp.util.updateUrl = function(url, params, target){
  var prmString = '';

  for (var key in params) {
    if (prmString != '') {
      prmString += '&';
    }
    prmString += key + '=' + params[key];
  }

  if (prmString != '')
    url += '?' + prmString;

  // console.log(url);
  ((target || top.dummy) || top).location.href = url;
};

nwp.util.checkWorkflowName = function (form, params, callback) {
  $.ajax('https://sedi.luxtram.lu/wponline.dll/CheckWorkflowName', {
    type: 'POST',
    cache: false,
    data: params,
    success: function (data) {
      if (data.state == 'ok') {
        form.submit();
      } else {
        callback(data);
      }
    }
  });
}

nwp.util.changeLocation = function(doc, url, params) {
  doc.location.href = url + '?' + nwp.util.paramsToString(params, '&');
}

nwp.window.OpenWindow = function (title, method, linkParams, windowParams) {
  var defaults = {
    width: 480,
    height: 600,
    resizable: "yes",
    status: "yes",
    scrollbars: "yes",
    dependent: "yes"
  };

  var winparams = $.extend(true, {}, defaults, windowParams);

  winparams.left = winparams.left || (screen.width / 2) - (winparams.width / 2);
  winparams.top = winparams.top || (screen.height / 2) - (winparams.height / 2);

  var url = 'https://sedi.luxtram.lu/wponline.dll/' + method;
  if (linkParams) {
    url += '?' + nwp.util.paramsToString(linkParams, '&');
  }
  
  title = title.replace(/\W/g, ''); // Leerzeichen sind nicht g�ltig => entfernen!
  var params = nwp.util.paramsToString(winparams, ',');
  var win = window.open(url, title, params);
  win.focus();
  return win;
}