$(document).ready(function(){

  $("#D_o_B").mask("99.99.9999");		
  $("#createdate").mask("99.99.9999");		

  $("#D_o_B").keyup(function(){
    checkDate("#D_o_B", "#dobValid");
  });
  $("#createdate").keyup(function(){
    checkDate("#createdate", "#createdateValid");
  });
  $("#placeName").keyup(function(){
    checkEmpty("#placeName", "#placeNameValid");
  });
  $("#placeAddr").keyup(function(){
    checkEmpty("#placeAddr", "#placeAddrValid");
  });
  $("#itemPrice").keyup(function(){
    checkNumber("#itemPrice", "#itemPriceValid");
  });
  $("#comments").keyup(function(){
    checkEmpty("#comments", "#commentsValid");
  });
  // ---------------------------------------------
  $("#lnameua").keyup(function(){
    checkEmpty("#lnameua", "#lnameuaValid");
  });
  $("#fnameua").keyup(function(){
    checkEmpty("#fnameua", "#fnameuaValid");
  });
  $("#mnameua").keyup(function(){
    checkEmpty("#mnameua", "#mnameuaValid");
  });
  $("#school").keyup(function(){
    checkEmpty("#school", "#schoolValid");
  });
  $("#raddr_city").keyup(function(){
    checkEmpty("#raddr_city", "#raddrcityValid");
  });
  $("#un_faculty").keyup(function(){
    checkEmpty("#un_faculty", "#unfacultyValid");
  });
  $("#cphone").keyup(function(){
    checkPhone("#cphone", "#cphoneValid");
  });
  $("#ic").keyup(function(){
    //checkValue("#ic", "#icValid", $.cookie('image_code'));
  });

 
function get_cookie ( cookie_name )
{
  var results = document.cookie.match ( '(^|;) ?' + cookie_name + '=([^;]*)(;|$)' );
  if ( results )
    return ( unescape ( results[2] ) );
  else
    return null;
}

  $("#youremail").keyup(function(){
    var email = $("#youremail").val();
  
    if(email != 0) {
      if(isValidEmailAddress(email))
        updateStyle(0, "#youremail", "#emailValid");
      else
	updateStyle(1, "#youremail", "#emailValid");
    } else 
        updateStyle(2, "#youremail", "#emailValid");
  });
});

  function checkValue(name, nameValid, selVal) {
    var value = $(name).val();
  
    if(value != 0) {
      if(value == selVal) 
	updateStyle(0, name, nameValid);
      else
	updateStyle(1, name, nameValid);
    } else 
	updateStyle(2, name, nameValid);
  }

function checkCard(name, nameValid) {
  $(name).val($(name).val().toUpperCase());
  if(CheckDigit()) {
    updateStyle(0, "#Card_Number", nameValid);
    updateStyle(0, "#Card_Letter", nameValid);
  }
  else {
    updateStyle(1, "#Card_Number", nameValid);
    updateStyle(1, "#Card_Letter", nameValid);
  }	
}
  
    function isValidEmailAddress(emailAddress) {
    var pattern = /(^[a-z]([a-z_\.]*)@([a-z_\.]*)([.][a-z]{3})$)|(^[a-z]([a-z_\.]*)@([a-z_\.]*)(\.[a-z]{2})(\.[a-z]{2})*$)/i; 
	// new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
    return pattern.test(emailAddress) && emailAddress != '';
    }

  function checkPhone(name, nameValid) {
    var value = $(name).val();
  
    if(value != 0) {
      if(isValidPhone(value)) 
	updateStyle(0, name, nameValid);
      else
	updateStyle(1, name, nameValid);
    } else 
	updateStyle(2, name, nameValid);
  }

    function isValidPhone(value) {
    var pattern = /^\+380([0-9]{9})$/; //new RegExp('\+38([\d]+)');
    return pattern.test(value);
    }

  function checkNumber(name, nameValid) {
    var value = $(name).val();
  
    if(value != 0) {
      if(isValidNumber(value)) 
	updateStyle(0, name, nameValid);
      else
	updateStyle(1, name, nameValid);
    } else 
	updateStyle(2, name, nameValid);
  }

    function isValidNumber(value) {
    var pattern = /(^-?\d\d*$)/; // new RegExp('[0-9]+');
    return pattern.test(value);
    }

  function checkEmpty(name, nameValid) {
    var value = $(name).val();
  
    if(value != 0) {
      if(isValidEmpty(value))
	updateStyle(0, name, nameValid);
      else
	updateStyle(1, name, nameValid);
    } else
	updateStyle(2, name, nameValid);
  }

    function isValidEmpty(value) {
    var pattern = new RegExp('.+');
    return pattern.test(value);
    }

  function checkEnglish(name, nameValid) {
    var value = $(name).val();
  
    if(value != 0) {
      if(isValidEnglish(value)) 
	updateStyle(0, name, nameValid);
      else 
	updateStyle(1, name, nameValid);
    } 
    else  
      updateStyle(2, name, nameValid);
  }

    function isValidEnglish(value) {
      var pattern = new RegExp('[a-zA-Z\w\s]+');
      return pattern.test(value);
    }

  function checkDate(name, nameValid) {
    var value = $(name).val();
  
    if(value != 0) {
      if(isValidDate(value) && checkDateExt(name)) 
	updateStyle(0, name, nameValid);
      else 
	updateStyle(1, name, nameValid);
    } 
    else  
      updateStyle(2, name, nameValid);
  }

function checkDateExt(name) {
    var strSeparator = $(name).val().substring(2,3) 
    var arrayDate = $(name).val().split(strSeparator); 
	
    //create a lookup for months not equal to Feb.
    var arrayLookup = { '01' : 31,'03' : 31, 
                        '04' : 30,'05' : 31,
                        '06' : 30,'07' : 31,
                        '08' : 31,'09' : 30,
                        '10' : 31,'11' : 30,'12' : 31}
    var intDay = parseInt(arrayDate[0],10); 
        
    //check if month value and day value agree
    if(arrayLookup[arrayDate[1]] != null) {
      if(intDay <= arrayLookup[arrayDate[1]] && intDay != 0)
        return true; //found in lookup table, good date
    }
       
    //check for February (bugfix 20050322)
    //bugfix  for parseInt kevin
    //bugfix  biss year  O.Jp Voutat
    var intMonth = parseInt(arrayDate[1],10);
    if (intMonth == 2) { 
       var intYear = parseInt(arrayDate[2]);
       if (intDay > 0 && intDay < 29) {
           return true;
       }
       else if (intDay == 29) {
         if ((intYear % 4 == 0) && (intYear % 100 != 0) || 
             (intYear % 400 == 0)) {
              // year div by 4 and ((not div by 100) or div by 400) ->ok
             return true;
         }   
       }
    }
    return false; //any other values, bad date
}

    function isValidDate(value) {
      var pattern = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/; //new RegExp('[\d]{2}.[\d]{2}.[\d]{4}');
      return pattern.test(value);
    }

function updateStyle(c, name, nameValid, text) {
  switch(c) {
  case 0: if(!text) text = "Все верно"; $(nameValid).css({"background-image": "url('/img/validyes.png')"}); $(name).css({"background": "#fff"}); break;
    default:
	$(name).css({"background": "#ffdcdc"});
        $(nameValid).css({"background-image": "url('/img/validno.png')"});
	if(!text) text = "Значение поля некорректное. Задайте правильное значение!"; 
    	break;
  }
  $(nameValid).attr("title", text);
}
