function baseFibSQfrm(n,i){  if(n==0){foundFibSQ();return};  if(n>fib(i)*fib(i+1)*2)return;  if( i<1)return;  if(n>=2*Math.pow(fib(i),2)){FibSQdigs[i]=2;baseFibSQfrm(n-2*Math.pow(fib(i),2),i-1)};  if(n>=Math.pow(fib(i),2))  {FibSQdigs[i]=1;baseFibSQfrm(n-  Math.pow(fib(i),2),i-1)};                             {FibSQdigs[i]=0;baseFibSQfrm(n,i-1)};};  var FibSQdigs=new Array(), FibSQUPB, FibSQct,FibSQShow,N,FibSQCTS,FibSQreps,  P=2,  FMT;function foundFibSQ(){ if(FibSQShow)    {var s=revstr(FibSQdigs.slice(1,FibSQUPB).join(""));    if(s=="")s="0";    s=(FibSQdigs[FibSQUPB]==0?"&nbsp;":FibSQdigs[FibSQUPB])+s;    if(FMT=="rows")putmsg(N+": "+s)    else FibSQreps+=(FibSQreps.length>0?",":"")+s} FibSQct++ };function fibsqToInt(maxi){var s=0;for(var i=0;i<=maxi;i++)  s+=FibSQdigs[i]*fib(i)*fib(i);return s};function fibsqreptoint(){var s=0,t="";  var rin=document.CALCfibsqF.fsrep.value;  if(rin.replace(/[012]/g,"")!="")halt("Only digits 0,1 and 2 are allowed");  var r=revstr(rin);  for(var i=0;i<r.length;i++){s+=r.charAt(i)*fib(i+1)*fib(i+1)}; //t=t+" + "+r.charAt(i+1)+"x"+fib(i+1)*fib(i+1) };  putmsg(rin+"(Fib<sup>2</sup>) = "+s) // +"="++t)};function baseFibSQ(n){var maxi=2;N=n;   while(Math.pow(fib(maxi),2)<=n)maxi++;maxi--;   if(maxi==1 &&n>0)maxi=2;   //putmsg("maxi=Fib("+maxi+")="+fib(maxi));   for(var i=0;i<=maxi;i++)FibSQdigs[i]=0;   FibSQUPB=maxi; FibSQct=0; FibSQreps="";   baseFibSQfrm(n,maxi);   if(FibSQShow){     if(FMT=="list")putmsg(n+"= "+FibSQreps+" (Fib<sup>"+P+"</sup>)");     putmsg(FibSQct+ " Fib<sup>"+P+"</sup> representation"+(FibSQct==1?"":"s")+" found for "+n)}   else{ FibSQCTS=FibSQCTS+FibSQct+","};  }function findMAXnbreps(f,t){var nb=0;  if(arguments.length==0){f=eval(checkinput(document.CALCfibsqF.N.value,"input number","noeval"));                          t=eval(checkinput(document.CALCfibsqF.M.value,"up to number","noeval"))}; for(var i=f;i<=t;i++)   {baseFibSQ(i);     if(FibSQct>=nb)putmsg(FibSQct+ " Fib<sup>"+P+"</sup> representation"+(FibSQct==1?"":"s")+" found for "+i);     if(FibSQct>nb)nb=FibSQct;   }};      function doFibSQreps(show){  if(arguments.length==0)show=true;  FibSQShow=show;  FMT=document.CALCfibsqF.fmt[document.CALCfibsqF.fmt.selectedIndex].value;  var n=eval(checkinput(document.CALCfibsqF.N.value,"input number","noeval")),      m=checkinput(document.CALCfibsqF.M.value,"up to number","noeval");  //alert("m="+m+"["+typeof m+"] n="+n+"["+typeof n+"]");  if(isNaN(n)||!isInt(n))halt("The (starting) value ["+n+"] must be a whole number");  if(n<0)halt("Representations cannot be found for negative numbers");  if(m!=""){m=eval(m)}else{m=n}; //alert("m="+m+"["+typeof m+"] n="+n+"["+typeof n+"]");  if(isNaN(m)||!isInt(m))halt("The 'up to' value must be a whole number");  if(m=="")m=n;  if(m<n)halt("The 'up to' number ["+m+"] cannot be smaller than the starting number ["+n+"]");  FibSQCTS="";  for(var i=n;i<=m;i++)baseFibSQ(i);  if(!show)putmsg("Number of Fib<sup>2</sup> reps for "+n+(m>n?" to "+m:"")+": "+FibSQCTS.slice(0,FibSQCTS.length-1));};var fibsqIMGnm;function imginwin(){  window.open(document.fibsqctsIMG.src,"","") };
