// MultiSelect Dropdown JavaScript routines
// Copyright 2005, Logicom (New York)
// www.logicom-inc.com
//
// A Clear option and a Multiple Selection indicator are populated in the Dropdown List as appropriate.
//
// Supports "pseudo" OPTGROUPS; if OPTIONs are indented (THIS IMPLEMENTATAION: supports one level),
// selection of an OPTGROUP item in the Dropdown (which is normally not permitted with OPTGROUP...)
// selects all indented OPTIONS beneath it (a bit more intuitive, no??)
//
// Tested for Opera 8.1, Internet Explorer 6, and FireFox


/*var popUpWin=0;

function popUpWindow(URLStr, TitleStr , left, top, width, height)
{
  if(popUpWin)
  {
    if(!popUpWin.closed) popUpWin.close();
  }
  popUpWin = open(URLStr, TitleStr, 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no,copyhistory=yes,width='+width+',height='+height+',left='+left+', top='+top+',screenX='+left+',screenY='+top+'');
}*/


// don't rely on JavaScript parser default initialization...
var title=publisher=titleOrPublisher=rating=ratingsCriteria=content=contentCriteria=platforms=platformsCriteria=javaScript=null,
    browser=new String(navigator.appName);

function isIE()
{return browser.indexOf("Internet Explorer")>=0;
} // isIE

function isOpera()
{return window.opera;
} // isOpera

function optionClassingNotSupported()
{
 if (isOpera())
    return parseInt(opera.version())<9;
 return true;
} // optionClassingNotSupported

function defined(element)
{
 if (typeof(element)=="undefined")
    return false;
 return element!=null;
} // defined

function beginsWith(string, prefix)
{
 if (prefix.length>string.length)
    return false;
 return string.substring(0, prefix.length)==prefix;
} // beginsWith

function isSpace(letter)
{return letter.length>0&&
        (letter==' '||letter=='\t'||letter=='\n'||
         letter.charCodeAt(0)==160 // character code for nbsp in IE (6)...
        );
} // isSpace

function isSpaceAt(string, offset)
{return offset<string.length&&
        (string.charAt(offset)==' '||string.charAt(offset)=='\t'||string.charAt(offset)=='\n'||
         string.charCodeAt(offset)==160 // character code for nbsp in IE (6)...
        );
} // isSpaceAt

function trim(string)
{var start, stop, length=string.length;

 if (string==null)
    return null;
 for (start=0; start<length; start++)
     if (!isSpace(string.charAt(start)))
        break;
 for (stop=length-1; stop>=0; stop--)
     if (!isSpace(string.charAt(stop)))
        break;
 return string.substring(start, stop+1);
} // trim

function rTrim(string)
{var stop, length=string.length;

 if (string==null)
    return null;
 for (stop=length-1; stop>=0; stop--)
     if (!isSpace(string.charAt(stop)))
        break;
 return string.substring(0, stop+1);
} // rTrim

function replaceFirst(string, substringBefore, substringAfter)
{var offset=string.indexOf(substringBefore);

 if (offset<0)
    return string;
 return string.substring(0, offset)+
        substringAfter+
        string.substring(offset+substringBefore.length);
} // replaceFirst

function preserveIndent(option, prefix)
{var offset, innerHTML=option.innerHTML, length=innerHTML.length;

 if (innerHTML==null)
    return null;
 for (offset=0; offset<length; offset++)
     if (innerHTML.charCodeAt(offset)==160) // &nbsp;
        break;
     else if (!isSpaceAt(innerHTML, offset))
             break;
 return prefix+rTrim(innerHTML.substring(offset));
} // preserveIndent

function empty(string)
{
 if (string==null)
    return true;
 if (!defined(string))
    return false;
 return trim(string)=="";
} // empty

 function endsWith(string, suffix)
 {
  if (!(defined(string)&&defined(suffix)))
     return false;
  var length=suffix.length, stringLength=string.length;
  return length>0&&length<=stringLength&&
         string.substring(stringLength-length)==suffix;
 } // endsWith

function getElementById(id)
{

 if (document.all&&!document.getElementById)
    return document.all(id); // Mozilla...
 return document.getElementById(id);
} // getElementById

function getElementByTagName(node, tagName)
{var elements;

 if (!defined(node))
    return null;
 elements=node.getElementsByTagName(tagName);
 if (defined(elements))
    {
     return elements[0];
    }
 return null;
} // getElementByTagName

