var
error_message = '',
indent = '     -  ';

validators['password']         = /^[0-9a-zA-Z\.\-\_]*$/;
validators['name']             = /^[a-zA-Z0-9]*$/;
validators['full_name']        = /^[\sa-zA-Z0-9]*$/;
validators['address']          = /^[\s0-9a-zA-Z\.\-\\\/]*$/;
validators['text']             = /^.*$/;
validators['email']            = /^[\w-\.]+\@[\w\.-]+\.[a-z]{2,4}$/;
validators['integer']          = /^[\+\-]?\d*$/;
validators['positive_integer'] = /^[\+]?\d*$/;
validators['float']            = /^[\+\-]?\d*\.?\d*$/;
//validators['url']              = /^[\w-\.]+$/;
validators['url']                 = /^((ftp|http|https):\/\/)?[\w-]+\.[\w-]+(\.[\w-]+)?(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
validators['url_with_no_params']  = /^((ftp|http|https):\/\/)?[\w-]+\.[\w-]+(\.[\w-]+)?$/;

function valid(form_field, type, display_name, allow_empty, empty_value){
    if (type == 'radio' && !allow_empty){
        var valid = false;
        for (var i=0; i<form_field.length; i++){
            if (form_field[i].checked)
			    valid = true;
		}
		if (!valid){
			error_message = error_message + indent + display_name + ' ' + msg_required_field + '!' + '\n';
		}
		return valid;
/* form_field.value == display_name - this is for the cases where the display name replaces the empty value */
/* form_field.value == empty_value - this is for using smarty dates */
	} else if (form_field.value.length == 0 || form_field.value == display_name || form_field.value == empty_value){
        if (!allow_empty){
            if (error_message == '') 
            	if(form_field.style.display != "none") // This is because of FCK editor
            		form_field.focus();
            error_message = error_message + indent + display_name + ' ' + msg_required_field + '!' + '\n';
            return false;
        }
    } else if(type=='date'){
	    var valid = true;
		if (!validators[type].test(form_field.value)) valid = false;
		else valid = jsvalidator_check_date(RegExp);
		//valid = jsvalidator_check_date(validators[type], form_field.value);
		if(!valid){
            if (error_message == '') 
            	if(form_field.style.display != "none") // This is because of FCK editor
            		form_field.focus();
			error_message = error_message + indent + '"' + form_field.value + '" ' + msg_not_valid_value + ' ' + display_name + '!' + ' ' + msg_format_date + '\n';
		}
		return valid;
	} else if(type=='time'){
	    var valid = true;
		// check format
		if (!validators[type].test(form_field.value)) valid = false;
		// check allowed ranges	
		if (RegExp.$1 > 23 || RegExp.$2 > 59 || RegExp.$3 > 59) valid = false;
		if(!valid){
            if (error_message == '') 
            	if(form_field.style.display != "none") // This is because of FCK editor
            		form_field.focus();
			error_message = error_message + indent + '"' + form_field.value + '" ' + msg_not_valid_value + ' ' + display_name + '!' + '\n';
		}
		return valid;
	}else if(type=='date_time'){
		
		//Date
		var valid = true;
		if (!validators['date'].test(form_field.value.substring(1,10))) valid = valid && false;
		//else valid = valid && jsvalidator_check_date(RegExp);
		//End Date
		
		//Time
		if (!validators['time'].test(form_field.value.substring(11,19))) valid = valid && false;
		// check allowed ranges	
		if (RegExp.$1 > 23 || RegExp.$2 > 59 || RegExp.$3 > 59) valid = valid && false;
		//End Time
		
		//valid = jsvalidator_check_date(validators[type], form_field.value);
		if(!valid){
            if (error_message == '') 
            	if(form_field.style.display != "none") // This is because of FCK editor
            		form_field.focus();
			error_message = error_message + indent + '"' + form_field.value + '" ' + msg_not_valid_value + ' ' + display_name + '!' + ' ' + msg_format_date_time + '\n';
		}
	
		return valid;
	
	 
	}else if(type=='text' || type=='password' || type=='name' || type=='full_name' || type=='address' || type=='phone' ){
		return true;
	} else 
	if (!validators[type].test(form_field.value)){
        if (error_message == '') 
        	if(form_field.style.display != "none") // This is because of FCK editor
        		form_field.focus();
		error_message = error_message + indent + '"' + form_field.value + '" ' + msg_not_valid_value + ' ' + display_name + '!' + '\n';
		return false;
  }
  return true;
}

function valid_password(form_field, retype_field, display_name, allow_empty){
    if (form_field.value.length == 0){
        if (!allow_empty){
            if (error_message == '') 
            	if(form_field.style.display != "none") // This is because of FCK editor
            		form_field.focus();
            error_message = error_message + indent + display_name + ' ' + msg_required_field + '!' + '\n';
            return false;
        }
    } else {
        if (!validators['password'].test(form_field.value)){
            if (error_message == '') 
            	if(form_field.style.display != "none") // This is because of FCK editor
            		form_field.focus();
            error_message = error_message + indent + '' + msg_allowed_chars + ' ' + display_name + ' ' + msg_are + ' (0-9, a-z, A-Z, ".", "-" ' + msg_and + ' "_")!' + '\n';
            return false;
        }
        else if (form_field.value != retype_field.value){
            if (error_message == '') 
            	if(form_field.style.display != "none") // This is because of FCK editor
            		form_field.focus();
            error_message = error_message + indent + msg_the + ' ' + display_name + msg_not_typed_correctly + '!' + '\n'; 
            retype_field.value = '';
            return false;
        }
    }
    return true;
}

function valid_checkbox(form_field, display_name, allow_empty){
	if(form_field.checked == 0){
	    error_message = error_message + indent + display_name + ' ' + msg_must_be_selected + '!' + '\n';
	    return false;
	} else{
	    return true;
	}
}

function valid_multiple_checkbox(form, form_field_name, display_name, allow_empty){
	var is_valid = false;
	for(i=0; i<form.length; i++){
		if(form[i].name == form_field_name){
			if(form[i].checked){
				is_valid = true;
			}
		}
		
	}
	if(!is_valid && allow_empty){
		is_valid = true;
	}
	if(!is_valid){
		 error_message = error_message + indent + display_name + ' ' + msg_required_field + '!\n';
	}
	return is_valid;
}

function valid_upload(form_field, display_name, allow_empty){
	var ext_found = false;
	var image_ext = new Array ('.doc', '.DOC', '.pdf', '.PDF', '.docx', '.DOCX', '.xls', '.XLS', '.xlsx', '.XLSX');
	if(form_field.length != 0){
		for(var i=0; i < image_ext.length; i++){
			if (form_field.indexOf(image_ext[i]) != -1){
				ext_found = true;
			}
		}
		if(!ext_found){
			 error_message = error_message + indent + display_name + ' ' + msg_invalid_extension + '(.doc , .docx, .xls, .xlsx, .pdf)' + '!' + '\n';
		}
	}else{
		ext_found = false;
		error_message = error_message + indent + display_name + ' ' + msg_required_field +  '!' + '\n';
	}
	return ext_found;
}

function add_error(error){
    error_message = error_message + indent + error + '\n';
}
			
function display_errors(){
    if (error_message != ''){
        error_message = msg_correct_the_errors + ':' + '\n\n' + error_message; 
    	
        alert(error_message);
        error_message = '';
    }
}