// channel to frequency to channel by vk3khb
// all rights reserved
// declare values, get and check input, jump to approp routine, op results

var ch2freq2ch="20100720";

// Default messages
var align="n";
var m="TV Channel ";
var m0="Analog only - VHF Lo";
var m1="- Official frequency may vary +/-0.125Mhz, your TV receiver will auto tune, set to one of these numbers";
var m2="TV Channel ";
var m3="VHF Band ";
var m4="UHF Band ";
var m6="A ";
var m7="D ";
var m8=" not RF Ch.";
var m9=" undefined ";
var mB="Hyper ";
var mC=" tune to the ";
var mD="DTV Ch. does NOT equal RF Ch."
var mH=" hz ";
var mK=" Khz ";
var mZ=" Mhz ";
var m10=" <abbr title='copyright'>(C)</abbr> VK3KHB.GAK.NET.AU <abbr title='Interlectual Property'>(IP)</abbr>";
var m12="Ham Radio TV UHF ";

var fm1="<marquee scrollamount=\"2\" width=\"156\">"+mD+m1+m10+"</marquee>";
var fm2=" Mhz<abbr title=\""+fm1+"\"> DiGiTaL</abbr>";

var $cell_id="txtone";
var $onetxt;
var fq_fA=0;
var fq_fD=0;
var fq_fDk;
var fq_fDh;
var fq_n;

var ch_fA;
var ch_fD;
var ch_fDk;
var ch_fDh;
var ch_n;

var inp;
var typ;
// === DTV messages ===
var ch_m="unknown?";
var dtv_m=" undefined!";
var dtv_m0="DTV Ch.";
var dtv_m1=mC+"TEN network";
var dtv_m2=mC+"ABC network";
var dtv_m3=mC+"SBS network";
var dtv_m4=mC+"Community TV net.";
var dtv_m5=mC+"S.Cross network";
var dtv_m6=mC+"PRIME/GWN network";
var dtv_m7=mC+"SEVEN network";
var dtv_m8=mC+"WIN network";
var dtv_m9=mC+"NINE network";
var dtv_mA=mC+"Ham TV network";
var dtv_mB=" no such number";
var dtv_mC="Regional network<br>See TV List of Lists";
// end of declares

function show_freq_num() { show_ch_num(); }
function show_ch_num() { clear_area(); get_inp(inp); }

