var Hex='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
var Feedback;
var Values;
var Totals;

function Init()
{
  Feedback=document.getElementById('Feedback');
  document.form.Code.focus();
}

function Validate(FullCode)
{
// start validation
  var Chars=new Array();
  var Values=new Array();
  var Beat=new Array();
  var Destination=new Array();

  var a=0;
  var b=FullCode.length;
  var ThisChar;
  var ThisBeat=0;

  while(a<b)
    {
      ThisChar=FullCode.charAt(a);
      Chars[Chars.length]=ThisChar;
      Beat[Beat.length]=ThisBeat;
      Values[Values.length]=Hex.indexOf(ThisChar);
      ThisBeat++;
      a++;
    }
    
  var Period=ThisBeat;
  var Total=0;
  
  b=Values.length;
  for(a=0;a<b;a++)
    {
      if(Values[a]==0)
        Destination[a]=Beat[a];
      else
        {
          Destination[a]=(Beat[a]+Values[a])%Period;
          Total=Total+Values[a];
        }
    }

  var In=new Array();
  var Out=new Array();

  b=Period;
  for(a=0;a<b;a++)
    {
      In[a]=0;
      Out[a]=0;
    }

  b=Destination.length;
  for(a=0;a<b;a++)
    {
      if(Values[a]!=0)
        {
          In[Destination[a]]++;
          Out[Beat[a]]++;
        }
    }

  if(In.toString()==Out.toString())
    return FullCode;
  else
    return false;
}

function GetAnagrams()
{
  while(Feedback.firstChild)
    Feedback.removeChild(Feedback.firstChild);

  var str=document.form.Code.value.toUpperCase();
  str=str.replace(/\s/g,""); // remove all spaces

// Check syntax
  if(!str.match(/^[0-9A-Z]+$/))
    {
      var E=document.createElement('h4');
      E.appendChild(document.createTextNode('Vanilla siteswaps only please!'));
      Feedback.appendChild(E);

      var E=document.createElement('p');
      E.appendChild(document.createTextNode('I\'m not that clever.'));
      Feedback.appendChild(E);

      return false;
    }


  var a=0;
  var b=str.length;
  Values=new Array();

  while(a<b)
    {
      Values[Values.length]=str.charAt(a);
      a++;
    }

  Totals=new Array(1,1) // 1,1 instead of 0,1 to avoid /0 error later on
  var of=1;

  Totals=new Array(1,1) // 1,1 instead of 0,1 to avoid /0 error later on

  var b=Values.length;
  var of=1;

  for(a=2;a<b+1;a++)
    {
      of=of*a;
      Totals[a]=of;
    }

  Totals.reverse();
  Totals.shift();

  var c=Values.length;
  var b=0;
  var str='';
  var t;

  var list=document.createElement('ul');

  var Total=0;
  for(var a=0;a<of;a++)
    {
      str='';

      t=Values.toString().split(',');


      for(b=0;b<c;b++)
        {
          f=Math.floor(a/Totals[b])%t.length;
          str+=t[f];
          t.splice(f,1);
        }

      if(Validate(str))
        {
          Total++;
          E=document.createElement('li')
          E.appendChild(document.createTextNode(str));
          list.appendChild(E);
        }

    }
  Feedback.appendChild(list);

  var E=document.createElement('h4');
  E.appendChild(document.createTextNode(Total+' out of '+of+' anagrams are valid siteswaps'));
  Feedback.insertBefore(E,Feedback.firstChild);
}

