//////////MATHCATS NEW_COALESCE_DIVISIBLE//////////

//////////DEVELOPPED FOR MATHCATS//////////////////

//////////ALL RIGHTS RESERVED//////////////////////

///(c)2007 Wendy Petti && Maurici Carbó////////////



//////////OBJECTS/////////////////////////////////
True_Base_Example=new Object();

function base_example()
{
this.m_number1=23;
this.m_number2=12;
this.m_row_amount=10;
}

function xyspeed()

{

this.m_xspeed=0;

this.m_yspeed=0;

}



function calculateSpeed (xactual, yactual, xtarget, ytarget)

{

my_xyspeed=new xyspeed();

var Angle=Math.atan2(yactual-ytarget,xactual-xtarget);

var Modul=Math.sqrt(Math.pow(yactual-ytarget,2)+Math.pow(xactual-xtarget,2));

my_xyspeed.m_xspeed=-(Modul*Math.cos(Angle))*.5;

my_xyspeed.m_yspeed=-(Modul*Math.sin(Angle))*.5;

return my_xyspeed;

}



function attraction()

{

this.m_xRightAttracts=-1;

this.m_xLeftAttracts=-1;

this.m_yTopAttracts=-1;

this.m_yBottomAttracts=-1;

this.m_xRightAttracted=-1;

this.m_xLeftAttracted=-1;

this.m_yTopAttracted=-1;

this.m_yBottomAttracted=-1;

}



function oneletter(xletter,numletter)

{

this.m_Order=numletter;

this.m_NameLetter="";

this.m_letter=xletter;

this.m_xDim=0;

this.m_yDim=0;

this.m_xPos=0;

this.m_yPos=0;

this.m_xSpeed=0;

this.m_ySpeed=0;

this.m_FixedStartingLine=0;

	this.m_xtarget=0;

	this.m_ytarget=0;

	this.m_Row=0;

this.m_DanceOrder=0;

this.m_danceAttraction=new attraction();

this.m_targetAttraction=new attraction();

}





function letters_list(stringresult, fontsize, colmodul)

{

this.m_fontsize=fontsize;

this.m_listSize=stringresult;

this.m_TargetCharWidth=colmodul;/////Math.floor((chalkboard_width-this.m_fontsize*5)/(this.m_fontsize/1.5));

this.m_TargetCharHeigth=Math.floor(chalkboard_height/this.m_fontsize);

this.m_ExistsTarget=0;

this.m_ltrLst= new Object(2000);

this.m_scrambled=1;

this.AuxTabNumber=0;

this.AuxCRNumber=0;

this.thisStyle=0;



for (x=0;x<this.m_listSize;x++)

   {

   var textauxnumber="";

   if(x<10000){textauxnumber =textauxnumber + "&nbsp;";}

   if(x<1000){textauxnumber=textauxnumber + "&nbsp;";}

   if(x<100){textauxnumber=textauxnumber + "&nbsp;";}

//   if(x<10){textauxnumber=textauxnumber + "&nbsp;";}

   textauxnumber=textauxnumber+x; 

   this.m_ltrLst[x]=new oneletter(textauxnumber,x);

   this.m_ltrLst[x].m_xPos=Math.floor(Math.random()*(chalkboard_width-this.m_fontsize));

   this.m_ltrLst[x].m_yPos=Math.floor(Math.random()*(chalkboard_height-this.m_fontsize));

   this.m_ltrLst[x].m_xSpeed=Math.floor((Math.random()*8)-4);

   this.m_ltrLst[x].m_ySpeed=Math.floor((Math.random()*8)-4);

   this.m_ltrLst[x].m_NameLetter= "DCh"+x;

	if(x==0)

		{

		this.m_ltrLst[x].m_FixedStartingLine=1;

		this.m_ltrLst[x].m_xtarget=this.m_fontsize/1.5;

		this.m_ltrLst[x].m_ytarget=0;

		}

	else

		{

   	if(this.AuxTabNumber>=this.m_TargetCharWidth)

   		{

   		this.AuxTabNumber=0;

   		this.AuxCRNumber++;

   		this.m_ltrLst[x].m_FixedStartingLine=1;

   		this.m_ltrLst[x].m_Row=this.AuxCRNumber;

   		this.m_ltrLst[x].m_xtarget=0;

   		this.m_ltrLst[x].m_ytarget=this.m_ltrLst[x].m_Row*(this.m_fontsize+1);

   		}

   	else

   		{

   		this.AuxTabNumber++;

   		this.m_ltrLst[x].m_Row=this.AuxCRNumber;

   		this.m_ltrLst[x].m_targetAttraction.m_xLeftAttracted=x-1;		

   		}

   	}		

	}



  for(x=this.m_listSize;x<2000;x++)

    {

    var textauxnumber="";

    if(x<10000){textauxnumber =textauxnumber + "&nbsp;";}

    if(x<1000){textauxnumber=textauxnumber + "&nbsp;";}

    if(x<100){textauxnumber=textauxnumber + "&nbsp;";}

    textauxnumber=textauxnumber+x;

    this.m_ltrLst[x]=new oneletter(textauxnumber,x);

    this.m_ltrLst[x].m_xPos=-1000;

    this.m_ltrLst[x].m_yPos=-1000;

    this.m_ltrLst[x].m_NameLetter= "DCh"+x;

    }





this.m_progressiveiteration=0;

this.p_tornaatallar=ptrntllr;

this.p_x=1;  

  function ptrntllr(colmodul2)

    {

    this.m_TargetCharWidth=colmodul2;

    this.AuxTabNumber=0;

    this.AuxCRNumber=0;

    this.p_x=1;

    this.m_progressiveiteration=1;

    }



}