// -==- start of sub-functions -==-
function get_inp()
 {
 // -- input routine --
 var inp=prompt("Enter RF or DTV Channel # (0 - 999) or\nFrequency # in Khz (45000 - 820000)","16");
 if (inp!=null && inp!="")
  {
  inp=inp.toUpperCase();
  ch_n=inp; // ch_n is also # flag for ch or freq.
  if (inp>820500) { alert("Error! value is too high"); return;}
  if (inp<0)      { alert("Error! value is too low" ); return;} 
  // convert TV text IDs to numbers
  if (inp.match( "ABC" )) { fq_n="226500"; ch_n="2"; }
  if (inp.match( "TWO" )) { fq_n="226500"; ch_n="2"; }
  if (inp.match("SEVEN")) { fq_n="177500"; ch_n="7"; }
  if (inp.match( "7TWO")) { fq_n="177500"; ch_n="7"; }
  if (inp.match( "NINE")) { fq_n="191500"; ch_n="9"; }
  if (inp.match( "GO"  )) { fq_n="191500"; ch_n="9"; }
  if (inp.match( "TEN" )) { fq_n="212500"; ch_n="10";}
  if (inp.match( "ONE" )) { fq_n="212500"; ch_n="10";}
  if (inp.match( "ATV" )) { fq_n="444500"; ch_n="16";}
  if (inp.match( "HAM" )) { fq_n="444500"; ch_n="16";}
  if (inp.match( "SBS" )) { fq_n="536500"; ch_n="30";}
  if (inp.match( "CTV" )) { fq_n="557500"; ch_n="32";}
  if (inp.match( "C31" )) { fq_n="550500"; ch_n="31";}
  if (inp.match( "D44" )) { fq_n="578500"; ch_n="35";}
  if (inp.match("THREE")) { fq_n="578500"; ch_n="3"; }
  if (inp.match("BRIZ" )) { fq_n="557500"; ch_n="32";}
  if (inp.match( "TVS" )) { fq_n="550500"; ch_n="31";}
  if (inp.match( "3D"  )) { fq_n="578500"; ch_n="35";}
  if (inp.match("FORTY")) { fq_n="578500"; ch_n="35";}
  if (inp.match( "5A"  )) { fq_n="140500"; ch_n="-1";}
  if (inp.match( "9A"  )) { fq_n="205500"; ch_n="-2";}
  if (inp.match( "WIN" )) { fq_n="191500"; ch_n="8"; }
  if (inp.match("PRIME")) { fq_n="177500"; ch_n="6"; }
  if (inp.match("CROSS")) { fq_n="718500"; ch_n="5"; }
  if (inp.match( "GWN" )) { fq_n="177500"; ch_n="6"; }
  if (inp.match("IMPAR")) { fq_n="578500"; ch_n="-3";}
  inp=ch_n;
  if (isNaN(inp)) { alert("Error! "+inp+" is not known"); return; }

  // must be a number to get here
  inp=(Math.floor(inp)); // round down any decimal points
  // sep. ch from freq
  if (inp>-4 && inp<70) {ch_n=inp; fq_n=""; typ="rftv"; ch_numb();} // ch op
  if (inp>69 && inp<1000) {ch_n=inp; fq_n=""; typ="dtv"; ch_numb();} // ch op
  if (inp>999) {inp=inp/1000; fq_n=inp; ch_n=""; typ="fq"; freq_numb();} // fq op
  // fq_n or ch_n now set, return to caller
 } // end of inp
} // end of get_inp

