(function($){
    
    $.extend($.fn.dfield.defaults, {
        stateTxt: "",
        stateCss: ""
    });
    
    // initialize the cache variables if not yet defined
    window.ws = window.ws || {};
    ws.cc = ws.cc ||{};
    ws.cc.info = ws.cc.info || {};
    ws.jr = ws.jr || {};
    ws.jr.info = ws.jr.info || {};
    ws.stateRequired = true;

    vmf.dfield.populateCountry = function(settings){
        var $this = $(this);
        var country = $this.val().toLowerCase().replace(/ /g, "_");
        var phoneCode = $this.attr("phone_code_id");
        var astersIds = $this.attr("asterisk_id");
        var asters = astersIds.split(",");
        var asterisk = asters[0];
        var zipAsterisk = asters[1];
        var state = $this.attr("state_id");
        var postalCode = $this.attr("postal_code_id");
        var isoCode = $this.attr("iso_code_id");
        var disableState = function(isDisabled){
            $("#" + state).html("<input type='text' id='state' name='state' value='" + settings.stateTxt + "' class='" + settings.stateCss + "'" + (isDisabled ? " disabled='disabled' " : "") + "/>");
            $("#" + asterisk).hide();
            $("#" + zipAsterisk).hide();
            if(isDisabled)
                $("#" + postalCode).attr("disabled", "disabled");
            else
                $("#" + postalCode).removeAttr("disabled");
            ws.stateRequired = false;
        }
        
        var loadStates = function(i){
            settings = settings || {};
            if (i && i.state && i.state.length > 0) {
                var html = [];
                html.push("<select id='state' name='state' class='" + settings.stateCss + "' ");
                if (settings.stateCss == "") 
                    html.push("style='font-family: Arial Unicode MS' ");
                html.push(">");
                for (var j = 0; j < i.state.length; j++) {
                    html.push("<option value='" + i.state[j] + "'" + (settings.value == i.state[j] ? " selected='selected' " : "") + ">" + i.stateName[j] + "</option>");
                }
                html.push("</select>");
                $("#" + state).html(html.join(""));
                $("#" + asterisk).show();
                $("#" + zipAsterisk).show();
                $("#" + postalCode).removeAttr("disabled");
                ws.stateRequired = true;
            }
            else {
                disableState(settings.disableFields);
            }
        }
        var populate = function(){
            var i = ws.cc.info[country];
            //$("#" + phoneCode).val(i.phoneCode).trigger("change");
            if(i && i.isoCode)
                $("#" + isoCode).val(i.isoCode);
            if(country == "select_one")
                settings.disableFields = true;
            else
                settings.disableFields = false;
            loadStates(i, settings);
        };
        
        if (!ws.cc.info[country]) {
            $.ajax({
                cache: false,
                dataType: 'script',
                url: $.fn.dfield.defaults.url + country + ".js",
                success: populate
            });
        }
        else populate();
        
    }
    vmf.dfield.populateDepartment = function(settings){
        settings = settings || {};
        var $this = $(this);
        var $jobRole = $("#" + $this.attr("job_role_id"));
        var $focus = $("#" + $this.attr("focus_id"));
        var $posLevel = $("#" + $this.attr("position_level_id"));
        var dept = $this.val();
        $.ajax({
            cache: false,
            dataType: 'script',
            url: $.fn.dfield.defaults.url + "job_role.js",
            success: function(){
                var i = ws.jr.info[dept];
                if (i) {
                    var html = [];
                    var val = "";
                    for (var j = 0; j < i.length; j++) {
                        val = i[j].role.value || i[j].role;
                        html.push("<option value='" + val + "'" + (settings.value == val ? " selected='selected' " : "") + ">" + (i[j].role.label || i[j].role) + "</option>");
                    }
                    var $role = $(html.join(""));
                    $jobRole.empty().append($role);
                    //$focus.val(i[0].jobFocus);
                    //$posLevel.val(i[0].posLevel);
                    // TW: Removed the focus and position level population   
                    $role.change(function(){
                        $focus.val(i[this.selectedIndex].jobFocus);
                        $posLevel.val(i[this.selectedIndex].posLevel);
                    });
                    
                }else{
                    $jobRole.empty().append($("<option>--</option>"));
                }
            }
        });
        
    }
    
    vmf.dfield.prefill = function(){
    }
    
    vmf.dfield.initShortForm = function(){
        vmf.dfield.build("Salutation", {
            value: ws.pf["Salutation"]
        });
        
        vmf.dfield.build("Country", {
            onChange: vmf.dfield.populateCountry,
            value: ws.pf["Country"]
        });
    }
    
    vmf.dfield.initLongForm = function(){
        
        vmf.dfield.build("salutation", {
            value: $("#pp_Salutation").val()
        });
        
        vmf.dfield.build("country", {
            onChange: vmf.dfield.populateCountry,
            value: $("#pp_Country").val(),
            success: function(){
                if($("#pp_Country").val() != "")
                    vmf.dfield.populateCountry.call(document.getElementById("country"), {value: $("#pp_State").val()});
            }
        });
        
        if($("#pp_Country").val() == ""){
            $("#state").attr("disabled", "disabled");
            $("#zip").attr("disabled", "disabled");
        }

        vmf.dfield.build("department", {
            onChange: vmf.dfield.populateDepartment,
            value: $("#pp_role_type").val(),
            success: function(){
                if($("#pp_jobrole").val() != "")
                    vmf.dfield.populateDepartment.call(document.getElementById("department"), {value:$("#pp_jobrole").val()});
            }
        });
        
        vmf.dfield.build("industry", {
            value: $("#pp_Industry").val()
        });
        
        vmf.dfield.build("numberEmployeesGlobal", {
            value: $("#pp_number_employees").val()
        });
        
        vmf.dfield.build("numberEmployeesCountry", {
            value: $("#pp_number_employees_in_country").val()
        });
        
        vmf.dfield.build("numberServers", {
            value: $("#pp_number_servers").val()
        });
        
        vmf.dfield.build("numberDesktops", {
            value: $("#pp_number_desktops").val()
        });
        
        vmf.dfield.build("virtualizationbudget", {
            value: $("#pp_defined_budget").val()
        });
        
        vmf.dfield.build("refreshservers", {
            value: $("#pp_server_refresh").val()
        });
        vmf.dfield.build("resfreshdesktops", {
            value: $("#pp_desktop_refresh").val()
        });
        vmf.dfield.build("relationshipVMware", {
            value: $("#pp_visitor_type").val()
        });
        
        vmf.dfield.build("language", {
            value: $("#pp_language").val()
        });
        
    }
        
    $(function(){
        var forms = $("form");
        var $form = null;
        formLoop: for (var i = 0; i < forms.length; i++) {
            $form = $(forms[i]);
            switch ($form.attr("dfield")) {
                case "longForm":
                    vmf.dfield.initLongForm();
                    break formLoop;
                case "shortForm":
                    vmf.dfield.initShortForm();
                    break formLoop;
            }
        }
        var ppBusinessPhone = $("#pp_businessPhone").val();
        if( ppBusinessPhone != ""){
            $("#businessPhoneSpan").html("<input type='text' name='contactBusinessPhone' size='30' value='" + ppBusinessPhone + "' />");
        }else{
            var $countryCode = $("#CountryCode");
            var $businessPhone = $("#BusinessPhone");
            var $contactPhone = $("#ContactBusinessPhone");
            var combinePhone = function(){
                $contactPhone.val($countryCode.val() + $businessPhone.val());
            }
            $businessPhone.change(combinePhone);
            $countryCode.change(combinePhone);
        } 
    });
    
    
})(jQuery);
