// JavaScript Document
//**********************************************************************
//VARS
//**********************************************************************
var reWhitespace = /^\s+$/;
var reDigit = /^\d$/;
var reAlpha = /^[a-zA-Z]$/;
var reAlphanum = /^[a-zA-Z0-9]$/;
var reAlphanumeric = /^[a-zA-Z0-9]+$/;

var reInteger = /^[0-9]{0,9}$/;
var reSignedInteger = /^(\x2b|\x2d)\d+$/;
var rePositiveInteger = /^(\x2b)?\d+$/;
var reNegativeInteger = /^(\x2d)\d+$/;
var reFloat = /^(((\d+(\.\d*)?)|((\d*\.)?\d+))|((\d+(\,\d*)?)|((\d*\,)?\d+)))$/;
var reSignedFloat = /^(((\x2b|\x2d)?\d+(\.\d*)?)|((\x2b|\x2d)?(\d*\.)?\d+))$/;

var reLogin = /^[a-zA-Z0-9]{3,10}$/;
var rePassword = /^[a-zA-Z0-9]{3,}$/;
var rePhone=/^((\b8\s\(383\)\s)(([1-9]{1,1}[0-9]{1,1}-[0-9]{2,2}-[0-9]{3,3})|([1-9]{1,1}[0-9]{2,2}(-[0-9]{2,2}){2,2}))|([1-9]{1,1}[0-9]{2,2}(-[0-9]{2,2}){2,2})|(8(-[1-9]{1,1}[0-9]{2,2}){2,2}(-[0-9]{2,2}){2,2}))$/;
/*
var reSimbol = /^\S/;
var reSimbolic = /^\S+$/;
var reText = /(^\S[\S\b]*\S$)|(^\S+$)/;
var reRawText = /^[\S\b]+$/;

var rePersonalName = /(^[\'a-zA-Z0-9][ \'a-zA-Z0-9]*[a-zA-Z0-9]$)|()/;

*/
//*******************************************************************
// VALIDATE FUNCTIONS
//*******************************************************************

function emailCheck (emailStr) {
var emailPat=/^(.+)@(.+)$/
var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
var validChars="\[^\\s" + specialChars + "\]"
var quotedUser="(\"[^\"]*\")"
var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
var atom=validChars + '+'
var word="(" + atom + "|" + quotedUser + ")"
var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
var matchArray=emailStr.match(emailPat)
if (matchArray==null) {
	alert("Неверный формат Email  (проверьте @ и .)")
	return false
}
var user=matchArray[1]
var domain=matchArray[2]

if (user.match(userPat)==null) {
    alert("Имя адресата не является допустимым.")
    return false
}

var IPArray=domain.match(ipDomainPat)
if (IPArray!=null) {
	  for (var i=1;i<=4;i++) {
	    if (IPArray[i]>255) {
	        alert("Неверный формат IP адреса")
		return false
	    }
    }
    return true
}

var domainArray=domain.match(domainPat)
if (domainArray==null) {
	alert("Неверное имя домена")
    return false
}

var atomPat=new RegExp(atom,"g")
var domArr=domain.match(atomPat)
var len=domArr.length
if (domArr[domArr.length-1].length<2 ||
    domArr[domArr.length-1].length>3) {
   alert("Email должен заканчиваться трехбуквенным доменом или двухбуквенным доменом страны")
   return false
}

if (len<2) {
   var errStr="Отсутствует имя сервера."
   alert(errStr)
   return false
}

return true;
}

//************************************************************
function isNumeric(elem)
{
	if(isNaN(elem.value) || elem.value == "") return false;
	else return true;
}
function isGEZNumeric(elem)
{
	if(isNumeric(elem))
	{
		if(eval(elem.value>=0)) return true;
	}
	return false;
}
function isGTZNumeric(elem)
{
	if(isNumeric(elem))
	{
		if(eval(elem.value>0)) return true;
	}
	return false;
}
//*******************************************************************
function _isInt(value)
{
	if(isNaN(value) || value == "" || value.indexOf('.')!=-1 ) return false;
	return true;
}
function isInt(elem)
{
	if(_isInt(elem.value)) return true;
	return false;
}
function isGTZInt(elem)
{
	if(_isInt(elem.value) && eval(elem.value)>0) return true;
	return false;
}
function isGEZInt(elem)
{
	if(_isInt(elem.value) && eval(elem.value)>=0) return true;
	return false;
}
//****************************************************************
// focus/select + alert
//****************************************************************
function SayAndFocus(elem, ss)
{
	alert(ss);
	elem.focus();
	return false;
}

function SayAndPoint(elem, ss)
{
	alert(ss);
	elem.select();
	elem.focus();
	return false;
}


//********************************************************************
function isIntAndSay(elem, ss)
{
	if(_isInt(elem.value)) return true;
	return SayAndPoint(elem, ss);
}
function isGTZIntAndSay(elem, ss)
{
	if(isGTZInt(elem)) return true;
	return SayAndPoint(elem, ss);

}
function isGEZIntAndSay(elem, ss)
{
	if(isGEZInt(elem)) return true;
	return SayAndPoint(elem, ss);

}

