//var elements  = new Array();
//Элементы формы
var _form_elements                = new Array(  );
var _form_not_null_elements       = new Array(  );
var _form_double_elements         = new Array(  );
var _form_linked_elements         = new Array(  );
var _form_listen_answer           = new Array(  );
//Див элементы формы в которые будет записанна ошибка в поле формы
var _form_error_displays_elements = new Array(  );
var error_messages                = new Array(  );
//form_elements[ form_1 ][ 1 ]  = 'int';
//form_elements[ form_1 ][ 2 ]  = 'int';
//form_elements[ form_1 ][ 3 ]  = 'numeric';
//form_elements[ form_1 ][ 4 ]  = 'email';
//form_elements[ form_1 ][ 5 ]  = 'url';
//form_elements[ form_1 ][ 6 ]  = 'numeric';
//form_elements[ form_1 ][ 7 ]  = 'numeric';
//form_elements[ form_1 ][ 8 ]  = 'img';
//form_elements[ form_1 ][ 8 ]  = 'login';

//Идентификаторы полей которые должны
//быть обязательно заполненны
//form_not_null_elements[ form_1 ][ 3 ] = '';
//Поля значение которых
//должно быть подтверждено
//form_double_elements[ form_1 ][ 3 ] = 4;
//Поля которые зависят от других полей
//form_linked_elements[ form_1 ][ 3 ] = 4;
//form_linked_elements[ form_1 ][ 4 ] = 3;


error_messages[ 'int' ]       = "Должно содержать цыфры!\n"+
                                "и первый элемент не нуль";
error_messages[ 'numeric' ]   = "Числовое значение";
error_messages[ 'email' ]     = 'Не корректный адрес';
error_messages[ 'url' ]       = "Должно содержать латинские литеры\n"+
			        "символы потчеркивания и может иметь цыфры\n"+
			        "после латинского литера";
error_messages[ 'login' ]     = 'Не менее 3-х символов';
error_messages[ 'img' ]       = 'Изображение формата: jpg, bmp, gif';
error_messages[ 'txt' ]       = 'Файл формата txt';
error_messages[ 'password' ]  = 'Не менее 3-х символов';
error_messages[ 'folder' ]    = "Не должно содержать: {\n"+
                                "!"+"@"+"#"+"$"+"%"+"^"+"&"+"*\n"+
                                "("+") "+"-"+"="+"+"+","+"."+"\\\n"+
                                "|" +"/"+"<"+">"+"~"+"`"+"'\n"+
                                "\""+"{"+"}"+"["+"] "+"?"+"\n}"+
                                "\n"+"пробелов или начинаться на цифру";
error_messages[ 'canonical' ] = "Не должно содержать: {\n"+
                                "!"+"@"+"#"+"$"+"%"+"^"+"&"+"*\n"+
                                "("+") "+"-"+"="+"+"+","+"."+"\\\n"+
                                "|" +"/"+"<"+">"+"~"+"`"+"'\n"+
                                "\""+"{"+"}"+"["+"] "+"?"+"\n}"+
                                "\n"+"пробелов или начинаться на цифру";

function write_error_to( mes, div_id ){
	out_div = document.getElementById( div_id );
	if( out_div != null )
		out_div.innerHTML = mes;
}

function get_error_message_type( type ){
    if( error_messages[ type ] != null ){
        return error_messages[ type ];
    }
    return '';
}

function is_digyt( $value ){
    return true;
}

function is_numeric( value ){
    return true;
}

function is_email_name( value ){
    return true;
}

function is_url_name( value ){
    return true;
}

function is_img_name( value ){
    return true;
}

function is_folder_name( value ){
    return true;
}

function is_corect_name( value ){
    return true;
}

function is_login( value ){
    return true;
}

function is_password( value ){
    return true;
}

function valid_value( value, type ){
    fl = true;
    switch( type ){
        case 'int':
            fl = is_digyt( value );
        break;
        case 'numeric':
            fl = is_numeric( value );
        break;
        case 'email':
            fl = is_email_name( value );
        break;
        case 'url':
            fl = is_url_name( value );
        break;
        case 'img':
            fl = is_img_name( value );
        break;
        case 'folder':
            fl = is_folder_name( value );
        break;
        case 'canonical':
            fl = is_corect_name( value );
        break;
        case 'login':
            fl = is_login( value );
        break;
        case 'password':
            fl = is_password( value );
        break;
    }
    return fl;
}

