//global variable
var new_form;

//set on change functionality
$(document).ready(function(){
    $("#selectform").change(changeFormType);
    
});

function changeFormType(){
    //define form
    var form = document.forms[0];
    //determine form to change to
    var x = form.job_type.selectedIndex;
    new_form = form.job_type.options[x].value;
   
    document.getElementById('form_type_hidden').value = new_form;
    switch (new_form){
        //change to IT form
        case "it":
            //personal details     
            //show or create necessary fields
            if (document.getElementById("fax_row")){
                showElement("fax_row");
            } else {
               createPersonalDetailsRow ("fax_row", "fax", "Fax", "phonecl_row", false);
            }                
            if (document.getElementById("phonewk_row")){
                showElement("phonewk_row");  
            } else {
                createPersonalDetailsRow ("phonewk_row", "phonewk", "Work Phone", "fax_row", false);
            }
            //change years label and create or show
            if (document.getElementById("exp_row")){
                showElement("exp_row");
                document.getElementById("exp_row").childNodes[0].childNodes[0].innerHTML = "Years of Professional IT Experience";
            } else {
                createPersonalDetailsRow ("exp_row", "exp", "Years of Professional IT Experience", "fax_row", true);
            }            
            
            //skills
            //hide skill sections from other forms
            if (document.getElementById("skills_research")){
                hideElement("skills_research");
            }
            if (document.getElementById("skills_artist")){
                hideElement("skills_artist");
            }
            //show or create it skills section
            if (document.getElementById("skills_it")){
                showElement("skills_it");
            } else {
                var it_skills = {
                    "management" : "Management",
                    "team-lead" : "Team Lead",
                    "admin" : "Administration",
                    "purchasing-receiving" : "Purchasing & Receiving",
                    "inventory-management" : "Inventory Management",
                    "data-wrangling" : "Render & Data Wrangling",
                    "desktop-support" : "Desktop Support",
                    "server-admin" : "Server Administration",
                    "ip-admin" : "IP Network Administration",
                    "db-admin" : "Database Administration",
                    "software-engineering" : "Software Engineering",
                    "pm" : "Project Management"
                };                
                createSkillsSection('skills_it', it_skills);
            }
                        
            //software experience
            //hide software sections from other forms
            if (document.getElementById("software_research")){
                hideElement("software_research");
            }
            if (document.getElementById("software_artist")){
                hideElement("software_artist");
            }
            //show or create it software section
            if (document.getElementById("software_it")){
                showElement("software_it");
            } else {
                var it_software = {
                    "osx" : "Mac OSX",
                    "windows" : "Windows",
                    "linux" : "Linux",
                    "python" : "Python",
                    "perl" : "Perl",
                    "c" : "C",
                    "cplusplus" : "C++",
                    "mysql" : "MySQL",
                    "filemakerpro" : "FileMaker Pro",
                    "office" : "Microsoft / Open Office",
                    "maya" : "Maya",
                    "shake" : "Shake / Nuke",
                    "renderman" : "Renderman"
                };
                createSoftwareSection("software_it", it_software);
            }
                        
            //experience
            //change text on media row
            document.getElementById("experience_featurefilm").childNodes[0].childNodes[0].innerHTML = "Media and Entertainment Experience";
            document.getElementById("experience_featurefilm").childNodes[0].childNodes[2].innerHTML = "What projects have you worked on, and who were you working for?";
            //hide unnecessary fields
            if(document.getElementById('experience_publications')){
                hideElement("experience_publications");
            }
            if(document.getElementById('experience_researchexp')){
                hideElement("experience_researchexp");
            }
            if(document.getElementById("experience_devexp")){
                hideElement("experience_devexp");
            }
            if(document.getElementById("experience_onsetexp")){
                hideElement("experience_onsetexp");
            }
            if(document.getElementById("experience_softwareexp")){
                hideElement("experience_softwareexp");
            }
            //create or show necessary fields
            if(document.getElementById("experience_skills")){
                showElement("experience_skills");
            } else {
                createExperienceRow("skills", "experience_featurefilm", "Unique Skills", "Tell us what sets you apart from your peers.");
            }
            if(document.getElementById("experience_education")){
                showElement("experience_education");
            } else {
                createExperienceRow("education", "experience_skills", "Academic Qualifications", "Where did you study and what qualifications do you hold?");
            }
            if(document.getElementById("experience_interests")){
                showElement("experience_interests");
            } else {
                createExperienceRow("interests", "experience_education", "Personal Interests", "");
            }
        break;

        //change to Research form
        case "research":
            //personal details
            //hide unnecessary rows
            hideElement('exp_row');
            //display or create necessary fields
            if (document.getElementById("fax_row")){
                showElement("fax_row");   
            } else {
                createPersonalDetailsRow ("fax_row", "fax", "Fax", "phonecl_row", false);
            }
            if (document.getElementById("phonewk_row")){
                showElement("phonewk_row");   
            } else {
                createPersonalDetailsRow ("phonewk_row", "phonewk", "Work Phone", "fax_row", false);
            }
            
            //skills
            //hide skill sections for other froms
            if (document.getElementById("skills_it")){
                hideElement("skills_it");
            }
            if (document.getElementById("skills_artist")){
                hideElement("skills_artist");
            }
            //show or create research skills section
            if (document.getElementById("skills_research")){
                showElement("skills_research");
            } else {
                var research_skills = {
                    "computer-graphics" : "Computer Graphics",
                    "computer-vision_image-processing" : "Computer Vision / Image Processing",
                    "mathematics" : "Mathematics",
                    "simulation" : "Physics Based Simulation",
                    "physics" : "Physics",
                    "statistics" : "Statistics",
                    "hci" : "Human Computer Interface",
                    "arts" : "Arts Background",
                    "electronics" : "Electronics",
                    "mechanics" : "Mechanics",
                    "image-capture" : "Image Capture",
                    "filmmaking" : "Film Making"
                };                
                createSkillsSection('skills_research', research_skills);
            }
            
            //software experience
            //hide software sections for other forms
            if (document.getElementById("software_it")){
                hideElement("software_it");
            }
            if (document.getElementById("software_artist")){
                hideElement("software_artist");
            }
            //show or create research software section
            if (document.getElementById("software_research")){
                showElement("software_research");
            } else {
                var research_software = {
                    "cplusplus" : "C++",
                    "java" : "Java",
                    "numerical" : "Numerical Programming", 
                    "hpc" : "High Performance Computing",
                    "boost" : "Boost Libraries",
                    "assembly" : "Assembly / Low Level Programming",
                    "matlab-mathematica" : "Matlab / Mathematica / Maple",
                    "python-ruby" : "Python / Ruby",
	                "opengl" : "OpenGL / DirectX",
                    "cuda-opencl" : "CUDA / OpenCL",
                    "sl" : "RSL / GLSL / HSLSL / Cg"
                };
                createSoftwareSection("software_research", research_software);
            }
            
            //experience
            //change text on media row
            document.getElementById("experience_featurefilm").childNodes[0].childNodes[0].innerHTML = "Feature Film Experience";
            document.getElementById("experience_featurefilm").childNodes[0].childNodes[2].innerHTML = "Please give any details of feature film experience, and list any credits that you have.";
            //create or show necessary fields
            if(document.getElementById('experience_publications')){
                showElement('experience_publications');
            } else {
                createExperienceRow("publications", "experience_education", "Publications", "What scientific or related publications have you authored?");
            }
            if(document.getElementById('experience_researchexp')){
                showElement('experience_researchexp');
            } else {
                createExperienceRow("researchexp", "experience_publications", "Research Experience", "How many years of experience in research do you have? Please provide details on work areas and achievements.");
            }
            if(document.getElementById('experience_devexp')){
                showElement('experience_devexp');
            } else {
                createExperienceRow("devexp", "experience_researchexp", "Development Experience", "How many years of experience in development do you have? Please provide details on work areas and achievements.");
            }            
            if(document.getElementById("experience_skills")){
                showElement("experience_skills");
            } else {
                createExperienceRow("skills", "experience_featurefilm", "Unique Skills", "Tell us what sets you apart from your peers.");
            }
            if(document.getElementById("experience_education")){
                showElement("experience_education");
            } else {
                createExperienceRow("education", "experience_skills", "Academic Qualifications", "Where did you study and what qualifications do you hold?");
            }
            if(document.getElementById("experience_interests")){
                showElement("experience_interests");
            } else {
                createExperienceRow("interests", "experience_education", "Personal Interests", "");
            }  
            //hide unnecessary fields
            if(document.getElementById('experience_onsetexp')){
                hideElement("experience_onsetexp");
            }
            if(document.getElementById('experience_softwareexp')){
                hideElement("experience_softwareexp");
            }    

        break;
        
        //change to production form
        case "production":
            //personal details
            //hide unneccesary rows
            if(document.getElementById('phonewk_row')){
                hideElement('phonewk_row');
            }
            if(document.getElementById('fax_row')){
                hideElement('fax_row');
            }
            //create or show necessary fields
            //change label on years row
            if (document.getElementById("exp_row")){
                showElement("exp_row");
                document.getElementById("exp_row").childNodes[0].childNodes[0].innerHTML = "Years of Production Experience";
            } else {
                createPersonalDetailsRow ("exp_row", "exp", "Years of Production Experience", "phonecl_row", true);
            } 
            
            //skills
            //hide skill sections for other forms
            if (document.getElementById('skills_it')){
                hideElement('skills_it');
            }
            if (document.getElementById('skills_research')){
                hideElement('skills_research');
            }
            if (document.getElementById('skills_artist')){
                hideElement('skills_artist');
            }
            
            //software
            //hide software sections for other froms
            if (document.getElementById('software_it')){
                hideElement('software_it');
            }
            if (document.getElementById('software_research')){
                hideElement('software_research');
            }
            if (document.getElementById('software_artist')){
                hideElement('software_artist');
            }
            
            //experience
            //change text on media row
            document.getElementById("experience_featurefilm").childNodes[0].childNodes[0].innerHTML = "Feature Film Experience";
            document.getElementById("experience_featurefilm").childNodes[0].childNodes[2].innerHTML = "Please give any details of feature film experience, and list any credits that you have.";
            //hide unnecessary fields
            if (document.getElementById('experience_skills')){
                hideElement('experience_skills');
            }
            if (document.getElementById('experience_education')){
                hideElement('experience_education');
            }
            if (document.getElementById('experience_interests')){
                hideElement('experience_interests');
            }
            if (document.getElementById('experience_publications')){
                hideElement('experience_publications');
            }
            if (document.getElementById('experience_devexp')){
                hideElement('experience_devexp');
            }
            if (document.getElementById('experience_researchexp')){
                hideElement('experience_researchexp');
            }
            //create or show necessary fields
            if(document.getElementById("experience_onsetexp")){
                showElement("experience_onsetexp");
            } else {
                createExperienceRow("onsetexp", "experience_featurefilm", "On-set Experience", "Do you have any on-set experience? Please describe.");
            }
            if(document.getElementById("experience_softwareexp")){
                showElement("experience_softwareexp");
            } else {
                createExperienceRow("softwareexp", "experience_onsetexp", "Software Experience", "");
            }  
        break;
        
        //change to Artist form
        case "artist":
            //personal details
            //hide unnecessay rows
            if(document.getElementById('phonewk_row')){
                hideElement('phonewk_row');
            }
            if(document.getElementById('fax_row')){
                hideElement('fax_row');
            }
            //create or show necessary fields
            //change label on years row
            if (document.getElementById("exp_row")){
                showElement("exp_row");
                document.getElementById("exp_row").childNodes[0].childNodes[0].innerHTML = "Years of Professional CG Experience";
            } else {
                createPersonalDetailsRow ("exp_row", "exp", "Years of Professional CG Experience", "phonecl_row", true);
            } 
            
            //skills
            //hide skills sections for other forms
            if (document.getElementById("skills_it")){
                hideElement("skills_it");
            }
            if (document.getElementById("skills_research")){
                hideElement("skills_research");
            }
            //show or create artist skills section
            if (document.getElementById("skills_artist")){
                showElement("skills_artist");
            } else {
                var artist_skills = {
                    "cg-supervisor" : "CG Supervisor",
                    "animation-supervisor" : "Animation Supervisor",
                    "modeller" : "Modeller",
                    "shader-writer" : "Shader Writer",
                    "texture-painter" : "Texture Painter",
                    "technical-director" : "Technical Director",
                    "keyframe-animator" : "Keyframe Animator",
                    "matchmover" : "Matchmover",
                    "motion-editor" : "Motion Editor",
                    "creature-td" : "Creature TD",
                    "digital-paint-artist" : "Digital Paint Artist",
                    "software-engineer" : "Software Engineer",
                    "compositor" : "Compositor",
                    "rotoscope" : "Rotoscope Artist"
                };                
                createSkillsSection('skills_artist', artist_skills);
            }
            
            //software experience
            //hide software sections for other forms
            if (document.getElementById("software_it")){
                hideElement("software_it");
            }
            if (document.getElementById("software_research")){
                hideElement("software_research");
            }
            //create or show artist software section
            if (document.getElementById("software_artist")){
                showElement("software_artist");
            } else {
                var artist_software = {
                    "renderman" : "RenderMan",
                    "flame-inferno" : "Flame/Inferno",
                    "maya" : "Maya",
                    "shake" : "Shake",
                    "nuke" : "Nuke",
                    "3de" : "3DE",
                    "linux" : "Linux",
                    "mudbox" : "MudBox",
                    "zbrush" : "Z-brush",
                    "motionbuilder" : "Motion Builder",
                    "silhouette" : "Silhouette",
	                "vue" : "Vue"
                };
                createSoftwareSection("software_artist", artist_software);
            }
            
            //experience
            //change text on media row
            document.getElementById("experience_featurefilm").childNodes[0].childNodes[0].innerHTML = "Feature Film Experience";
            document.getElementById("experience_featurefilm").childNodes[0].childNodes[2].innerHTML = "Please give any details of feature film experience, and list any credits that you have.";
            //hide unnecessary rows
            if(document.getElementById('experience_publications')){
                hideElement("experience_publications");
            }
            if(document.getElementById('experience_researchexp')){
                hideElement("experience_researchexp");
            }
            if(document.getElementById("experience_devexp")){
                hideElement("experience_devexp");
            }
            if(document.getElementById("experience_onsetexp")){
                hideElement("experience_onsetexp");
            }
            if(document.getElementById("experience_softwareexp")){
                hideElement("experience_softwareexp");
            }
            //create or show all necessary rows
            if(document.getElementById("experience_skills")){
                showElement("experience_skills");
            } else {
                createExperienceRow("skills", "experience_featurefilm", "Unique Skills", "Tell us what sets you apart from your peers.");
            }
            if(document.getElementById("experience_education")){
                showElement("experience_education");
            } else {
                createExperienceRow("education", "experience_skills", "Academic Qualifications", "Where did you study and what qualifications do you hold?");
            }
            if(document.getElementById("experience_interests")){
                showElement("experience_interests");
            } else {
                createExperienceRow("interests", "experience_education", "Personal Interests", "");
            }
            
        break;
    }    
}

