//Global var declaration
var edu = new Array();
var edu_delete = new Array();
var edu_maxrow = 7;
var edu_active_row = -1;
var exp = new Array();
var exp_delete = new Array();
var exp_maxrow = 7;
var exp_active_row = -1;

function validateForm()
{    
    validator = new CustomValidator();
    validator.AddValidator("applicant_name","required","Full name cannot be obmitted");
    validator.AddValidator("applicant_name","alpha","Full name can contain character only");
    validator.AddValidator("per_addr","required","Permanent address cannot be obmitted");
    validator.AddValidator("cur_addr","required","Current address cannot be obmitted");
    validator.AddValidator("phone_number","required","Phone number cannot be obmitted");
    validator.AddValidator("phone_number","number","Phone number must a number");
    validator.AddValidator("email_addr","required","Email address cannot be obmitted");
    validator.AddValidator("email_addr","email","Please give a proper email address");
    validator.AddValidator("position","required","Position Sought cannot be obmitted");
    validator.AddValidator("salary","required","Expected salary cannot be obmitted");   
    validator.AddValidator("salary","number","Salary must be a number");
    if (!validator.DoValidate())
    {
        return validator.error_hash;
    }
    return false;    
}

function compare(value1, value2){
    return value2 - value1;
}

function filterDelete()
{
    edu_delete.sort(compare);
    exp_delete.sort(compare);       
    
    if (edu_delete.size()>0)
    {
        new_edu = new Array();
        while (edu_delete.size()>0)
        {
            item = edu_delete[0];
            while (edu.size()> (item+1)*4)
            {
                new_edu.push(edu.pop());
            }
            edu_delete.shift();
            edu.pop();edu.pop();edu.pop();edu.pop();
        }
        while (edu.size()>0)
        {
            new_edu.push(edu.pop());
        }
        edu = new_edu.reverse();
    }
    
    if (exp_delete.size()>0)
    {
        new_exp = new Array();
        while (exp_delete.size()>0)
        {
            item = exp_delete[0];
            while (exp.size()> (item+1)*5)
            {
                new_exp.push(exp.pop());
            }
            exp_delete.shift();
            exp.pop();exp.pop();exp.pop();exp.pop();exp.pop();
        }
        while (exp.size()>0)
        {
            new_exp.push(exp.pop());
        }
        exp = new_exp.reverse();
    }
}

function submitForm()
{
    error = validateForm();
//    if (error) 
//    {        
//        errorString = error.toString();
//        errorString = errorString.replace(/,/g,"\n"); 
//        alert(errorString);
//    }
//    else
//    {
        $('formSubmitBtn').disabled = true;
        $('waiting_bar').style.display = "";
        
        //prepare information
        filterDelete();
        callAJAX('xoad_handler','processApplicationForm', $H({applicant_name:   $('applicant_name').value,
                                                              gender:           $('gender').value,
                                                              image:            $('file_name').value,
                                                              cur_addr:         $('cur_addr').value,
                                                              per_addr:         $('per_addr').value,
                                                              email_addr:       $('email_addr').value,
                                                              phone_number:     $('phone_number').value,
                                                              position:         $('position').value,
                                                              employed:         $('employed').value,
                                                              salary:           $('salary').value,
                                                              day_apply:        $('date_apply').value,
                                                              day_available:    $('date_available').value,
                                                              relevant_skill:   $('relevant_skill').value,
                                                              edu:              edu.toString(), 
                                                              exp:              exp.toString()}), showResult_callback);
//    }
}

function showResult_callback(result){
	if (result!="OK")
	{
		$('waiting_bar').style.display = "none";
		$('formSubmitBtn').disabled = false;
		error = result.replace(/,/g,"\n"); 
	    alert(error);
	}
	else
	{
	    $('main_content').innerHTML = '<br /><br /><h3 style="text-align:center">Your application has been submitted. Thank you.</h3>';
	}
}

function clearEducation()
{
    $('edu_name').value     = "";
    $('edu_degree').value   = "";
    $('edu_duration').value = "";
    $('edu_major').value    = "";
    edu_active_row = -1;
}

function setCellAttribute(cell,width,value)
{
    cell.setAttribute("width",width);
    cell.setAttribute("align","center");
    cell.setAttribute("class","table_text");
    cell.innerHTML = value;
}

function addEducation() 
{
    if ((edu.size() / 4) <= edu_maxrow)
    {
        row_id = edu.size() / 4;
        name     = $('edu_name').value;
        degree   = $('edu_degree').value;
        duration = $('edu_duration').value;
        major    = $('edu_major').value;
        
        edu.push(name);
        edu.push(degree);
        edu.push(duration);
        edu.push(major);
        
        new_row = document.createElement("tr");
        new_row.setAttribute("id",'education_row' + row_id);
        
        new_cell = document.createElement("td");
        setCellAttribute(new_cell,"18%",name);
        new_row.appendChild(new_cell);
        
        new_cell = document.createElement("td");
        setCellAttribute(new_cell,"27%",degree);
        new_row.appendChild(new_cell);
        
        new_cell = document.createElement("td");
        setCellAttribute(new_cell,"18%",duration);
        new_row.appendChild(new_cell);
        
        new_cell = document.createElement("td");
        setCellAttribute(new_cell,"23%",major);
        new_row.appendChild(new_cell);
        
        new_cell = document.createElement("td");
        setCellAttribute(new_cell,"7%",'<a onclick="editEducation(' + row_id + ')" class="link_edit"></a>');
        new_row.appendChild(new_cell);
        
        new_cell = document.createElement("td");
        setCellAttribute(new_cell,"7%",'<a onclick="deleteEducation(' + row_id + ')" class="link_delete"></a>');
        new_row.appendChild(new_cell);
        
        $('edu_table').appendChild(new_row);
        clearEducation();
    }
    else
    {
        alert("Too many row");
    }
}

