function substr_count(haystack,needle,offset,length){
  var pos=0,cnt=0;
  if(isNaN(offset)) offset=0;
  if(isNaN(length)) length=0;
  offset--;
  while((offset=haystack.indexOf(needle,offset+1))!=-1){
    if(length>0 && (offset+needle.length)>length){
      return false;
    }else{
      cnt++;
    }
  }
  return cnt;
}

function in_array(needle,haystack,strict){
  var found=false,key,strict=!!strict;
  for(key in haystack){
    if((strict && haystack[key]===needle)||(!strict && haystack[key]==needle)){
      found=true;
      break;
    }
  }
  return found;
}

function is_numeric(mixed_var){
  return !isNaN(mixed_var);
}

function str_replace(search,replace,subject){
  if(!(replace instanceof Array)){
    replace=new Array(replace);
    if(search instanceof Array){
       while(search.length>replace.length){
         replace[replace.length]=replace[0];
       }
    }
  }
  if(!(search instanceof Array))search=new Array(search);
  while(search.length>replace.length){
    replace[replace.length]='';
  }
  if(subject instanceof Array){
    for(k in subject){
      subject[k]=str_replace(search,replace,subject[k]);
    }
    return subject;
  }
  for(var k=0;k<search.length;k++){
    var i=subject.indexOf(search[k]);
    while(i>-1){
      subject=subject.replace(search[k],replace[k]);
      i=subject.indexOf(search[k],i);
    }
  }
  return subject;
}

function getCookie(c_name){
  if(document.cookie.length>0){
    c_start=document.cookie.indexOf(c_name + "=");
    if(c_start!=-1){ 
      c_start=c_start+c_name.length+1;
      c_end=document.cookie.indexOf(";",c_start);
      if(c_end==-1) c_end=document.cookie.length
      return unescape(document.cookie.substring(c_start,c_end));
      } 
    }
  return ""
}

function setCookie(c_name,value,expiredays){
  var exdate=new Date();
  exdate.setDate(exdate.getDate()+expiredays);
  document.cookie=c_name+ "=" +escape(value)+((expiredays==null) ? "" : "; expires="+exdate.toGMTString());
}

function checkCookie(){
  regex1=getCookie('regex1');
  if(regex1!=null && regex1!=""){
    document.preferences.regex1.value=regex1;
  }
  regex2=getCookie('regex2');
  if(regex2!=null && regex2!=""){
    document.preferences.regex2.value=regex2;
  }
  regreg=getCookie('regreg');
  if(regreg!=null && regreg!=""){
    document.preferences.regreg.value=regreg;
  }
  regexon=getCookie('regexon');
  if(regexon!=null && regexon!=""){
    document.preferences.regexon.checked=regexon;
  }
}

function savepref() {
  var regex1=document.preferences.regex1.value;
  if(regex1.length>0 && substr_count(regex1,'*')==1 && 
    substr_count(regex1,'&')==1 && substr_count(regex1,'#')==1 && 
    substr_count(regex1,'$')==1 && substr_count(regex1,'%')==1){
    setCookie('regex1',regex1,3650);
  }
  else if(regex1.length>0){
    alert('wrong first regexp');
  }
  var regex2=document.preferences.regex2.value;
  if(regex2.length>0 && 
    substr_count(regex2,'&')==1 && substr_count(regex2,'#')==1 && 
    substr_count(regex2,'$')==1 && substr_count(regex2,'%')==1){
    setCookie('regex2',regex2,3650);
  }
  else if(regex2.length>0){
    alert('wrong second regexp');
  }
  var regreg=document.preferences.regreg.value;
  if(regreg.length>0 && is_numeric(regreg)){
    setCookie('regreg',regreg,3650);
  }
  else if(regreg.length>0){
    alert('wrong region');
  }
  var regexon=document.preferences.regexon.checked;
  setCookie('regexon',regexon,3650);

  return false;
}