function getElement(id)
{var element=getElementById(id);

 if (defined(element))
    return element;
 alert ("Page Layout Error: cannot find document element \""+id+"\""+advice);
 return null;
} // getElement

function checkEnterKey(e, submitId)
{
  var key = window.event ? e.keyCode : e.which;
  if (defined(key) && key==13) {
     if (!defined(submitId)) {
       alert ("Page Layout Error: incorrect use of \"checkEnterKey\" routine"+advice);
       return false;
     }

     var submit=getElementById(submitId);

     if (defined(submit)) {
       submit.click();
       return false;
     }

     alert ("Page Layout Error: cannot find document element \""+submitId+"\""+advice);
  }
  return true;
} // checkEnterKey

function indicator(text)
{
 return text==MULTI_DROPDOWN_MULTIPLE_ITEMS_SELECTED_INDICATOR||
        text==MULTI_DROPDOWN_CLEAR_SELECTION_INDICATOR||
        text==MULTI_DROPDOWN_CLEAR_SELECTIONS_INDICATOR;
} // indicator

function nOptions(dropdown) // #OPTIONs with non-blank values and are not special indicators...
{var count, option;

 for (count=option=0; option<dropdown.options.length; option++)
     if ((!empty(dropdown.options[option].value))&&
         !indicator(dropdown.options[option].text)
        )
        count++;
 return count;
} // nOptions

function indented(string)
{var offset;

 if (optionClassingNotSupported()&&
     beginsWith(string, MULTI_DROPDOWN_ITEM_SELECTED_PREFIX)
    )
    offset=MULTI_DROPDOWN_ITEM_SELECTED_PREFIX.length;
 else offset=0;
 return string.length>0&&isSpaceAt(string, offset);
} // indented

function indentation(dropdown)
{var option, text, start, offset;

 if (!defined(dropdown))
    return 0;
 for (option=0; option<dropdown.options.length; option++)
     if (!empty(dropdown.options[option].value))
        {text=dropdown.options[option].text;
         if (indented(text))
            {if (optionClassingNotSupported()&&
                 beginsWith(text, MULTI_DROPDOWN_ITEM_SELECTED_PREFIX)
                )
                start=MULTI_DROPDOWN_ITEM_SELECTED_PREFIX.length+1;
             else start=1;
             for (offset=start; offset<text.length; offset++)
                 if (!isSpaceAt(text, offset))
                    break;
             return offset-1-start;
            }
        }
 return 0;
} // indentedDropdown

function dropdownWidth(multiDropdown)
{var offset, option, maxLength;

 if (!defined(multiDropdown)||
     multiDropdown.options.length<1
    )
    return 0;
 for (offset=0; offset<multiDropdown.options[0].text.length; offset++)
     if (!isSpaceAt(multiDropdown.options[0].text, offset))
        break;
 if (multiDropdown.options[0].text.length>0&&
     offset==multiDropdown.options[0].text.length // first option apparently was a spacer...
    )
    return offset;
 for (option=maxLength=0; option<multiDropdown.options.length; option++)
     if (multiDropdown.options[option].text.length>maxLength)
        maxLength=multiDropdown.options[option].text.length;
 return maxLength;
} // dropdownWidth

function containsClass(classes, className)
{var delimitedClasses=" "+classes+" ";

 return delimitedClasses.indexOf(" "+className+" ")>=0;
} // containsClass

