
var UNDEF = top._undefined_;

if(Array.prototype.push == UNDEF) {
	Array.prototype.push = function (item) {
		this[this.length] = item;
		return this.length;
	}
}

if(Array.prototype.pop == UNDEF) {
	Array.prototype.pop = function () {
		if(this.length > 0) {
			var tmp = this[this.length-1];
			this.length = this.length-1;
			return tmp;
		}
	}
}

if(Array.prototype.contains == UNDEF) {
	Array.prototype.contains = function (value) {
		for(var i=0; i<this.length; i++)
			if(this[i] == value) return true;
		return false;
	}
}

if(Array.prototype.clone == UNDEF) {
	Array.prototype.clone = function () {
		return this.slice(0);
	}
}

/* ------------------------------------------------------------------------- */

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 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_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();

/* ------------------------------------------------------------------------- */

function getLayer(id) {
	return (bv.ie4)? document.all[id] : document.getElementById(id);
}