function freq_numb()
 {
 // freq. to ch. below tv frequencies are MF and HF radio
  if (fq_n>-1 && fq_n<45) { fq_fD=0; fq_fA=0; ch_n=" none"; m=m9; }
  // Calculate channel # from freq. or kludge it!
  if (fq_n>44 && fq_n<53) { fq_fD=0.0; fq_fA=46.25; ch_n="00"; m=m0;}
  if (fq_n>52 && fq_n<64) { fq_fD=0.0; fq_fA=57.25; ch_n="01"; m=m0;}
  if (fq_n>63 && fq_n<71) { fq_fD=0.0; fq_fA=64.25; ch_n="02"; m=m0;}
  if (fq_n>70 && fq_n<85) { fq_fD=0.0; ch_n=" none"; m=m9; }
  if (fq_n>84 && fq_n<93) { fq_fD=0.0; fq_fA=86.25; ch_n="03"; m=m0;}
  if (fq_n>92 && fq_n<102) { fq_fD=0.0; fq_fA=95.25; ch_n="04"; m=m0;}
  if (fq_n>101 && fq_n<109) { fq_fD=0.0; fq_fA=102.25; ch_n="05"; m=m0;}
  if (fq_n>108 && fq_n<137) { ch_n=(Math.floor(1+(fq_n-105)/7)); fq_fD=(107.5+((ch_n-1)*7)); ch_n="S_"+ch_n; m=m+mB+m3;}
  if (fq_n>136 && fq_n<145) { fq_fD=0.0; fq_fA=138.25; ch_n="5a"; m=m0;}
  if (fq_n>144 && fq_n<147) { fq_fD=0.0; ch_n=" none"; m="2mtr HAM Radio VHF Band";}
  if (fq_n>146 && fq_n<174) { ch_n=(Math.floor(7+(fq_n-147)/7)); fq_fD=(149.5+((ch_n-7)*7)); ch_n="S"+ch_n; m=m+mB+m3;}
  if (fq_n>173 && fq_n<181) { fq_fD=177.5; ch_n="06"; m=m3+m;}
  if (fq_n>180 && fq_n<188) { fq_fD=184.5; ch_n="07"; m=m3+m;}
  if (fq_n>187 && fq_n<195) { fq_fD=191.5; ch_n="08"; m=m3+m;}
  if (fq_n>194 && fq_n<202) { fq_fD=198.5; ch_n="09"; m=m3+m;}
  if (fq_n>201 && fq_n<209) { fq_fD=205.5; ch_n="9a"; m=m3+m;}
  if (fq_n>208 && fq_n<216) { fq_fD=212.5; ch_n="10"; m=m3+m;}
  if (fq_n>215 && fq_n<223) { fq_fD=219.5; ch_n="11"; m=m3+m;}
  if (fq_n>222 && fq_n<231) { fq_fD=226.5; ch_n="12"; m=m3+m;}
  if (fq_n>230 && fq_n<443) { ch_n=(Math.floor(11+(fq_n-231)/7)); fq_fD=(233.5+((ch_n-11)*7)); if(ch_n>20) {ch_n="S_"+ch_n; m=m+mB+m4;} else {ch_n="S_"+ch_n; m=m+mB+m3;}}
  if (fq_n>442 && fq_n<451) { fq_fD=446.5; ch_n="aTV (350 / S41)"; m=m12;}
  if (fq_n>450 && fq_n<478) { ch_n=(Math.floor(42+(fq_n-448)/7)); fq_fD=(450.5+((ch_n-42)*7)); ch_n="S_"+ch_n; m=m+mB+m4;}
  if (fq_n>477 && fq_n<821) { ch_n=(Math.floor(21+(fq_n-478)/7)); fq_fD=(480.5+((ch_n-21)*7)); m=m4+m;}
  // Calculate analog freq. kludge vhf lo ch#
  if (fq_fD>2.25 ) { fq_fA=fq_fD-2.25; fq_fDk=(fq_fD*1000); fq_fDh=(fq_fDk*1000);}
  if (fq_fD<2.25 ) { fq_fDk=(fq_fA*1000); fq_fDh=(fq_fDk*1000);}

 // L1 frequency ### Mhz matches
 // L2 ~ RF Ch. ##
 // L3 A VHF / UHF TV channel
 // L4 Slots to ###.25 Mhz Analogue
 // L5 _-_-_-_  ###.50 Mhz Digital
 // L6  ### ### Khz or 
 // L7  ### ### ### hz
 // L8 scrolling messages
 // ch output preformat ($onetxt.small(0))

  L0="123456789-123456789-1234_FQ<br>";
  L1="Frequency "+fq_n+" Mhz matches<br>";
  L2="~ RF CH.  "+ch_n+"<br>";
  L3=m+"<br>";
  L4="Slots to "+fq_fA+" Mhz A<br>";
  L5="_-_-_ or "+fq_fD+"0 Mhz D<br>";
  L6="_-_-_ =  "+fq_fDk+" Khz or<br>";
  L7="_-_-_ =  "+fq_fDh+" hz<br><br>";
  L8=(fm1.small(0))+"<br>";
  $cell_id="txtone";
  if (align=="Y") {$onetxt=L0+L1+L2+L3+L4+L5+L6+L7+L8+L0;} else { $onetxt=L1+L2+L3+L4+L5+L6+L7+L8;}
 show_op()
 }

