function selectAndFocus(field, language){
  if(language != null)
    selectLanguage(language);
  field.focus();
}

function _validateNotEmpty(field){
  if(field.value == null || field.value == ""){
    selectAndFocus(field);
    return false;
  } else {
    return true;
  }
}

function _validateNumber(field){
  if(isNaN(field.value)){
    selectAndFocus(field);
    return false;
  } else {
    return true;
  }
}

function _validateInteger(field){
  var integer = parseInt(field.value);
  var trimmed = field.value.trim();
  if(integer != trimmed){
    selectAndFocus(field);
    return false;
  } else {
    return true;
  }
}

function _validateRegex(field, regex){
  if(!field.value.matches(regex)){
    selectAndFocus(field);
    return false;
  } else {
    return true;
  }
}

function _validateNumberBetween(field, min, max){
  if(!_validateNumber(field)){
    selectAndFocus(field);
    return false;
  }

  val = parseFloat(field.value);
  if(min != null && val < parseFloat(min)){
    selectAndFocus(field);
    return false;
  } else if(max != null && val > parseFloat(max)){
    selectAndFocus(field);
    return false;
  } else {
    return true;
  }
}

function _validateIntegerBetween(field, min, max){
  if(!_validateInteger(field)){
    selectAndFocus(field);
    return false;
  }

  val = parseInt(field.value);
  if(min != null && val < parseInt(min)){
    selectAndFocus(field);
    return false;
  } else if(max != null && val > parseInt(max)){
    selectAndFocus(field);
    return false;
  } else {
    return true;
  }
}

function _validateStringLength(field, minLength, maxLength){
  var val = "" + field.value;

  if(val.length < minLength || val.length > maxLength){
    selectAndFocus(field);
    return false;
  } else {
    return true;
  }
}

function _validateEmail(field){
  var val ;
  try{
    val = field.val();
  }catch(e){
    val = field.value;
  }

  var pattern = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
  if (!pattern.test(val)) {
    selectAndFocus(field);
    return false;
  } else {
    return true;
  }
}

function _validateTinyMCENotEmpty(fieldName){
  if( tinyMCE.getContent(fieldName).length== "" ){
    tinyMCE.execCommand('mceFocus', false, fieldName);
    return false;
  } else {
    return true;
  }
}

function _unmarkField(field){
  $(field).removeClass("field_with_error");
}

function _remarkField(field){
  $(field).addClass("field_with_error");
  pulsate($(field), 300);
}

function pulsate( field, time )
{
  field.fadeIn( time ).fadeOut( time ).fadeIn( time ).fadeOut( time ).fadeIn( time ).fadeOut( time ).fadeIn( time );
}