
var gdata;var defaultSortColumn=[[0,0]];var arrayPosition;var legibleDate;var rowHTML;var occupation1Code="";var starea1Code="";var occupation2Code="";var starea2Code="";var occupation3Code="";var starea4Code="";var occTxt="Enter an occupation";var stareaTxt="Enter a city, state, or region";var numTxt="Enter a number";var period="year";var years=[2005,2004,2003,2002,2001,2000,1999,1998,1997];function writeDate(sec){var d=new Date(sec*1000);$("#lmDate").text(d.toString());}
function buildOptionList(arr){var l=arr.length;var opt="";for(var i=0;i<l;i++){opt+='<option value="'+arr[i]+'">'+arr[i]+'</option>';}
return opt;}
function buildSelector(friendlyName,id,value0,arr,valueIndex,fieldIndex){var elId=id;elId=elId.replace(/\s/g,"");var allOccs="";var sel='<div><label>Choose '+friendlyName+':</label><select id="'+elId+'"><option value="'+value0+'"> - Choose one - </option>'+allOccs+buildOptionList(arr,valueIndex,fieldIndex)+'</select></div>';return sel;}
function optionFilter(arr,filterRegEx,index){var newArr=[];var l=arr.length;for(var i=0;i<l;i++){if(filterRegEx.test(arr[i][index])){newArr.push(arr[i].slice());}}
return newArr;}
function contains(a,e){for(j=0;j<a.length;j++){if(a[j]==e){return true;}}
return false;}
function unique(a){var tmp=[];for(i=0;i<a.length;i++){if(!contains(tmp,a[i])){tmp.length+=1;tmp[tmp.length-1]=a[i];}}
return tmp;}
function containsMultiD(a,e,index){for(j=0;j<a.length;j++){if(a[j][index]==e){return true;}}
return false;}
function uniqueMultiD(a,index){var tmp=[];for(i=0;i<a.length;i++){if(!containsMultiD(tmp,a[i][index],index)){tmp.length+=1;tmp[tmp.length-1]=a[i];}}
return tmp;}
function addCommas(nStr)
{nStr+='';x=nStr.split('.');x1=x[0];x2=x.length>1?'.'+x[1]:'';var rgx=/(\d+)(\d{3})/;while(rgx.test(x1)){x1=x1.replace(rgx,'$1'+','+'$2');}
return x1+x2;}
function showOccupations(mog){$('#occupation_code option:gt(0)').remove();$(buildOptionList(optionFilter(gdata.mogoccMap.values,new RegExp("^"+mog),1),[1],0)).appendTo('#occupation_code');}
function showStateAreas(st){$('#area_code option:gt(0)').remove();$(buildOptionList(optionFilter(optionFilter(gdata.stareaMap.values,new RegExp("^"+st+"$"),1),new RegExp("^(?!0000)"),2),[1,2],0)).appendTo('#area_code');}
function buildResultTable(queryName,results){var thRow="";var tdRow="";var table;var l=results.length;var start=2007;var wage="";var year="";for(var i=1997;i<2007;i++){thRow+='<th>'+i+'</th>';}
results.sort();for(var y=l-1;y>=0;y--){year=parseInt(results[y][0],10);wage=results[y][1];for(var z=start;z>year;z--){if(year==z-1){if(period=="year"){wage*=2080;wage=wage.toFixed(2);}
tdRow='<td class="meanWage">$'+addCommas(wage)+'</td>'+tdRow;start=year;break;}else{tdRow='<td>- -</td>'+tdRow;}}}
for(var s=start;s>1997;s--){tdRow='<td>- -</td>'+tdRow;}
return'<div class="resultSet"><strong>'+queryName+'</strong><table class="tablesorter"><thead><tr>'+thRow+'</tr></thead><tbody><tr>'+tdRow+'</tr></tbody></table><button onclick="$(this).parent().remove();">Remove this Result Set</button></div>';}
function toSalary(){var t;$.each($(".meanWage"),function(i,obj){t=$(obj).text().replace("$","");t=t.replace(",","");if(period=="hour"){t=t*2080;}
else{t=t/2080;}
$(obj).text("$"+addCommas(t.toFixed(2)));});if(period=="year"){$("#wageConverter").text("Annual Salaries");period="hour";}
else{$("#wageConverter").text("Mean Hourly Wages");period="year";}}
function processResults(msg,question,target){var occupation="";var region="";var i=0;var occL=gdata.mogoccMap.values.length;var regL=gdata.stareaMap.values.length;for(var r=0;r<msg.result.length;r++){levelTxt=msg.result[r].series_id.slice(-2);for(i=0;i<occL;i++){if(gdata.mogoccMap.values[i][1]==msg.result[r].series_id.slice(-7,-2)){occupation=gdata.mogoccMap.values[i][0];break;}}
for(i=0;i<regL;i++){if(gdata.stareaMap.values[i][2]==msg.result[r].series_id.slice(-11,-7)){region=gdata.stareaMap.values[i][0];break;}}
if(levelTxt=="00"){levelTxt="Overall occupation average (no work level)";}
if(levelTxt=="99"){levelTxt="Not able to be leveled";}
switch(question){case 1:tableHeader=occupation+" in "+region+"; Work Level: ";$(buildResultTable(tableHeader+levelTxt,msg.result[r].wages,msg.result[r].series_id)).appendTo(target);break;case 2:tableHeader=region+", "+occupation+"; Work Level: ";$(buildResultTable(tableHeader+levelTxt,msg.result[r].wages,msg.result[r].series_id)).appendTo(target);break;}}
switch(question){case 1:pageTracker._trackEvent("salarySearch","howMuchDidOccupationXEarnInRegionX",occupation+" in "+region);break;case 2:pageTracker._trackEvent("salarySearch","InRegionXHowMuchDidOccuationXEarn",region+", "+occupation);break;}}
function processRankings(msg,question,target,year,orderBy){var thRow="";var tdRows="";var l=msg.result.length;var wage="";var occupation="";var region="";var i=0;var occL=gdata.mogoccMap.values.length;var regL=gdata.stareaMap.values.length;orderBy=orderBy=="ASC"?"Lowest":"Highest";for(var r=0;r<l;r++){levelTxt=msg.result[r].series_id.slice(-2);for(i=0;i<occL;i++){if(gdata.mogoccMap.values[i][1]==msg.result[r].series_id.slice(-7,-2)){occupation=gdata.mogoccMap.values[i][0];break;}}
for(i=0;i<regL;i++){if(gdata.stareaMap.values[i][2]==msg.result[r].series_id.slice(-11,-7)){region=gdata.stareaMap.values[i][0];break;}}
if(levelTxt=="00"){levelTxt="Overall occupation average (no work level)";}
if(levelTxt=="99"){levelTxt="Not able to be leveled";}
wage=msg.result[r].wages[1];if(period=="year"){wage*=2080;wage=wage.toFixed(2);}
switch(question){case 3:if(!thRow){thRow+='<th>Rank</th><th>Region</th><th>Work Level</th><th>Wage</th>';}
tdRows+='<tr><td>'+(r+1)+'</td><td>'+region+'</td><td>'+levelTxt+'</td><td class="meanWage">$'+addCommas(wage)+'</td></tr>';break;case 4:if(!thRow){thRow+='<th>Rank</th><th>Occupation</th><th>Work Level</th><th>Wage</th>';}
tdRows+='<tr><td>'+(r+1)+'</td><td>'+occupation+'</td><td>'+levelTxt+'</td><td class="meanWage">$'+addCommas(wage)+'</td></tr>';break;}}
switch(question){case 3:tableHeader=orderBy+" paying regions for occupation: "+occupation+" in "+year+", using the highest wage found among all work levels";break;case 4:regL=gdata.stareaMapCombined.values.length;starea4Code=starea4Code.replace(/____$/,"0000");for(i=0;i<regL;i++){if(gdata.stareaMapCombined.values[i][1]==starea4Code){region=gdata.stareaMapCombined.values[i][0];break;}}
tableHeader=orderBy+" paying occupations in "+region+", in "+year+", using the highest wage found among all work levels";break;}
$('<div class="resultSet"><strong>'+tableHeader+'</strong><table class="tablesorter"><thead><tr>'+thRow+'</tr></thead><tbody>'+tdRows+'</tbody></table><button onclick="$(this).parent().remove();">Remove this Result Set</button></div>').appendTo(target);switch(question){case 3:pageTracker._trackEvent("salarySearch","rankRegionsForOccuption",occupation+" for "+year);break;case 4:pageTracker._trackEvent("salarySearch","rankOccupationsInRegion",region+" for "+year);break;}}
function getData(question,f){var state_code="__";var area_code="____";var mog_code="__";var occupation_code="___";var anyLevelCode="__";var seriesRegEx="NCU";var target="";var api="";var q;switch(question){case 1:if(starea1Code===""||occupation1Code===""){alert("Please complete one of the questions.");return false;}
seriesRegEx+=starea1Code+occupation1Code+anyLevelCode;target="#answers1";api="/cgi-bin/bls-ncs/answerQuestions.js";q={"seriesRegEx":seriesRegEx};break;case 2:if(starea2Code===""||occupation2Code===""){alert("Please complete one of the questions.");return false;}
seriesRegEx+=starea2Code+occupation2Code+anyLevelCode;target="#answers2";api="/cgi-bin/bls-ncs/answerQuestions.js";q={"seriesRegEx":seriesRegEx};break;case 3:if(!/^\d+$/.test(f.limit3.value)||f.orderBy3===""||occupation3Code===""){alert("Please complete one of the questions.");return false;}
seriesRegEx+=state_code+area_code+occupation3Code+anyLevelCode;target="#answers3";api="/cgi-bin/bls-ncs/returnRankings.js";q={"seriesRegEx":seriesRegEx,"orderBy":f.orderBy3.value,"limit":f.limit3.value,"year":f.year3.value,"wanting":"regions"};break;case 4:if(!/^\d+$/.test(f.limit4.value)||f.orderBy4===""||starea4Code===""){alert("Please complete one of the questions.");return false;}
starea4Code=starea4Code.replace(/0000$/,"____");seriesRegEx+=starea4Code+mog_code+occupation_code+anyLevelCode;target="#answers4";api="/cgi-bin/bls-ncs/returnRankings.js";q={"seriesRegEx":seriesRegEx,"orderBy":f.orderBy4.value,"limit":f.limit4.value,"year":f.year4.value,"wanting":"occupations"};break;}
$("#loading").css({"display":"block"});$.ajax({type:"POST",dataType:"json",url:api,data:q,success:function(msg){if(!msg.failure){if(!msg.result.length){alert("No results.  Please choose a different set of parameters.");}
else{switch(question){case 1:processResults(msg,question,target);break;case 2:processResults(msg,question,target);break;case 3:processRankings(msg,question,target,f.year3.value,f.orderBy3.value);break;case 4:processRankings(msg,question,target,f.year4.value,f.orderBy4.value);break;}}
$("#loading").css({"display":"none"});}
else{alert("Get Data operation failed.");$("#loading").css({"display":"none"});}}});return false;}
function loadFields(fld,Data,txt){switch(fld){case"#occupation1":$(fld).unbind().autocomplete(Data,{formatItem:function(item){return item[0];},matchContains:true}).result(function(event,item){occupation1Code=item[1];filterForQuestions(1,item[1]);});break;case"#starea1":$(fld).unbind().autocomplete(Data,{formatItem:function(item){return item[0];},matchContains:true}).result(function(event,item){starea1Code=item[1];});break;case"#starea2":$(fld).unbind().autocomplete(Data,{formatItem:function(item){return item[0];},matchContains:true}).result(function(event,item){filterForQuestions(2,item[1]);});break;case"#occupation2":$(fld).unbind().autocomplete(Data,{formatItem:function(item){return item[0];},matchContains:true}).result(function(event,item){occupation2Code=item[1];});break;case"#id-occupation3":$(fld).unbind().autocomplete(Data,{formatItem:function(item){return item[0];},matchContains:true}).result(function(event,item){occupation3Code=item[1];filterForQuestions(3,item[1]);});break;case"#id-starea4":$(fld).unbind().autocomplete(Data,{formatItem:function(item){return item[0];},matchContains:true}).result(function(event,item){starea4Code=item[1];filterForQuestions(4,item[1]);});break;}
$(fld).val(txt);$(fld).focus(function(){if($(this).val()==txt){$(this).val('');}});$(fld).blur(function(){if(!/\w/.test($(this).val())){$(this).val(txt);}});}
function filterForQuestions(question,qCode){var state_code="__";var area_code="____";var mog_code="__";var occupation_code="___";var level_code="__";var seriesRegEx="NCU";var maps="state_code,area_code,mog_code,occupation_code,level_code";var want="";switch(question){case 1:seriesRegEx+=state_code+area_code+qCode+level_code;maps="series_id";want="starea";$('#starea1').attr("readonly",true).addClass("readOnly");break;case 2:qCode=starea2Code=qCode.replace(/0000$/,"____");seriesRegEx+=qCode+mog_code+occupation_code+level_code;maps="series_id";want="mogocc";$('#occupation2').attr("readonly",true).addClass("readOnly");break;case 3:seriesRegEx+=state_code+area_code+qCode+level_code;maps="series_id";want="year";$('#id-year3').attr("readonly",true).addClass("readOnly");break;case 4:qCode=qCode.replace(/0000$/,"____");seriesRegEx+=qCode+mog_code+occupation_code+level_code;maps="series_id";want="year";$('#id-year4').attr("readonly",true).addClass("readOnly");break;}
maps=maps.replace(/,$/,"");$.ajax({type:"POST",dataType:"json",url:"/cgi-bin/bls-ncs/filterForQuestions.js",data:{"seriesRegEx":seriesRegEx,"maps":maps,"want":want},success:function(msg){if(!msg.failure){if(msg.result){$.each(msg.result,function(i,val){var filter=val.join("|");switch(question){case 1:if(!filter){alert("There is no data for this occupation in any location.");}else{var newStareas=optionFilter(gdata.stareaMapCombined.values,new RegExp("("+filter+")$"),1);loadFields('#starea1',newStareas,stareaTxt);}
$('#starea1').attr("readonly",false).removeClass("readOnly");break;case 2:if(!filter){alert("There is no data for this location.");}else{var newOccs=optionFilter(gdata.mogoccMap.values,new RegExp("("+filter+")$"),1);loadFields('#occupation2',newOccs,occTxt);}
$('#occupation2').attr("readonly",false).removeClass("readOnly");break;case 3:if(!filter){alert("There is no data for this location.");}else{$('#id-year3 option').remove();$('#id-year3').append(buildOptionList(val,0,0));}
$('#id-year3').attr("readonly",false).removeClass("readOnly");break;case 4:if(!filter){alert("There is no data for this location.");}else{$('#id-year4 option').remove();$('#id-year4').append(buildOptionList(val,0,0));}
$('#id-year4').attr("readonly",false).removeClass("readOnly");break;}});}}
else{alert("The filterForFunctions function failed in its db query.");}}});}
function buildMapSelectors(){$.getJSON("/friendly-data/bls/wage-pay-salary-tools/1997-2005/bls-ncs-maps.js",function(data){gdata=data;var l=gdata.mogoccMap.values.length;var g=gdata.mogoccMap.values;var t;gdata.mogMap={'fields':["mog_code","mog_name"],'values':[]};for(var f=0;f<l;f++){if(/000$/.test(g[f][1])){t=g[f][1].replace(/000$/,"");gdata.mogMap.values.push([g[f][0],t]);gdata.mogMap.values.sort();}}
gdata.occupationMap={'fields':["occupation_code","occupation_name"],'values':[]};gdata.occupationMap.values.push(["All occupations within this group","000"]);for(var c=0;c<l;c++){if(!/000$/.test(g[c][1])){t=g[c][1].replace(/^\d\d/,"");gdata.occupationMap.values.push([g[c][0],t]);gdata.occupationMap.values.sort();}}
l=gdata.stareaMap.values.length;g=gdata.stareaMap.values;gdata.stareaMapCombined={'fields':["starea_name","starea_code"],'values':[]};for(var s=0;s<l;s++){gdata.stareaMapCombined.values.push([g[s][0],g[s][1]+""+g[s][2]]);}
gdata.stareaMapCombined.values=uniqueMultiD(gdata.stareaMapCombined.values,0);gdata.stareaMapCombined.values.sort();loadFields("#occupation1",gdata.mogoccMap.values,occTxt);loadFields('#starea1',[],stareaTxt);loadFields("#starea2",gdata.stareaMapCombined.values,stareaTxt);loadFields('#occupation2',[],occTxt);loadFields("#id-occupation3",gdata.mogoccMap.values,occTxt);loadFields("#id-starea4",gdata.stareaMapCombined.values,stareaTxt);$("#loading").css({"display":"none"});});}
$(document).ready(function(){$('#questionBox1,#questionBox2,#questionBox3,#questionBox4').corner({tl:{radius:10},tr:{radius:10},bl:{radius:10},br:{radius:10}});});$(document).ready(buildMapSelectors);