window['$'] = function(el) {
  return (typeof el == 'string' ? document.getElementById(el) : el);
};

String.prototype.trim = function() {
  return this.replace(/^\s+|\s+$/g, "");
};

String.prototype.camelize = function() {
  return this.replace(/[-_]\D/g, function(match) {
    return match.charAt(1).toUpperCase();
  });
};

String.prototype.leftPad = function(size, ch) {
  var result = new String(this);
  ch = ch || ' ';
  while (result.length < size) {
    result = ch + result;
  }
  return result.toString();
}

var Browser = {
  IE:     !!(window.attachEvent && !window.opera),
  Opera:  !!window.opera,
  WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
  Gecko:  navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1
};

var ScreenUtils = {
  getClientWidth: function() {
    return (document.documentElement && Browser.Opera && document.documentElement.clientWidth) || document.body.clientWidth; // FIXME later!
  },
  getClientHeight: function() {
    return (document.documentElement && Browser.Opera && document.documentElement.clientHeight) || document.body.clientHeight; // FIXME later!
  },
  getHeight: function() {
    return window.innerHeight || (document.documentElement && document.documentElement.clientHeight) || document.body.clientHeight;
  },
  getScrollTop: function() {
    return window.pageYOffset || (document.documentElement && document.documentElement.scrollTop) || document.body.scrollTop;
  }
};


function jfCheckFormatStrinng( str, format ) {
  for(i=0; i < str.length; i++){
    var chr = str.substr(i,1);
    var pos = format.indexOf(chr);
    if(pos < 0){return false}
  }
  return true; 
}

function getXY(element) {
  var element = $(element);
  var top = 0, left = 0;
  do {
    top += element.offsetTop  || 0;
    left += element.offsetLeft || 0;
    element = element.offsetParent;
  } while (element);
  return {x: left, y: top};
}

function getX(element) {
  return getXY(element).x;
}

function getY(element) {
  return getXY(element).y;
}

function addTableRow(params) {
  var table = $(params.table);
  var row = table.insertRow(-1);
  var cells = params.cells;

  // setting row's attributes
  for (var k in params.attr) {
    row.setAttribute(k, params.attr[k]);
  }

  for (var k = 0; k < cells.length; k++) {
    var cell = row.insertCell(-1);
    //cell.className = 'td_list_row';
    cell.innerHTML = cells[k].html;
    // setting cell's attributes
    for (var i in cells[k].attr) {
      cell.setAttribute(i, cells[k].attr[i]);
    }
  }
  row.onclick = (function (x) {
    return function() {
      selRow(x);
      return true;
    }
  })(row);
  selRow(row);
  table.style.display = '';
  return true;
}

function getStyle(object, property) {
  property = property == 'float' ? 'cssFloat' : property.camelize();
  var value = object.style[property];
  if (!value) {
    if (document.defaultView && document.defaultView.getComputedStyle) {
      value = document.defaultView.getComputedStyle(object, null)[property] || null;
    } else if (window.getComputedStyle) {
      value = window.getComputedStyle(object, null)[property] || null;
    } else if (object.currentStyle) {
      value = object.currentStyle[property] || null;
    }
  }
  if (property == 'opacity') {
    return value ? parseFloat(value) : 1.0;
  }
  return value == 'auto' ? null : value;
}

Array.prototype.toString =
Object.prototype.toString = function() {
  var cont = [];
  var addslashes = function(s) {
    return
      s.split('\\').join('\\\\').split('"').join('\\"');
  }
  for (var k in this) {
    var v = this[k];
    var vs = '';
    if (typeof v == 'undefined') {
      cont[cont.length] = 'undefined';
    } else if (typeof v == 'object' && !v) {
      cont[cont.length] = 'null';
    } else /* if (v) */ {
      if (cont.length) cont[cont.length-1] += ",";
      if (v.constructor == Function) {
        vs= 'function';
      } else if (v.constructor == String) {
        vs = '"' + v.split('\\').join('\\\\').split('"').join('\\"') + '"';
      } else {
        vs = v.toString();
      }
      if (this.constructor == Array || this.constructor == Function) {
        cont[cont.length] = vs;
      } else {
        cont[cont.length] = k + ": " + vs;
      }
    }
  }
  cont = "  " + cont.join("\n").split("\n").join("\n  ");
  //cont = "  " + cont.join(" ");
  if (this.constructor == Object) {
    return  "{\n"+cont+"\n}";
  } else if (this.constructor == Array) {
    return  "[\n"+cont+"\n]";
  }
}

function jfTxtEnable(TID,IsEnable){
  if(IsEnable){
    $(TID).className = 'txtEnable';
  }
  else{
    $(TID).className = 'txtDisable';
  }
}

function jfButtonEnable(BtID,IsEnable,jfonclick){
  $(BtID).disabled = !IsEnable;
  if(IsEnable){
    $(BtID).onclick = jfonclick;
  }
  else{
    $(BtID).onclick = function(){return false;};
  }
}

function jfInputEnable(InpID,IsEnable){
  $(InpID).disabled = !IsEnable;
}

function jfGetInt(n){
  return parseInt(n, 10);
}

