
validate_objects = new Array();

//Add veliadation icon to every span having the class name validation_icon
var validation_icon_spans = $$('.validation_icon');
validation_icon_spans.each(function(item){
                                            item.addClassName("LV_validation_message LV_invalid");
                                         }
                          )


Validate_password = new LiveValidation('password');
validate_objects.push( Validate_password );
Validate_password.add( Validate.Presence );
Validate_password.add( Validate.Confirmation, {match: 'password'});
                          
Validate_password_confirmation = new LiveValidation('password_confirmation');                                                                                                                              
Validate_password_confirmation.add( Validate.Confirmation, {match: 'password'});
validate_objects.push( Validate_password_confirmation );
Validate_password_confirmation.add( Validate.Presence );

Validate_telephone = new LiveValidation('telephone');
validate_objects.push(Validate_telephone);
Validate_telephone.add( Validate.Presence );
Validate_telephone.add( Validate.Format, { pattern: /[^0-9\s-]+/, negate:true } );
                          
Validate_firstname = new LiveValidation('firstname');
validate_objects.push(Validate_firstname);
Validate_firstname.add( Validate.Presence );
Validate_firstname.add( Validate.Format, { pattern: /[^A-Za-zÄÖÜÆØÅäàöüæøåéèëêîïôùÀÂÉÈËÊÎÏÔÙ\-\.\s]+/, negate:true } );

Validate_lastname = new LiveValidation('lastname');
validate_objects.push(Validate_lastname);
Validate_lastname.add( Validate.Presence );
Validate_lastname.add( Validate.Format, { pattern: /[^A-Za-zÄÖÜÆØÅäàöüæøåéèëêîïôùÀÂÉÈËÊÎÏÔÙ\-\.\s]+/, negate:true } );

Validate_email = new LiveValidation('email_address');
validate_objects.push(Validate_email);                                   
Validate_email.add( Validate.Presence );
Validate_email.add( Validate.Email );
//Validate_email.add( Validate.Confirmation, { match: 'email_address_repeat' } );

Validate_email_repeat = new LiveValidation('email_address_repeat');
validate_objects.push(Validate_email_repeat);                                          
Validate_email_repeat.add( Validate.Presence );
Validate_email_repeat.add( Validate.Email );
Validate_email_repeat.add( Validate.Confirmation, { match: 'email_address' } );

Validate_postcode = new LiveValidation('postcode');
validate_objects.push(Validate_postcode);
Validate_postcode.add( Validate.Presence );
Validate_postcode.add( Validate.Format, { pattern: /[0-9-]+/} );

Validate_city = new LiveValidation('create_city');
validate_objects.push(Validate_city);
Validate_city.add( Validate.Presence );
Validate_city.add( Validate.Format, { pattern: /[A-Za-z0-9-]+/ } );

//Company validation

                         
Validate_company_password = new LiveValidation('company_password');
validate_objects.push( Validate_company_password );
Validate_company_password.add( Validate.Presence );
Validate_company_password.add( Validate.Confirmation, {match: 'company_password'});
                          
Validate_company_password_confirmation = new LiveValidation('company_password_confirmation');                                                                                                                              
Validate_company_password_confirmation.add( Validate.Confirmation, {match: 'company_password'});
validate_objects.push( Validate_company_password_confirmation );
Validate_company_password_confirmation.add( Validate.Presence );

Validate_company_telephone = new LiveValidation('company_telephone');
validate_objects.push(Validate_company_telephone);
Validate_company_telephone.add( Validate.Presence );
Validate_company_telephone.add( Validate.Format, { pattern: /[^0-9\s-]+/, negate:true } );

Validate_company_name = new LiveValidation('company_name');
validate_objects.push(Validate_company_name);
Validate_company_name.add( Validate.Presence );
Validate_company_name.add( Validate.Format, { pattern: /[A-Za-z0-9-]+/ } );

Validate_company_tax_id = new LiveValidation('company_tax_id');
validate_objects.push(Validate_company_tax_id);                
Validate_company_tax_id.add( Validate.Presence );

Validate_company_contact_person_firstname = new LiveValidation('company_contact_person_firstname');
validate_objects.push(Validate_company_contact_person_firstname);
Validate_company_contact_person_firstname.add( Validate.Presence );
Validate_company_contact_person_firstname.add( Validate.Format, { pattern: /[A-Za-z0-9-]+/ } );

