EatThis - JavaScript-Quelltext

Quelltext von eatthis.js

Dies ist die Auflistung der Datei eatthis.js, die die Funktionalität für den PizzaDealer und den SaladDealer bereitstellt.

Im Gegensatz zu den meisten PizzaJavaScripts funktioniert das Teil nicht nur in Netscape4.x, Netscape6 und MSIE, sondern auch im Konqueror und in der Opera.

Im folgenden Quelltext sind Prozedurdeklarationen rot und Kommentare grün markiert.
/* Mahlzeitverkaeufer
 * (c) 2002 Ulrich Kritzner
 * Die Verwendung dieses Scripts in kommerziellen Seiten ist kostenpflichtig
 */

function et_FormatValue(num)
{
  num=Math.round(num*100);
  num=num/100;
  var stg=num.toString(),i,ac=0,pnt=0;
  if (stg.charAt(0)==".")
    stg="0"+stg;
  for (i=0;i<stg.length;i++)
  {
    if (pnt)
      ac++;
    if (stg.charAt(i)==".")
      pnt=1;
  }
  if (pnt==0)
    stg=stg+".";
  for (i=ac;i<2;i++)
    stg=stg+"0";
  return stg;
}

function et_LoadCheckImages(nameselected,nameunselected)
{
  if (et_LoadCheckImages.arguments.length<2)
    return -1;
  this.showbtn=1;
  this.SelImg=new Image();
  this.SelImg.src=nameselected;
  this.UnSelImg=new Image();
  this.UnSelImg.src=nameunselected;
}

function et_AddMainOption(name,value)
{
  if (et_AddMainOption.arguments.length<2)
    return;
  var entry=new Object();
  entry.name=name;
  entry.value=value;
  this.MainOptions[this.MainOptions.length]=entry;
}

function et_AddOptionsClass(name)
{
  var i;
  if (et_AddOptionsClass.arguments.length<1)
    return -1;
  if (this.FindOptionsClass(name)>=0)
    return -1;
  var entry=new Object();
  entry.name=name;
  entry.values=new Array();
  for (i=1;i<et_AddOptionsClass.arguments.length;i++)
    entry.values[i-1]=et_AddOptionsClass.arguments[i];
  entry.selected=0;
  this.OptionsClasses[this.OptionsClasses.length]=entry;
  return
    this.OptionsClasses.length-1;
}

function et_AddSubOption(name,classname)
{
  var i;
  if (et_AddSubOption.arguments.length<2)
    return -1;
  if (this.FindOption(name)>=0)
    return -1;
  if (this.FindOptionsClass(classname)<0)
    return -1;
  var entry=new Object();
  entry.name=name;
  entry.oclass=this.FindOptionsClass(classname);
  entry.selected=0;
  this.SubOptions[this.SubOptions.length]=entry;
  return
    this.SubOptions.length-1;
}

function et_AddAndList()
{
  var i;
  if (et_AddAndList.arguments.length<2)
    return;
  var entry=new Object();
  entry.idx=new Array();
  for (i=0;i<et_AddAndList.arguments.length;i++)
  {
    idx=this.FindOption(et_AddAndList.arguments[i]);
    if (idx>=0)
      entry.idx[i]=idx;
  }
  this.AndLists[this.AndLists.length]=entry;
}

function et_AddXorList()
{
  var i,idx;
  if (et_AddXorList.arguments.length<2)
    return;
  var entry=new Object();
  entry.idx=new Array();
  for (i=0;i<et_AddXorList.arguments.length;i++)
  {
    idx=this.FindOption(et_AddXorList.arguments[i]);
    if (idx>=0)
      entry.idx[i]=idx;
  }
  this.XorLists[this.XorLists.length]=entry;
}

function et_FindOption(name)
{
  if (et_FindOption.arguments.length<1)
    return;
  var i;
  for (i=0;i<this.SubOptions.length;i++)
    if (this.SubOptions[i].name==name)
      return i;
  return -1;
}