function valid( form_id ){
    //alert( "'"+form_id+"'" );
    var form = document.getElementById( form_id );
    if( form == null )
        return false;

    curr_elements           = new Array(  );
    not_null_elements       = new Array(  );
    linked_elements         = new Array(  );
    error_displays_elements = new Array(  );
    ok = true;

    //alert( ok + ' 1' );
    if( _form_elements[ form_id ] != null ){
        curr_elements = _form_elements[ form_id ];
        ok = false;
    }

    //alert( ok + ' 2' );
    if( _form_linked_elements[ form_id ] != null ){
        linked_elements = _form_linked_elements[ form_id ];
        ok = false;
    }

    //alert( ok + ' 3' );
    if( _form_not_null_elements[ form_id ] != null ){
      not_null_elements = _form_not_null_elements[ form_id ];
      ok = false;
    }

    //alert( ok + ' 4' );
    if( _form_error_displays_elements[ form_id ] )
       error_displays_elements = _form_error_displays_elements[ form_id ];
    //alert( ok + ' 5' );
    if( ok )
        return ok;

    //alert( form.elements.length );

    var l  = form.elements.length;

    if( l <= 0 )
        return true;
    var mes_empty_field = "Поле пусто";
    var correct = true;
    var not_nul = "Некоторые обязательные поля не заполнены\n";
    var is_not_nul = true;
    var not_cor = "Не коректно заполненны поля\n";
    var is_not_cor = true;
    var linked  = "Одно из полей обязательно для заполнения\n";
    var is_linked = true;

    //alert( l );    

    for( var i = 0; i < l; i++ ){
        element = form.elements[ i ];
        //alert(element.type+'\n'+  element.value + '\n' +element.id + '\n' + not_null_elements[ element.id ] + '\ncor: ' + correct );
        id      = element.id;
        value   = element.value;
        if( value != '' ){
            if( curr_elements[ id ] != null ){
                if( !valid_value( value, curr_elements[ id ] ) ){
                    /*element.style.borderStyle="solid 2px;";*/
                    element.style.borderColor="RED";
                    correct    = false;
                    is_not_cor = false;
                    err = get_error_message_type( curr_elements[ id ] );
                    if( error_displays_elements[ id ] != null )
                       write_error_to( err, error_displays_elements[ id ] );
                }
            }
        }else if( not_null_elements[ id ] != null ){
            /*element.style.borderStyle="solid 2px;";*/
            element.style.borderColor="RED";
            if( error_displays_elements[ id ] != null )
                write_error_to( mes_empty_field, error_displays_elements[ id ] );
            correct    = false;
            is_not_nul = false;
        }
    }
    //alert( correct );
    if( !correct ){
        var mes = '';
        if( !is_not_cor )
            mes += not_cor;
        if( !is_not_nul )
            mes += not_nul;
        alert( mes );
        return false;
    }
    return true;
}

function theInputHave(input){
  var ok=false;
  var a='';
  for(var i = 0; i < input.length; i++) {
    var chr=input.charAt(i);
    var fined=false;
    for(var j = 1; j < theInputHave.arguments.length;j++) {
      if (chr == theInputHave.arguments[j]){fined=true;}
    }
    if(fined==true) ok=true;
  }
  return ok;
}

function allCharsIs(input){
  var ok=true;
  var a="";
  for (var i = 0; i < input.length; i++) {
    var chr=input.charAt(i);
    var fined=false;
    for(var j = 1; j < allCharsIs.arguments.length; j++) {
      if (chr == allCharsIs.arguments[j]){fined=true;}
    }
    if(fined==false) ok=false;
  }
  return ok;
}
function amountCharecters(input,ch){
	var count=0;
	for(var i=0;i<input.length;i++){
		if(input.charAt(i)==ch) count++;
	}
	return count;
}
//id=11
function isDigyt(input) {
	  return allCharsIs(input,"0", "1", "2", "3", "4",
	        "5", "6", "7", "8", "9", "0");
	}