function editEducation(row_id)
{
    edu_index = row_id * 4;
    $('edu_name').value     = edu[edu_index];
    $('edu_degree').value   = edu[edu_index+1];
    $('edu_duration').value = edu[edu_index+2];
    $('edu_major').value    = edu[edu_index+3];
    edu_active_row = row_id;
}

function saveEducation()
{
    if (edu_active_row>=0)
    {       
        row_name = 'education_row' + edu_active_row;
        child_array = $(row_name).getElementsByTagName('td');
	    child_array[0].innerHTML = $('edu_name').value;
	    child_array[1].innerHTML = $('edu_degree').value;
	    child_array[2].innerHTML = $('edu_duration').value;
	    child_array[3].innerHTML = $('edu_major').value;
	    
	    edu_index = edu_active_row * 4;
        edu[edu_index]      = $('edu_name').value;
        edu[edu_index+1]    = $('edu_degree').value;
        edu[edu_index+2]    = $('edu_duration').value;
        edu[edu_index+3]    = $('edu_major').value;
    }
    else
    {
        addEducation();
    }
}

function deleteEducation(row_id)
{
    row_name = "education_row" + row_id;
    $(row_name).style.display = "none";
    edu_delete.push(row_id);
    edu_maxrow++;
    edu_active_row = -1;
}

function clearExperience()
{
    $('exp_duration').value = "";
    $('exp_company').value = "";
    $('exp_location').value = "";
    $('exp_role').value = "";
    $('exp_task').value = "";
    exp_active_row = -1;
}

function addExperience()
{
    row_id = exp.size() / 5;
    duration = $('exp_duration').value;
    company  = $('exp_company').value;
    place = $('exp_location').value;
    role     = $('exp_role').value;
    task     = $('exp_task').value;
    
    exp.push(duration);
    exp.push(company);
    exp.push(place);
    exp.push(role);
    exp.push(task);
    
    new_row = document.createElement("tr");
    new_row.setAttribute("id",'experience_row' + row_id);
    
    new_cell = document.createElement("td");
    setCellAttribute(new_cell,"16%",duration);
    new_row.appendChild(new_cell);
    
    new_cell = document.createElement("td");
    setCellAttribute(new_cell,"22%",company);
    new_row.appendChild(new_cell);
    
    new_cell = document.createElement("td");
    setCellAttribute(new_cell,"16%",place);
    new_row.appendChild(new_cell);
    
    new_cell = document.createElement("td");
    setCellAttribute(new_cell,"12%",role);
    new_row.appendChild(new_cell);
    
    new_cell = document.createElement("td");
    setCellAttribute(new_cell,"22%",task);
    new_row.appendChild(new_cell);
    
    new_cell = document.createElement("td");
    setCellAttribute(new_cell,"5%",'<a onclick="editExperience(' + row_id + ')" class="link_edit"></a>');
    new_row.appendChild(new_cell);
    
    new_cell = document.createElement("td");
    setCellAttribute(new_cell,"7%",'<a onclick="deleteExperience(' + row_id + ')" class="link_delete"></a>');
    new_row.appendChild(new_cell);
        
    $('exp_table').appendChild(new_row);
    clearExperience();
}

function editExperience(row_id)
{
    exp_index = row_id * 5;
    $('exp_duration').value = exp[exp_index];
    $('exp_company').value  = exp[exp_index+1];
    $('exp_location').value = exp[exp_index+2];
    $('exp_role').value     = exp[exp_index+3];
    $('exp_task').value     = exp[exp_index+4];
    exp_active_row = row_id;
}

function saveExperience(row_id)
{
    if (exp_active_row>=0)
    {       
        row_name = 'experience_row' + exp_active_row;
        child_array = $(row_name).getElementsByTagName('td');
	    child_array[0].innerHTML = $('exp_duration').value;
	    child_array[1].innerHTML = $('exp_company').value;
	    child_array[2].innerHTML = $('exp_location').value;
	    child_array[3].innerHTML = $('exp_role').value;
	    child_array[4].innerHTML = $('exp_task').value;
	    
	    exp_index = exp_active_row * 5;
        
        exp[exp_index]      = $('exp_duration').value;
        exp[exp_index+1]    = $('exp_company').value;
        exp[exp_index+2]    = $('exp_location').value;
        exp[exp_index+3]    = $('exp_role').value;
        exp[exp_index+4]    = $('exp_task').value;
    }
    else
    {
        addExperience();
    }
}

function deleteExperience(row_id)
{
    row_name = "experience_row" + row_id;
    $(row_name).style.display = "none";
    exp_delete.push(row_id);
    exp_maxrow++;
    exp_active_row = -1;
}
