//description  : Common JS scripts
//version      : 2.0.1

//считает количество символов в textarea исключая пробелы
function textCounter(field, countfield) {
    var strip = "";
    
    strip = field.value.replace(/\s/gi, '');
    countfield.value = strip.length;
}



//записывает cookie на компьютер пользователя
saveCookie=function(name,value,days){
  var e='';
  if(days){
    var d=new Date();
    d.setTime(days*86400000+d.getTime());
    e='; expires='+d.toUTCString();
  }
  document.cookie=name+'='+escape(value)+e+'; path=/';
}

//читает cookie с компьютера пользователя
readCookie=function(name){
  var s=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(s)==0)return unescape(c.substring(s.length,c.length));
  }
  return false;
}

/*
  Подавливает загрузку документа во фрейме и загружает его в окне
  верхнего уровня. Рекомендуется вызывать в начале загрузки документа.
  @access public
*/
killFrames=function(is_confirm){
  if(top.frames.length>0){
    if(is_confirm){
    if(!confirm('Frames detected.\r\nLoad page in top window?'))return;
  }
  top.location=location;
  }
}

/*
  Подавливает обводку фокуса для ссылок и элементов форм.
  Должна вызываться после загрузки документа (например <body onLoad="killMarquee()">).
  @access public
*/
killMarquee=function(){
  var d=document;
  for(var i in d.links)d.links[i].onfocus=d.links[i].blur;
  if(d.all){
    for(var i=0;i<d.all.length;i++)if(d.all[i].tagName=='INPUT'&&/^(radio|checkbox|button|submit|reset|image)$/.test(d.all[i].type.toLowerCase()))d.all[i].onfocus=d.all[i].blur;
  }
}

/*
  Устанавливает имя заголовку документа окна верхнего уровня (тег <title>).
  Если параметр не передается, то берется текущее имя документа.
  Рекомендуется вызывать в начале загрузки документа.
  @access public
*/
setTitle=function(title){
  top.frames.document.title=title?title:document.title;
}

//ported from php sprintf()
sprintf=function(s){
  for(var i=1;i<arguments.length;i++)s=s.replace('%s',arguments[i]);
  return s;
}

/*
  Функция возвращает значение параметра из URL адреса.
  Если параметр url не задан, берется текущий URL адрес.

  @param  string  name
  @param  mixed   url (string; object location)
  @result mixed   (boolean false; string value)
  @access public
*/
getParam=function(name,url){
  var get=url?String(url).replace(/^.*\?/,'').split('&'):location.search.substring(1).split('&');
  for(var i=0;i<get.length;i++){
    var p=get[i].split('=');
    if(p[0]==name)return unescape(p[1]);
  }
  return false;
}

/*
  Функция открывает новое окно броузера.
  @param  string  id
  @param  string  url
  @param  int     w   - ширина
  @param  int     h   - высота
  @param  int     l   - отступ слева  (если l=0, то автоцентрирование)
  @param  int     t   - отступ сверху (если t=0, то автоцентрирование)
  @param  boolean sb  - прокрутка
  @param  boolean st  - статусная строка
  @param  boolean rz  - изменяемый размер
  @return object window
  @access public
*/
winPopUp=function(id,url,w,h,l,t,sb,st,rz){
  var y='yes',n='no';
  return window.open(url,id,'toolbar=no,location=no,directories=no,status='+(st?y:n)+',menubar=no,scrollbars='+(sb?y:n)+',left='+(l?l:(screen.width-w)/2)+',top='+(t?t:(screen.height-h)/2)+',resizable='+(rz?y:n)+',width='+w+',height='+h);
}

/*
  Копирует значения и названия из выпадающего списка в массив
  @param    object    obj - объект выпадающего списка
  @return   array
  @see      array2Select()
*/
select2Array=function(obj){
  var a=[];
  a['name']=[];
  a['value']=[];
  for(var i=0;i<obj.length;i++){
    a['name'][i]=obj[i].innerText;
    a['value'][i]=obj[i].value;
  }
  return a;
}

/*
  Копирует значения из массива в выпадающий список.
  @param    array     arr         массив значений и названий
  @param    string    formName    название формы
  @param    string    selectName  название выпадающего списка
  @return   null
  @see      select2Array()
*/
array2Select=function(arr,formName,selectName){
  var obj=eval('document.forms.'+formName+'.'+selectName);
  obj.length=0;
  for(var i=0;i<arr['name'].length;i++)obj[obj.length]=new Option(arr['name'][i],arr['value'][i],0,0);
}

/*
  Копирует значения из выпадающего списка в строку.
  Значения разделяются знаком ";"
  @param    object    obj - объект выпадающего списка
  @return   string
*/
select2StringIds=function(obj){
  var a=[];
  for(var i=0;i<obj.length;i++)a[i]=obj[i].value;
  return a.join(';');
}

/**
*  Конструктор объекта флагов.
*  @param  object  obj  объект формы
*  @access public
*/
CheckBoxes=function(obj){
  this.obj=obj;
  /**
  *  Выставляет флаги для всех чекбоксов формы по маске
  *  @param  object  obj     объект чекбокса
  *  @param  string  mask    маска (регулярное выражение)
  *  @access public
  */
  this.marked=function(obj,mask){
    var r=new RegExp(mask);
    for(var i=0;i<this.obj.elements.length;i++)with(this.obj.elements[i]){
      if(type=='checkbox'&&r.test(name))checked=obj.checked;
    }
  }
  /**
  *  Возвращает количество выставленных флагов чекбоксов по маске.
  *  @param  string  mask    маска (регулярное выражение)
  *  @return int
  *  @access public
  */
  this.countChecked=function(mask){
    var r=new RegExp(mask);
    var c=0;
    for(var i=0;i<this.obj.elements.length;i++)with(this.obj.elements[i]){
      if(type=='checkbox'&&r.test(name)&&checked)c++;
    }
    return c;
  }
}  //class