function FillDaysOfMonth(objSel, year, month) {
 var i = objSel.selectedIndex;
 if (!/^\d{4}$/.test(year)) year = 2000;
 if (!/^\d{1,2}$/.test(month)) month = 1;
 objSel.options.length = 1;
 var lastDayOfMonth = getLastDayOfMonth(month, IsLeapYear(year));
 for (var day = 1; day <= lastDayOfMonth; day++) {
  objSel.options[objSel.options.length] = new Option(day, day);
 }
 if (objSel.options.length - 1 >= i)
  objSel.selectedIndex = i;
 else
  objSel.selectedIndex = 0;
}

function AllowDigitsOnly (evt) {//onKeyPress
 var evt = window.event || evt;
 var keyCode = evt.keyCode ? evt.keyCode : evt.which ? evt.which : evt.charCode;
// alert(keyCode);
 if ((keyCode >= 48 && keyCode <= 57) || (keyCode == 35) || (keyCode == 36) || (keyCode == 46) || (keyCode == 37) || (keyCode == 39) || (keyCode == 63234) || (keyCode == 63235) || (keyCode == 63232) || (keyCode == 63233) || (keyCode == 8) || (keyCode == 9)) {
  return true;
 } else
  return false;
}

function TabNextAfterNChars (val, N, next_obj) {//onKeyUp
 if (val.length == N) next_obj.focus();
}

function Trim(val) {
 return ((val.replace(/^\s+/, "")).replace(/\s+$/, "")).replace(/\s+/g, " "); 
}

function initSelect(objSel, init_value, init_text) {
 var idx = objSel.selectedIndex;
 for (var i = 0; i < objSel.options.length; i++) {
  if ((init_value != null && objSel.options[i].value == init_value) || (init_text != null && objSel.options[i].text == init_text)) {
   objSel.selectedIndex = i;
   return true;
  }
 }
 objSel.selectedIndex = idx;
 return false;
}

function TxtFieldValidate (obj, min, max, msg) {

 if (obj == null ){
  alert(msg);
  obj.focus();
  return false;

 };

 if (obj.value.length < min || obj.value.length > max) {
  return false;
 } else {
  return true;
 }
}

function NumFieldValidate (obj, min, max, msg) {
 if (obj.value.length < min || obj.value.length > max || /\D/.test(obj.value)) {
  alert(msg);
  obj.focus();
  return false;
 } else {
  return true;
 }
}

function PromptFieldValidate (obj, prompt, msg) {
 if (obj.value == prompt) {
  alert(msg);
  obj.focus();
  return false;
 } else {
  return true;
 }
}

function EmailValidate (obj, msg) {
 var re = /\w+([-+.’]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;
 if (!obj.value.match(re)) {
  alert(msg);
  obj.focus();
  return false;
 } else {
  return true;
 }
}

function IsLeapYear(year) {
 return ((year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0)));
}

function getLastDayOfMonth(month, is_leap_year) {
 var DaysInFeb = (is_leap_year) ? 29 : 28;
 var DaysInMonths = [31, DaysInFeb, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
 return DaysInMonths[month - 1];
}

function IsWorkDay(date) {
 return (date.getDay() != 6 && date.getDay() != 0);
}

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

function getDocumentSize(){
 return {
  x:document.body.scrollWidth > document.body.offsetWidth ? document.body.scrollWidth : document.body.offsetWidth,
  y:document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight
 };
}

function getClientSize(){
 if(document.compatMode=='CSS1Compat') {
  return {x:document.documentElement.clientWidth, y:document.documentElement.clientHeight};
 } else {
  return {x:document.body.clientWidth, y:document.body.clientHeight};
 }
}

function getDocumentScroll(){
 return {
  x:self.pageXOffset || (document.documentElement && document.documentElement.scrollLeft) || (document.body && document.body.scrollLeft),
  y:self.pageYOffset || (document.documentElement && document.documentElement.scrollTop) || (document.body && document.body.scrollTop)
 };
}

function getClientCenter(){
 var sizes = getClientSize();
 var scrl = getDocumentScroll();
 return {x:parseInt(sizes.x/2)+scrl.x, y:parseInt(sizes.y/2)+scrl.y};
}

function sortTable(td, direction, data_type, cnt_header_rows, cnt_footer_rows) {    
 var tr = td.parentNode; 
 var tbl = tr.parentNode;     
 var col_sort_num; 

 for (var i=0; (td_=tr.getElementsByTagName("td").item(i)); i++) { 
  if (td_.innerHTML == td.innerHTML) col_sort_num = i;
 }

 var arrData = new Array(); 
 var arrFooter = new Array();

 for(var i=cnt_header_rows; i < tbl.rows.length; i++) { 
  if (i < tbl.rows.length-cnt_footer_rows) {
   arrData[i-cnt_header_rows] = new Array(); 
   arrData[i-cnt_header_rows][0] = tbl.rows[i].getElementsByTagName("td").item(col_sort_num).innerHTML; 
   arrData[i-cnt_header_rows][1] = tbl.rows[i];
  } else {
   arrFooter[i-(tbl.rows.length-cnt_footer_rows)] = tbl.rows[i];
  }
 }

 if (data_type == "num") {
  arrData.sort(function(a,b){return a[0] - b[0]});
 } else if (data_type == "txt") {
  arrData.sort(
               function(a,b){
                if(String(a[0]).toLowerCase() > String(b[0]).toLowerCase())
                 return -1;
                else if (String(a[0]).toLowerCase() < String(b[0]).toLowerCase())
                 return 1;
                else return 0;
               }
              );
 } else {
  arrData.sort();
 }
 if(direction == "desc") arrData.reverse();   
 for(var i=0; i < arrData.length; i++) tbl.appendChild(arrData[i][1]);
 for(var i=0; i < arrFooter.length; i++) tbl.appendChild(arrFooter[i]);
}

function getBodyScrollTop() {
 return self.pageYOffset || (document.documentElement && document.documentElement.scrollTop) || (document.body && document.body.scrollTop);
}

function getBodyScrollLeft() {
 return self.pageXOffset || (document.documentElement && document.documentElement.scrollLeft) || (document.body && document.body.scrollLeft);
}

function formValidate(frm, arrFields) {
 for (var key in arrFields) {
  var fval = eval('document.' + frm.name + '.' + key + '.value');

  if (arrFields[key]['regexp'] != null && arrFields[key]['regexp'].length > 0) {
    var re = new RegExp(arrFields[key]['regexp']);
    var thepattern = re.exec(fval);

    if (!thepattern) {
     alert(arrFields[key]['msg']);
     eval('document.' + frm.name + '.' + key + '.focus()');
     return false;
    }
  }
  if (!fval || fval.length == 0) {
   alert(arrFields[key]['msg']);
   eval('document.' + frm.name + '.' + key + '.focus()');
   return false;
  }
 }
 return true;
}