//**********************************************************************
//NUMBER VALIDATIONS
//**********************************************************************

function isEmpty(s)
{
	return ((s == null) || (s.length == 0))
}

function isWhitespace(s)
{
  return (isEmpty(s) || reWhitespace.test(s));
}

function isFloat(s)
{
	return reFloat.test(s);
}

function isInteger(s)
{
	return reInteger.test(s);
}

function isPositiveInteger(s)
{
	return rePositiveInteger.test(s);
}

function isNegativeInteger(s)
{
	return reNegativeInteger.test(s);
}

function isNonPositiveInteger(s)
{
	alert(s + isSignedInteger.test(s));
	if(isSignedInteger.test(s))
		if(isNegativeInteger.test(s) || eval(s)==0) return true;

	return false;
}

function isNonNegativeInteger(s)
{
	if(isSignedInteger.test(s))
		if(isPositiveInteger.test(s) || eval(s)==0) return true;

	return false;
}

//**********************************************************************
//STRINGS VALIDATIONS
//**********************************************************************
function isDigit(s)
{
	return reDigit.test(s);
}

function isAlpha(s)
{
	return reAlpha.test(s);
}

function isAlphanum(s)
{
	return reAlphanum.test(s);
}

function isAlphanumeric(s)
{
	return reAlphanumeric.test(s);
}
function isChanged(s)
{
	if (s == null)
		return false;
	if (s.value == 0)
		return false;
	return true;
}

//**********************************************************************
//LOGICAL VALIDATIONS
//**********************************************************************
//s - string to validate, m - message to report in case of validation failure
function isLogin(elem, m)
{
	if (isEmpty(elem.value))
		return SayAndPoint(elem, 'Поле "Имя" должно быть заполнено.');
	if(reLogin.test(elem.value)) return true;
	else return SayAndPoint(elem, m);
}
function isPassword(elem, m)
{
	if (isEmpty(elem.value))
		return SayAndPoint(elem, 'Поле "Пароль" должно быть заполнено.');
	if(rePassword.test(elem.value)) return true;
	else return SayAndPoint(elem, m);
}
//the second param used for determine whether a email is required field
//if the second param used (passed to the function) than email field is not required
function isEmail(elem)
{
	if( Trim(elem.value) == "") return true;
	if(emailCheck(elem.value)) return true;
	else
	{
		elem.select();
		elem.focus();
		return false;
	}
}

var page="index.html";var curTimestamp='ts_'+new Date().getTime();var initialBOTDay=null;var initialBOTMonth=null;initialBOTYear=null;
var serverDate=new Date();var timeZone=serverDate.getTimezoneOffset();var serverMinutes=serverDate.getMinutes();var serverHours=serverDate.getHours();
function initDate(date1){var clientDate=new Date();if(date1==''){if(initialBOTDay==null){initialBOTDay=clientDate.getDate();}if(initialBOTMonth==null)
{initialBOTMonth=clientDate.getMonth();}if(initialBOTYear==null){initialBOTYear=clientDate.getFullYear();}}else{date2=new String(date1);
initialBOTDay=date2.substr(0,2);initialBOTMonth=date2.substr(3,2)-1;initialBOTYear=date2.substr(6,4);}}
// Open Calendar
var oc = null;
function openCalendar(url, day, month, year,id,type) {
	if (!is_opera5) {
		var form = 'AddArticle';/*getActiveFormName();*/
		var popup = "width=230,height=175,status=no,scrollbars=no,toolbar=no,menubar=no,location=no,resizable=no";
		if (!is_opera8) {
			if (oc != null && !oc.closed) oc.close();
		}
		oc = window.open(url + '?form=' + form + '&day=' + day + '&month=' + month + '&year=' + year+'&id='+id, 'viewCalendar', popup);
		oc.focus();
	}
}

function CheckForm()
{
	if (!CheckDate(document.forms[0].elements["crdate"].value))
		{
		document.forms[0].elements["crdate"].value='';
		return false;
		}
}
function PutValue(value,id)
{
	//if (CheckDate(value))
		//{
		document.getElementById(id).value=value;
		document.getElementById(id).focus();
		document.getElementById(id).blur();
		//}
}
var daysInMonthes = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

	var CurrDate=new Date();
	var MinYear=CurrDate.getFullYear();