function updateMultiSelect(multiDropdown, trigger, selectedListFieldId)
{var pseudoOptGroupIndent, option, nextOption, optionText, optionClass,
     selections, selectedListField, optionSelected, optionSelectedIndex, optionSelectedValue, firstSelected,
     groups, groupSelection, multipleIndicator, clearIndicator, selectionCount, singleClearSelection,
     selection;

 if (!(defined(multiDropdown)&&defined(trigger)&&defined(selectedListFieldId)))
    {alert ("Page Layout Error: incorrect use of \"multiSelect\" routine"+advice);
     return false;
    }
 selectedListField=getElement(selectedListFieldId);
 if (!defined(selectedListField)) {
    alert ("Page Layout Error: incorrect use of \"multiSelect\" routine"+advice);
     return false;
 }
 optionSelected=trigger.text;
 optionSelectedIndex=trigger.parentNode.selectedIndex;
 optionSelectedValue=trigger.value;
 pseudoOptGroupIndent=indentation(multiDropdown);
 multipleIndicator=clearIndicator=firstSelected=-1;
 for (option=0; option<multiDropdown.options.length; option++){
      optionText=multiDropdown.options[option].text;
      optionClass=multiDropdown.options[option].className;
      if (optionClassingNotSupported()&& containsClass(optionClass, "listItemSelected")&&
            beginsWith(optionText, MULTI_DROPDOWN_ITEM_SELECTED_PREFIX)  ){ // strip off prefix...
         optionText=optionText.substring(MULTI_DROPDOWN_ITEM_SELECTED_PREFIX.length);
      }
      if (optionText==MULTI_DROPDOWN_MULTIPLE_ITEMS_SELECTED_INDICATOR) {
         if (multipleIndicator==-1)
             multipleIndicator=option;
      }else if (optionText==MULTI_DROPDOWN_CLEAR_SELECTION_INDICATOR||
               optionText==MULTI_DROPDOWN_CLEAR_SELECTIONS_INDICATOR ){
              if (clearIndicator<0)
                  clearIndicator=option;
      } else if ((!empty(multiDropdown.options[option].value))){
              if (optionSelected==MULTI_DROPDOWN_CLEAR_SELECTION_INDICATOR||
                  optionSelected==MULTI_DROPDOWN_CLEAR_SELECTIONS_INDICATOR ){

                   if (pseudoOptGroupIndent>0 && !indented(optionText))
                       multiDropdown.options[option].className="listItemNotSelected listGroupLabel";
                   else {
                     multiDropdown.options[option].className="listItemNotSelected";
                     multiDropdown.options[option].innerHTML=replaceFirst(multiDropdown.options[option].innerHTML,MULTI_DROPDOWN_ITEM_SELECTED_PREFIX,"");
                     //multiDropdown.options[option].innerHTML = "Test"+option
                   }
                    // We could just do an unconditional assignment, but this probably causes less work for the browser,
                    // so our code might run faster...
                   if (optionClassingNotSupported()&&
                          beginsWith(multiDropdown.options[option].text,  MULTI_DROPDOWN_ITEM_SELECTED_PREFIX ) ){
                       multiDropdown.options[option].className="listItemNotSelected";
                       multiDropdown.options[option].innerHTML=replaceFirst(multiDropdown.options[option].innerHTML,MULTI_DROPDOWN_ITEM_SELECTED_PREFIX,"");
                   }
               } else if (option==optionSelectedIndex) {
                   optionClass="listItemSelected";
                   if (optionClassingNotSupported()){
                    multiDropdown.options[option].innerHTML=
                    replaceFirst(multiDropdown.options[option].innerHTML,MULTI_DROPDOWN_ITEM_SELECTED_PREFIX,"");
                    multiDropdown.options[option].innerHTML=
                    preserveIndent(multiDropdown.options[option],MULTI_DROPDOWN_ITEM_SELECTED_PREFIX);
                   }
                   if (pseudoOptGroupIndent>0&& !indented(multiDropdown.options[option].text) ){
                      optionClass+=" listGroupLabel";
                       if (multiDropdown.options[option].className!=optionClass)
                          multiDropdown.options[option].className=optionClass;
                       for (nextOption=option+1; nextOption<multiDropdown.options.length; nextOption++)
                           if (!empty(multiDropdown.options[nextOption].value)) {
                              if (!indented(multiDropdown.options[nextOption].text))
                                  break;
                               if (!containsClass(multiDropdown.options[nextOption].className,"listItemSelected" ) ){
                                  multiDropdown.options[nextOption].className="listItemSelected";
                                   if (optionClassingNotSupported())
                                      multiDropdown.options[nextOption].innerHTML=preserveIndent(multiDropdown.options[nextOption],
                                                                                                 MULTI_DROPDOWN_ITEM_SELECTED_PREFIX
                                                                                                );
                               }
                           }
                       option=nextOption-1;
                   }else if ((optionSelected != MULTI_DROPDOWN_CLEAR_SELECTION_INDICATOR || optionSelected != MULTI_DROPDOWN_CLEAR_SELECTIONS_INDICATOR) && multiDropdown.options[option].className!=optionClass)
                           multiDropdown.options[option].className=optionClass;
              }
       }
 }
 //alert (":"+selections+":"); // useful debugging statement to confirm that selections are correct...
 if (pseudoOptGroupIndent>0) // check to see if they implicitly selected an entire group...
    for (option=0; option<multiDropdown.options.length; option++)
        if ((!empty(multiDropdown.options[option].value))&&
            !indicator(multiDropdown.options[option].text)
           )
           if ((!indented(multiDropdown.options[option].text))&&
               !containsClass(multiDropdown.options[option].className, "listItemSelected")
              )
              {groupSelected=true;
               for (nextOption=option+1; nextOption<multiDropdown.options.length; nextOption++)
                   if (!empty(multiDropdown.options[nextOption].value))
                      {if (!indented(multiDropdown.options[nextOption].text))
                          break;
                       if (!containsClass(multiDropdown.options[nextOption].className, "listItemSelected"))
                          {groupSelected=false; break;
                          }
                      }
               if (groupSelected)
                  {multiDropdown.options[option].className="listItemSelected listGroupLabel";
                   if (optionClassingNotSupported()&&
                       !beginsWith(multiDropdown.options[option].text, MULTI_DROPDOWN_ITEM_SELECTED_PREFIX)
                      )
                      multiDropdown.options[option].innerHTML=preserveIndent(multiDropdown.options[option],
                                                                             MULTI_DROPDOWN_ITEM_SELECTED_PREFIX
                                                                            );
                  }
               option=nextOption-1;
              }
 selections="";
 for (option=selectionCount=groups=groupSelection=0;
      option<multiDropdown.options.length;
      option++
     )
     if (containsClass(multiDropdown.options[option].className, "listItemSelected"))
        {if (firstSelected==-1)
            firstSelected=option;
         selectionCount++;
         if (selections!="")
            selections+=MULTI_DROPDOWN_DELIMITER;
         selection=trim(multiDropdown.options[option].value);
         if (pseudoOptGroupIndent>0&&!indented(multiDropdown.options[option].text))
            {groups++;
             selection+=MULTI_DROPDOWN_GROUP_ITEM_SUFFIX;
            }
         selections+=selection;
        }
 if (groups==1)
    for (option=0; option<multiDropdown.options.length; option++)
        if ((!empty(multiDropdown.options[option].value))&&
            (!indicator(multiDropdown.options[option].text))&&
            (!indented(multiDropdown.options[option].text))&&
            containsClass(multiDropdown.options[option].className, "listItemSelected")
           )
           {groupSelection=1;
            for (option++; option<multiDropdown.options.length; option++)
                {if ((!indented(multiDropdown.options[option].text))||
                     multiDropdown.options[option].className!="listItemSelected"
                    )
                    break;

                 groupSelection++;
                }
            break;
           }
 selectedListField.value=selections;
 if (clearIndicator>=0)
    if (groups>0||selectionCount>0)
       {if (groups==0&&selectionCount>1||
           groups==1&&selectionCount!=groupSelection||
           groups>1
          )
          {if (multiDropdown.options[clearIndicator].text!=MULTI_DROPDOWN_CLEAR_SELECTIONS_INDICATOR)
              multiDropdown.options[clearIndicator].text=MULTI_DROPDOWN_CLEAR_SELECTIONS_INDICATOR;
          }
        else if (multiDropdown.options[clearIndicator].text!=MULTI_DROPDOWN_CLEAR_SELECTION_INDICATOR)
                multiDropdown.options[clearIndicator].text=MULTI_DROPDOWN_CLEAR_SELECTION_INDICATOR;
        if (multiDropdown.options[clearIndicator].className!="listItemNotSelected")
           multiDropdown.options[clearIndicator].className="listItemNotSelected";
       }
    else {if (multiDropdown.options[clearIndicator].className!="listItemNotSelected disabledFont")
             multiDropdown.options[clearIndicator].className="listItemNotSelected disabledFont";
          if (multiDropdown.options[clearIndicator].text!=MULTI_DROPDOWN_CLEAR_SELECTION_INDICATOR)
             multiDropdown.options[clearIndicator].text=MULTI_DROPDOWN_CLEAR_SELECTION_INDICATOR;
         }
 if (optionSelected==MULTI_DROPDOWN_CLEAR_SELECTION_INDICATOR||
     optionSelected==MULTI_DROPDOWN_CLEAR_SELECTIONS_INDICATOR
    )
    {if (multipleIndicator>=0&&
          multiDropdown.options[multipleIndicator].className!="listItemNotSelected disabledFont"
         )
         multiDropdown.options[multipleIndicator].className="listItemNotSelected disabledFont";
     if (isOpera()) // playing with items in a DropDown confuses Opera;
        multiDropdown.className=multiDropdown.className; // this apparently triggers it to reset its display of them (version 8.1...)

    var t =multiDropdown.className;

    document.getElementById(multiDropdown.name).className = "";
    document.getElementById(multiDropdown.name).className = t;

     multiDropdown.options[0].selected=true;
     return true;
    }
 if (groups==0&&selectionCount>1||
     groups==1&&groupSelection<selectionCount||
     groups>1
    )
    {firstSelected=multipleIndicator;
     if (multipleIndicator>=0&&
         multiDropdown.options[multipleIndicator].className!="listItemNotSelected"
        )
        multiDropdown.options[multipleIndicator].className="listItemNotSelected";
    }
 else if (multipleIndicator>=0&&
          multiDropdown.options[multipleIndicator].className!="listItemNotSelected disabledFont"
         )
         multiDropdown.options[multipleIndicator].className="listItemNotSelected disabledFont";
 if (firstSelected<0)
    firstSelected=0;
 if (isOpera()) // playing with items in a DropDown confuses Opera;
    multiDropdown.className=multiDropdown.className; // this apparently triggers it to reset its display of them (version 8.1...)
 if (multiDropdown.options.length>0&&
     !multiDropdown.options[firstSelected].selected
    )
    multiDropdown.options[firstSelected].selected=true;
 return true;
} // updateMultiSelect