function ch_numb()
 {
  ch_fD=ch_n; // Digital to kludge Analog
// Calculate freq. from RF channel
// vhf lo
  if (ch_n=="0") { ch_fD=48.5;}
  if (ch_n=="1") { ch_fD=59.5;}
  if (ch_n=="2") { ch_fD=66.5;}
  if (ch_n=="3") { ch_fD=88.5;}
  if (ch_n=="4") { ch_fD=97.5;}
  if (ch_n=="5") { ch_fD=104.5;}
  if (ch_n==-1)  { ch_fD=140.5; ch_n="__ 5A"; ch_m=m0;    dtv_m=dtv_mB;}
  if (ch_n==-2)  { ch_fD=205.5; ch_n="__ 9A"; ch_m=m3+m2; dtv_m=dtv_mB;}
// vhf hi
  if (ch_n>5 && ch_n<10) { ch_fD=(177.5+((ch_n-6)*7)); ch_m=m3+m2;}
  if (ch_n>9 && ch_n<13) { ch_fD=(205.5+((ch_n-9)*7)); ch_m=m3+m2;}
// hyperband
  if (ch_n>12 && ch_n<21) { ch_fD="N/A"; ch_fA="N/A"; ch_m=m9;} // no ch#
  if (ch_n=="16") { ch_fD=446.5; ch_m=m12;}
// uhf
  if (ch_n>20 && ch_n<70) { ch_fD=(480.5+((ch_n-21)*7)); ch_m=m4+m2;} // uhf
  if (ch_n>69 ) { ch_fD="N/A"; ch_fA="N/A"; ch_m=dtv_m0+m8;} // dtv ch
// Calculate analog freq.
  if (ch_fD>2.25) { ch_fA=ch_fD-2.25; ch_fDk=(ch_fD*1000); ch_fDh=(ch_fDk*1000);}
// kludge ch#
  if (ch_n>-2 && ch_n<6) { ch_fD="---"; ch_fDk=(ch_fA*1000); ch_fDh=(ch_fDk*1000); ch_m=m0;}
  if (ch_fD>0 ) { ch_fD=ch_fD+"0"; } // add trailing zero 
//
// DTV channel kludges 0 - 999
  if (ch_n=="16") { dtv_m=dtv_mA; ch_n="_ aTV ";}
  if (ch_n>-1 && ch_n<10) { dtv_m=dtv_m;}
  if ( ch_n==-3 )    {ch_n="__ ??"; ch_fD="N/A"; ch_fA="N/A"; ch_m="";  dtv_m=dtv_mC;}
  if ((ch_n=="1") || (ch_n>9 && ch_n<20  ) || (ch_n>99 && ch_n<200 )) { dtv_m=dtv_m1;}
  if ((ch_n=="2") || (ch_n>19 && ch_n<30 ) || (ch_n>199 && ch_n<300)) { dtv_m=dtv_m2;}
  if ((ch_n=="3") || (ch_n>29 && ch_n<40 ) || (ch_n>299 && ch_n<400)) { dtv_m=dtv_m3;}
  if ((ch_n=="4") || (ch_n>39 && ch_n<50 ) || (ch_n>399 && ch_n<500)) { dtv_m=dtv_m4;}
  if ((ch_n=="5") || (ch_n>49 && ch_n<60 ) || (ch_n>499 && ch_n<600)) { dtv_m=dtv_m5;}
  if ((ch_n=="6") || (ch_n>59 && ch_n<70 ) || (ch_n>599 && ch_n<700)) { dtv_m=dtv_m6;}
  if ((ch_n=="7") || (ch_n>69 && ch_n<80 ) || (ch_n>699 && ch_n<800)) { dtv_m=dtv_m7;}
  if ((ch_n=="8") || (ch_n>79 && ch_n<90 ) || (ch_n>799 && ch_n<900)) { dtv_m=dtv_m8;}
  if ((ch_n=="9") || (ch_n>89 && ch_n<100) || (ch_n>899 && ch_n<1000)) { dtv_m=dtv_m9;}
// Ham tv 
  if ((ch_n=="0") || (ch_n>99 && ch_n<110) || (ch_n>349 && ch_n<360) || (ch_n>899 && ch_n<910)) { dtv_m=dtv_mA;}
// add leading
  if (ch_n<10 && ch_n>-1) {ch_n="___ "+ch_n;}
  if (ch_n<100 && ch_n>9) {ch_n="__ "+ch_n; }
  if (ch_n<1000 && ch_n>99) {ch_n="_ "+ch_n;}
 
 // limits 190px by 8 lines Ch. ref.
 // L0-123456789-123456789-123456789
 // L1 ~ RF Ch @ ###.25 Mhz Analog
 // L2 _ ### _ @ ###.5  Mhz Digital
 // L3 ### ### Khz or 
 // L4 ### ### ### hz
 // L5 _ ### _ is a channel
 // L6
 // L7 DTV Ch.## message
 // L8 scrolling messages

 L0="123456789-123456789-1234_CH<br>";
 L1="~RF CH. @ "+ch_fA+mZ+m6+"<br>";
 L2=" "+ch_n+" _ @ "+ch_fD+mZ+m7+"<br>";
 L3="________ "+ch_fDk+mK+" or<br>";
 L4="________ "+ch_fDh+mH+"<br>";
 L5=" "+ch_n+" _ "+ch_m+"<br>";
 L6="<br>";
 L7="Meant "+dtv_m0+ch_n+"?<br>"+dtv_m+"<br>";
 L8=(fm1.small(0))+"<br>";
 $cell_id="txtone";
 if (align=="Y") {$onetxt=L0+L1+L2+L3+L4+L5+L6+L7+L8+L0;} else { $onetxt=L1+L2+L3+L4+L5+L6+L7+L8;}
 show_op()
 }

