//=======================================================================================================
// "r"  - lower-case russian characters (plus " ".-)
// "R"  - higher-case russian characters (plus " ".-)
// "a"  - all russian characters (plus " ".-)
// "A"  - all russian characters (plus all printing characters)
// "l"  - all roman characters (plus " "./,\'-)
// "L"  - all roman character (plus all printing characters)
// "I"  - input characters(russian+latin+_+0123456789)
// "mnemo" - all roman characters (plus "_")
// "D"  - date
// "#"  - not empty (all characters)
// "N"  - numeric
// "F"  - float
// "email" - e-mail
//=======================================================================================================

function CheckForm(obj) 
{
    var missing_fields = new Array();
    var total_missing = 0;
    var arr_mess = new Array();
    
	// ------- Loop through all the form elements ---------------
    for (i=0; i<obj.length; i++) 
	{
        if ((obj[i].type=="text" || obj[i].type == "password" || obj[i].type == "textarea") && obj[i].mandatory) 
		{
          var is_missing = false;
          var err_message = "";
		  var type = obj[i].mandatory;
		  
		  if (obj[i].value.length>0) {
		  	if (type=="D") {
			  if (!is_date(obj[i].value)) {
                err_message = "Введена невірна дата";
                is_missing = true;
              }		  	
		  	} else {
			var re = '';
			switch (type) {
				case "#": 
					var err_message = "Поле не повинне бути пустим"; 
					var re = new RegExp("[^ \f\n\r\t\v]", "gi"); 
				break;
				case "I": 
					var err_message = "Використовуються лише латинські символи та цифри";
					var re = new RegExp("^[0-9a-zA-Z_]{1,}$", "gi");
				break;
				case "N": 
					var err_message = "Використовуються лише цифри";
					var re = new RegExp("^[0-9.]{1,}$", "gi");
				break;
				case "email": 
					var err_message = "Невірний E-mail";
					var re = new RegExp("^[a-z0-9._]{1,}@[a-z0-9_\-]{2,}[a-z0-9_.\-]{0,}\.[a-z]{2,6}$", "gi");
				break;
			}
			  if (re!='')
				if (!obj[i].value.match(re)) is_missing = true;
			}
		  } else {
			var err_message = "Поле не повинне бути пустим";
			var is_missing = true;
		  }

          if (is_missing) {
             missing_fields[total_missing] = obj[i];
             arr_mess[total_missing] = err_message;
             total_missing++
          }
        }
    }

    // -- Is bad fields ? -----------
    if (total_missing > 0) {
        var missing_message = "Ви повинні вірно ввести дані:\n__________________________________\n\n";
        // -- Output bad fields ---------------
        for (i=0; i<missing_fields.length; i++) {
            missing_message += arr_mess[i]+": ";
            missing_message += "\"" + missing_fields[i].title + "\"\n";
        }
        alert(missing_message);
        missing_fields[0].focus();
        return false;
    }
    else
        return true;
}

//+---------------------------------------------------------
//| Check string											
//+---------------------------------------------------------
function checkString(string_value, letters) 
{
  for (var i=0; i<string_value.length; i++) {
	var current_char = string_value.charAt(i);
	if (letters.indexOf(current_char) == -1 )
    	return false;
  }
  return true;
}

//+---------------------------------------------------------
//| Check on "DATE"											
//+---------------------------------------------------------
function is_date(str) {
	var arr = str.split(dateSF.substr(2,1));
    
	switch(dateSF.substr(0,2)) {
		case "%d": var mDay = arr[0]; break;
		case "%m": var mMonth = arr[0]; break;
		case "%Y": var mYear = arr[0]; break;
	}
	switch(dateSF.substr(3,2)) {
		case "%d": var mDay = arr[1]; break;
		case "%m": var mMonth = arr[1]; break;
		case "%Y": var mYear = arr[1]; break;
	}
	switch(dateSF.substr(6,2)) {
		case "%d": var mDay = arr[2]; break;
		case "%m": var mMonth = arr[2]; break;
		case "%Y": var mYear = arr[2]; break;
	}
	//alert("arr[0]="+arr[2]+": day="+mDay+", month="+mMonth+", year="+mYear);

	if (mDay<1 || mDay>31) return false;
	if (mMonth<1 || mMonth>12) return false;
	if (mYear<1900 || mYear>2100) return false;
	var d = new Date(mYear, (mMonth-1), mDay);
	if (d!="NaN")
        return true;
    else
        return false;
}





