/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
var SERVER_PATH = "Templates/career-search/search.php";

var formElement = null;
var errorElement = null;
var resultContainer = null;
var stateElement = null;
var sortingElement = null;
var searchForm = null;
var sortingBy = 'datePosted';
var loadingSnippet = "<span class='loading'><img src='Templates/shared/images/ajax-loader.gif' style='float:none; margin:0 0 -5px 0;'/> Loading...</span>";
var prevState = '';
var isFirstSearch = true;

function sortBy(criteria,element){
    if(criteria == sortingBy){
        return;
    }
    $(getSortingElement()).children('a').removeClass('active');
    $(element).addClass('active');
    sortingBy = criteria;
    performSearch();
}
function getSortingElement(){
    if(sortingElement == null){
        sortingElement = $('#sorting');
    }
    return sortingElement;
}

function getResultContainer(){
    if(resultContainer == null){
        resultContainer = $('#results');
    }
    return resultContainer;
}

function getStateElement(){
    // Cache the state drop down
    if(stateElement == null){
        stateElement = $('#state');
    }
    return stateElement;
}

function getSearchForm(){
    // Cache the state drop down
    if(searchForm == null){
        searchForm = $('#careerSearch');
    }
    return searchForm;
}

function performSearch(){
    if(isFirstSearch){
        $('#landingContent').remove();
        $('#searchResults').css('display','block');
        isFirstSearch = false;
    }
    $(getResultContainer()).html(loadingSnippet);
    
   $.ajax({
        url: SERVER_PATH+"?aAction=search&sortingBy="+sortingBy+"&"+$(getSearchForm()).serialize(),
        type: "GET",
        cache: false,
        success: function(json){
            data = evalJSON(json);
            listingHTML = "";
            // Error?
            if(data['status'] == 0){
                listingHTML += "<span class='error'>Error: "+result['msg']+"</span>";
            }
            // Any results found?
            else if(data['status'] == 1 && data['careers'].length == 0){
                listingHTML += "<span class='error'>No careers were found matching your search criteria.</span>"
             }
             // Success?
            if(data['status']==1){
                careers = data['careers'];
                for(var i in careers){
                    listingHTML += careerListingHTML(careers[i]);
                }
            }
            $(getResultContainer()).html(listingHTML);
        }
    });
}

function careerListingHTML(career){
    html = "<div class=\"item\"><p>";
    html += "<strong>Date Posted</strong>: <span class=\"emp\">"+career['datePosted']+"</span><br/>";
    if(career['department'] != ''){
        html += "<strong>Department:</strong> <span class=\"emp\">"+career['department']+"</span><br/>";
    }
    html += "<strong>Location</strong>: <span class=\"emp\">"+career['city']+", "+career['state']+"</span><br/>";
    if(career['title'] != ''){
        html += "<strong>Title</strong>: <span class=\"emp\">"+career['title']+"</span><br/>";
    }
    if(career['jobNumber'] != ''){
        html += "<strong>Job Number</strong>: <span class=\"emp\">"+career['jobNumber']+"</span><br/>";
    }
    html += "<strong>Description</strong>:</p>"+career['description'];
    html += "<a href=\"?step=1"+"&jobID="+career['id']+"&title="+escape(career['title'])+"&location="+career['city']+", "+career['state']+"\"><img src=\"Templates/shared/images/apply-button.jpg\" alt=\"Apply\" /></a></div>";
    return html;
}

function setText(element,hasFocus, defaultText){
    currentValue = $(element).val();
    if(hasFocus == 1){
            if(currentValue == defaultText){
                    $(element).val('');
            }
    }
    else{
            if(jQuery.trim(currentValue) == ''){
                    $(element).val(defaultText);
            }
    }
}
/*
 * stateChange
 * @param element - The HTML element firing the event.
 * @return void
 * When a user changes the state to refine a search, when a state is changed it displays a loading
 * status next to the state selection and replaces it with a city drop down when complete
 */
function stateChange(element){
    // Was there a city drop down present or message
    if(prevState != ''){
        $(getStateElement()).next().remove();
    }
    prevState = $(element).val();
    if(prevState == ''){
        return;
    }
    // Show loading status
    $(getStateElement()).after(loadingSnippet);
    $.ajax({
        url: SERVER_PATH+"?aAction=cityList&state="+$(element).val(),
        type: "GET",
        cache: false,
        success: function(json){
            result = evalJSON(json);
            cityHTML = '';
            // Error?
            if(result['status'] == 0){
                cityHTML += "<span class='error'>Error: "+result['msg']+"</span>";
            }
            // Any results found?
            else if(result['status'] == 1 && result['cities'].length == 0){
                cityHTML += "<span class='error'>No careers found for that state</span>"
             }
             // Success?
             else if(result['status'] == 1){
                cityHTML += "<select id='city' name='city'><option value=''>City</option>";
                cities = result['cities'];
                for(var i in cities){
                    cityHTML += "<option value=\""+cities[i]+"\">"+cities[i]+"</option>";
                }
                 cityHTML +="</select>";
            }
             $(getStateElement()).next().remove();
             $(getStateElement()).after(cityHTML);
        }
    });
}

function evalJSON(json){
    return eval("("+json+")");
}

function validateForm(){
    $(errorElement).html('');
    requiredText = " is required";
    $(formElement).validate({
        messages: {
            FirstName:"First Name"+requiredText,
            LastName:"Last Name"+requiredText,
            Address:"Address"+requiredText,
            City:"City"+requiredText,
            state:"State"+requiredText,
            ZipCode:"Zip Code"+requiredText,
            "worked-at-stage":"Have you ever worked for Stage Stores"+requiredText,
            "convicted-crime":"Have you ever been convicted of a crime"+requiredText,
            "highest-education":"Highest level of education completed"+requiredText,
            "employment-employer":"Former/Current Employer"+requiredText,
            "i-agree":"You must agree to the Job Application Agreement before submitting",
            "PhoneNumber[]":{
                required:"Phone Number"+requiredText
            },
            "employment-position":"Position/Title (Employment History)",
            "employment-supervisor":"Supervisor's Name (Employment History)",
            contactPref:"Contact Preference"+requiredText
        },
        focusInvalid: false

    }
    );
    isValid = $(formElement).valid();
    if(isValid && !specialRules()){
        isValid = false;
    }

    if(!isValid){
        errorsFound = $('label.error').filter(function(){
            return this.style.display != 'none';
        });
        errorHTML = "<a name='snapTo'></a><strong style='text-decoration:underline'>Your request was not submitted:<br />The following errors have been found:</strong><br /><br >";
        for(var i=0; i<errorsFound.length; i++){
            errorHTML += $(errorsFound[i]).html();
            errorHTML += "<br />";
        }
        $(errorElement).html(errorHTML);
        window.location = "#snapTo";
    }
    return isValid;
}

function specialRules(){
    isValid = true;
    return isValid;
}

$(document).ready(function()
{
	if ($("#state").val() != "")
	{
		stateChange($("#state"));
		performSearch();
	}
})
