
function mathematic() {
	this.round = function (value, length) { // max 15 cyfr
		if (value != parseFloat(value)) return value;
		if (length != parseFloat(length)) length = 2;
		var multiplier = Math.pow(10,length);
		value = Math.round(value*multiplier)/multiplier;
		return value;
	}
	this.max = function (elementsArray) {
		var result = elementsArray[0];
		for (var i=1; i<elementsArray.length; i++)
			result = Math.max(result, elementsArray[i]);
		return result;
	}
	this.mul = function (value1, value2) {
		var length1 = ((String(value1).split("."))[1])? (String(value1).split("."))[1].length : 0;
		var length2 = ((String(value2).split("."))[1])? (String(value2).split("."))[1].length : 0;
		value1 = Number(String(value1).replace(/\./,""));
		value2 = Number(String(value2).replace(/\./,""));
		var result = String(value1*value2);
		var pos = result.length-(length1+length2);
		result = Number(result.substring(0, pos) + "." + result.substring(pos));
		return result;
	}
	this.toNumber = function (value) {
		return Number(String(value).replace(/,/,"."));
	}
}

function string() {
	this.trim = function (value) {
		value = value.replace(/^\s*/,"");
		value = value.replace(/\s*$/,"");
		return value;
	}
	this.printNumber = function (value, length, separator) {
		value = String(value);
		var parts = value.split(".");
		var part1 = parts[0];
		var part1 = (parts[0].length == 0)? "0" : parts[0];
		var part2 = (parts[1])? parts[1] : "";
		if (separator) part1 = this.addSeparators(part1, separator);
		if (part2.length < length){
			while (part2.length < length) part2 += "0";
		}
		else part2 = part2.substr(0 , length);
		var result = (length > 0)? part1 + "," + part2 : part1;
		return result;
	}
	this.addSeparators = function (value, separator) {
		value = String(value);
		if (!separator) var separator = ".";
		var result = "";
		while (value.length > 3) {
			result = separator + value.substring(value.length-3, value.length) + result;
			value = value.substring(0, value.length-3);
		}
		result = value + result;
		return result;
	}
}

function validator() {
	this.is_email = function (value) {
		return /^[\w\-]+(\.[\w\-]+)*@[\w\-]+(\.[\w\-]+)*(\.[a-zA-Z]{2,4})$/.test(value);
	}
	this.is_zipcode = function (value) {
		return /^\d{2}-\d{3}$/.test(value);
	}
	this.is_notempty = function (value) {
		if ( (new string()).trim(value).length != 0 ) return true;
		return false;
	}
	this.is_empty = function (value) {
		if ( value.length == 0 ) return true;
		return false;
	}
	this.is_number = function (value) {
		return /^[0-9]+((,|\.)[0-9]+)?$/.test(value);
	}
	this.is_numberPL = function (value) {
		return /^[0-9]+(,[0-9]+)?$/.test(value);
	}
	this.is_numberPL2 = function (value) {
		return /^[0-9]+,[0-9]{2}$/.test(value);
	}
	this.is_numberPL4 = function (value) {
		return /^[0-9]+,[0-9]{4}$/.test(value);
	}
	this.is_int = function (value) {
		return /^[0-9]+$/.test(value);
	}
	this.is_numberEN = function (value) {
		return /^[0-9]+(\.[0-9]+)?$/.test(value);
	}
	this.is_price = function (value) {
		return /^[0-9]+(,[0-9]{1,2})?$/.test(value);
	}
}

var v = new validator();
var s = new string();
var m = new mathematic();

mathematic.prototype.fixNumber = function (value) {
	value = value.replace(/ /g, "");
	return value.replace(/ /g, "");
}

function xfocus(obj) {
    if(v.is_number(m.fixNumber(obj.value))) obj.value = m.fixNumber(obj.value);
//    obj.focus();
}

function xblur(obj) {
    if(v.is_number(obj.value)) obj.value = s.printNumber(m.toNumber(obj.value), 2, " ");
}

function xfocus2(obj) {
	if(v.is_number(m.fixNumber(obj.value))) obj.value = m.fixNumber(obj.value);
}

function xblur2(obj) {
	if(v.is_number(m.fixNumber(obj.value))) obj.value = s.printNumber(m.toNumber(m.fixNumber(obj.value)), 0, " ");
}