//Displays the element
function showElement(id){
    document.getElementById(id).style.display = 'block';
}

//Hides the element
function hideElement(id){
    document.getElementById(id).style.display = 'none';
}

//Creates a single row for the personal details section
function createPersonalDetailsRow (row_id, field_id, label_name, insert_after, required){
    //row
    var div_row = $(document.createElement('div')).
        addClass('row').
        attr('id', row_id).
        insertAfter($(document.getElementById(insert_after)));                 
        //label
        var div_label = $(document.createElement('div')).
            addClass('label-block').
            appendTo($(div_row));
            var label = $(document.createElement('label')).
                attr('for', field_id).
                appendTo($(div_label)).
                    text(label_name);                      
        //field
        var div_input = $(document.createElement('div')).
            addClass('input-block').
            appendTo($(div_row));
            var input = $(document.createElement('input')).
                addClass('text').
                attr({
                    name : field_id,
                    id : field_id,
                    value : ''
                }).
                appendTo($(div_input));
        //required 
        if (required == true){
            var div_error = $(document.createElement('div')).
                addClass('error-block').
                appendTo($(div_row));
                var error = $(document.createElement('span')).
                    addClass('required').
                    appendTo($(div_error))
                        .text('*');
        }   
    
}

//Creates a skill section 
function createSkillsSection(section_id, skill_array){
    //fieldset
    var fieldset = $(document.createElement('fieldset')).
        attr('id', section_id).
        insertAfter($("#personal_details")); 
        //row               
        var row_div = $(document.createElement('div')).
            addClass('row').
            appendTo($(fieldset));  
            //label                  
            var label_div = $(document.createElement('div')).
                addClass('label-block').
                appendTo($(row_div)).
                    html("Skills<br />");
                var span = document.createElement("span");
                document.getElementById(section_id).childNodes[0].childNodes[0].appendChild(span);
                var span = $(document.createElement('span')).
                    appendTo($(label_div)).
                        text("Please list only your primary skills.");
            //input
            var input_div = $(document.createElement('div')).
                addClass('input-block').
                appendTo($(row_div));
                var list = $(document.createElement('ul')).
                    addClass('skills').
                    appendTo($(input_div));
                    //parse through the array to create an element for each entry
                    for (skill in skill_array){
                        var item = $(document.createElement('li')).
                            appendTo($(list));
                            var item_input = $(document.createElement('input')).
                                attr({
                                    type : 'checkbox',
                                    name : skill,
                                    id : skill
                                }).
                                appendTo($(item));
                            var item_label = $(document.createElement('label')).
                                attr('for', skill).
                                appendTo($(item)).
                                    text(skill_array[skill]);
                    }
}