function progressiveiteration()

  {



  if(True_LettersList.m_progressiveiteration==1)

    {

    if(True_LettersList.p_x<True_LettersList.m_listSize)    

      {

      if(True_LettersList.AuxTabNumber>=True_LettersList.m_TargetCharWidth)

        {

        True_LettersList.AuxTabNumber=0;

        True_LettersList.thisStyle=1;

        True_LettersList.AuxCRNumber++;        

        True_LettersList.m_ltrLst[True_LettersList.p_x].m_FixedStartingLine=1;

        True_LettersList.m_ltrLst[True_LettersList.p_x].m_Row=True_LettersList.AuxCRNumber;

     		True_LettersList.m_ltrLst[True_LettersList.p_x].m_xtarget=0;

        True_LettersList.m_ltrLst[True_LettersList.p_x].m_ytarget=True_LettersList.m_ltrLst[True_LettersList.p_x].m_Row*(True_LettersList.m_fontsize+1);

        }

      else

        {

        True_LettersList.AuxTabNumber++;

        True_LettersList.thisStyle=0;

        True_LettersList.m_ltrLst[True_LettersList.p_x].m_FixedStartingLine=0;

     		True_LettersList.m_ltrLst[True_LettersList.p_x].m_Row=True_LettersList.AuxCRNumber;

   		  True_LettersList.m_ltrLst[True_LettersList.p_x].m_targetAttraction.m_xLeftAttracted=x-1;		     

        }        

      True_LettersList.p_x++;

      }

    else

      {

      if(True_LettersList.p_x<2000)

        {

        True_LettersList.m_ltrLst[True_LettersList.p_x].m_xPos=-1000; 

        True_LettersList.m_ltrLst[True_LettersList.p_x].m_yPos=-1000; 

        parkChalkboard(True_LettersList.p_x);

        True_LettersList.p_x++;

        }



      else

        {

        True_LettersList.m_progressiveiteration=0;

        }

      }

    }

  }







//////////////MAIN INSTANCE OBJECT//////////////////////////

True_LettersList=new letters_list(result,fontsizeresult,columns);

/////////////MAIN INSTANCE OBJECT///////////////////////////



/////////////////EXTERNAL INTERFACE/////////////////

function target(yesno)

{

True_LettersList.m_ExistsTarget=yesno;
redrawsquare();
}

