﻿
////////////////////////////////////////////////////////////////////
// Function:	IsNumber
// Descript:	
// Input:		obj -> form control
//				name -> name of this control
//				ItegerOnly -> true | false
//				[MinLength] -> [integer]
// Output:	true | false
//////////////////////////////////////////////////////////////////// 
function IsNumber(obj, name, IntegerOnly, MinLength, err1, err2, err3)
{
	if(isNaN(obj.value))
	{
		if(name)				
			alert(err1);
		obj.focus();
		return false;
	}
	if(obj.value.length < MinLength)
	{
		if(name)				
			alert(err2);
		obj.focus();
		return false
	}
	if(obj.value != parseInt(obj.value) && IntegerOnly == true)
	{
		if(name)				
			alert(err3);
		obj.focus();
		return false;
	}
	return true;
}

////////////////////////////////////////////////////////////////////
// Function:	IsNoEmpty
// Descript:	
// Input:		obj -> form control
//				name -> name of this control
//				[MinLength] -> [integer]
// Output:	true | false
//////////////////////////////////////////////////////////////////// 
function IsNoEmpty(obj, name, MinLength, err1, err2)
{
	var c;
	var str = "";
	
	for(var i = 0; i < obj.value.length; i++)
	{
		c = obj.value.charAt(i);
		if(c != ' ')
			str += c;
	}
	if(str.length == 0)
	{
		if(name)
		{
			alert(err1);
			if(obj.type!='hidden')
				obj.focus();
		}
		return false;
	}
	if(str.length < MinLength)
	{
		if(name)
		{
			alert(err2);
			if(obj.type!='hidden')
				obj.focus();
		}
		return false
	}
	return true;
}

////////////////////////////////////////////////////////////////////
// Function:	NoValue
// Descript:	
// Input:	obj -> form control
//				name -> name of this control
//				val -> disable value
// Output:	true | false
//////////////////////////////////////////////////////////////////// 
function NoValue(obj, name, val, err)
{
	var value;
	if((obj.type == "select-one") || (obj.type == "select-multiple"))
	{
		value = "";
		for(var i = 0; i < obj.options.length; i++)
		{
			if(obj.options[i].selected)
				value += obj.options[i].value + "";
		}
	}
	else
	{
		value = obj.value + "";
	}
	
	if(value == val.toString())
	{
		if(name)
		{
			alert(err);
			obj.focus();
		}
		return false;
	}
	return true;
}

////////////////////////////////////////////////////////////////////
// Function:	IsEmail
// Descript:	
// Input:	obj -> form control
//				name -> name of this control
// Output:	true | false
//////////////////////////////////////////////////////////////////// 
function IsEmail(obj, name, err, AllowEmpty)
{	
	var msg =err;	
	var str = obj.value;
	// are regular expressions supported?
	var supported = 0;
	if(AllowEmpty&&obj.value=='')
		return true;
	
	if(window.RegExp)
	{
		var tempStr = "a";
		var tempReg = new RegExp(tempStr);
		if(tempReg.test(tempStr)) supported = 1;
	}
	if(!supported)
	{
		if((str.indexOf("@") > 0))
		{
			alert(msg);
			obj.focus();
			return false;
		}	
	}
	else
	{	
		var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
		var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");
		if(!(!r1.test(str) && r2.test(str)))
		{
			alert(msg);
			obj.focus();
			return false;
		}
	}
	return true;
}

////////////////////////////////////////////////////////////////////
// Function:	IsChecked
// Descript:	
// Input:	obj -> form control
//				msg -> alert message
// Output:	true | false
//////////////////////////////////////////////////////////////////// 
function IsChecked(obj, msg)
{
	var len;
	var check = false;
	
	if(obj)
	{
		len = obj.length;
		//If only one checkbox
		if(len == null)
		{
			len = 0;
			if(obj.checked)
				check = true;
		}	
		for(var i = 0; i < len; i++)
		{
			if(obj[i].checked)
				check = true;
		}
		if(check != true)
		{
			if(msg)
				alert(msg);
		}
	}
	return check;
}

////////////////////////////////////////////////////////////////////
// Function:	LessThan()
// Descript:	
// Input:	obj1 -> first form control
//			obj2 -> second form control
//			name1 -> name of first form control
//			name2 -> name of second form control
// Output:	true | false
//////////////////////////////////////////////////////////////////// 
function LessThan(obj1, obj2, name1, name2, err)
{
	// (x * 1) for implicit conversion as number (in NN)
	var min = obj1.value * 1;
	var max = obj2.value * 1;
		
	if(min <= max)
		return true;
	else
	{
		alert(err);
		obj2.focus();
		return false;
	}
}

////////////////////////////////////////////////////////////////////
// Function:	IsDate
// Descript:	
// Input:	obj -> form control
//				name -> name of this control
//				datastyle -> "EU" | "US"
// Output:	true | false
//////////////////////////////////////////////////////////////////// 
function IsDate(obj, name, datastyle, err)
{
	if(CheckDate(obj, datastyle) == false)
	{
		if(name)
			alert(err);
		obj.focus();
		return false;
	}
	else
	{
		return true;
	}
}



