//---------------------------------------- allow email characters
/*function allowEmailCharacters(event,value){

 var keyCode = event.keyCode?event.keyCode:event.which;

 if(!((keyCode>96 && keyCode<123) || (keyCode>63 && keyCode<91) || (keyCode>47 && keyCode<58) || (keyCode==8 || keyCode==9 || keyCode==46 || keyCode==45 || (keyCode>32 && keyCode<40)) || keyCode==95 || keyCode==109)){
  event.preventDefault? event.preventDefault() : event.returnValue = false;
 }else if(value.indexOf('@')>-1 && keyCode==64){
  event.preventDefault? event.preventDefault() : event.returnValue = false;
 }
}*/

//---------------------------------------- report messages
function reportErrorMessage(element){
 var returnMessage=element.previous(1).down();
 if(returnMessage.hasClassName('required')){
  returnMessage.addClassName('wrong');
  if(element.value.length<1){
   returnMessage.update('[nutno vyplnit]');
  }else{
   returnMessage.update('[špatný formát]');
  }
 }
}
function reportSuccessMessage(element){
 var returnMessage=element.previous(1).down();

 if(returnMessage.hasClassName('required')){
  returnMessage.removeClassName('wrong');
  returnMessage.update('[v pořádku]');
 }
}

//---------------------------------------- check event
function checkEvent(event){
 if(Object.isElement(event)){
  return event;
 }else{
  return event.element();
 }
}

//**********************************************************************************
//---------------------------------------- check email
function checkEmail(event){
 var input=checkEvent(event);
 checkPattern=/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

 if(!input.value.match(checkPattern)) {
  reportErrorMessage(input);
 }else{
  reportSuccessMessage(input);
 }
}

//---------------------------------------- check zip
function checkZip(event){
 var input=checkEvent(event);
 checkPattern=/^[0-9]{3} ?\d{2}$/;

 if(!input.value.match(checkPattern)) {
  reportErrorMessage(input);
 }else{
  reportSuccessMessage(input);
 }
}

//---------------------------------------- check phone
function checkPhone(event){
 var input=checkEvent(event);
 checkPattern=/^(\+[0-9]{3})? ?[0-9]{3} ?[0-9]{3} ?[0-9]{3}$/;

 if(!input.value.match(checkPattern)){
  reportErrorMessage(input);
 }else{
  reportSuccessMessage(input);
 }
}

//---------------------------------------- check is empty
function checkIsEmpty(event){
 var input=checkEvent(event);
 checkPattern=/^.+$/;

 if(!input.value.match(checkPattern)){
  reportErrorMessage(input);
 }else{
  reportSuccessMessage(input);
 }
}

//---------------------------------------- check street
function checkStreet(event){
 var input=checkEvent(event);
 checkPattern=/^(.*[^0-9]+) (([1-9][0-9]*)\/)?([1-9][0-9]*[a-cA-C]?)$/;

 if(!input.value.match(checkPattern)){
  reportErrorMessage(input);
 }else{
  reportSuccessMessage(input);
 }
}

//---------------------------------------- check ic ******** NENÍ HOTOVO ************** http://latrine.dgx.cz/jak-overit-platne-ic-a-rodne-cislo
function checkIc(event){
 var input=checkEvent(event);
 var checkSum=0;
 var icSpaceLess=input.value.split('');
 var checkLastNumber=0;

 checkPattern=/^\d{8}$/;

 if(input.value.match(checkPattern)){
  for(i=0;i<7;i++){
   checkSum+=(parseInt(icSpaceLess[i])*(8-i));
  }
  checkSum=checkSum%11;
  checkLastNumber=11-checkSum;
  if(checkSum==1) checkLastNumber=0;
  if(checkSum==0) checkLastNumber=1;
  if(checkSum==10) checkLastNumber=1;
  if(parseInt(icSpaceLess[7])!=checkLastNumber){
   reportErrorMessage(input);
  }else{
   reportSuccessMessage(input);
  }
 }else{
  reportErrorMessage(input);
 }
}

//---------------------------------------- show hide
function hiddenShow(event){
 var showHideElement=checkEvent(event);
 var showHide=showHideElement.up().next('.show-hide');

 if(showHideElement.match(':checked')){
  showHide.show();
 }else{
  showHide.hide();
 }
}

//---------------------------------------- events functions
corefunctions = function(){
 check=new Array(// special array defined 'object ID','event','handling function'
  Array('form-personal-name-surname','keyup',checkIsEmpty),
  Array('form-company-firm','keyup',checkIsEmpty),
  Array('form-personal-email','keyup',checkEmail),
  Array('form-invoice-street','keyup',checkStreet),
  Array('form-invoice-city','keyup',checkIsEmpty),
  Array('form-invoice-zip','keyup',checkZip),
  Array('form-delivery-name-surname','keyup',checkIsEmpty),
  Array('form-delivery-street','keyup',checkStreet),
  Array('form-delivery-city','keyup',checkIsEmpty),
  Array('form-delivery-zip','keyup',checkZip),
  Array('form-delivery-address-show','click',hiddenShow),
  Array('form-company-show','click',hiddenShow)
 );

 for(i=0;i<check.length;i++){
  $(check[i][0]).observe(check[i][1],check[i][2]);
  check[i][2]($(check[i][0]));
 }

 if($('form-delivery-address-show').match(':checked')){
  var showHide=$('form-delivery-address-show').up().next('.show-hide');
  showHide.show();
 }else{
  var showHide=$('form-delivery-address-show').up().next('.show-hide');
  showHide.hide();
 }
};


//---------------------------------------------------------------
this.addEvent=function(obj,type,fn){
 if(obj.attachEvent){
  obj['e'+type+fn]=fn;
  obj[type+fn]=function(){obj['e'+type+fn](window.event);}
  obj.attachEvent('on'+type, obj[type+fn]);
 }else{
  obj.addEventListener(type,fn,false);
 };
};