function getMaxDay(month, year) {
	if (month == 1) {
		return year % 4 ? 28 : 29;
	}
	return daysInMonthes [month];
}
function getMinMonth(year) {
	if (year==CurrDate.getFullYear())
		return CurrDate.getMonth()+1;
	return 12;
}
function CheckDate(value)
{
var day,month,year;
	if (value.substring(2,3) != '.' || value.substring(5,6) != '.')
		return false;
	if (value.substring(0,1) == '0')
		day=value.substring(1,2);
	else
		day=value.substring(0,2);
	if (!parseInt(day))
		return false;
	if (value.substring(3,4) == '0')
		month=value.substring(4,5);
	else
		month=value.substring(3,5);
	if (!parseInt(month))
		return false;
	year=value.substring(6,10);
	if (!parseInt(year))
		return false;
	if (year < CurrDate.getFullYear() || year > CurrDate.getFullYear()+5 )
		return false;
	if (day<1 || day>getMaxDay(month-1, year))
		return false;
	if ((month<getMinMonth(year) && year == CurrDate.getFullYear()) || month >12)
		return false;
	return true;

}
function DoCheckPeriod(id1,id2,type)
{
	var d1,d2,m1,m2,y1,y2,tmp,t1,t2,str;
	d1=document.getElementById(id1).value.substring(0,2);
	d2=document.getElementById(id2).value.substring(0,2);
	m1=parseInt(document.getElementById(id1).value.substring(3,5),10)-1;
	if (m1 < 10)
		m1='0'+new String(m1);
	else
		m1=new String(m1);
	m2=parseInt(document.getElementById(id2).value.substring(3,5),10)-1;
	if (m2 < 10)
		m2='0'+new String(m2);
	else
		m2=new String(m2);
	y1=document.getElementById(id1).value.substring(6,10);
	y2=document.getElementById(id2).value.substring(6,10);
	tmp=new Date(y1,m1,d1,0,0,0);
	t1=tmp.getTime();
	tmp=new Date(y2,m2,d2,0,0,0);
	if (m1 > m2)
	{
		alert('Корректировка не может включать данные за два календарных года.\n Для изменения данных включающие конец и начало года необходимо сделать две корректировки.');
		document.getElementById(id2).value='31.12.'+y1;
	}
	else
	{
	t2=tmp.getTime();
	if (t1>t2)
		{
		if (type==1)
			document.getElementById(id1).value=document.getElementById(id2).value;
		else
			document.getElementById(id2).value=document.getElementById(id1).value;
		}
	 	if (t2 > t1+1000*60*60*24*29+3600*1000)
	{
		tmp=new Date(y1,m1,d1);
		t1=tmp.getTime(); 
		alert('Период не может быть больше 30 дней');
		tmp=new Date();
		tmp.setTime(t1+1000*60*60*24*29);
		y1=tmp.getFullYear();
		str=new String(y1);
		m1=1+tmp.getMonth(); 
		if (m1 <10)
			str='0'+m1+'.'+str;
		else
			str=m1+'.'+str;
		d1=tmp.getDate(); 
		if (d1 <10)
			str='0'+d1+'.'+str;
		else
			str=d1+'.'+str;
		document.getElementById(id2).value=str;
	}
	}
}
function CheckPeriod(id1,id2,type)
{
	var d,m,y,t;
	t=new Date();
	d=t.getDate();
	m=t.getMonth()+1;
	y=t.getFullYear();
	if (d<10)
		d='0'+d;
	if (m<10)
		m='0'+m;

	if (!CheckDate(document.getElementById(id1).value))
		document.getElementById(id1).value=d+'.'+m+'.'+y;
	if (!CheckDate(document.getElementById(id2).value))
		document.getElementById(id2).value=d+'.'+m+'.'+y;
	DoCheckPeriod(id1,id2,type);
}
function isPhoneNumber(s)
{
	/*var reSmallPhone=/^(\b73-)[0-9]{3,3}$/;
	var reCityPhone=/^[1-9]{1,1}[0-9]{2,2}(-[0-9]{2,2}){2,2}$/;
	var reRegionPhone=/^(\b8\s\(383\)\s)[1-9]{1,1}[0-9]{1,1}-[0-9]{3,3}$/;*/
	if (rePhone.test(s))
		return true;
	else
		return false;
	
}
function checkPhone(elem,id)
{
	if (!isPhoneNumber(elem.value))
	{
		 //SayAndFocus(document.getElementById(id),'Не верный формат телефона \nгородской 229-86-34\nместный 73-634\nдля области 8 (383) 45-26-893 или 8 (383) 229-86-34');
		 alert('Не верный формат телефона \nгородской 229-86-34\nдля области 8 (383) 45-26-893 или 8 (383) 229-86-34');
		 elem.value='';
		/*setTimeout("document.getElementById('"+id+"').focus();",1);
		setTimeout("document.getElementById('"+id+"').select();",1);*/
	}
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------
function checkDoLogin()
{
	if(!isLogin(document.getElementById('login'), 'Поле "Имя" заполнено неверно.')) return false;
	if(!isPassword(document.forms[0].Password, 'Поле "Пароль" заполнено неверно.')) return false;
	setAction(); 
	return true;
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------
function setAction()
{
	var t,act,loc;
	if (document.getElementById('ssl').checked) 
		t = new String('https');
	else 
		t = new String('http');
	act=new String(document.getElementById('f').action);
	loc=location.href;
	loc = loc.substr(loc.indexOf(':'));
	loc = loc.substr(0,loc.lastIndexOf('/')+1);
	t=t + loc + 'dologin.php';
	document.getElementById('f').action = t;

}
//-----------------------------------------------------------------------------------------------------------------------------------------------------------
function checkUnload(){
	if (isChanged(document.getElementById('changed')))
		return 'Вы собираетесь покинуть страницу, не сохранив измененные данные.';
}