function nomer(x){
  if(document.preferences.regexon.checked==true){
    var y=document.getElementById(x).value;
    y=y.replace(/\\/g,'/');
    var symbrus=['а','в','е','к','м','н','о','р','с','т','у','х'];
    var symbeng=['a','b','e','k','m','h','o','p','c','t','y','x'];

    var regexW=document.preferences.regex1.value;
    regexW=regexW.replace(/\\/g,'/');
    var regarraySymb=['*','&','#','$','%'];
    var regarrayRegs=['(\\d{2,3})','(\\d{3})','([авекмнорстухabekmhopctyx]{1})','([авекмнорстухabekmhopctyx]{1})','([авекмнорстухabekmhopctyx]{1})'];
    regexN=str_replace(regarraySymb,regarrayRegs,regexW);
    var regexpexec=new RegExp(regexN,'gi');
    var regarr=regexpexec.exec(y);
    if(regarr!=null){
// кривой метод
      var regexZ=regexW;
      regexZ=regexZ.replace(/[^\*\&\#\$\%]/gi,'');
      Fregion=regexZ.indexOf('*');
      Flet1=regexZ.indexOf('#');
      Flet2=regexZ.indexOf('$');
      Flet3=regexZ.indexOf('%');
      Fdigits=regexZ.indexOf('&');
      regarr.shift();
      Fnumber=regarr[Flet1]+regarr[Fdigits]+regarr[Flet2]+regarr[Flet3]+regarr[Fregion];
      Fnumber=Fnumber.toLowerCase();
      Fnumber=str_replace(symbrus,symbeng,Fnumber);
    }
    else{
      var regexW=document.preferences.regex2.value;
      var regregW=document.preferences.regreg.value;
      regexW=regexW.replace(/\\/g,'/');
      var regarraySymb=['&','#','$','%'];
      var regarrayRegs=['(\\d{3})','([авекмнорстухabekmhopctyx]{1})','([авекмнорстухabekmhopctyx]{1})','([авекмнорстухabekmhopctyx]{1})'];
      regexN=str_replace(regarraySymb,regarrayRegs,regexW);
      var regexpexec=new RegExp(regexN,'gi');
      var regarr=regexpexec.exec(y);
      if(regarr!=null){
// опять кривой метод
        var regexZ=regexW;
        regexZ=regexZ.replace(/[^\*\&\#\$\%]/gi,'');
        Fregion=regregW;
        Flet1=regexZ.indexOf('#');
        Flet2=regexZ.indexOf('$');
        Flet3=regexZ.indexOf('%');
        Fdigits=regexZ.indexOf('&');
        regarr.shift();
        Fnumber=regarr[Flet1]+regarr[Fdigits]+regarr[Flet2]+regarr[Flet3]+Fregion;
        Fnumber=Fnumber.toLowerCase();
        Fnumber=str_replace(symbrus,symbeng,Fnumber);
      }
    }

    if((Fnumber.length==8||Fnumber.length==9) && (in_array(Fnumber.charAt(0),symbeng) && 
     in_array(Fnumber.charAt(4),symbeng) && in_array(Fnumber.charAt(5),symbeng))
     && (is_numeric(Fnumber.charAt(1)) && is_numeric(Fnumber.charAt(2)) && 
     is_numeric(Fnumber.charAt(3)) ) ){
      document.forms['frm'].elements['b1'].value=Fnumber.charAt(0);
      document.forms['frm'].elements['digit'].value=Fnumber.substring(1,4);
      document.forms['frm'].elements['b2'].value=Fnumber.charAt(4);
      document.forms['frm'].elements['b3'].value=Fnumber.charAt(5);
      if(Fnumber.length==8 && is_numeric(Fnumber.charAt(6)) && is_numeric(Fnumber.charAt(7))){ 
        document.forms['frm'].elements['region'].value=Fnumber.substring(6,8);
      }
      if(Fnumber.length==9 && is_numeric(Fnumber.charAt(6)) && 
        is_numeric(Fnumber.charAt(7)) && is_numeric(Fnumber.charAt(8))){
        document.forms['frm'].elements['region'].value=Fnumber.substring(6,9);
      }
    }
    else{
      document.forms['frm'].elements['b1'].value='';
      document.forms['frm'].elements['digit'].value='';
      document.forms['frm'].elements['b2'].value='';
      document.forms['frm'].elements['b3'].value='';
      document.forms['frm'].elements['region'].value='';
    }
  }
}

function toggle(tag, elm) {
  var obj = document.getElementById(elm);
  var type = (obj.className == 'hidden') ? 'show' : 'hidden';
  tag.innerHTML = (type == 'hidden') ? 'Показать форму шаблона' : 'Спрятать форму шаблона';
  obj.className = type;
}
