/*
// Javascript basic rutines
// Version: 5.4
//
// Requires:
// IE7, FireFox 2.0
//
// Changes:
// 14.04.06 - 4.0
// 14.10.08 - 5.0 built on jQuery
// 28.10.08 - added doToggle
// 15.12.08 - added saveXMLData
// 25.03.09 - added isMail prototype
// 20.04.10 - added readCookie
//
// Copyright(c) iNeta d.o.o., dev@ineta.si
// All rights reserved. Any unauthorized use of script or part of script is prohibited.
*/

// Settings
var sepThousands = ".";
var sepDecimals = ",";

// Prototypes
String.prototype.ltrim = function() { return this.replace(/^\s+/,'') }
String.prototype.rtrim = function() { return this.replace(/\s+$/,'') }
String.prototype.trim = function() { return this.replace (/^\s*|\s*$/g, "") }
String.prototype.toFloat = function() { return (isNaN (parseFloat (this.trim())) ? 0 : parseFloat (this.trim())) }
String.prototype.toNumber = function() { return (currencyToNumber (this)) }
String.prototype.toCurrency = function() { return (numberToCurrency (this.toNumber())) }
String.prototype.left = function(n) { return this.substr(0,n) }
String.prototype.right = function(n) { return this.substr(this.length-n) }
String.prototype.encode = function() { return this.replace (/%/,'%25').replace (/&/g,'%26').replace(/#/g,'%23').replace(/\+/g,'%2B') }
String.prototype.isMail = function() {
  var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
  return (filter.test(this));
}
String.prototype.isDate = function() {
  var monthLength = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
  var d = this.split(/[\/.-]/);
  d.push ("0", "0", "0");
  var theDay = d[0].toFloat();
  var theMonth = d[1].toFloat();
  var theYear = d[2].toFloat();
  if (!theDay || !theMonth || !theYear) return false;
  if (theYear/4 == parseInt(theYear/4)) monthLength[1] = 29;
  if (theDay > monthLength[theMonth-1]) return false;
  return true;
}
String.prototype.getYear = function() {
  var d = this.split(/[\/.-]/);
  d.push ("0", "0", "0000");
  return d[2].toFloat();
}
String.prototype.toDate = function() {
  var d = this.split(/[\/.-]/);
  d.push ("0", "0", "0");
  var theDay = d[0].toFloat();
  var theMonth = d[1].toFloat();
  var theYear = d[2].toFloat();
  return new Date (theYear, theMonth-1, theDay);
}
Date.prototype.diffDays = function(date2) {
  var day = 1000*60*60*24;
  return Math.ceil ((this.getTime() - date2.getTime()) / day);
}

// Functions ---------------------------------------------------------------------------------------

// Test if key pressed is integer type
function isKeyInt (inputObject, event) {
  event = event || window.event;
  if (event) {
    if (event.keyCode) var key = event.keyCode;
    else var key = event.which;
  }
  var c = String.fromCharCode (key);
  return (c >= "0" && c <= "9") || (key == 8) || (key == 9) || (key == 13) || (key >= 33 && key <= 40) || (key == 46);
}

// Remove non numeric chars and optional fill leading zeros
function setInt (inputObject, maxLength) {
  var value = inputObject.value;
  var newValue = "";
  for (var i = 0; i < value.length; i++) {
    var c = value.charAt(i);
    if (c >= '0' && c <= '9') newValue += c;
  }
  if (maxLength && newValue.length < maxLength) {
    var l = (maxLength - newValue.length);
    for (var i = 0; i < l; i++)
      newValue = '0' + newValue;
  }
  inputObject.value = newValue;
}

// Convert string formated currency to number (1.250,30 => 1250.30; 1,250,30 => 1250.30; 1,250.30 => 1250.30)
function currencyToNumber(s) {
  var str = new String(s);
  var result = new String ("");
  var count = 0;
  if (str.length > 0) {
    str = str.trim();
    for (var i = str.length-1; i >= 0; i--)
      if (str.charAt(i) == "," || str.charAt(i) == ".") {
        if (count == 0) result = "." + result;
        count++;
      } else
        result = str.charAt(i) + result;
    result = String(parseFloat(result) ? parseFloat(result) : 0);
    dec_pos = result.indexOf(".");
    result = (dec_pos < 0 ? result + ".00" : (result + "00").substr(0, dec_pos+3));
  }
  return (result.toFloat());
}

// Format number as currency string
function numberToCurrency(num) {
  num = num.toString().replace(/\$|\,/g,'');
  if(isNaN(num)) num = "0";
  sign = (num == (num = Math.abs(num)));
  num = Math.floor(num*100+0.50000000001);
  cents = num%100;
  num = Math.floor(num/100).toString();
  if(cents<10) cents = "0" + cents;
  for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
    num = num.substring(0,num.length-(4*i+3)) + sepThousands + num.substring(num.length-(4*i+3));
  return (((sign)?'':'-') + num + sepDecimals + cents);
}

// Disable all buttons on form (use on submiting form)
function disableButtons(objForm) {
  for (var i = 0; i < objForm.elements.length; i++) {
    var e = objForm.elements [i];
    if (e.type == "button" || e.type == "submit") e.disabled = true;
  }
  $.blockUI({message: '<img src="img/bfw/loadingAnimation.gif" alt="..." />',
             css: {backgroundColor: '', border: ''}});
  return true;
}

// Post variables by javascript call
function jsPost (uri, inputList) {
  var jsPostForm = document.createElement ("form");
  jsPostForm.method = "post" ;
  jsPostForm.id = "jsPostForm";
  jsPostForm.action = uri;
  for (var i in inputList) {
    $("input[name^='" + inputList [i] + "']").clone().appendTo (jsPostForm);
  }
  document.body.appendChild (jsPostForm);
  jsPostForm.submit();
  document.body.removeChild (jsPostForm);
}

// Invert element visiblity
function doToggle (contentSelector, imgSelector, imgOn, imgOff) {
  var v = $(contentSelector).is(":visible");
  $(contentSelector).slideToggle("fast");
  if (imgSelector) {
    if (!v) $(imgSelector).attr ("src", imgOn ? imgOn : "img/bfw/collapse.gif");
    else $(imgSelector).attr ("src", imgOff ? imgOff : "img/bfw/expand.gif");
  }
}

// Select tab sheet
function doSelectTabSheet(objSelect) {
  $("div[id^='Sheet" + objSelect.name + "']").hide();
  $("#Sheet" + objSelect.name + objSelect.options [objSelect.selectedIndex].value).show();
}

// Open new window
function doWindowOpen(uri) {
  w = window.open (uri, "info", "directories=no,location=no,menubar=yes,resizable=yes,scrollbars=yes,status=no,toolbar=no");
  w.focus();
}

// Read cookie data
function readCookie(cookieName) {
 var theCookie = "" + document.cookie;
 var ind = theCookie.indexOf(cookieName);
 if (ind == -1 || cookieName == "") return "";
 var ind1 = theCookie.indexOf(';',ind);
 if (ind1 == -1) ind1=theCookie.length;
 return unescape(theCookie.substring(ind+cookieName.length+1,ind1));
}

// XML support -------------------------------------------------------------------------------------
// Cross browser implementation of XML parser object
function loadXMLData (xmlString) {
  if (window.ActiveXObject) {
    var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async = "false";
    xmlDoc.loadXML (xmlString);
    return (xmlDoc);
  } else {
    try {
      var parser = new DOMParser();
      var xmlDoc = parser.parseFromString (xmlString,"text/xml");
      return (xmlDoc);
    } catch (e) {
      alert (e);
      return;
    }
  }
}

function saveXMLData (xmlDoc) {
  if (window.ActiveXObject) return (xmlDoc.documentElement.xml);
  else return ((new XMLSerializer()).serializeToString (xmlDoc));
}

