function pad0(x) {
  var str = String(x);
  while (str.length < 2)  
    str = '0' + str;       
  return str;
}

function today() {
  var now = new Date();
  return now.toLocaleString;
}

function date2Str(date) {
  var year = date.getYear();
  if (year < 1000)
    year += 1900;
  return pad0(date.getDate()) + '.' + pad0(date.getMonth() + 1) + '.' + year;
}

function date2Sql(date) {
  var year = date.getYear();
  if (year < 1000)
    year += 1900;
  return year + '-' + pad0(date.getMonth()) + '-' + pad0(date.getDate() + 1);
}

function str2Date(dateValue) {
  if (!checkDateValue(dateValue))
    return null;                   
  var day = Number(dateValue.substr(0, 2));
  var month = Number(dateValue.substr(3, 2)) - 1;
  var year = Number(dateValue.substr(6, 4));
  return new Date(year, month, day);
}

function addMonth(date, months) {
  if (!date) 
    return null;
  day = date.getDate();
  date.setMonth(date.getMonth() + Number(months));
  if (day > date.getDate()) {
    month = date.getMonth();
    while (month == date.getMonth())
      date.setDate(0);
  }
  return date;
}

function addMonthStr(dateValue, months) {
  date = str2Date(dateValue);
  if (date) 
    return date2Str(addMonth(date, months))
  else
    return '';
}

function help(code, anchor) {
  if (anchor) {
    wpop = open('?cmd=help&code='+code+'#'+anchor, 'whelp', 
    'width=600,height=500,status=no,toolbar=no,menubar=no,resizable=yes,scrollbars=yes');
  } else {
    wpop = open('?cmd=help&code='+code, 'whelp', 
    'width=600,height=500,status=no,toolbar=no,menubar=no,resizable=yes,scrollbars=yes');
  }
  wpop.focus();
}

function emrtbl(EmrID) {
  var w = open('?cmd=emr&action=table&EmrID='+EmrID, 'wemrtbl', 
    'width=800,height=600,status=no,toolbar=no,menubar=no,resizable=yes,scrollbars=yes');
  w.focus();
}

function trim(str, what) {
  //what == all|left|right|
  if (!what)
    what = 'all';
  if (what == 'left')
    str = str.replace(/^\s+/,'');
  if (what == 'right')
    str = str.replace(/\s+$/,'');  
  if (what == 'all')
    str = str.replace(/^\s+|\s+$/g,'');
    
  str = str.replace(/\s{2,}/, ' ');
  return str;
}
function ltrim(stringToTrim) {
	return stringToTrim.replace(/^\s+/,"");
}
function rtrim(stringToTrim) {
	return stringToTrim.replace(/\s+$/,"");
}

function qq(s) {
  if (!s) {
    return s;
  }
  t = /(")/g;
  s = s.replace(t, "&quot;");
  t = /(')/g;
  s = s.replace(t, "\\$1");
  return '\'' + s + '\'';
}

function set_errfields(err_fields) { 
  if (!err_fields) {
    err_hidden = document.getElementById('err_fields');
    if (!err_hidden) {alert('err_fields not found'); return;}
    err_fields = err_hidden.getAttribute("value");
  }
  if (!err_fields) {return;}
  err_names = err_fields.split(';');
  for (i = 0; i < err_names.length; i++) {
    fields = document.getElementsByName(err_names[i]);
    for (j = 0; j < fields.length; j++) {
      fields.item(j).className = 'errfld';
    }
  }
}

function reset_errfields(err_fields) {
  if (!err_fields) {return;}
  err_names = err_fields.split(';');
  for (i = 0; i < err_names.length; i++) {
    fields = document.getElementsByName(err_names[i]);
    for (j = 0; j < fields.length; j++) {
      fields.item(j).className = '';
    }
  }
}

function IsNumeric(sText) {
   var ValidChars = "0123456789.";
   var IsNumber=true;
   var Char;
   for (i = 0; i < sText.length && IsNumber == true; i++) { 
     Char = sText.charAt(i); 
     if (ValidChars.indexOf(Char) == -1) 
       IsNumber = false;
   }
   return IsNumber;
}

function CheckNumAlert(sText) {
  if (IsNumeric(sText))
    return true;
  window.alert('Недопустимое число ' + sText);
  return false;
}

function checkDateValue(DateValue) {
  var checkstr = "0123456789._";
  var leap = 0;

  DateValue = DateValue.replace(/,/g,'.');

  if (DateValue == '')
    return true;

  if ((DateValue.length != 10)&&(DateValue.length != 8))
    return false;

  for (i = 0; i < DateValue.length; i++) {
    if (checkstr.indexOf(DateValue.substr(i,1)) < 0) {
      return false;
    }
  }

  var day = DateValue.substr(0, 2);
  var month = DateValue.substr(3, 2);
  var year = DateValue.substr(6, 4);
  if ((year == 0) || (day < 1) || (month < 1) || (month > 12))
    return false;
  
  if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) 
    leap = 1;
  
  if ((month == 2) && (leap == 1) && (day > 29)) 
    return false;
  
  if ((month == 2) && (leap != 1) && (day > 28)) 
    return false;
  
  if ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) 
    return false;

  if ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11"))) 
    return false;
   
  return true;
}

function checkDate(field){
  return checkDateValue(field.value);
}