//id=2
function isNumeric(input) {
 var chr = input.charAt(0);
  if(chr=="0")return false;
  return allCharsIs(input,"1", "2", "3", "4",
        "5", "6", "7", "8", "9", "0");
}
//id=10
function isUrlName(input){
	if(input.charAt(0)=="_")
		if(isNumeric(input.charAt(1)))return false;
	if(isNumeric(input))return false;
    return allCharsIs(input,"_",
	"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",
"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
"1", "2", "3", "4","5", "6", "7", "8", "9", "0");
}
//id=1
function isCorectName(input){
    if(isNumeric(input.charAt(0)))return false;
    return !theInputHave(input,"!","@","#","$","%","^","&","*",
    "(",")","-","=","+",",",".","\\","|","/","<",">",
    "~","`","'","\"","{","}","[","]","?");
}
//id=20
function isEMailName(input){
	//alert(input);
	if(amountCharecters(input,'@')==1)
		if(amountCharecters(input,".")>=1){
			s=input.indexOf('@');
			var user=input.substring(0,s-1);
			//if(user.charAt(0)!="_")
				/*if(allCharsIs(user,"_",
					"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",
					"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")){
					var dom=input.substring(s+1,input.length);
				if(allCharsIs(dom,".",
					"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",
					"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"))*/
					return true;
				//}
		}
	return false;
}

function is_good_time_values_to_appointments( sel_t, sel_d )
{
    var ok = true;
    var d = new Date();
    var d_h = d.getHours();
    var d_mm = d.getMinutes();

    var d_d = d.getDate();
    var d_m = d.getMonth()+1;
    //var d_y = d.getYear();


    var days = new Array();
    days = sel_d.toString().split ( '-'.toString() );
    //alert( parseInt( days[ 1 ] ) + "\n" + d_m );
    //alert( parseInt( days[ 2 ] ) + "\n" + d_d );
    if( parseInt( days[ 1 ] ) == d_m && parseInt( days[ 2 ] ) == d_d+1 )
    {
        var times = new Array();
        times = sel_t.toString().split ( ':'.toString() );

        if( parseInt( times[ 0 ] ) < d_h )
            ok=false;
        else if( parseInt( times[ 0 ] ) == d_h )
        {
            if( parseInt( times[ 1 ] ) < d_mm )
                ok=false;
        }
        //alert( days );
        //alert( sel_d +' '+ sel_t + "\n" + cur_d + ' ' + cur_t );
    }
    return ok;
}

function is_good_time_to_appointments( sel_time_id, sel_date_id )
{
    var ok = true;
    var d = new Date();
    var d_h = d.getHours();
    var d_mm = d.getMinutes();
    var next_time = '';

    var sel_time = document.getElementById(sel_time_id);
    if( sel_time == null )
    {
        throw new Exeption( 'Не найден элемент id='+sel_time_id );
    }
    var sel_t_index = sel_time.selectedIndex;
    var sel_t = sel_time.options[sel_t_index].value;
    //if( sel_time.options[sel_t_index+1]!=null )
    //{
       //next_time = sel_time.options[sel_t_index+1].value;
    //}

    var sel_date = document.getElementById(sel_date_id);
    if( sel_date == null )
    {
        throw new Exeption( 'Не найден элемент id='+sel_date_id );
    }
    var sel_d = sel_date.options[sel_date.selectedIndex].value;

    ok = is_good_time_values_to_appointments( sel_t, sel_d );
    if( !ok )
    {
        var l =sel_time.options.length;
        for( ;sel_t_index < l; sel_t_index++ )
        {
            sel_t = sel_time.options[sel_t_index].value;
            if( is_good_time_values_to_appointments( sel_t, sel_d ) )
            {
                next_time = sel_t;
                break;
            }
        }

        if( next_time == '' )
        {
            l = ('' + d_h).toString().length;
            if( l == 1 )
                d_h = '0' + d_h;
            l = ('' + d_mm).toString().length;
            if( l == 1 )
                d_mm = '0' + d_mm;
            next_time = d_h + ':' + d_mm;
        }

        alert( 'Запись на завтра может быть произведена не раньше чем на ' + next_time );
    }
    return ok;
}