﻿/* Copyright (c) 2008. All rigths reserved. *
*
* Project:      Jobs Search XML API Client
* File:         JobsSearch.js
* Company:      Zikbay.com / http://zikbay.com
* Author:       Velio Ivanov / velio@artembg.com
* Description:  Defines all javascript classes and functionality used by Jobs Search Client.
*
* Revisions(most recent first):    
* 2008/06/01    1.0 - Velio     - Initial draft
*/
// namespace ----------------------------------------------------------------------------
var Artem = {};
Artem.Zikbay = {};

// JobsField class ----------------------------------------------------------------------
Artem.Zikbay.JobsField = function(id) {
    // fields
    this.Id = id;
    // methods
    function getIt() { 
        return document.getElementById(id) 
    };
    this.clear = function() {
        getIt().value = "";
    };
    this.getValue = function() {
        return getIt().value;
    };
    this.hasValue = function() {
        var el = getIt();
        return (el && el.value);
    };
    this.setHtml = function(html) {
        getIt().innerHTML = html;
    };
    this.setValue = function(value) {
        getIt().value = value;
    };
    this.setVisible = function(value) {
        getIt().visible = value;
    };
};
// statics    
Artem.Zikbay.JobsField.FeedbackQuery = new Artem.Zikbay.JobsField("jsa_FbQuery");
Artem.Zikbay.JobsField.FeedbackLocation = new Artem.Zikbay.JobsField("jsa_FbLocation");
Artem.Zikbay.JobsField.QueryAll = new Artem.Zikbay.JobsField("jsa_QueryAll");
Artem.Zikbay.JobsField.QueryExact = new Artem.Zikbay.JobsField("jsa_QueryExact");
Artem.Zikbay.JobsField.QueryOne = new Artem.Zikbay.JobsField("jsa_QueryOne");
Artem.Zikbay.JobsField.QueryWithout = new Artem.Zikbay.JobsField("jsa_QueryWithout");
Artem.Zikbay.JobsField.JobTitle = new Artem.Zikbay.JobsField("jsa_JobTitle");
Artem.Zikbay.JobsField.CompanyName = new Artem.Zikbay.JobsField("jsa_CompanyName");
Artem.Zikbay.JobsField.City = new Artem.Zikbay.JobsField("jsa_City");
Artem.Zikbay.JobsField.Zip = new Artem.Zikbay.JobsField("jsa_Zip");

// JobsSelect class ---------------------------------------------------------------------
Artem.Zikbay.JobsSelect = function(id) {
    // fields
    this.Id = id;
    // methods
    function getIt() { 
        return document.getElementById(id); 
    };
    this.getValue = function() {
        var el = getIt();
        for(var i = 0; i < el.length; i++) {
            if(el[i].selected) {
                return el[i].innerHTML;
            }
        }
        return "";
    };
    this.hasValue = function() {
        var el = getIt();
        for(var i = 0; i < el.length; i++) {
            if(el[i].selected) {
                return true;
            }
        }
        return false;
    };
    this.select = function(i) {
        getIt()[i].selected = true;
    };
};
// statics    
Artem.Zikbay.JobsSelect.PageSize = new Artem.Zikbay.JobsSelect("jsa_PageSize");
Artem.Zikbay.JobsSelect.Sort = new Artem.Zikbay.JobsSelect("jsa_Sort");
Artem.Zikbay.JobsSelect.State = new Artem.Zikbay.JobsSelect("jsa_State");
Artem.Zikbay.JobsSelect.Within = new Artem.Zikbay.JobsSelect("jsa_Within");