function loadMultiSelect(multiDropdown, selectionField)
{var selections, selectedChoices, pseudoOptGroupIndent,
     option, nextOption, choice, choices, multipleIndicator, clearIndicator,
     firstSelected, selectionCount, groups, groupSelections, groupSelected, groupSelection;

 if (!(defined(multiDropdown)&&defined(selectionField)))
    {alert ("Page Layout Error: incorrect use of \"multiSelect\" routine"+advice);
     return false;
    }
 selections=selectionField.value;
 selectedChoices=selections.split(MULTI_DROPDOWN_DELIMITER);
 pseudoOptGroupIndent=indentation(multiDropdown);
 if (pseudoOptGroupIndent>0)
    for (choice=choices=0; choice<selectedChoices.length; choice++)
        {if (!endsWith(selectedChoices[choice],
                       MULTI_DROPDOWN_GROUP_ITEM_SUFFIX
                      )
            ) // ignore items marked as group members for now and mark a group as selected based on the individual items selected (safer...)
            {if (choices<choice)
                selectedChoices[choices]=selectedChoices[choice];
             choices++;
            }
        }
 else choices=selectedChoices.length;
 multipleIndicator=clearIndicator=-1;
 for (option=0; option<multiDropdown.options.length; option++)
     if (pseudoOptGroupIndent>0&&
         !indented(multiDropdown.options[option].text)
        )
        multiDropdown.options[option].className="listItemNotSelected listGroupLabel";
     else multiDropdown.options[option].className="listItemNotSelected";
 for (option=0; option<multiDropdown.options.length; option++)
     {optionText=trim(multiDropdown.options[option].text);
      if (optionText==MULTI_DROPDOWN_MULTIPLE_ITEMS_SELECTED_INDICATOR)
         {if (multipleIndicator<0)
             multipleIndicator=option;
         }
      else if (optionText==MULTI_DROPDOWN_CLEAR_SELECTION_INDICATOR||
               optionText==MULTI_DROPDOWN_CLEAR_SELECTIONS_INDICATOR
              )
              {if (clearIndicator<0)
                  clearIndicator=option;
              }
      else if (!(pseudoOptGroupIndent>0&&
                 !indented(multiDropdown.options[option].text)
               )
              )
              {for (choice=0; choice<choices; choice++)
                   if ((!empty(multiDropdown.options[option].value))&&
                       multiDropdown.options[option].value==selectedChoices[choice]
                      )
                      {multiDropdown.options[option].className="listItemSelected";
                       if (optionClassingNotSupported())
                          multiDropdown.options[option].innerHTML=preserveIndent(multiDropdown.options[option],
                                                                                 MULTI_DROPDOWN_ITEM_SELECTED_PREFIX
                                                                                );
                       break;
                      }
              } // we probably don't need this brace, but I've seen some interpreters get confused when you break (the outer loop gets cancelled too...)
     }
 firstSelected=-1;
 for (option=selectionCount=groups=groupSelections=0; option<multiDropdown.options.length; option++)
     if ((!empty(multiDropdown.options[option].value))&&
         !indicator(multiDropdown.options[option].text)
        )
        if (multiDropdown.options[option].className=="listItemSelected")
           {if (firstSelected==-1)
               firstSelected=option;
            selectionCount++;
           }
        else if (pseudoOptGroupIndent>0&&
                 !indented(multiDropdown.options[option].text)
                )
                {groupSelected=false; groupSelection=0;
                 for (nextOption=option+1; nextOption<multiDropdown.options.length; nextOption++)
                     if (!empty(multiDropdown.options[nextOption].value))
                        {if (!indented(multiDropdown.options[nextOption].text))
                            break;
                         groupSelected=true;
                         if (multiDropdown.options[nextOption].className!="listItemSelected")
                            {groupSelected=false; break;
                            }
                         selectionCount++;
                         if (firstSelected==-1)
                            firstSelected=nextOption;
                         groupSelection++;
                        } // if all items in a group are selected, select the line with the group name in it too...
                 if (groupSelected)
                    {multiDropdown.options[option].className="listItemSelected listGroupLabel";
                     if (optionClassingNotSupported())
                        multiDropdown.options[option].innerHTML=preserveIndent(multiDropdown.options[option],
                                                                               MULTI_DROPDOWN_ITEM_SELECTED_PREFIX
                                                                              );
                     groups++; groupSelections+=groupSelection;
                     if (firstSelected==-1||option<firstSelected)
                        firstSelected=option;
                    }
                 option=nextOption-1;
                }
 if (groups==0&&selectionCount>1||
     groups==1&&selectionCount!=groupSelections||
     groups>1
    )
    {firstSelected=multipleIndicator;
     if (multipleIndicator>=0&&
         multiDropdown.options[multipleIndicator].className!="listItemNotSelected"
        )
        multiDropdown.options[multipleIndicator].className="listItemNotSelected";
    }
 else if (multipleIndicator>=0&&
          multiDropdown.options[multipleIndicator].className!="listItemNotSelected disabledFont"
         )
         multiDropdown.options[multipleIndicator].className="listItemNotSelected disabledFont";
 if (clearIndicator>=0)
    if (groups>0||selectionCount>0)
       {if (groups==0&&selectionCount>1||
           groups==1&&selectionCount!=groupSelections||
           groups>1
          )
          {if (multiDropdown.options[clearIndicator].text!=MULTI_DROPDOWN_CLEAR_SELECTIONS_INDICATOR)
              multiDropdown.options[clearIndicator].text=MULTI_DROPDOWN_CLEAR_SELECTIONS_INDICATOR;
          }
        else if (multiDropdown.options[clearIndicator].text!=MULTI_DROPDOWN_CLEAR_SELECTION_INDICATOR)
                multiDropdown.options[clearIndicator].text=MULTI_DROPDOWN_CLEAR_SELECTION_INDICATOR;
        if (multiDropdown.options[clearIndicator].className!="listItemNotSelected")
           multiDropdown.options[clearIndicator].className="listItemNotSelected";
       }
    else {if (multiDropdown.options[clearIndicator].className!="listItemNotSelected disabledFont")
             multiDropdown.options[clearIndicator].className="listItemNotSelected disabledFont";
          if (multiDropdown.options[clearIndicator].text!=MULTI_DROPDOWN_CLEAR_SELECTION_INDICATOR)
             multiDropdown.options[clearIndicator].text=MULTI_DROPDOWN_CLEAR_SELECTION_INDICATOR;
         }
 if (firstSelected<0)
    firstSelected=0;
 if (isOpera()) // playing with items in a DropDown confuses Opera;
    multiDropdown.className=multiDropdown.className; // this apparently triggers it to reset its display of them (version 8.1...)
 if (multiDropdown.options.length>0&&
     !multiDropdown.options[firstSelected].selected
    )
    multiDropdown.options[firstSelected].selected=true;
 return true;
} // loadMultiSelect