function getQueryVariable(variable) {
  var query = window.location.search.substring(1);
  var vars = query.split("&");
  for (var i = 0; i < vars.length; i++) {
    var pair = vars[i].split("=");
    if (pair[0] == variable) {
      return pair[1];
    }
  }
  return '';
}

function EmptyValue(val) {
  if ((val == '')||(val == '0')||(val == 'null'))
    return true;
  else
    return false;
}

function setCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function getCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function dropCookie(name) {
	setCookie(name,"",-1);
}

function getRowsByName(name) {
//обходит баг getElementsByName в IE
     var elem = document.getElementsByTagName('tr');
     var arr = new Array();
     for(i = 0, iarr = 0; i < elem.length; i++) {
          att = elem[i].getAttribute("name");
          if(att == name) {
               arr[iarr] = elem[i];
               iarr++;
          }
     }
     return arr;
}

function SetDocArea(iname, how) {
  img = document.getElementById(iname);
  if (!img) {
	return;  
  }
  var isExpanded = img.src.indexOf('collapse') >= 0;
  if (how == 'expand')
    expand = true
  else if (how == 'collapse')
    expand = false
  else
    expand = !isExpanded;
  rname = iname.replace(/^ec_/, '');
  rows = getRowsByName(rname);
  //window.alert(rows.length);
  for (var i = 0; i < rows.length; i++) {
	if (expand)
	  rows[i].className = ''
	else
	  rows[i].className = 'invdata';
  }
  if (expand) {
    img.src = img.src.replace(/expand\./, 'collapse.');
	img.title = 'Скрыть область';
	img.alt = 'Скрыть область';
  } else {
    img.src = img.src.replace(/collapse\./, 'expand.');
	img.title = 'Показать область';
	img.alt = 'Показать область';
  }
  SaveDocArea(rname);
  return expand;
}

function SaveDocArea(rname) {
  var iname = 'ec_' + rname;
  var img = document.getElementById(iname);
  var isExpanded = img.src.indexOf('collapse') >= 0;
  var doc = document.getElementById('cmd').value;
  var val = isExpanded ? 'expand' : 'collapse';
 // if (!EmptyValue(document.getElementById('DocID').value))
    setCookie(doc + '.' + rname, val, 10000);
}

function LoadDocArea(rname) {
  if (EmptyValue(document.getElementById('DocID').value))
    return;
  var doc = document.getElementById('cmd').value;
  if (doc) {
    var val = getCookie(doc + '.' + rname);
	if (val)
      SetDocArea('ec_' + rname, val);
  }
}

function LoadDocAreas() {
  var elems = document.images;
  for (var i = 0; i < elems.length; i++) {
	if (elems[i].id.indexOf('ec_') == 0) {
	  rname = elems[i].id.replace(/^ec_/, '');
	  LoadDocArea(rname);
	}
  }
  return false;
}

function getQueryValue(key) {
  var query = window.location.search.substring(1);
  var vars = query.split("&");
  for (var i=0; i<vars.length; i++) {
    var pair = vars[i].split("=");
    if (pair[0] == key) {
      return pair[1];
    }
  }
  return '';
}

function hideQuery(query) {
  var s = query.replace(/&/g, '@');
  s = s.replace(/=/g, '|');
  return s;
}

function unhideQuery(query) {
  var s = query.replace(/@/g, '&');
  s = s.replace(/|/g, '=');
  return s;
}

function popup_window (winname, x, y, w, h, pathstr) {
  wpop = open('', winname, "width="+w+",height="+h+",status=no,toolbar=no,menubar=no,location=no,resizable=yes,scrollbars=yes");
  wpop.location = pathstr;
  if ((x != 0) || (y != 0)) {
    wpop.moveTo(x, y);
  }
  wpop.focus();
  if (window.opener != null) {
    wpop.opener = window.opener;
  }
}

function isEscape(e) {
  var keynum
  if (e.keyCode)
    keynum = e.keyCode;
  else if(window.event) // IE
    keynum = e.keyCode;
  else if(e.which) // Netscape/Firefox/Opera
    keynum = e.which;
  if (keynum == 27)
    return true
  else
    return false;
}

function QuotedStr(str) {
  return '\'' + str + '\'';
}

function getAbsPos(elem) {
  var box = elem.getBoundingClientRect()
  var body = document.body
  var docElem = document.documentElement
  var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop
  var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft
  var clientTop = docElem.clientTop || body.clientTop || 0
  var clientLeft = docElem.clientLeft || body.clientLeft || 0
  var top  = box.top +  scrollTop - clientTop
  var left = box.left + scrollLeft - clientLeft
    
  return {top: Math.round(top), left: Math.round(left)}
}
function SetCenter(what, where) {
  var whatPos = getAbsPos(what);
  var whatX = whatPos.left + Math.round(what.clientWidth / 2);
  var whatY = whatPos.top + Math.round(what.clientHeight / 2);
  var wherePos = getAbsPos(where);
  var whereX = wherePos.left + Math.round(where.clientWidth / 2);
  var whereY = wherePos.top + Math.round(where.clientHeight / 2);
  var dx = whereX - whatX;
  var dy = whereY - whatY;
  var left = parseInt(what.style.left) + dx + 'px';
  var top = parseInt(what.style.top) + dy + 'px';
  what.style.left = left;
  what.style.top = top;
}

function docSize() {
  var myWidth = 0, myHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
  var size = {'w' : myWidth, 'h' : myHeight};
  return size;
}
