function trim(s) {
  return s.toString().replace(/^\s+/,'').replace(/\s+$/,'');
}

function htmlStrip(s) {
  return s.replace(/(<([^>]+)>)/ig,"");
}

function isEmail(email) {
  return email != "" && email.match(/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/);
}

function arrayToObject(arr) {
  var obj = new Object;
  for (var i = 0; i < arr.length; i++) { 
    var elem = arr[i];
    obj[elem.name] = elem.value;
  }
  return obj;
}

function trimFloatZeros(s) { 
  return (parseFloat(s.toString().replace("/(\.\d+?)0+$/", "$1")) * 1).toString();
}

function formatMoney(money, round) {
	return money.toFixed(round);
}

function formatMoneyWithCurrency(currency, currencySign, money) {
  return currency != currencySign ? "" + currencySign + "" + money : "" + money + " " + currency;
}

var EARTH_RADIUS_KM = 6372.795;
var KM_PER_MILE = 1.609344;

function coordinateValueToSpherical(v) {
  return v * 2 * Math.PI / 360;
}

function distanceOnSphereFixed(c1, c2) {
  lat1 = coordinateValueToSpherical(c1.latitude);
  lng1 = coordinateValueToSpherical(c1.longitude);
  lat2 = coordinateValueToSpherical(c2.latitude);
  lng2 = coordinateValueToSpherical(c2.longitude);
  return EARTH_RADIUS_KM * Math.atan(Math.sqrt(Math.pow(Math.cos(lat2) * Math.sin(lng2 - lng1), 2) + Math.pow(Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(lng2 - lng1), 2)) / (Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2) * Math.cos(lng2 - lng1)));
}

function setCookie(name, value, expires, path, domain, secure) {
  var cookie = name + "=" + escape(value) +
    ((expires) ? "; expires=" + expires.toGMTString() : "") +
    ((path) ? "; path=" + path : "") +
    ((domain) ? "; domain=" + domain : "") +
    ((secure) ? "; secure" : "");
  document.cookie = cookie;
}

function getCookie(name) {
  var prefix = name + "=";
  var cookieStartIndex = document.cookie.indexOf(prefix);
  if (cookieStartIndex == -1)
    return null;
  var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length)
  if (cookieEndIndex == -1)
    cookieEndIndex = document.cookie.length;
  return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex));
}

/**
 * Date.parse with progressive enhancement for ISO-8601, version 2
 * c 2010 Colin Snover <http://zetafleet.com>
 * Released under MIT license.
 */
(function () {
    var origParse = Date.parse;
    Date.parse = function(date) {
        var timestamp = origParse(date), minutesOffset = 0, struct;
        if ((!timestamp || isNaN(timestamp)) && (struct = /^(\d{4}|[+\-]\d{6})-(\d{2})-(\d{2})(?:[T ](\d{2}):(\d{2})(?::(\d{2})(?:\.(\d{3,}))?)?(?:(Z)|([+\-])(\d{2})(?::?(\d{2}))?))?/.exec(date))) {
            if (struct[8] !== 'Z') {
                minutesOffset = +struct[10] * 60 + (+struct[11]);
                if (struct[9] === '+')
                    minutesOffset = 0 - minutesOffset;
            }
            timestamp = Date.UTC(+struct[1], +struct[2] - 1, +struct[3], +struct[4], +struct[5] + minutesOffset, +struct[6], typeof(struct[7]) == 'undefined' ? 0 : +struct[7].substr(0, 3));
        }
        return timestamp;
    };
}());