function  jfIsTime(str){
 var i,l,ch;

 str=str.trim();
 l=str.length;
 if(l>5){return false;}

 //час 
 ch=str.charAt(0);
 if(!(ch>="0" && ch<="9")){return false;}
 ch=str.charAt(1);
 if(!(ch>="0" && ch<="9")){return false;}
 
 var hour=str.charAt(0)+str.charAt(1);
 if(hour>24){return false;}
 
 //двоеточие
 ch=str.charAt(2);
 if(ch!=":"){return false;}

 //минуты 
 ch=str.charAt(3);
 if(!(ch>="0" && ch<="9")){return false;}
 ch=str.charAt(4);
 if(!(ch>="0" && ch<="9")){return false;}
 
 var minuts=str.charAt(3)+str.charAt(4);
 if(minuts>60){return false;}
 
 return true;
}

function jfInputFileRefresh(conteiner_id,id,name) {
  for(i=0; i<$(conteiner_id).childNodes.length; i++){
    if( ($(conteiner_id).childNodes.item(i).id) && ($(conteiner_id).childNodes.item(i).id == id) ){
      var oI = $(conteiner_id).childNodes.item(i);
      $(conteiner_id).removeChild(oI);
    }
  }
  var oInput = document.createElement('input');
  oInput.id = id;
  oInput.type = 'file';
  oInput.name = name;
  $(conteiner_id).appendChild(oInput); 
  return false;
}

function jfCheckTimeItnut(e,id){
  var CaretPos = 0;
  var SelPos = 0;
  var ctrl = $(id);
  var str = ctrl.value;
    // IE Support
  if (document.selection) {
    ctrl.focus ();
  	var Sel = document.selection.createRange ();
    var selLength=Sel.text.length;
    
  	Sel.moveStart ('character', -ctrl.value.length);
  	CaretPos = Sel.text.length;
    if(selLength>0) {
        //есть выделение вернём его первую позицию
        CaretPos = CaretPos-selLength;
        SelPos = CaretPos+selLength;
    }
  }
  // Firefox support
  else if (ctrl.selectionStart || ctrl.selectionStart == '0'){
    CaretPos = ctrl.selectionStart;
    if(ctrl.selectionEnd!=ctrl.selectionStart){ SelPos = ctrl.selectionEnd;}
  }
  
  //получим код нажатой клавиши    
  if(window.event) {keynum = e.keyCode}
  else {
    if (e.keyCode){ keynum = e.keyCode;}
	  else if (e.which){ keynum = e.which;}
  }

  //пропустим клавиши навигации
  if(keynum<38){return true;}  
  
  //проверим если первый и число
  if( CaretPos == 0 ){
    //в первой позиции тока 0 или 1
    if ( 
        (keynum==48)||
        (keynum==49) 
       ){
      ctrl.value = chr(keynum) + str.substr(1,4); 
      return true;
    }
    else{
      return false;
    }
    
  } 
  

  
  return true;
}

function chr( ascii ) {   
  return String.fromCharCode(ascii);   
}  

function checkPhone(str){
  /*
  (!preg_match('/^7(\d{10})$/i', $_GET['phone'])) && 
  (!preg_match('/^380(\d{9})$/i', $_GET['phone']))
  */
  str = str.trim();
  
  if(!jfCheckFormatStrinng( str, '0123456789')){return false;}
  
  if(str.substr(0,1)!='8'){return false;}
  
  if((str.substr(0,3)!='810')){
    if(str.length!=11){return false;}
  }

  /*
  if((str.substr(0,3)=='812')){
    if(str.length!=10){return false;}
  }
  else{
    if((str.substr(0,3)!='810')){
      if(str.length!=11){return false;}
    }
  }
  */
  return true;
}

function jfClearSelect(id) {
  //alert($(id).options.length);
  while($(id).options.length>0){
    $(id).remove(0);
  }
  return false;
}

function checkDates(startDateObj, endDateObj, extraErrMsgs) {

  var err = '';

  // check start date
  startDateObj && (
  (!$(startDateObj.date.input).value.trim() && (err += startDateObj.errMsg.empty)) ||
    (!startDateObj.date.isValid() && (err += startDateObj.errMsg.invalid)));

  // check end date
  endDateObj && (
  (!$(endDateObj.date.input).value.trim() && (err += endDateObj.errMsg.empty)) ||
    (!endDateObj.date.isValid() && (err += endDateObj.errMsg.invalid)));

  // check range
  if (startDateObj && endDateObj) {
    var dateStart = startDateObj.date.getDate();
    var dateEnd = endDateObj.date.getDate();
    dateStart && dateEnd && dateStart > dateEnd && (err += extraErrMsgs.greater);
  }

  if (err != '') {
    return err;
  }
  return true;
}


function getRadioGroupValue(radioGroupObj) {
  for (var i=0; i < radioGroupObj.length; i++)
    if (radioGroupObj[i].checked) return radioGroupObj[i].value;
  return false;
}

function checkEMail(str) {
  var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
  var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,5}|[0-9]{2,5})(\\]?)$");
  return (!r1.test(str) && r2.test(str));
 }