function buttonpressed()

  {

  if(True_LettersList.m_ExistsTarget==0)

    {

    document.inpdata.buttongroup.value="- Sorted -";

    target(1);

    }

  else

    {

    document.inpdata.buttongroup.value="Order them";

    target(0);

    }

  }



function changenumbers(item1)

  {

  redrawsquare();



  }





function changerow(item2)

  {

  redrawsquare();
  
  }



function redrawsquare()

  {

  var item1=document.inpdata.highernumber.selectedIndex;

  var item2=document.inpdata.rowamount.selectedIndex

  True_LettersList.p_tornaatallar(item2);

  True_Base_Example.m_row_amount=item2+1;
  
  var an=0;

  if(item1==0){an=100;} //case 100

  if(item1==1){an=200;} //case 200

  if(item1==2){an=300;} //case 300

  if(item1==3){an=366;} //case 365

  if(item1==4){an=367;} //case 366

  if(item1==5){an=400;} //case 400

  if(item1==6){an=500;} //case 500

  if(item1==7){an=600;} //case 600

  if(item1==8){an=700;} //case 700

  if(item1==9){an=800;} //case 800

  if(item1==10){an=900;} //case 900

  if(item1==11){an=1000;} //case 1000

  if(item1==12){an=2000;} //case 2000

  

  var chalkboardwidth = (item2+1)*fontsizeresult*3.1;

  var chalkboardheigth = Math.floor(1+an/(item2+1))*fontsizeresult*1.05;

  True_LettersList.m_listSize=an;

  chalkboard_width=chalkboardwidth;

  document.images.blacksquare.height=chalkboardheigth;

  document.images.blacksquare.width=chalkboardwidth;

  getChalkboardOffset();

  if(True_LettersList.m_ExistsTarget==1)
    {
    write_text();
    }
  else
    {
    document.inpdata.dancing_explain.value="Order numbers and select the amount of numbers per row."
    }

  document.inpdata.buttonsearchgoogle.value= "Search divisibility by "+True_Base_Example.m_row_amount+" rules";
  }