Validate_company_contact_person_lastname = new LiveValidation('company_contact_person_lastname');
validate_objects.push(Validate_company_contact_person_lastname);
Validate_company_contact_person_lastname.add( Validate.Presence );
Validate_company_contact_person_lastname.add( Validate.Format, { pattern: /[A-Za-z0-9-]+/ } );

Validate_company_email = new LiveValidation('company_email_address');
validate_objects.push(Validate_company_email);                                   
Validate_company_email.add( Validate.Presence );
Validate_company_email.add( Validate.Email );
//Validate_company_email.add( Validate.Confirmation, { match: 'company_email_address_repeat' } );

Validate_company_email_repeat = new LiveValidation('company_email_address_repeat');
validate_objects.push(Validate_company_email_repeat);                                          
Validate_company_email_repeat.add( Validate.Presence );
Validate_company_email_repeat.add( Validate.Email );
Validate_company_email_repeat.add( Validate.Confirmation, { match: 'company_email_address' } );

Validate_company_postcode = new LiveValidation('company_postcode');
validate_objects.push(Validate_company_postcode); 
Validate_company_postcode.add( Validate.Presence );
Validate_company_postcode.add( Validate.Format, { pattern: /[0-9-]{4}/ } );

Validate_company_city = new LiveValidation('company_create_city');
validate_objects.push(Validate_company_city); 
Validate_company_city.add( Validate.Presence );
Validate_company_city.add( Validate.Format, { pattern: /[A-Za-z0-9-]+/ } );

//Validate every field.
function validateAll(){
    LiveValidation.massValidate(validate_objects);
}

//Add event to phone lookup
$('submit_ajax_phone_lookup').observe('click',function(){getInfoFromLookup($('telephone').value,'person')});
$('submit_ajax_phone_lookup_company').observe('click',function(){getInfoFromLookup($('company_telephone').value,'company')});


//Add city lookup to zip
$('postcode').observe('change',function(){checkPostalCode(this.value); getCityFromPostalCode(this.value,'create_city');});

//Add city lookup to company zip 
$('company_postcode').observe('change',function(){checkPostalCode(this.value); getCityFromPostalCode(this.value,'company_create_city');});


//Run validation on page load. MOL - We run validateAll() after we do the shop specific length check
//validateAll();

//Validates a single field
function validate(field) {                                  
    var id = field.id;
    var errorSpan = document.getElementsByClassName(id)[0];
    try {
        switch(id) {
            case 'firstname':
                valid = LiveValidation.massValidate([Validate_firstname]);                       
                break;
            case 'lastname':
                valid = LiveValidation.massValidate([Validate_lastname]);                        
                break;
            case 'email_address':
                valid = LiveValidation.massValidate([Validate_email]);
                if($('email_address_repeat').value == '') {
                    valid = true;
                }                   
                break;
            case 'email_address_repeat':
                valid = LiveValidation.massValidate([ Validate_email_repeat]);            
                if($('email_address').value == '') {
                    valid = true;
                }
                break;
            case 'street_address':
                valid = LiveValidation.massValidate([Validate_street_address]);                  
                break;
            case 'postcode':
                valid = LiveValidation.massValidate([Validate_postcode]);                        
                break;
            case 'create_city':
                valid = LiveValidation.massValidate([Validate_city]);                            
                break;
            case 'password':
                valid = LiveValidation.massValidate([Validate_password]);
                if($('password_confirmation').value == '') {
                    valid = true;
                }
                break;
            case 'password_confirmation':
                valid = LiveValidation.massValidate([Validate_password_confirmation, Validate_password]);
                if($('password').value == '') {
                    valid = true;
                }                    
                break;
            
            //Company specific    
            case 'company_name':
                valid = LiveValidation.massValidate([Validate_company_name]);                         
                break;
            case 'company_contact_person_firstname':
                valid = LiveValidation.massValidate([Validate_company_contact_person_firstname]);
                break;
            case 'company_contact_person_lastname':
                valid = LiveValidation.massValidate([Validate_company_contact_person_lastname]);
                break;
            case 'company_email_address':
                valid = LiveValidation.massValidate([Validate_company_email]);
                break;
            case 'company_email_address_repeat':
                valid = LiveValidation.massValidate([Validate_company_email_repeat]);
                break;
            case 'company_street_address':
                valid = LiveValidation.massValidate([Validate_company_street_address]);
                break;
            case 'company_postcode':
                valid = LiveValidation.massValidate([Validate_company_postcode]);
                break;
            case 'company_create_city':
                valid = LiveValidation.massValidate([Validate_company_city]);
                break;
            case 'company_password':
                valid = LiveValidation.massValidate([Validate_company_password]);
                break;
            case 'company_password_confirmation':
                valid = LiveValidation.massValidate([Validate_company_password_confirmation]);
                break;
            case 'company_tax_id':
                valid = LiveValidation.massValidate([Validate_company_tax_id]);
                break;
            
            case 'telephone':
                valid = LiveValidation.massValidate([Validate_telephone]);
                break;
                
            case 'company_telephone':
                valid = LiveValidation.massValidate([Validate_company_telephone]);
                break;
            
            default:
                break;
        }
        if(!valid && field.value != '') {
            errorSpan.style.display = 'inline';
        } else {
            errorSpan.style.display = 'none';
        }
    } catch(E) {}
}
  