//create a software section
function createSoftwareSection(section_id, software_array){
    //create array for skill levels
    var level_array = new Array("None", "Familiar", "Proficient", "Expert");
    //fieldset
    var fieldset = $(document.createElement('fieldset')).
        attr('id', section_id).
        insertAfter(document.getElementById('personal_details').nextSibling);
        //row
        var row_div = $(document.createElement('div')).
            addClass('row').
            appendTo($(fieldset));
            //label
            var label_div = $(document.createElement('div')).
                addClass('label-block').
                appendTo($(row_div)).
                    html("Software Experience<br />");
                var span = $(document.createElement('span')).
                    appendTo($(label_div)).
                        text("Please state the number of years experience you have and self-assess your skill.");
            //input
            var input_div = $(document.createElement('div')).
                addClass('input-block').
                appendTo($(row_div));
                //parse through array and create a row for each entry
                for (software in software_array){
                    //label
                    var span_label = $(document.createElement('span')).
                        addClass('row-label').
                        appendTo($(input_div)).
                            text(software_array[software]);
                    var right_div = $(document.createElement('div')).
                        addClass('row-right').
                        attr('id', 'row-'+software).
                        appendTo($(input_div)).
                            text("Experience: ");
                        var experience_input = $(document.createElement('input')).
                            addClass('small').
                            attr({
                                type : 'text',
                                name : software+'-years'
                            }).
                            appendTo($(right_div));
                        $(right_div).append("Skill: ");
                        for (var j=0; j<4; j++){
                            var radio_label = $(document.createElement('label')).
                                addClass('radio').
                                appendTo($(right_div));
                                var input_radio = $(document.createElement('input')).
                                    addClass('radio').
                                    attr({
                                        type : 'radio',
                                        name : software+'-skill',
                                        value : j
                                    }).
                                    appendTo($(radio_label));
                                    if (j == 0){
                                        $(input_radio).attr('checked', 'checked');
                                    }
                                var span_radio = $(document.createElement('span')).
                                    appendTo($(radio_label)).
                                        text(" "+level_array[j]+" ");
                        }
                }
                var other_span = $(document.createElement('span')).
                    addClass('row-label').
                    appendTo($(input_div)).
                        text("Other");
                var other_div = $(document.createElement('div')).
                    addClass('row-right').
                    attr('id', 'row-other').
                    appendTo($(input_div));
                    var textarea = $(document.createElement('textarea')).
                        attr({
                            style : 'width:400px',
                            name : 'software-other-'+new_form
                        }).
                        appendTo($(other_div))
}

//creates a single row in the experience section
function createExperienceRow(section_id, insert_after, title, description){
    //row
    var row_div = $(document.createElement('div')).
        addClass('row').
        attr('id', 'experience_'+section_id).
        insertAfter($(document.getElementById(insert_after)));
        //label
        var label_div = $(document.createElement('div')).
            addClass('label-block').
            appendTo($(row_div));
            var label = $(document.createElement('label')).
                attr('for', section_id).
                appendTo($(label_div)).
                    html(title+"<br />");
            var span = $(document.createElement('span')).
                appendTo($(label_div)).
                    text(description);
        //input
        var input_div = $(document.createElement('div')).
            addClass('input-block').
            appendTo($(row_div));
            var textarea = $(document.createElement('textarea')).
                addClass('large').
                attr({
                    rows : '4',
                    cols : '40',
                    name : section_id,
                    id : section_id
                }).
                appendTo($(input_div));
}   

