//<script>
function redir(p){
	if(isWWWurl(p)) window.location.href = p;
	else window.location.href = 'http://'+document.domain+p;
}
function redirbyval(str,element){
	redir(str+element.value);
}
function sendform(form,hash){
	if (typeof(hash) == "object") {
	  for (var i in hash) form[i].value=hash[i];
	}
	form.submit();
}
function sendformif(form,hash,msg){
	var m = msg || 'Вы подтверждаете данную операцию?';
  if (confirm(m)) sendform(form,hash);
}
function chklen(input,maxlen,output){
	var str = input.value;
	var len = str.length;
	if(len>maxlen){
		str = str.substring(0, maxlen);
		len = str.length;
		input.value = str;
	}
	var outtype=typeof(output);
	if(outtype=='string') output=document.getElementById(output);
	outtype=typeof(output);

	var resultlen=maxlen-len;

	if(outtype == 'undefined') return resultlen;
	else if(outtype== 'input'){
		output.value=resultlen;
	}else	output.innerHTML=resultlen;
}

function resetForm(form){
	var el;
	for (var i=0; i<form.length;i++){
		el=form.elements[i];
		if(typeof(el.attributes['default_value']) != 'undefined')
			el.value=el.attributes['default_value'].value;
		if(typeof(el.attributes['checked']) != 'undefined')
			el.checked=false;
	}
	form.submit();
}

function toggleVisible(elname,captEl,textON,textOFF){
  var el=document.getElementById(elname);
  if (el.style.display=="none"){
  		el.style.display="block";
  		if(captEl!=null) captEl.innerHTML=textON;
  }
  else {
  	el.style.display="none";
  	if(captEl!=null) captEl.innerHTML=textOFF;
  }
  var el_field=document.getElementById(elname+'_field');
  if(el_field!=null) el_field.value=el.style.display;
}

function toggleDisabled(elname,captEl,textON,textOFF){
  var el=document.getElementById(elname);
  el.disabled=!el.disabled;
  if(captEl!=null){
  	if(el.disabled)
  		captEl.innerHTML=textOFF;
  	else
  		captEl.innerHTML=textON;
  }
  var el_field=document.getElementById(elname+'_field');
  if(el_field!=null) el_field.value=el.disabled;
}

function byValDisabled(elname,val,captEl,textON,textOFF){
  var el=document.getElementById(elname);
  el.disabled=val;
  if(captEl!=null){
  	if(el.disabled)
  		captEl.innerHTML=textOFF;
  	else
  		captEl.innerHTML=textON;
  }
  var el_field=document.getElementById(elname+'_field');
  if(el_field!=null) el_field.value=el.disabled;
}

function findParentByTagName(el,tagName){
 if(!el) return false;
 tagName=tagName.toLowerCase();
 while (el=el.parentNode)
	if(el.tagName&&el.tagName.toLowerCase()==tagName) return el;
 return false;
}

function selectKeyPress(sel,e){
  var key = window.event ? e.keyCode : e.which;
  var k = String.fromCharCode(key);
  k=k.toUpperCase();
  for (var i = 0; i < sel.options.length; i++) {
    var optText = sel.options[i].text.toUpperCase();
    if (optText.substr(0, 1) == k) {
       sel.selectedIndex = i;
       return false;
    }
  }
  return false;
}

function getAbsPos(p){
  var s = { x:0, y:0 };
  while (p.offsetParent){
    s.x += p.offsetLeft;
    s.y += p.offsetTop;
    p = p.offsetParent;
  }
  return s;
}

function showSelectedText(sel){
  var XY=getAbsPos(sel);
  showHelp(XY.x+sel.clientWidth,XY.y-2,sel.options[sel.selectedIndex].text);
}
function showHelp(x,y,text,div_width){
  var hd=document.getElementById('helpdiv');
  if(!div_width)div_width=300;
  hd.innerHTML="<table style='width:"+div_width+"px'><tr><td>"+text+"</td></tr></table>";
  hd.style.left=x;
  hd.style.top=y;
  hd.style.visibility='visible';
  return true;
}
function hideDiv(divname){
  var el=document.getElementById(divname);
  el.style.visibility='hidden';
  return true;
}
// extract file name from path
function extrFileName(str){
  str=Trim(str);
  var li=str.lastIndexOf('/');
  if (li==-1) li=str.lastIndexOf('\\');
  return str.substr(li+1);
}
// Error message and focus on input
function alertInput (input, message)
{
	alert (message);
	input.focus ();
	if ((input.type == "text") || (input.type == "file") || (input.type == "password"))
		input.select ();
	return false;
}
//Left and Right String Trim
function Trim(str)
{
	return str.replace(/^\s+/, '').replace(/\s+$/, '');
}