//If the continue button is pressed with invalid fields we stop and put messages in
// 0 = person
// 1 = company
function errorMessages(type) {
    switch(type) {
        case 0:
            person = true;
            company = false;
            break;
        case 1:
            person = false;
            company = true;
            break;
        default:
            person = false;
            company = false;
            break;
    }
    
    var errorSpans = document.getElementsByClassName('errormessage');
    var valid_all = true;
    for(i in errorSpans) {
        if(undefined != errorSpans[i].className) {
            var classname = errorSpans[i].className.split(' ')[1];
            var valid = false;
            try {
                switch(classname) {
                    case 'telephone':
                        valid = LiveValidation.massValidate([Validate_telephone]) || company;
                        break;
                    case 'company_telephone':
                        valid = LiveValidation.massValidate([Validate_company_telephone]) || person;
                        break;
                    
                    //Person specific    
                    case 'firstname':
                        valid = LiveValidation.massValidate([Validate_firstname]) || company;                       
                        break;
                    case 'lastname':
                        valid = LiveValidation.massValidate([Validate_lastname]) || company;                        
                        break;
                    case 'email_address':
                        valid = LiveValidation.massValidate([Validate_email]) || company;                   
                        break;
                    case 'email_address_repeat':
                        valid = LiveValidation.massValidate([Validate_email_repeat]) || company;            
                        break;
                    case 'street_address':
                        valid = LiveValidation.massValidate([Validate_street_address]) || company;                  
                        break;
                    case 'postcode':
                        valid = LiveValidation.massValidate([Validate_postcode]) || company;                        
                        break;
                    case 'create_city':
                        valid = LiveValidation.massValidate([Validate_city]) || company;                            
                        break;
                    case 'password':
                        valid = LiveValidation.massValidate([Validate_password]) || company;                    
                        break;
                    case 'password_confirmation':
                        valid = LiveValidation.massValidate([Validate_password_confirmation]) || company;                    
                        break;    
                                            
                    //Company specific    
                    case 'company_name':
                        valid = LiveValidation.massValidate([Validate_company_name]) || person;                         
                        break;
                    case 'company_contact_person_firstname':
                        valid = LiveValidation.massValidate([Validate_company_contact_person_firstname]) || person;     
                        break;
                    case 'company_contact_person_lastname':
                        valid = LiveValidation.massValidate([Validate_company_contact_person_lastname]) || person;      
                        break;
                    case 'company_email_address':
                        valid = LiveValidation.massValidate([Validate_company_email]) || person;                        
                        break;
                    case 'company_email_address_repeat':
                        valid = LiveValidation.massValidate([Validate_company_email_repeat]) || person;                 
                        break;
                    case 'company_street_address':
                        valid = LiveValidation.massValidate([Validate_company_street_address]) || person;               
                        break;
                    case 'company_postcode':
                        valid = LiveValidation.massValidate([Validate_company_postcode]) || person;                     
                        break;
                    case 'company_create_city':
                        valid = LiveValidation.massValidate([Validate_company_city]) || person;                         
                        break;
                    case 'company_password_confirmation':
                        valid = LiveValidation.massValidate([Validate_company_password_confirmation]) || person;        
                        break;                                                                                                                                                                                   
                        
                    default:
                        valid = true;
                        break;
                }
                    
                valid_all = valid_all && valid;
                
                if(!valid) {
                    errorSpans[i].style.display = 'inline';
                } else {
                    errorSpans[i].style.display = 'none';
                }
            } catch(E) {
                return false;
            }
        }
    }
    
    return valid_all;
}