function resetMultiSelect(multiDropdown, selectedListField)
{var problems=false, option, pseudoOptGroupIndent, optionText, optionClass;

 multipleIndicator=-1;
 if (defined(multiDropdown))
    {pseudoOptGroupIndent=indentation(multiDropdown);
     for (option=multiDropdown.options.length-1; option>=0; option--)
         {optionText=multiDropdown.options[option].text;
          optionClass=multiDropdown.options[option].className;
          if (indicator(optionText))
             {if (optionClass!="listItemNotSelected disabledFont")
                 {multiDropdown.options[option].className="listItemNotSelected disabledFont";
                  if (optionText==MULTI_DROPDOWN_CLEAR_SELECTIONS_INDICATOR)
                     multiDropdown.options[option].text=MULTI_DROPDOWN_CLEAR_SELECTION_INDICATOR;
                 }
             }
          else {if (optionClassingNotSupported()&&
                    containsClass(optionClass, "listItemSelected")&&
                    beginsWith(optionText, MULTI_DROPDOWN_ITEM_SELECTED_PREFIX)
                   ) // strip off prefix...
                   optionText=optionText.substring(MULTI_DROPDOWN_ITEM_SELECTED_PREFIX.length);
                optionClass="listItemNotSelected";
                if (pseudoOptGroupIndent>0&&
                    !indented(optionText)
                   )
                   optionClass+=" listGroupLabel";
                // we could just do an unconditional assignment, but this probably causes less work for the browser,
                // so our code might run faster...
                if (optionText!=multiDropdown.options[option].text)
                   multiDropdown.options[option].innerHTML=replaceFirst(multiDropdown.options[option].innerHTML,
                                                                        MULTI_DROPDOWN_ITEM_SELECTED_PREFIX,
                                                                        ""
                                                                       );
                if (optionClass!=multiDropdown.options[option].className)
                   multiDropdown.options[option].className=optionClass;
               }
         }
     multiDropdown.options[0].selected=true;
     if (isOpera()) // playing with items in a DropDown confuses Opera;
        multiDropdown.className=multiDropdown.className; // this apparently triggers it to reset its display of them (version 8.1...)
    }
 else problems=true;

 if (defined(selectedListField))
    selectedListField.value="";
 else problems=true;

 return !problems;
} // resetMultiSelect
function resetLastRatingCriteria(){
  var problems=false;

   if (!resetMultiSelect(rating, ratingsCriteria))
           problems=true;
   if (!resetMultiSelect(platforms, platformsCriteria))
      problems=true;
   if (defined('duration')) {
    document.forms[0].duration.options[0].selected=true;
   }
  return !problems;
} // resetLastRatingCriteria