// Returns true if string s is empty
function isEmpty (s)
{
	return ((s == null) || (s.length == 0));
}

// Returns true if character c is a digit
function isDigit (c)
{
	return ((c >= "0") && (c <= "9"));
}

function isEmail (s)
{
	reEmail = /^(\w|-)+\@(\w|-)+(\.\w{2,4})+$/;
	if (!reEmail.test(s)) return false;
	return true;
}

// Returns true if string s is a valid WWW URL
function isWWWurl (s)
{
	reWWW = /^http:\/\/.+\..+$/;
	if (!reWWW.test(s)) return false;
	return true;
}

// Returns true if field.value is an float value
function numField(field)
{
    var s = field.value;
//	alert(s);
    if (!isNum(s) || isEmpty(s))
      return alertInput (field, 'Неправильное значение для поля! Введите число.');
}
// Returns true if string s is an float value
function isNum (s)
{
	var bDotPassed = false;

	for (var i=0; i<s.length; i++)
	{
		if (!(i==0 && s.charAt(i) == '-'))
		if (!isDigit(s.charAt(i)))
		{
			if (s.charAt(i) == '.' && !bDotPassed) bDotPassed = true;
			else return false;
		}
	}
	return true;
}

function isInteger (s)
{
	reNotInt = /[^0-9]/;
	if (reNotInt.test(s)) return false;
	return true;
}
// Returns whether the specified year is leap
function leapYear (yr)
{
	if (((yr % 4 == 0) && yr % 100 != 0) || yr % 400 == 0) return true;
	else return false;
}

// Returns number of days in specified month & year
// month = [1,12]
function numDaysIn (mth, yr)
{
	if (mth==4 || mth==6 || mth==9 || mth==11) return 30;
	else if ((mth==2) && leapYear(yr)) return 29;
	else if (mth==2) return 28;
	else return 31;
}

// Check date (ISO format)
// field - form field
// yearbounds - {min, max} year values array
function isDate (field, minY, maxY, rus) {
	if(rus!=true) rus=false;
	CDate = Trim(field.value);
	if (CDate == '') return true;
	var DTParts = CDate.split(' ');
	if (DTParts.length == 2){
	   CDate=DTParts[0];
	   CTime=DTParts[1].split(':');
	   hours=CTime[0];
	   if (CTime.length>1) mins=CTime[1];
	   if (CTime.length>2) secs=CTime[2];
	}
	var DateParts = CDate.split('.');
	if (DateParts.length != 3){
	   DateParts = CDate.split('-');
	   if (DateParts.length != 3){
  		 if(rus) return alertInput (field, 'Некоректно указана дата! (ДД-ММ-ГГГГ или ДД.ММ.ГГГГ)');
  		 else return alertInput (field, 'Некоректно указана дата! (ГГГГ-ММ-ДД или ГГГГ.ММ.ДД)');
	   }
    }
	  month = DateParts[1];
  if(rus){
	  year = DateParts[2];
	  day = DateParts[0];
  } else {
	  year = DateParts[0];
	  day = DateParts[2];
  }
	if (!isInteger(year))
		return alertInput (field, 'Некоректно указана дата! (ГГГГ-ММ-ДД или ГГГГ.ММ.ДД)');
	if (year < minY || year > maxY)
		return alertInput (field, 'Год должен быть между: '+minY+' - '+maxY);
	if (month.length != 2 || !isInteger(month) || (month < 1) || (month > 12))
		return alertInput (field, 'Неправильно указан месяц: используйте значение от 01 до 12');
	maxdays = numDaysIn(month, year);
	if (day.length != 2 || !isInteger(day) || (day < 1) || (day > maxdays))
		return alertInput (field, 'Указанной даты не существует! День может быть от 01 до '+maxdays);
	if (hours!='' &&(hours<0 || hours>23 || !isInteger(hours)))
		return alertInput (field, 'Неверно указано время! (ЧЧ:ММ:СС) Час должен быть от 0 до 23.');
	if (mins!='' &&(!isInteger(mins) || mins<0 || mins>59))
		return alertInput (field, 'Неверно указано время! (ЧЧ:ММ:СС) Минуты от 0 до 59.');
	if (secs!='' &&(!isInteger(secs) || secs<0 || secs>59))
		return alertInput (field, 'Неверно указано время! (ЧЧ:ММ:СС) Секунды от 0 до 59.');
	return true;
}