function write_text()
{
number1=True_Base_Example.m_number1;
number2=True_Base_Example.m_number2;
identification=True_Base_Example.m_row_amount;

document.inpdata.dancing_explain.value="In the 'dancing numbers' blackboard you can see:\n"
document.inpdata.dancing_explain.value+="At the column number 0: Numbers divisible by: "+identification+":\n";
document.inpdata.dancing_explain.value+= "0, "+identification*1+", "+identification*2+", "+identification*3+", "+identification*4+", "+identification*5+",";
document.inpdata.dancing_explain.value+= identification*6+", "+identification*7+", "+identification*8+", "+identification*9+", "+identification*10+", ";
document.inpdata.dancing_explain.value+= identification*11+", "+identification*12+", "+identification*13+", "+identification*14+", "+identification*15+" ...\n";
for (n_iterator=1;n_iterator<identification;n_iterator++)
  {
  document.inpdata.dancing_explain.value+="At the column number "+(n_iterator)+": remainder = "+n_iterator+" When divided by "+identification+":\n";
  document.inpdata.dancing_explain.value+=n_iterator+", "+(n_iterator+identification*1)+", "+(n_iterator+identification*2)+", "+(n_iterator+identification*3)+", "+(n_iterator+identification*4)+", "+(n_iterator+identification*5)+", ";
  document.inpdata.dancing_explain.value+=+(n_iterator+identification*6)+", "+(n_iterator+identification*7)+", "+(n_iterator+identification*8)+", "+(n_iterator+identification*9)+", "+(n_iterator+identification*10)+", ";
  document.inpdata.dancing_explain.value+=+(n_iterator+identification*11)+", "+(n_iterator+identification*12)+", "+(n_iterator+identification*13)+", "+(n_iterator+identification*14)+", "+(n_iterator+identification*15)+" ...\n";
  }

document.inpdata.dancing_explain.value+="\n";
document.inpdata.dancing_explain.value+="Dancing numbers: Modular Arithmetic: Operations Modulo "+identification+" addition: \n";
document.inpdata.dancing_explain.value+="A = "+number1+" B = "+number2+" C = "+(number1+number2)+" \n";
document.inpdata.dancing_explain.value+=number1%identification+" = "+number1+" mod "+identification+" ;  "+number1+" divided by: "+identification+" Remainder= "+number1%identification+"\n"; 
document.inpdata.dancing_explain.value+=number2%identification+" = "+number2+" mod "+identification+" ;  "+number2+" divided by: "+identification+" Remainder= "+number2%identification+"\n"; 
document.inpdata.dancing_explain.value+=(number1+number2)%identification+" = "+(number1+number2)+" mod "+identification+" ;  "+(number1+number2)+" divided by: "+identification+" Remainder= "+(number1+number2)%identification+"\n"; 
document.inpdata.dancing_explain.value+="A + B = C ;  A mod "+identification+" + B mod "+identification+" = C mod "+identification+"\n";
document.inpdata.dancing_explain.value+=number1+" + "+number2+" = "+(number1+number2)+" ; "+(number1%identification)+" + "+(number2%identification)+" = "+((number1%identification)+(number2%identification))+"; "+(number1%identification+number2%identification)+" mod ("+identification+") = "+((number1+number2)%identification)+" \n" ;

document.inpdata.dancing_explain.value+="\n";
document.inpdata.dancing_explain.value+="Dancing numbers: Modular Arithmetic: Operations Modulo "+identification+" subtraction: \n";
document.inpdata.dancing_explain.value+="A = "+number1+" B = "+number2+" C = "+(number1-number2)+" \n";
document.inpdata.dancing_explain.value+=number1%identification+" = "+number1+" mod "+identification+" ;  "+number1+" divided by: "+identification+" Remainder= "+number1%identification+"\n"; 
document.inpdata.dancing_explain.value+=number2%identification+" = "+number2+" mod "+identification+" ;  "+number2+" divided by: "+identification+" Remainder= "+number2%identification+"\n"; 
var nombremodul=0;
nombremodul=(number1-number2)%identification;
while (nombremodul<0){nombremodul=nombremodul + identification;}
document.inpdata.dancing_explain.value+=nombremodul+" = "+(number1-number2)+" mod "+identification+" ;  "+(number1-number2)+" divided by: "+identification+" Remainder= "+(number1-number2)%identification+"\n"; 
document.inpdata.dancing_explain.value+="A - B = C ;  A mod "+identification+" - B mod "+identification+" = C mod "+identification+"\n";
document.inpdata.dancing_explain.value+=number1+" - "+number2+" = "+(number1-number2)+" ; "+(number1%identification)+" - "+(number2%identification)+" = "+((number1%identification)-(number2%identification))+"; "+((number1%identification)-(number2%identification))+" mod ("+identification+") = "+nombremodul+" \n" ;

document.inpdata.dancing_explain.value+="\n";
document.inpdata.dancing_explain.value+="Dancing numbers: Modular Arithmetic: Operations Modulo "+identification+" multiplication: \n";
document.inpdata.dancing_explain.value+="A = "+number1+" B = "+number2+" C = "+(number1*number2)+" \n";
document.inpdata.dancing_explain.value+=number1%identification+" = "+number1+" mod "+identification+" ;  "+number1+" divided by: "+identification+" Remainder= "+number1%identification+"\n"; 
document.inpdata.dancing_explain.value+=number2%identification+" = "+number2+" mod "+identification+" ;  "+number2+" divided by: "+identification+" Remainder= "+number2%identification+"\n"; 
document.inpdata.dancing_explain.value+=(number1*number2)%identification+" = "+(number1*number2)+" mod "+identification+" ;  "+(number1*number2)+" divided by: "+identification+" Remainder= "+(number1*number2)%identification+"\n"; 
document.inpdata.dancing_explain.value+="A * B = C ;  A mod "+identification+" * B mod "+identification+" = C mod "+identification+"\n";
document.inpdata.dancing_explain.value+=number1+" * "+number2+" = "+(number1*number2)+" ; "+(number1%identification)+" * "+(number2%identification)+" = "+((number1%identification)*(number2%identification))+"; "+((number1%identification)*(number2%identification))+" mod ("+identification+") = "+((number1*number2)%identification)+" \n" ;

if(((number1%number2)==0)&&(((number1%identification)%(number2%identification))==0))
  {
  document.inpdata.dancing_explain.value+="\n";
  document.inpdata.dancing_explain.value+="Dancing numbers: Modular Arithmetic: Operations Modulo "+identification+" division: \n";
  document.inpdata.dancing_explain.value+="A = "+number1+" B = "+number2+" C = "+(number1/number2)+" \n";
  document.inpdata.dancing_explain.value+=number1%identification+" = "+number1+" mod "+identification+" ;  "+number1+" divided by: "+identification+" Remainder= "+number1%identification+"\n"; 
  document.inpdata.dancing_explain.value+=number2%identification+" = "+number2+" mod "+identification+" ;  "+number2+" divided by: "+identification+" Remainder= "+number2%identification+"\n"; 
  document.inpdata.dancing_explain.value+=(number1/number2)%identification+" = "+(number1/number2)+" mod "+identification+" ;  "+(number1/number2)+" divided by: "+identification+" Remainder= "+(number1/number2)%identification+"\n"; 
  document.inpdata.dancing_explain.value+="A / B = C ;  A mod "+identification+" / B mod "+identification+" = C mod "+identification+"\n";
  document.inpdata.dancing_explain.value+=number1+" / "+number2+" = "+(number1/number2)+"/1 ; "+(number1/number2)+" mod ("+identification+") = "+((number1/number2)%identification)+" \n" ;  
  }

}