function CheckDate(objValidator,args)
{
	var strDatestyle='';
	var strDate;
	var strDateArray;
	var strDay;
	var strMonth;
	var strYear;
	var intday;
	var intMonth;
	var intYear;
	var booFound = false;
	var datefield = args;
	var strSeparatorArray = new Array(".");
	var intElementNr;
	var err = 0;
	var strMonthArray = new Array(12);
	var temp;
	var YearTimeArr = new Array();
	strMonthArray[0] = 1;
	strMonthArray[1] = 2;
	strMonthArray[2] = 3;
	strMonthArray[3] = 4;
	strMonthArray[4] = 5;
	strMonthArray[5] = 6;
	strMonthArray[6] = 7;
	strMonthArray[7] = 8;
	strMonthArray[8] = 9;
	strMonthArray[9] = 10;
	strMonthArray[10] = 11;
	strMonthArray[11] = 12;
	strDate = datefield.Value;
	
	if(strDatestyle == "")
	{
		strDatestyle = "EU";
	}
	
	if(strDate.length < 1)
	{
		args.IsValid=false;
		return false;
	}
	//alert(0 + ' ' + intElementNr < strSeparatorArray.length)
	for(intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++)
	{
		if(strDate.indexOf(strSeparatorArray[intElementNr]) != -1)
		{
			strDateArray = strDate.split(strSeparatorArray[intElementNr]);
			
			if(strDateArray.length != 3 )
			{
				err = 1;
				args.IsValid=false;
				return false;
			}
			else
			{
				strDay = strDateArray[0];
				strMonth = strDateArray[1];
				strYear = strDateArray[2];
			}
			booFound = true;
		}
		else
		{
			err = 1;
			args.IsValid=false;
			return false;
		}
	}

	// US style
	if(strDatestyle == "US")
	{
		strTemp = strDay;
		strDay = strMonth;
		strMonth = strTemp;
	}
	
	intday = parseInt(strDay, 10);
	if(isNaN(strDay))
	{
		err = 2;
		args.IsValid=false;
		return false;
	}
	intMonth = parseInt(strMonth, 10);
	
	if(isNaN(strMonth))
	{
		args.IsValid=false;
		return false;
	}
	intYear = parseInt(strYear, 10);
	if(isNaN(strYear))
	{
		YearTimeArr=strYear.split(' ');
		if(YearTimeArr.length==2)
		{
			if(YearTimeArr[1].toString().split(':').length==3)
			{
				if(!isTime(YearTimeArr[1].toString().split(':')[0],YearTimeArr[1].toString().split(':')[1],YearTimeArr[1].toString().split(':')[2]))
				{
					err = 4;
					args.IsValid=false;
					return false;
				}
			}
			else
			{
				err = 4;
				args.IsValid=false;
				return false;
			}
		}
		else
		{
		err = 4;
		args.IsValid=false;
		return false;
		}
	}
	
	if(isNaN(intYear))
	{
		args.IsValid=false;
		return false;
	}
	
	
	if(intYear < 1900 || intYear > 2100)
	{
		err = 4;
		args.IsValid=false;
		return false;
	}
	if(intMonth > 12 || intMonth < 1)
	{
		err = 5;
		args.IsValid=false;
		return false;
	}
	if((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || 
		intMonth == 10 || intMonth == 12) && (intday > 31 || intday < 1))
	{
		err = 6;
		args.IsValid=false;
		return false;
	}
	if((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && 
		(intday > 30 || intday < 1))
	{
		err = 7;
		args.IsValid=false;
		return false;
	}
	if(intMonth == 2)
	{
		if(intday < 1)
		{
			err = 8;
			args.IsValid=false;
			return false;
		}
		if(LeapYear(intYear) == true)
		{
			if(intday > 29)
			{
				err = 9;
				args.IsValid=false;
				return false;
			}
		}
		else
		{
			if(intday > 28)
			{
				err = 10;
				args.IsValid=false;
				return false;
			}
		}
	}

	args.IsValid=true;
	return true;
}


function LeapYear(intYear)
{
	if(intYear % 100 == 0)
	{
		if(intYear % 400 == 0) { return true; }
	}
	else
	{
		if((intYear % 4) == 0) { return true; }
	}
	return false;
}

function Compare(Obj1,name1,Obj2,name2, err)
{
	var msg = err
	if(Obj1.value != Obj2.value)
	{
		alert(msg);
		Obj1.focus();
		return false;
	}
	return true;
}

/////////////////////////////////////////////////////////////////////
function CompareDate(strDate1, strDate2, intDiffDay) // format (dd.mm.yyyy)
{
	//var today = new Date(); // dnes
	var date1 = new Date(); // porovnavane datum 1
	var date2 = new Date(); // porovnavane datum 2
	var subtract = 0;
	var diff = 0;
		
	// parsovani vstupnich hodnot (dd.mm.yyyy)
	var strDateArray1 = strDate1.split(".");
	var strDateArray2 = strDate2.split(".");
		
	date1.setYear(strDateArray1[2]);
	date1.setMonth((strDateArray1[1] - 1));
	date1.setDate(strDateArray1[0]);
		
	date2.setYear(strDateArray2[2]);
	date2.setMonth((strDateArray2[1] - 1));
	date2.setDate(strDateArray2[0]);

	subtract = date1.getTime() - date2.getTime();
	
	if(intDiffDay)
	{
		diff = Math.abs(subtract) / (1000 * 60 * 60 * 24);
		if(diff > intDiffDay) subtract = 1;
		if(diff < intDiffDay) subtract = -1;
		if(diff == intDiffDay) subtract = 0;
	}
	else
	{
		if(subtract > 0) subtract = 1;
		if(subtract < 0) subtract = -1;
	}
	//alert(subtract);
		
	return subtract;
}

/////////////////////////////////////////////////////////////////////