function resetCriteria()
{
 var problems=false;

 if(document.forms["search"].title != null){
    document.forms["search"].title.value = "";
 } else{
    problems=true;
 }

  if(document.forms["search"].publisher != null){
    document.forms["search"].publisher.value = "";
  } else{
    problems=true;
  }

  if(document.forms["search"].titleOrPublisher != null){
    document.forms["search"].titleOrPublisher.value = "";
  } else{
    problems=true;
  }

  if(document.forms["search"].rating != null){
    document.forms["search"].rating.value = "";
  } else{
    problems=true;
  }

  if(document.forms["search"].ratingsCriteria != null){
    document.forms["search"].ratingsCriteria.value = "";
  } else{
    problems=true;
  }

  if(document.forms["search"].content != null){
    document.forms["search"].content.value = "";
  } else{
    problems=true;
  }

  if(document.forms["search"].contentCriteria != null){
    document.forms["search"].contentCriteria.value = "";
  } else{
    problems=true;
  }

  if(document.forms["search"].platforms != null){
    document.forms["search"].platforms.value = "";
  } else{
    problems=true;
  }

  if(document.forms["search"].platformsCriteria != null){
    document.forms["search"].platformsCriteria.value = "";
  } else{
    problems=true;
  }

 if (defined(title)){
    title.value="";
 }else {
   if(document.forms["search"].searchType != null){
    document.forms["search"].searchType.item("rdoTitle").checked = true;
   } else
    problems=true;
 }


 if (defined(titleOrPublisher)){ // added by NS.Andranik
     titleOrPublisher.value="";
 }else{
   if(document.forms["search"].titleOrPublisher != null){
    document.forms["search"].titleOrPublisher.value = "";
   } else
    problems=true;
 }

 // Ids of the form "Rating:N" are used for a Rating Label Image Search...
 var checkbox=getElementById("Rating:0");
 if (defined(checkbox))
    {var index=0;

     while (defined(checkbox))
           {if (checkbox.checked)
               checkbox.checked=false; // a little quicker since we don't trigger events...
            index++;
            checkbox=getElementById("Rating:"+index);
           }
    }
 else if (!resetMultiSelect(rating, ratingsCriteria)){
    if (!resetMultiSelect(document.forms["search"].rating, contentCriteria)){
     problems=true;
    }
 }

 if (!resetMultiSelect(content, contentCriteria)){
    if (!resetMultiSelect(document.forms["search"].content, contentCriteria)){
     problems=true;
    }
 }

 if (!resetMultiSelect(platforms, platformsCriteria)){
   if (!resetMultiSelect(document.forms["search"].platforms, contentCriteria)){
     problems=true;
   }
 }

 if (defined(title))
    title.focus();

 return !problems;
} // resetCriteria