function show_op()
 {
  document.getElementById($cell_id).style.backgroundColor="azure";
  document.getElementById($cell_id).style.border="1px solid black";
  document.getElementById($cell_id).style.color="blue";
  document.getElementById($cell_id).innerHTML=$onetxt;
  ch_fDk=ch_fDh=m="";
 }
function clear_area()
 {
  document.getElementById($cell_id).style.border="0px solid black";
  document.getElementById($cell_id).innerHTML="";
//  freq_multi()
 }

function freq_multi() 
{
 // -- input routine m --
 var fm_n; var fn_n;
 var inp=prompt("Convert Ghz, Mhz, Khz, hz\nEnter Frequency # (default = hz)","177.500Mhz");
 if (inp!=null && inp!="")
  {
  inp=inp.toUpperCase();
  if (inp<0) {inp=inp*(-1);}
  inp2=inp1=inp;
  fm_n=1;
  if (inp1.match( "H" )) { fm_n=fm_n*1e+0; inp=inp.substr(0,(inp.indexOf("H"))); inp1=inp+" hz";}
  if (inp1.match( "K" )) { fm_n=fm_n*1000; inp=inp.substr(0,(inp.indexOf("K"))); inp1=inp+" Khz";}
  if (inp1.match( "M" )) { fm_n=fm_n*1e+6; inp=inp.substr(0,(inp.indexOf("M"))); inp1=inp+" Mhz";}
  if (inp1.match( "G" )) { fm_n=fm_n*1e+9; inp=inp.substr(0,(inp.indexOf("G"))); inp1=inp+" Ghz";}
  if (inp1.match( "T" )) { fm_n=fm_n*1e+12; inp=inp.substr(0,(inp.indexOf("T"))); inp1=inp+" Thz";}
  if (inp1.match( "P" )) { fm_n=fm_n*1e+15; inp=inp.substr(0,(inp.indexOf("P"))); inp1=inp+" Phz";}
  L1="Frequency Convertor T/G/M/K/hz<hr>"+inp1+" =<br>";
  L2=(inp*fm_n); if ((L2>0) && (L2<1e+9)) {L2=L2+" hz<br>";} else {L2="";}
  L3=(inp*fm_n/1000); if ((L3>0.9) && (L3<1e+9)) {L3=L3+" Khz<br>";} else {L3="";}
  L4=(inp*fm_n/1e+6); if ((L4>0.9) && (L4<1e+9)) {L4=L4+" Mhz<br>";} else {L4="";}
  L5=(inp*fm_n/1e+9); if ((L5>0.9) && (L5<1e+12)) {L5=L5+" Ghz<br>";} else {L5="";}
  L6=(inp*fm_n/1e+12); if ((L6>0.9) && (L6<1e+15)) {L6=L6+" Thz<br>";} else {L6="";}
  L7=(inp*fm_n/1e+15); if ((L7>0.9) && (L7<1e+18)) {L7=L7+" Phz<br>";} else {L7="";}
  L8="";
  if (align=="Y") {$onetxt=L0+L1+L2+L3+L4+L5+L6+L7+L8;} else { $onetxt=L1+L2+L3+L4+L5+L6+L7+L8;}
  show_op()
  } // end inp_m
 } // end freq_multi
// end - js code from vk3khb.gak.net.au July2010