function et_FindOptionsClass(name)
{
  if (et_FindOptionsClass.arguments.length<1)
    return;
  var i;
  for (i=0;i<this.OptionsClasses.length;i++)
    if (this.OptionsClasses[i].name==name)
      return i;
  return -1;
}

function et_GetOptionsClassValue(name)
{
  return this.FormatValue(this.OptionsClasses[this.FindOptionsClass(name)].values[this.MainIndex]);
}

function et_GetMainOptionValue()
{
  return this.FormatValue(this.MainOptions[this.MainIndex].value);
}

function et_UnSelect(idx)
{
  var i,j;
  if (this.depth>10)
  {
    alert("error in page: recursion overflow");
    return;
  }
  if (this.SubOptions[idx].selected==0)
    return;
  this.depth++;
  this.SubOptions[idx].selected=0;
  for (i=0;i<this.AndLists.length;i++)
    for (j=1;j<this.AndLists[i].idx.length;j++)
      if (this.AndLists[i].idx[j]==idx)
        this.UnSelect(this.AndLists[i].idx[0]);
  this.SubOptions[idx].selected=0;
  if (typeof(this.SubOptions[idx].imgnum)=="number")
    document.images[this.SubOptions[idx].imgnum].src=this.UnSelImg.src;
  this.depth--;
  if ((typeof(this.Update)=="function")&&(this.depth==0))
    this.Update();
}

function et_Select(idx)
{
  var i,k;
  if (this.depth>10)
  {
    alert("error in page: recursion overflow");
    return;
  }
  if (this.SubOptions[idx].selected==1)
    return;
  this.depth++;
  this.SubOptions[idx].selected=1;
  for (i=0;i<this.XorLists.length;i++)
    for (j=0;j<this.XorLists[i].idx.length;j++)
      if (this.XorLists[i].idx[j]==idx)
        for (k=0;k<this.XorLists[i].idx.length;k++)
          this.UnSelect(this.XorLists[i].idx[k]);
  for (i=0;i<this.AndLists.length;i++)
    if (this.AndLists[i].idx[0]==idx)
      for (k=1;k<this.AndLists[i].idx.length;k++)
        this.Select(this.AndLists[i].idx[k]);
  this.SubOptions[idx].selected=1;
  if (typeof(this.SubOptions[idx].imgnum)=="number")
    document.images[this.SubOptions[idx].imgnum].src=this.SelImg.src;
  this.depth--;
  if ((typeof(this.Update)=="function")&&(this.depth==0))
    this.Update();
}

function et_ChangeSelect(idx)
{
  this.depth=1;
  if (this.SubOptions[idx].selected)
    this.UnSelect(idx);
  else
    this.Select(idx);
  this.depth=0;
  if (typeof(this.Update)=="function")
    this.Update();
}

function et_SelectMain(idx)
{
  if (et_SelectMain.arguments.length<1)
    return;
  if ((idx>=0)&&(idx<this.MainOptions.length))
    this.MainIndex=idx;
  var i;
  for (i=0;i<this.MainOptions.length;i++)
    if (typeof(this.MainOptions[i].imgnum)=="number")
    {
      if (i!=idx)
        document.images[this.MainOptions[i].imgnum].src=this.UnSelImg.src;
      else
        document.images[this.MainOptions[i].imgnum].src=this.SelImg.src;
    }
  if (typeof(this.Update)=="function")
    this.Update();
}

function et_WriteMainOptions(separator,showbtn)
{
  var i,stg;
  for (i=0;i<this.MainOptions.length;i++)
  {
    if ((showbtn)&&(this.showbtn))
      this.MainOptions[i].imgnum=document.images.length;
    stg="<a href=\"javascript:"+this.name+
        ".SelectMain("+i+")\">";
    if ((showbtn)&&(this.showbtn))
        stg=stg+"<img src=\"unselected.gif\" border=\"0\">&nbsp;";
    stg=stg+this.MainOptions[i].name+"</a>";
    document.write(stg);
    if (i<this.MainOptions.length)
      document.write(separator);
  }
  this.SelectMain(0);
}

