$(document).ready(function(event){ 
    if($('form input[type="file"]').is(':hidden')){
        $('form').attr('enctype','multipart/form-data');
    }
      
    $('input,textarea').each(function(event){
        var $field      = $(this);
        var $field_name = $(this).attr('name');
        var $pseudo     = $(this).attr('pseudo');
        
        if($pseudo){
            var $label_value= $field.attr('label');
            $field.val($label_value);
            
            var $select     = $('ul[input="'+$field_name+'"]');
            var $selected   = false;
            
            $field.focus(function(event){
                $('div[field="'+$field_name+'"]').css('height',140);
                $('div[field="'+$field_name+'"] span').animate({'height':128},800);
                
                var $value  = $field.val();
            
                if($selected){ $select.parent().show(); }
                else { $select.jScrollPane().show(); $selected = true; }
                
                if($value && $value != $label_value){ pass_field($field); } else { $value = $label_value; fail_field($field); };
                $('blockquote[info="'+$field_name+'"]').show();
            });
            
            $field.blur(function(event){
                setTimeout(function(event){
                    if($selected){ $select.parent().hide(); }
                    else { 
                        $select.hide(); 
                        if(!$select.parent().is('div[field]')){ 
                            $select.parent().hide(); 
                        } 
                    }
                    
                    $('div[field="'+$field_name+'"] span').animate({'height':25},600);
                    $('div[field="'+$field_name+'"]').css('height',37);
                    
                    var $value  = $field.val();
            
                    if($value && $value != $label_value){ pass_field($field); } else { $value = $label_value; fail_field($field); };
                    $('blockquote[info="'+$field_name+'"]').hide();
                },300);
            });
        } else {
            $field.focus(function(event){
                $('blockquote[info="'+$field_name+'"]').show();
            });
            
            $field.blur(function(event){
                coerce_fields($field_name);
                $('blockquote[info="'+$field_name+'"]').hide();
            });
        }
    });
    
    
    $('form ul a').click(function(event){   
        var $field_name = $(this).parent().attr('input');
        var $new_value  = $(this).attr('value');
        
        $('input[name="'+$field_name+'"]').val($new_value);
    });
    
    
    $('form ol a').each(function(event){
        var $checkbox   = $(this);
        var $field_name = $checkbox.parent().attr('input');
        var $input      = $('input[name="'+$field_name+'"]');
        
        $checkbox.mouseover(function(event){ $('blockquote[info="'+$field_name+'"]').show(); });
        $checkbox.mouseout(function(event){  $('blockquote[info="'+$field_name+'"]').hide(); });
        $checkbox.toggle(
            function(event){ 
                $checkbox.attr('checked','set'); 
                
                var $value      = $input.val();
                var $new_value  = $checkbox.attr('value');
                
                $new_value      = $value.replace($new_value) + $new_value;
                $('input[name="'+$field_name+'"]').val($new_value);
                
                coerce_fields($field_name);
            },
            function(event){ 
                $checkbox.removeAttr('checked'); 
                
                var $value      = $input.val();
                var $old_value  = $checkbox.attr('value');
                
                var $new_value  = $value.replace($old_value);
                if($new_value  == 'undefined'){ $new_value = ''; }
                
                $('input[name="'+$field_name+'"]').val($new_value);
                
                coerce_fields($field_name);
            }    
        );
    });
    
    
    $('form dl a').each(function(event){
        var $radio      = $(this);
        var $field_name = $radio.parent().attr('input');
        var $input      = $('input[name="'+$field_name+'"]');
        var $radio_set  = $('dl[input="'+$field_name+'"] a');
        
        $radio.mouseover(function(event){ $('blockquote[info="'+$field_name+'"]').show(); });
        $radio.mouseout(function(event){  $('blockquote[info="'+$field_name+'"]').hide(); });
        $radio.click(function(event){ 
            $radio_set.removeAttr('checked');
            $radio.attr('checked','set'); 
            
            var $new_value  = $radio.attr('value');
            $('input[name="'+$field_name+'"]').val($new_value);
            
            coerce_fields($field_name);
        });
    });
    
    
    $('form li').each(function(event){
        var $upload_button  = $(this);
        var $field_name     = $upload_button.attr('input');
        var $input          = $('input[name="'+$field_name+'"]');
        
        $upload_button.mouseover(function(event){ $('blockquote[info="'+$field_name+'"]').show(); });
        $upload_button.mouseout(function(event){  $('blockquote[info="'+$field_name+'"]').hide(); });
        
        $input.mouseover(function(event){ $('blockquote[info="'+$field_name+'"]').show(); });
        $input.mouseout(function(event){  $('blockquote[info="'+$field_name+'"]').hide(); });
        $input.change(function(event){
            $upload_button.removeClass().addClass('valid');
            $upload_button.text($upload_button.attr('modify'));
            
            coerce_fields($field_name);
        });        
    });
    
    
    $('a[type="request"]').click(function(event){
        var $submit_button  = $(this);
        var $form_name      = $submit_button.parents('div[submit]:eq(0)').attr('submit');
        
        validate_form($form_name);
    });
});




    function coerce_fields(field_name){
        var $field_name = field_name;
        var $field      = $('[name="'+$field_name+'"]');
        var $parent     = $field.parent().parent().attr('field');        
        var $required   = $('div[field="'+$parent+'"] span kbd').attr('type');
        var $requisition= $('div[field="'+$parent+'"] span kbd').attr('requisition');
        
        if($required){ validate_field($field_name,$requisition); }
    }
    

    function pass_field(field_name){
        var $field      = field_name;
        var $name       = $field.attr('name');
        var $parent     = $field.parent().parent().attr('field');
        var $required   = $('div[field="'+$parent+'"] span kbd');
        var $info       = $('blockquote[info="'+$name+'"]');
        
        $required.removeClass('invalid').addClass('valid');
        $field.removeClass('invalid').addClass('valid');
        $info.removeClass('invalid').addClass('valid');
    }
    
    function fail_field(field_name){
        var $field      = field_name;
        var $name       = $field.attr('name');
        var $parent     = $field.parent().parent().attr('field');
        var $required   = $('div[field="'+$parent+'"] span kbd');
        var $info       = $('blockquote[info="'+$name+'"]');
        
        $required.removeClass('valid').addClass('invalid');
        $field.removeClass('valid').addClass('invalid');
        $info.removeClass('valid').addClass('invalid');
    }
    
    
    function validate_field(field_name,field_requisition){
        var $field_name = field_name;
        var $field      = $('[name="'+$field_name+'"]');
        var $value      = $field.val();
        var $requisition= field_requisition;
        
        switch($requisition){
            case 'phone'    :   if($value.length >= 10 && /^[0-9/-]+$/.test($value)){ pass_field($field); } else { fail_field($field); } break;
            
            case 'zip_code' :   if($value.length == 6 || $(this).val().length == 7){
                                    $field.val($value.replace(/ /g,''));
                                    if(!/^[0-9a-zA-Z]+$/.test($value)){ fail_field($field); } else { pass_field($field); }
                                } else if($value.length == 5){
                                    if(!/^[0-9]+$/.test($value)){ fail_field($field); } else { pass_field($field); }
                                } else if($value.length == 10){
                                    var pass_zip= '0123456789-';
                                    var hyphens = 0;
                                    
                                    for(var i=0; i<$value.length; i++){
                                    	ext_zip = '' + $value.substring(i,i+1);
                                    	if(ext_zip == '-') hyphens++;
                                    	if(pass_zip.indexOf(ext_zip) == '-1'){ fail_field($field); }
                                    	if((hyphens > 1) || (($value.length == 10) && ''+$value.charAt(5) != '-')){ 
                                    		fail_field($field);
                                    	} else {
                                    		pass_field($field);
                                    	}
                                    }
                                } else { fail_field($field); }
                                
                                break;
                                
            case 'email'    :   if(!/.+@.+\.[a-zA-Z]{2,4}$/.test($value)){ fail_field($field); } else { pass_field($field); } break;
            
            case 'email_to' :   if(!/.+@.+\.[a-zA-Z]{2,4}$/.test($value)){ fail_field($field); } else { pass_field($field); } break;
            
            default         :   if($value){ pass_field($field); } else { fail_field($field); }
        }
    }
    
    
    function validate_form(form_name){
        var $form_name      = form_name;   
        var $errors         = 0;
        
        var $submit_field = 'div[submit="'+$form_name+'"]';
        $($submit_field+' blockquote').removeClass('invalid');
        
        $('form#'+$form_name+' :input').blur();
        
        
        if($('form#'+$form_name+' input[name="antispam"]').val() == ''){        
            setTimeout(function(event){
                $('form#'+$form_name+' blockquote.invalid').show();
                
                $('form#'+$form_name+' blockquote.invalid').each(function(event){
                    $errors++;
                });
                
                if($errors){ 
                    $($submit_field+' a').addClass('invalid');
                    $($submit_field+' blockquote').addClass('invalid');
                    $($submit_field+' blockquote').show(); 
                    
                    if($errors > 1){ alert('There are '+$errors+' errors with your submission. Please review and re-submit.'); }
                    else { alert('There is '+$errors+' error with your submission. Please review and re-submit.'); }
                } else { 
                    $('form#'+$form_name).submit(); 
                }
            }, 1000);
        }
    }