function buttondown1()
{
True_Base_Example.m_number1--;
if(True_Base_Example.m_number1<0){True_Base_Example.m_number1++;}
write_text()
}
function buttonup1()
{
True_Base_Example.m_number1++;
write_text()
}
function buttondown2()
{
True_Base_Example.m_number2--;
if(True_Base_Example.m_number2<0){True_Base_Example.m_number2++;}
write_text()
}
function buttonup2()
{
True_Base_Example.m_number2++;
write_text()
}


function searchgoogle()
{
var textsearch="http://www.google.com/search?hl=en&q=divisibility+by+";
textsearch=textsearch+True_Base_Example.m_row_amount+"+rules";

open(textsearch);

}

/////////////END EXTERNAL INTERFACE/////////////////



////////////////INTERNAL INTERFACE////////////////

function PaintOnChalkboard()

{

for(x=0;x<2000;x++)

   {

   xxx=chalboardxOffset+True_LettersList.m_ltrLst[x].m_xPos;

   yyy=chalboardyOffset+True_LettersList.m_ltrLst[x].m_yPos;

   document.write('<div id="'+True_LettersList.m_ltrLst[x].m_NameLetter+'" style="position:absolute;left:'+xxx+';top:'+yyy+';">');

   document.write(True_LettersList.m_ltrLst[x].m_letter);

   document.write('</div>');

//   alert(True_LettersList.m_ltrLst[x].m_xPos);

   }

}



function getChalkboardOffset()

{

objecteChalkboard=document.getElementById("MathCatAnswer");

chalboardxOffset=objecteChalkboard.offsetLeft;

chalboardyOffset=objecteChalkboard.offsetTop;

//alert(chalboardxOffset+" "+chalboardyOffset);

}



function RepaintChalkboard()

{

for(x=0;x<True_LettersList.m_listSize;x++)

   {

	var AuxID="DCh"+x;

	var AuxObjDiv=document.getElementById(AuxID); 

	AuxObjDiv.style.left=Math.floor(chalboardxOffset+True_LettersList.m_ltrLst[x].m_xPos)+"px";

	AuxObjDiv.style.top=Math.floor(chalboardyOffset+True_LettersList.m_ltrLst[x].m_yPos)+"px";

	}

}

function parkChalkboard(x)