function et_WriteOptions(separator,classname,showbtn)
{
  var oclass=this.FindOptionsClass(classname);
  if (oclass<0)
    return -1;
  var i,stg,num=0;
  for (i=0;i<this.SubOptions.length;i++)
    if (this.SubOptions[i].oclass==oclass)
    {
      if (num>0)
        document.write(separator);
      if ((showbtn)&&(this.showbtn))
        this.SubOptions[i].imgnum=document.images.length;
      stg="<a href=\"javascript:"+this.name+
          ".ChangeSelect("+i+")\">";
      if ((showbtn)&&(this.showbtn))
        stg=stg+"<img src=\"unselected.gif\" border=\"0\">&nbsp;";
      stg=stg+this.SubOptions[i].name+"</a>";
      document.write(stg);
      num++;
    }
}

function et_GetMainOption()
{
  return this.MainOptions[this.MainIndex].name;
}

function et_CleanAll()
{
  this.depth=1;
  for (i=0;i<this.SubOptions.length;i++)
    this.UnSelect(i)
  this.depth=0;
  if (typeof(this.Update)=="function")
    this.Update();
}

function et_GetOptions(separator)
{
  var i,stg="",cnt=0;
  for (i=0;i<this.SubOptions.length;i++)
    if ((this.SubOptions[i].selected)&&
        typeof(this.OptionsClasses[this.SubOptions[i].oclass].values[this.MainIndex])=="number")
    {
      if (cnt)
        stg+=separator;
      stg=stg+this.SubOptions[i].name;
      cnt++
    }
  return stg;
}

function et_GetAllValue()
{
  var i,value=0,cnt=0;
  for (i=0;i<this.SubOptions.length;i++)
    if ((this.SubOptions[i].selected)&&
        typeof(this.OptionsClasses[this.SubOptions[i].oclass].values[this.MainIndex])=="number")
      value+=this.OptionsClasses[this.SubOptions[i].oclass].values[this.MainIndex];
  value+=this.MainOptions[this.MainIndex].value
  return this.FormatValue(value);
}

function et_Init(update)
{
  this.Update=update;
  if (typeof(this.Update)=="function")
    this.Update();
}

function EatThis(name)
{
  this.name=name;
  this.showbtn=0;
  this.depth=0;
  this.MainOptions=new Array();
  this.SubOptions=new Array();
  this.OptionsClasses=new Array();
  this.XorLists=new Array();
  this.AndLists=new Array();
  this.AddMainOption=et_AddMainOption;
  this.MainIndex=0;
  this.FormatValue=et_FormatValue;
  this.LoadCheckImages=et_LoadCheckImages;
  this.AddSubOption=et_AddSubOption;
  this.AddOptionsClass=et_AddOptionsClass;
  this.AddAndList=et_AddAndList;
  this.AddXorList=et_AddXorList;
  this.FindOption=et_FindOption;
  this.FindOptionsClass=et_FindOptionsClass;
  this.GetOptionsClassValue=et_GetOptionsClassValue;
  this.GetMainOptionValue=et_GetMainOptionValue;
  this.UnSelect=et_UnSelect;
  this.Select=et_Select;
  this.ChangeSelect=et_ChangeSelect;
  this.SelectMain=et_SelectMain;
  this.WriteMainOptions=et_WriteMainOptions;
  this.WriteOptions=et_WriteOptions;
  this.GetMainOption=et_GetMainOption;
  this.CleanAll=et_CleanAll;
  this.GetOptions=et_GetOptions;
  this.GetAllValue=et_GetAllValue;
  this.Init=et_Init;
}
Autor: Ulrich Kritzner