function eol(field) // End Of Line
{
 if (!defined(field) || field == null)
    return false;
// focus();
// field.focus();

 if (isIE())
    {var text=field.createTextRange();
     text.collapse(false); text.select();
    }
 else {var text=new String(field.text),
           length=text.length;

       field.selectionStart=length; field.selectionEnd=length;
      }
} // eol

function completed()
{
 if (defined(title)&&title.value!="")
    return true;
 // Ids of the form "Rating:N" are used for a Rating Label Image Search...
 var checkbox=getElementById("Rating:0");
 if (defined(checkbox))
    {var index=0;

     while (defined(checkbox))
           {if (checkbox.checked)
               return true;
            index++;
            checkbox=getElementById("Rating:"+index);
           }
    }
 else if (defined(ratingsCriteria)&&ratingsCriteria.value!="")
         return true;
 if (defined(contentCriteria)&&contentCriteria.value!="")
    return true;
 if (defined(platforms)&&platforms.value!="")
    return true;
 //if (confirm("Do you want to list all Games?\r"+
 //            "(if not, click on the Cancel button and enter some Search criteria...)"
 //           )
 //   )
    return true;
 //eol ();
 //return false;
} // completed

function notify(labelId, message) // this is not critical, so if there's something wrong we won't flag errors...
{var label;

 if (!(defined(labelId)&&defined(message)))
    {alert ("Page Layout Error: incorrect use of \"notify\" script routine"+advice);
     return false;
    }
 label=getElement(labelId);
 if (!defined(label))
    return false;
 label.innerHTML=message;
 return true;
} // notify