// JobsSearch static class --------------------------------------------------------------
Artem.Zikbay.JobsSearch = {

    advancedMode: false,

    buildFeedback: function() {
        Artem.Zikbay.JobsSearch.buildLocation();
        Artem.Zikbay.JobsSearch.buildQuery();
    },
    
    buildLocation: function() {
        var buff = "";
        var found = false;
        // city
        if(Artem.Zikbay.JobsField.City.hasValue()) {
            buff += Artem.Zikbay.JobsField.City.getValue() + ", ";
            found = true;
        }
        // state
        if(Artem.Zikbay.JobsSelect.State.hasValue()) {
            var otext = Artem.Zikbay.JobsSelect.State.getValue();
            buff += ((otext != "- -") ? otext : "") + " ";
            found = true;
        }
        // zip
        if(Artem.Zikbay.JobsField.Zip.hasValue()) {
            buff += Artem.Zikbay.JobsField.Zip.getValue() + " ";
            found = true;
        }
        // within
        if(Artem.Zikbay.JobsSelect.Within.hasValue()) {
            buff += "(" + Artem.Zikbay.JobsSelect.Within.getValue() + ") ";
            found = true;
        }
        //
        if(found) buff = buff.substring(0, buff.length - 1);
        Artem.Zikbay.JobsField.FeedbackLocation.setHtml(buff);
    },
    
    buildQuery: function() {
        var buff = "";
        var found = false;
        // query all
        if(Artem.Zikbay.JobsField.QueryAll.hasValue()) {
            buff += Artem.Zikbay.JobsField.QueryAll.getValue() + " ";
            found = true;
        }
        // query exact
        if(Artem.Zikbay.JobsField.QueryExact.hasValue()) {
            buff += "\"" + Artem.Zikbay.JobsField.QueryExact.getValue() + "\" ";
            found = true;
        }
        // query one
        if(Artem.Zikbay.JobsField.QueryOne.hasValue()) {
            buff += "(";
            var splits = Artem.Zikbay.JobsField.QueryOne.getValue().split(" ");
            for(i = 0; i < splits.length; i++) {
                if(splits[i] != "")
                    buff += splits[i] + " OR ";
            }
            buff = buff.substring(0, buff.length - 4);
            buff += ") ";
            found = true;
        }
        // query without
        if(Artem.Zikbay.JobsField.QueryWithout.hasValue()) {
            var splits = Artem.Zikbay.JobsField.QueryWithout.getValue().split(" ");
            for(i = 0; i < splits.length; i++) {
                if(splits[i] != "")
                    buff += "NOT " + splits[i] + " ";
            }
            found = true;
        }
        // job title
        if(Artem.Zikbay.JobsField.JobTitle.hasValue()) {
            buff += "title:(" + Artem.Zikbay.JobsField.JobTitle.getValue() + ") ";
            found = true;
        }
        // company name
        if(Artem.Zikbay.JobsField.CompanyName.hasValue()) {
            buff += "company:(" + Artem.Zikbay.JobsField.CompanyName.getValue() + ") ";
            found = true;
        }
        //
        if(found) buff = buff.substring(0, buff.length - 1);
        Artem.Zikbay.JobsField.FeedbackQuery.setHtml(buff);
    },
    
    clear: function() {
        Artem.Zikbay.JobsField.FeedbackLocation.setHtml("");
        Artem.Zikbay.JobsField.FeedbackQuery.setHtml("");
        //
        Artem.Zikbay.JobsField.City.clear();
        Artem.Zikbay.JobsField.CompanyName.clear();
        Artem.Zikbay.JobsField.JobTitle.clear();
        Artem.Zikbay.JobsField.QueryAll.clear();
        Artem.Zikbay.JobsField.QueryExact.clear();
        Artem.Zikbay.JobsField.QueryOne.clear();
        Artem.Zikbay.JobsField.QueryWithout.clear();
        Artem.Zikbay.JobsField.Zip.clear();
        //
        Artem.Zikbay.JobsSelect.PageSize.select(0);
        Artem.Zikbay.JobsSelect.Sort.select(0);
        Artem.Zikbay.JobsSelect.State.select(0);
        Artem.Zikbay.JobsSelect.Within.select(4);
        //
        return false;
    },
    
    switchMode: function() {
        Artem.Zikbay.JobsSearch.advancedMode = !Artem.Zikbay.JobsSearch.advancedMode;
        var display = (Artem.Zikbay.JobsSearch.advancedMode) ? "block" : "none";
        var el = document.getElementById("feedback");
        el.style.display = display;
        el = document.getElementById("filters");
        el.style.display = display;
        el = document.getElementById("js_advoptions");
        el.style.display = display;
        el = document.getElementById("js_prefs");
        el.style.display = display;
        //
        el = document.getElementById("js_control_box");
        el.src = (Artem.Zikbay.JobsSearch.advancedMode) ? "/images/expand.jpg" : "/images/collapse.jpg";
        //
        el = document.getElementById("js_title");
        el.innerHTML = (Artem.Zikbay.JobsSearch.advancedMode) ? "Simple View" : "Advanced View";
        
        Artem.Zikbay.JobsSearch.buildFeedback();
    }
};