var Library	= {
	DateDivider:	"-",
	DateFormat:	"j-n-Y",
	FormatDate:	function(input) {
		return	this.DateFormat.replace("j", input.getDate()).replace("Y", input.getFullYear()).replace("n", input.getMonth()+1);
	},
	ParseDate:	function(input) {
		inputAr	= input.split(this.DateDivider);
		formatAr	= this.DateFormat.split(this.DateDivider);
		for(i=0; i<inputAr.length; i++) {
			switch(formatAr[i]) {
				case "j":
					var day	= parseInt(inputAr[i]);
					break;
				case "n":
					var month	= parseInt(inputAr[i])-1;
					break;
				case "Y":
					var year	= parseInt(inputAr[i]);
					break;
			}
		}
		return	new Date(year, month, day);
	},
	ParseDateTime:	function(input) {
		var result= this.ParseDate(input);
		var timeOb= this.ParseTime(input);
		if(timeOb) {
			result.setHours(	timeOb.hour);
			result.setMinutes(	timeOb.minute);
		}
		return	result;
	},
	ParseTime:	function(input) {
		var result		= {hour: null, minute: null};
		if(input.indexOf(" ")>=0) {
			var timePart	= input.split(" ")[1];
		} else if(input.length>=0) {
			var timePart	= input;
		}
		if(timePart.indexOf(".")>=0) {
			var timeAr	= timePart.split(".");
		}
		if(timePart.indexOf(":")>=0) {
			var timeAr	= timePart.split(":");
		}
		if(timeAr && timeAr.length==2) {
			if(this.Numeric(timeAr[0]) && this.Numeric(timeAr[1])) {
				result.hour	= parseInt(timeAr[0]);
				result.minute	= parseInt(timeAr[1]);
			}
			if(result.hour==null || isNaN(result.hour) || isNaN(result.minute)) {
				result	= null;
			}
		}
		return	result;
		
	},
	DialogResult:	null,
	DialogOK:		null,
	DialogCancel:	null,
	UploadFoto:	function() {
		window.open("/upload.php?mode=foto", "Dialog", "resizable=1,location=0,status=1,scrollbars=0,width=500,height=150");
	},
	UploadFile:	function() {
		window.open("/upload.php?mode=file", "Dialog", "resizable=1,location=0,status=1,scrollbars=0,width=500,height=150");
	},

	addEventHandler:	function(element, event, handler) {
		if(window!==window) {
			element	= document.getElementById(element);
		}
		if(element) {
			eval("var oldhandler	= (element."+event+") ? element."+event+" : function () {}; element."+event+"=function() {oldhandler(); handler();};");
		}
	},

	Numeric:		function(input) {
		return	input.toString().match(/^[-]?\d*\.?\d*$/);
	},
	Contains:		function(input, criteria) {
		return	(input.indexOf(criteria)!=-1);
	},
	Email:		function(input) {
		return	(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(input));
	},
	HasValue:		function(input) {
		return	(input!=undefined && input.length!=0);
	},
	MaxLength:	function(input, criteria) {
		return	(input==undefined || input.length<=parseInt(criteria));
	},
	MinLength:	function(input, criteria) {
		return	(input==undefined || input.length>=parseInt(criteria));
	},
	DateExists:	function(input) {
		return	(Library.ParseDate(input).toString().indexOf("NaN")==-1);
	},
	DateBefore:	function(input, criteria) {
		return	(Library.ParseDate(input).toString().indexOf("NaN")==-1 && Library.ParseDate(input)<Library.ParseDate(criteria));
	},
	TimeExists:	function(input) {
		return	(Library.ParseTime(input)!=null);
	},
	DateTimeExists:function(input) {
		return	(Library.ParseDate(input).toString().indexOf("NaN")==-1 && Library.ParseTime(input)!=null && input.indexOf(" ")>=0);
	},

	ScrollTop:	function() {
		var ScrollTop	= document.body.scrollTop;
		if(ScrollTop==0) {
			if (window.pageYOffset) {
				ScrollTop	= window.pageYOffset;
			} else {
				ScrollTop	= (document.body.parentElement) ? document.body.parentElement.scrollTop : 0;
			}
		}
		return	ScrollTop;
	},
	CancelEvent:	function (e) {
		if (!e) var e	= window.event;
		e.cancelBubble	= true;
		if (e.stopPropagation) e.stopPropagation();
	},
	EventHandled:	false

};