function setClass(id, className)
{var element=getElement(id);

 if (defined(element))
    {element.className=className;
     return true;
    }
 return false;
} // setClass

function restorePreEdit(id, preParamValue)
{var param=getElement(id);
 //alert("id="+id+" param.value="+param.value+" preParamValue="+preParamValue);

 if (defined(param)&&defined(preParamValue))
    {param.value=preParamValue;
    //alert("defined id="+id+" param.value="+param.value+" preParamValue="+preParamValue);
     return true;
    }
 return false;
} // restorePreEdit

function restorePreEdits()
{var problems=false;

 if (!defined(preEdit))
    return false;
    // modified by NS.Andranik
/* if (!restorePreEdit("title", preEdit.title))
    problems=true;
 if (!restorePreEdit("publisher", preEdit.publisher))
    problems=true;*/
 if (!restorePreEdit("ratingsCriteria", preEdit.ratingsCriteria))
    problems=true;
 if (!restorePreEdit("contentCriteria", preEdit.contentCriteria))
    problems=true;
 if (!restorePreEdit("platformsCriteria", preEdit.platformsCriteria))
    problems=true;
 return !problems;
} // restorePreEdits

// MultiSelect Dropdown JavaScript routines
// Copyright 2005, Logicom (New York)
// www.logicom-inc.com

function bodyLoad()
{
  // modified by NS.Andranik
 //title=getElement("title"); publisher=getElementById("publisher");

 titleOrPublisher = getElementById("titleOrPublisher")

 // Ids of the form "Rating:N" are used for a Rating Label Image Search...
 if (!defined(getElementById("Rating:0")))
    {rating=getElement("rating"); ratingsCriteria=getElement("ratingsCriteria");
     loadMultiSelect (rating, ratingsCriteria);
    }

 content=getElement("content"); contentCriteria=getElement("contentCriteria");
 loadMultiSelect (content, contentCriteria);

 platforms=getElement("platforms"); platformsCriteria=getElement("platformsCriteria");
 loadMultiSelect (platforms, platformsCriteria);

 javaScript=getElement("javaScript");
 if (defined(javaScript))
    javaScript.value=1;

 if (defined(title))
    eol(title);
} // bodyLoad

function submitEnter(myfield, e)
{
   var keycode;
   if (window.event) keycode = window.event.keyCode;
   else if (e) keycode = e.which;
   else return true;

   if (keycode == 13) {
     myfield.form.submit();
     return false;
   } else {
     return true;
  }
}

