function confirm_dialog()
{return confirm('Really clear?');}
function insert_dialog(string)
{my_dialog('insert',string);}
function my_dialog(name,string)
{
var width=screen.width-400,height=screen.height-200;
n=window.open(string,name,'width='+width+',height='+height+',status=1,scrollbars=1,top=100,left=200');
if(window.focus){n.focus();}
}
function onchecking(checkbox,name)
{checkbox.form.elements(name).disabled=checkbox.checked}
function let_integer(k)
{return (k==45)||(k>=48&&k<=57)}
function let_positive(k)
{return k>=48&&k<=57}
function let_email(k)
{return k>32}
function let_float(k)
{return k==45||k==46||k==69||k==101||(k>=48&&k<=57)}
function let_phone(k)
{return k==40||k==41||k==45||(k>=48&&k<=57)}
function let_login(k)
{return (k>=48&&k<=57)||(k>=65&&k<=90)||(k>=97&&k<=122)||k>=128}
function let_name(k)
{return k==32||k==45||(k>=65&&k<=90)||(k>=97&&k<=122)||k>=128}
function let_text(k)
{return k!=13}
function onkeypress_(type)
{
var k=event.keyCode;
var r=true;
switch(type)
{
case 'TEXTAREA': break;
case 'INTEGER': r=let_integer(k);break;
case 'POSITIVE': r=let_positive(k);break;
case 'FLOAT':
case 'POSFLOAT':
case 'MONEY': r=let_float(k);break;
case 'DATE': r=let_integer(k);break;
case 'NAME': r=let_name(k);break;
case 'EMAIL': r=let_email(k);break;
case 'PHONE': r=let_phone(k);break;
case 'LOGIN': r=let_login(k);break;
default: r=let_text(k);
}
event.returnValue=r;
}
function on_number(txt,func,b,t)
{
if(b==null)b=Number.NEGATIVE_INFINITY;
if(t==null)t=Number.POSITIVE_INFINITY;
var v=txt.value;
var n=func(v);
if(isNaN(v)||isNaN(n)||n<b||n>t) return 'Wrong number  '+v+
'. Sorry, the number should be between  '+b+' and '+t+'.';
txt.value=n;
return '';
}
function onblur_integer(txt,b,t)
{return on_number(txt,parseInt,b,t)}
function onblur_float(txt,b,t)
{return on_number(txt,parseFloat,b,t)}
function onblur_money(txt)
{
var e=onblur_float(txt,0);
if(!e)txt.value=Number(txt.value).toFixed(2);
return e;
}
function onblur_date(txt)
{
//var v=txt.value;
//if(!/^\d{1,2}-\d{1,2}-\d\d\d\d$/.exec(v))return 'Enter the date in dd-mm-yyyy format please';
//var d=v.split('-');
//var m=d[1].replace(/^0/,'');
//if(m<1||m>12)return 'Wrong month number';
//var day=d[0].replace(/^0/,'');
//var mdays=new Array(31,(d[2]%4)?28:29,31,30,31,30,31,31,30,31,30,31);
//if(day<1||day>mdays[m-1])return 'Wrong day number';
//for(var i in d)if(d[i].length==1)d[i]='0'+d[i];
//txt.value=d.join('-');
return '';
}
function check_fill_el(txt)
{
txt.value=trim(txt.value);
return txt.value!='';
}
function trim(s)
{
s=s.replace(/^\s+|\s+$/g,'');
return s=s.replace(/  +/g," ");
}
function check_email(email)
{
email=trim(email);
var at_ind=-1,at_num=0,dot_ind=-1,blank_num=0;
for(var i=0;i<email.length;i++)switch(email.charAt(i))
{
case '@':at_ind=i;at_num++;break;
case '.':dot_ind=i;break;
case ' ':blank_num++;
}
return (at_num==1&&blank_num==0&&
0<at_ind&&at_ind+1<dot_ind&&dot_ind<email.length-1);
}
function onblur_email(txt)
{
if(check_email(txt.value))return '';
return 'Sorry, your e-mail address is incorrect.';
}
function onblur_phone(txt)
{
var v=txt.value;
for(var i=0;i<v.length;i++)
 if(!let_phone(v.charCodeAt(i)))return 'Sorry, your phone number is incorrect '+v;
return '';
}
function onblur_name(txt)
{
var v=txt.value;
for(var i=0;i<v.length;i++)
 if(!let_name(v.charCodeAt(i)))return 'Sorry, your name is incorrect '+v;
return '';
}
function onblur_login(txt)
{
var v=txt.value;
for(var i=0;i<v.length;i++)
 if(!let_login(v.charCodeAt(i)))return 'Sorry, your login is not valid '+v;
return '';
}
function onblur_(txt,type)
{
txt.value=trim(txt.value);
if(txt.value=='')return true;
switch(type)
{
case 'INTEGER': s=onblur_integer(txt);break;
case 'POSITIVE': s=onblur_integer(txt,0);break;
case 'FLOAT': s=onblur_float(txt);break;
case 'POSFLOAT': s=onblur_float(txt,0);break;
case 'DATE': s=onblur_date(txt);break;
case 'NAME': s=onblur_name(txt);break;
case 'EMAIL': s=onblur_email(txt);break;
case 'PHONE': s=onblur_phone(txt);break;
case 'LOGIN': s=onblur_login(txt);break;
case 'MONEY': s=onblur_money(txt);break;
default: return true;
}
if(s!=''){alert(s);txt.focus();return false;}
return true;
}
function heading()
{
var s=this.header;
if(this.oblige==1)s+='*';
if(this.wide==1)s+='<INPUT TYPE="hidden" NAME="header['+this.i+
 ']" VALUE="'+this.header+'">';
document.write(s);
}
function attrib(i,header,type,oblige,en,wide)
{
this.i=i;
this.header=header;
this.type=type;
switch(type)
{
case 'CHECKBOX':
case 'RADIO':
case 'SELECT':
case 'FILE':
case 'IMAGE':
 oblige=0;
}
this.oblige=oblige;
this.value='';
this.en=en;
this.wide=wide;
this.heading=heading;
this.input=input;
}
function NAME(i){return ' NAME="record['+i+']" ';}
function input(size,rows)
{
var s,k;
if(size==null)size=(((screen.height+screen.height/3)-400)*2/3)/5;
//if(size==null)size=((screen.width-800)*2/3)/5;
//size=54;
var readonly=this.oblige==2?'readonly title="Sorry, you cannot change this field"':'';
switch(this.type)
{
case 'TEXTAREA':
 if(rows==null)rows=8;
 s='<TEXTAREA rows="'+rows+'" COLS="'+size+'"'+NAME(this.i)+
' ONBLUR="onblur_(this,\''+this.type+ '\')">'+this.value+'</TEXTAREA>';
 break;
case 'CHECKBOX':
 s='<INPUT class="trans" TYPE="checkbox" NAME="check['+this.i+']" '+
(eval(this.value)?'checked':'')+'><INPUT TYPE="hidden"'+NAME(this.i)+'>';
 break;
case 'AUTONUM':
case 'TRANSLIT':
 s='<INPUT TYPE="text"'+NAME(this.i)+'VALUE="'+this.value+
'" SIZE="+size+" readonly title="Sorry, this field should be filled by system">';
 break;
case 'RADIO':
 s='<DIV CLASS="input">';
 if(this.value=='')for(k in this.en){this.value=k;break;}
 for(k in this.en)s+='<INPUT class="trans" TYPE="radio"'+NAME(this.i)+
  'VALUE="'+k+'" '+(this.value==k?'checked':'')+'>'+this.en[k]+'</INPUT>';
 s+='</DIV>';
 break;
case 'SELECT':
 s='<SELECT CLASS="input"'+NAME(this.i)+'>';
 for(k in this.en)s+='<OPTION VALUE="'+k+'" '+
  (this.value==k?'selected':'')+'>'+this.en[k]+'</OPTION>';
 s+='</SELECT>';
 break;
case 'IMAGE':
case 'FILE':
 s='<INPUT TYPE="hidden"'+NAME(this.i)+
 '><TABLE CLASS="input" CELLSPACING="0" CELLPADDING="0"><TR><TD COLSPAN="2"><INPUT TYPE="file" NAME="file['+this.i+
 ']" SIZE="40" title="Select file from your computer"> &nbsp;&nbsp; </TD></TR></TABLE>';
 break;
case 'PASSWORD':
 s='<INPUT TYPE="password"'+NAME(this.i)+'VALUE="'+this.value+
 '" SIZE="25" ONBLUR="onblur_(this,\'LOGIN\')" ONKEYPRESS="onkeypress_(\'LOGIN\')">';
 s+='&nbsp;&nbsp;<INPUT TYPE="password" NAME="password['+this.i+']" VALUE="'+this.value+
 '" SIZE="25" ONBLUR="onblur_(this,\'LOGIN\')" ONKEYPRESS="onkeypress_(\'LOGIN\')"><br>(enter twice)';
 break;
case 'HTML':
 show_htmledit(this.i);
 s='';
 break;
default:
 switch(this.type)
 {
 case 'DATE': size=12;break;
 case 'MONEY': if(this.value)this.value=Number(this.value).toFixed(2);
 }
 // с заменой кавычек не работала рассылка
 //this.value=this.value.replace(/"/g,'&quot;');
 this.value=this.value.toString().replace(/"/g,'&quot;');
 s='<INPUT TYPE="text"'+NAME(this.i)+'VALUE="'+this.value+
 '" SIZE="'+size+'" '+readonly+' ONBLUR="onblur_(this,\''+this.type+
 '\')" ONKEYPRESS="onkeypress_(\''+this.type+'\')">';
}
document.write(s);
}
function attr_list(wide)
{
this.list=Array();
this.wide=(wide==1)?1:0;
this.add_attr=add_attr;
}
function add_attr(i,header,type,oblige,en)
{
if(typeof(this.list[i])=='object')
alert('Повторное определение поля с индексом '+i);
this.list[i]=new attrib(i,header,type,oblige,en,this.wide);
return this.list[i];
}
function validate_form(f)
{
for(i in attl.list)
{
 var a=attl.list[i];
 var t=f.elements['record['+i+']'];
 if(t!=undefined)switch(a.type)
 {
 case 'PASSWORD':
  if(t.value!=f.elements['password['+i+']'].value)
  {
   alert('Пароли различны в поле "'+a.header+'"');
   t.focus();return false;
  }
  else if(onblur_(t,'LOGIN')==false)return false;
  break;
 case 'RADIO':
 case 'SELECT':
  break;
 case 'HTML':
  t.value=SaveHTMLPage();
  break;
 case 'CHECKBOX':
  t.value=f.elements['check['+i+']'].checked?1:'';
  break;
 default:
  if(a.oblige&&!check_fill_el(t))
  {
   alert('Please fill the field "'+a.header+'"');
   t.focus();return false;
  }
  else if(onblur_(t,a.type)==false)return false;
 }
}
return true;
}
function validate_and_ask(f)
{
if(!validate_form(f))return false;
return confirm_dialog();
}
function td(){document.write("</td><td>");}