var	Validation	= {
	Result:		null,
	Messages:		null,
	FirstError:	null,
	Start:		function() {
		this.Result	= true;
		this.Messages	= Array();
	},
	Finish:		function() {
		if(!this.Result) {
			document.getElementById(this.FirstError).focus();
			var	fullMessage	= "";
			for(i=0; i<this.Messages.length; i++) {
				fullMessage	= fullMessage + this.Messages[i];
				if(i<this.Messages.length-1) {
					fullMessage	= fullMessage + "\n";
				}
			}
			alert(fullMessage);
		}
		return	this.Result;
	},
	Check:		function(ID, type, message) {
		var el	= document.getElementById(ID);
		var checkResult	= true;

		if(type&Checks.Numeric) {
			if(Library.HasValue(el.value) && !Library.Numeric(el.value)) {
				checkResult	= false;
			}
		}
		if(type&Checks.Required) {
			if(!Library.HasValue(el.value)) {
				checkResult	= false;
			}
		}
		if(type&Checks.Email) {
			if(!Library.Email(el.value)) {
				checkResult	= false;
			}
		}
		if(type&Checks.Contains) {
			if(!Library.Contains(el.value, el.getAttribute("Contains"))) {
				checkResult	= false;
			}
		}
		if(type&Checks.MaxLength) {
			if(!Library.MaxLength(el.value, el.getAttribute("MaxLength"))) {
				checkResult	= false;
			}
		}
		if(type&Checks.MinLength) {
			if(!Library.MinLength(el.value, el.getAttribute("MinLength"))) {
				checkResult	= false;
			}
		}
		if(type&Checks.Between) {
			if(!Library.MinLength(el.value, el.getAttribute("MinLength")) || !Library.MaxLength(el.value, el.getAttribute("MaxLength"))) {
				checkResult	= false;
			}
		}
		if(type&Checks.DateExists) {
			if(!Library.DateExists(el.value)) {
				checkResult	= false;
			}
		}
		if(type&Checks.DateBefore) {
			if(!Library.DateBefore(el.value, el.getAttribute("MaxValue"))) {
				checkResult	= false;
			}
		}
		if(type&Checks.DateAfter) {
			if(!Library.DateBefore(el.getAttribute("MinValue"), el.value)) {
				checkResult	= false;
			}
		}
		if(type&Checks.DateBetween) {
			if(!Library.DateBefore(el.getAttribute("MinValue"), el.value) || !Library.DateBefore(el.value, el.getAttribute("MaxValue"))) {
				checkResult	= false;
			}
		}
		if(type&Checks.TimeExists) {
			if(!Library.TimeExists(el.value)) {
				checkResult	= false;
			}
		}
		if(type&Checks.DateTimeExists) {
			if(!Library.DateTimeExists(el.value)) {
				checkResult	= false;
			}
		}

		if(!checkResult) {
			this.CheckFalse(ID, message);
		}
	},
	CheckFalse:	function(ID, message) {
			if(this.Result) {
				this.FirstError	= ID;
			}
			this.Result		= false;
			this.Messages[this.Messages.length]	= message;
	}
};
var	Checks		= {
	Required:		1,
	Email:		2,
	Numeric:		4,
	Contains:		8,
	MaxLength:	16,
	MinLength:	32,
	Between:		64,
	DateExists:	128,
	DateBefore:	256,
	DateAfter:	512,
	DateBetween:	1024,
	TimeExists:	2048,
	DateTimeExists:4096
};