{



 	var AuxID="DCh"+x;

	var AuxObjDiv=document.getElementById(AuxID); 

	AuxObjDiv.style.left=Math.floor(chalboardxOffset+True_LettersList.m_ltrLst[x].m_xPos)+"px";

	AuxObjDiv.style.top=Math.floor(chalboardyOffset+True_LettersList.m_ltrLst[x].m_yPos)+"px";



}





function resit()

{

for(x=0;x<True_LettersList.m_listSize;x++)

	{

	var newPosx=True_LettersList.m_ltrLst[x].m_xPos + True_LettersList.m_ltrLst[x].m_xSpeed;

	if (newPosx<=0){True_LettersList.m_ltrLst[x].m_xSpeed=Math.abs(True_LettersList.m_ltrLst[x].m_xSpeed);}

	if (newPosx>=chalkboard_width-fontsizeresult){True_LettersList.m_ltrLst[x].m_xSpeed=-Math.abs(True_LettersList.m_ltrLst[x].m_xSpeed);}



	True_LettersList.m_ltrLst[x].m_xPos+=True_LettersList.m_ltrLst[x].m_xSpeed;

	

	if((True_LettersList.m_ltrLst[x].m_xPos>chalkboard_width-fontsizeresult)||(True_LettersList.m_ltrLst[x].m_xPos<0)){True_LettersList.m_ltrLst[x].m_xSpeed*=(-1);}

	True_LettersList.m_ltrLst[x].m_yPos+=True_LettersList.m_ltrLst[x].m_ySpeed;

	if((True_LettersList.m_ltrLst[x].m_yPos>chalkboard_height)||(True_LettersList.m_ltrLst[x].m_yPos<0)){True_LettersList.m_ltrLst[x].m_ySpeed*=(-1);}

	}

RepaintChalkboard();



if(True_LettersList.m_ExistsTarget==1)

	{

	for (x=0;x<True_LettersList.m_listSize;x++)

		{

       if(True_LettersList.m_ltrLst[x].m_FixedStartingLine==1)

         {

      	var auxSpeed=calculateSpeed(True_LettersList.m_ltrLst[x].m_xPos,True_LettersList.m_ltrLst[x].m_yPos,True_LettersList.m_ltrLst[x].m_xtarget, True_LettersList.m_ltrLst[x].m_ytarget); 

         True_LettersList.m_ltrLst[x].m_xSpeed=auxSpeed.m_xspeed;

         True_LettersList.m_ltrLst[x].m_ySpeed=auxSpeed.m_yspeed;

         }

		else

			{

      	var auxSpeed=calculateSpeed(True_LettersList.m_ltrLst[x].m_xPos,True_LettersList.m_ltrLst[x].m_yPos,True_LettersList.m_ltrLst[x-1].m_xPos+fontsizeresult*2.75, True_LettersList.m_ltrLst[x-1].m_yPos); 

         True_LettersList.m_ltrLst[x].m_xSpeed=auxSpeed.m_xspeed;

         True_LettersList.m_ltrLst[x].m_ySpeed=auxSpeed.m_yspeed;

			}

		}

	True_LettersList.m_scrambled=0;

	}

else

	{

	if(True_LettersList.m_scrambled==0)

		{

      for (x=0;x<True_LettersList.m_listSize;x++)

         {

         True_LettersList.m_ltrLst[x].m_xSpeed=Math.floor((Math.random()*8)-4);

         True_LettersList.m_ltrLst[x].m_ySpeed=Math.floor((Math.random()*8)-4);

   		   }   

		True_LettersList.m_scrambled=1;

		}

   }



}







//////////////////INIT//////7///////////////////

function init()

{

document.inpdata.highernumber.selectedIndex=2;

True_Base_Example= new base_example();

getChalkboardOffset();

RepaintChalkboard();

setInterval("resit()",100);

setInterval("progressiveiteration()",2)

redrawsquare();

}

function reallocChalkboard()

{

getChalkboardOffset();

RepaintChalkboard();

redrawsquare();

}

///////////////MAIN NAMESPACE//////////////////////

window.onresize=reallocChalkboard;

window.onload=init;

//////////////END MAIN NAMESPACE///////////////////






