//********************************
// Load/save settings
//********************************

function LoadSettings(LoadVar,TopMenu)
    {
//    alert("LoadSettings");
    var I;
    for (I=0;I<TopMenu.Items.length;I++)
        {
        var Item=TopMenu.Items[I];
//        alert("Loading: '"+Item.Name+"'\nSaved Val="+LoadVar[Item.Name]);
        if (Item.SubMenu && Item.SubMenu.Value) Item.Value=Item.SubMenu.Value;
        if (Item.Value)
            {
            var OldV=Item.Value.CurrentValue;
            Item.Value.LoadValue(LoadVar[Item.Name]);
//            alert("Load Setting "+Item.Name+". OldV="+OldV+" NewV="+Item.Value.CurrentValue+" LoadVar[Item.Name]="+LoadVar[Item.Name]);
            }
        else
        if (Item.SubMenu)
            LoadSettings(LoadVar,Item.SubMenu);
        }
    }

function SaveSettings(SaveVar,TopMenu)
    {
    var I;
    for (I=0;I<TopMenu.Items.length;I++)
        {
        var Item=TopMenu.Items[I];

        if (Item.SubMenu && Item.SubMenu.Value) Item.Value=Item.SubMenu.Value;
        if (Item.Value)
            {
            SaveVar[Item.Name]=Item.Value.SaveValue();
//            alert("Save Setting '"+Item.Name+"'. SavedV='"+Item.Value.SaveValue()+"'\nSaveVar="+SaveVar[Item.Name]);
            }
        else
        if (Item.SubMenu)
            SaveSettings(SaveVar,Item.SubMenu);
        }
    }


//********************************
var VolumeExitCount=0;

function ResetVolumeExitCount()
    {
    VolumeExitCount=0;
    }

function SetNextValue()
    {
    ResetVolumeExitCount();
    var Item=CurrentJBMMUI.CurrentMenu.Items[CurrentJBMMUI.CurrentMenu.CursorPos];
    var Value=Item.Value;
    Value.SetNextValue();
    Value.CurrentValue=Value.Values[Value.CurrentIndex];
    RefreshDisplay();
    }

function SetPrevValue()
    {
    ResetVolumeExitCount();
    var Item=CurrentJBMMUI.CurrentMenu.Items[CurrentJBMMUI.CurrentMenu.CursorPos];
    var Value=Item.Value;
    Value.SetPrevValue();
    Value.CurrentValue=Value.Values[Value.CurrentIndex];
    RefreshDisplay();
    }

function AppendTextValue(Item)    {return Item.Name+Item.Value.CurrentValue;}

function MakeStdScrollBarSetupItem(Icon,Name,Value,Notes)
    {
    if (!Notes) Notes="(no specific notes)";
    var Ret=new item(Icon,Name,null,null,Notes+"<br>"+StdScrollBarSetupItemNotes);
    Ret.IsScrollBar=true;
    Ret.Value=Value;
    Ret.LeftAction=SetPrevValue;
    Ret.RightAction=SetNextValue;
    return Ret;
    }

function MakeStdSetupItem(Icon,Name,Value,Notes)
    {
    if (!Notes) Notes="(no specific notes)";
    var Ret=new item(Icon,Name,null,null,Notes+"<br>"+StdSetupItemNotes);
    Ret.GenerateText=AppendTextValue;
    Ret.Value=Value;
    Ret.LeftAction=SetPrevValue;
    Ret.RightAction=SetNextValue;
    return Ret;
    }

function MakeColorPickerMenu(Text,Value,Notes)
    {
    var ColorPickerMenu=new menu("",Text);
    if (!Notes) Notes="(no specific notes)";
    ColorPickerMenu.Notes=Notes+"<br>"+ColorPickerMenuNotes;
    ColorPickerMenu.AddItem(MakeStdScrollBarSetupItem("" ,"Red" ,Value.Red,"Adjust the amount of Red in the color"));
    ColorPickerMenu.AddItem(MakeStdScrollBarSetupItem("" ,"Green" ,Value.Green,"Adjust the amount of Green in the color"));
    ColorPickerMenu.AddItem(MakeStdScrollBarSetupItem("" ,"Blue" ,Value.Blue,"Adjust the amount of Blue in the color"));
    ColorPickerMenu.Value=Value;
    return ColorPickerMenu;
    }
//*********************
// Actions
//*********************
function SetMatrixSkin()
    {
    CurrentBGImage.SetIndex(2);
    CurrentIconSet.SetIndex(1);
    CurrentTitleTextColor.SetFromHTMLText("#00FF00");
    CurrentMenuBGColor.SetFromHTMLText("#001F00");
    CurrentItemColor.SetFromHTMLText("#AFFFAF");
    CurrentScrollBarColor.SetFromHTMLText("#AFFFAF");
    CurrentSelectedItemColor.SetFromHTMLText("#FFFF00");
    CurrentMenuTextColor.SetFromHTMLText("#AFFFAF");
    }

function SetArchosSkin()
    {
    CurrentBGImage.SetIndex(0);
    CurrentIconSet.SetIndex(2);
    CurrentTitleTextColor.SetFromHTMLText("#FFFFFF");
    CurrentMenuBGColor.SetFromHTMLText("#000000");
    CurrentItemColor.SetFromHTMLText("#AFAF00");
    CurrentScrollBarColor.SetFromHTMLText("#000000");
    CurrentSelectedItemColor.SetFromHTMLText("#FFFF00");
    CurrentMenuTextColor.SetFromHTMLText("#000000");
    CurrentMenuBGColor.SetFromHTMLText("#FFFFFF");
    }

function SetDefaultSkin()
    {
    CurrentBGImage.SetIndex(1);
    CurrentIconSet.SetIndex(0);
    CurrentTitleTextColor.SetFromHTMLText("#9999FF");
    CurrentMenuBGColor.SetFromHTMLText("#9999FF");
    CurrentItemColor.SetFromHTMLText("#FFFF00");
    CurrentScrollBarColor.SetFromHTMLText("#FFFF00");
    CurrentSelectedItemColor.SetFromHTMLText("#00FF00");
    CurrentMenuTextColor.SetFromHTMLText("#000000");
    }

//*********************
//*********************
var EqualizerSetupMenu=new menu("sound.gif","Equalizer");
EqualizerSetupMenu.Notes=EqualizerSetupMenuNotes;
EqualizerSetupMenu.AddItem(MakeStdScrollBarSetupItem("" ,"20hz"  ,CurrentEQ20   ));
EqualizerSetupMenu.AddItem(MakeStdScrollBarSetupItem("" ,"100hz" ,CurrentEQ100  ));
EqualizerSetupMenu.AddItem(MakeStdScrollBarSetupItem("" ,"250hz" ,CurrentEQ250  ));
EqualizerSetupMenu.AddItem(MakeStdScrollBarSetupItem("" ,"500hz" ,CurrentEQ500  ));
EqualizerSetupMenu.AddItem(MakeStdScrollBarSetupItem("" ,"1.0khz",CurrentEQ1000 ));
EqualizerSetupMenu.AddItem(MakeStdScrollBarSetupItem("" ,"2.5khz",CurrentEQ2500 ));
EqualizerSetupMenu.AddItem(MakeStdScrollBarSetupItem("" ,"5.0khz",CurrentEQ5000 ));
EqualizerSetupMenu.AddItem(MakeStdScrollBarSetupItem("" ,"10khz" ,CurrentEQ10000));
EqualizerSetupMenu.AddItem(MakeStdScrollBarSetupItem("" ,"15khz" ,CurrentEQ15000));

var AudioSetupMenu=new menu("sound.gif","Audio Settings",AudioSetupNotes);
AudioSetupMenu.AddItem(MakeStdScrollBarSetupItem("sound.gif","Volume",CurrentVolume,"Adjust the line-out volume."));
AudioSetupMenu.AddItem(MakeStdScrollBarSetupItem("sound.gif","Balance",CurrentBalance,"Adjust the Left/Right speaker balance."));
AudioSetupMenu.AddItem(new item("sound.gif" ,"Equalizer",EqualizerSetupMenu));
AudioSetupMenu.AddItem(MakeStdSetupItem("genre.gif","Pitch, 1/2steps: ",CurrentPitch,"Adjust the Pitch of playback - without effecting the Speed of playback."));
AudioSetupMenu.AddItem(MakeStdSetupItem("genre.gif","Speed: ",CurrentSpeed,"Adjust the Speed of playback - without effecting the Pitch."));

var PlaySetupMenu=new menu("play.gif","Play Settings",PlaySetupNotes);
PlaySetupMenu.AddItem(MakeStdSetupItem("time.gif","Time: ",CurrentPlayMode,PlaySetupMenuTimeNotes));
PlaySetupMenu.AddItem(MakeStdSetupItem("playlist.gif","Repeat: ",CurrentRepeatMode,PlaySetupMenuRepeatNotes));
PlaySetupMenu.AddItem(MakeStdSetupItem("playlist.gif","Shuffle: ",CurrentShuffleMode,PlaySetupMenuShuffleNotes));
PlaySetupMenu.AddItem(MakeStdSetupItem("playlist.gif","Scan: ",CurrentScanMode,PlaySetupMenuScanNotes));
PlaySetupMenu.AddItem(MakeStdSetupItem("playlist.gif","Slide Delay: ",CurrentSlideShowDelay,PlaySetupMenuSlideShowDelayNotes));
PlaySetupMenu.AddItem(MakeStdSetupItem("playlist.gif","MM: ",CurrentMultimediaShowMode,PlaySetupMenuMMSlideShowModeNotes));

//*******************
// Display
//*******************
//var SkinSetupMenu=new menu("lcd.gif","Skins");
//SkinSetupMenu.AddItem(new item("" ,"JBMM Standard Skin")).PlayAction=SetDefaultSkin;
//SkinSetupMenu.AddItem(new item("" ,"Matrix Skin")).PlayAction=SetMatrixSkin;
//SkinSetupMenu.AddItem(new item("" ,"LOTR Skin"));

var BackgroundSetupMenu=new menu("lcd.gif","Set Background");
BackgroundSetupMenu.AddItem(new item("" ,"Image: Bubbles"));
BackgroundSetupMenu.AddItem(new item("" ,"[] Red"));
BackgroundSetupMenu.AddItem(new item("" ,"[] Green"));
BackgroundSetupMenu.AddItem(new item("" ,"[] Blue"));
BackgroundSetupMenu.AddItem(new item("" ,"[] User 1"));
BackgroundSetupMenu.AddItem(new item("" ,"[] User 2"));
BackgroundSetupMenu.AddItem(new item("" ,"[] User 3"));
BackgroundSetupMenu.AddItem(new item("" ,"[] User 4"));
BackgroundSetupMenu.AddItem(new item("" ,"[] User 5"));



var TempItem;
var VisSetupMenu=new menu("language.gif","Setup Visualization");
VisSetupMenu.Notes="Setup audo visualization options.";
VisSetupMenu.AddItem(MakeStdSetupItem("","Vis: ",CurrentVis,VisulizationNotes));
VisSetupMenu.AddItem(new item("" ,"Set Vis Color 1",MakeColorPickerMenu("Vis Color 1",CurrentVisColor1,VisColorPickerNotes)));
VisSetupMenu.AddItem(new item("" ,"Set Vis Color 2",MakeColorPickerMenu("Vis Color 2",CurrentVisColor2,VisColorPickerNotes)));

var ColorsSetupMenu=new menu("lcd.gif","Colors");
ColorsSetupMenu.AddItem(new item("" ,"Set Title Color",MakeColorPickerMenu("Title Color",CurrentTitleTextColor,TitleTextColorNotes)));
ColorsSetupMenu.AddItem(new item("" ,"Set Item Color",MakeColorPickerMenu("Item Color",CurrentItemColor,ItemColorNotes)));
ColorsSetupMenu.AddItem(new item("" ,"Set Selected Color",MakeColorPickerMenu("Selected Color",CurrentSelectedItemColor,SelectedColorNotes)));
ColorsSetupMenu.AddItem(new item("" ,"Set Background Color",MakeColorPickerMenu("Background",CurrentBackgroundColor,BackgroundColorNotes)));
ColorsSetupMenu.AddItem(new item("" ,"Set Scroll Bar Color",MakeColorPickerMenu("Scroll Bar Color",CurrentScrollBarColor,ScrollBarColorNotes)));
ColorsSetupMenu.AddItem(new item("" ,"Set Menu BG Color",MakeColorPickerMenu("Menu BG Color",CurrentMenuBGColor,MenuBGColorNotes)));
ColorsSetupMenu.AddItem(new item("" ,"Set Menu Text Color",MakeColorPickerMenu("Menu Text Color",CurrentMenuTextColor,MenuTextColorNotes)));

var DisplayUISetupMenu=new menu("lcd.gif","User Interface",DisplayUISetupNotes);
DisplayUISetupMenu.AddItem(new item("" ,"Visualization",VisSetupMenu));
DisplayUISetupMenu.AddItem(MakeStdSetupItem("","Icons: ",CurrentIconSet,CustomIconsNotes));
DisplayUISetupMenu.AddItem(MakeStdSetupItem("","BG Image: ",CurrentBGImage,BackgroundImageNotes));
DisplayUISetupMenu.AddItem(new item("colors.gif" ,"Colors",ColorsSetupMenu,CustomColorsNotes));
DisplayUISetupMenu.AddItem(MakeStdSetupItem("language.gif","LCD Font: ",CurrentLCDFont,FontNotes));
DisplayUISetupMenu.AddItem(MakeStdSetupItem("language.gif","TV Font: ",CurrentTVFont,FontNotes));
DisplayUISetupMenu.AddItem(MakeStdSetupItem("time.gif","Momentary: ",CurrentMomentaryDelay,AddedDelayNotes));


var LCDSetupMenu=new menu("lcd.gif","LCD",LCDSetupNotes);
LCDSetupMenu.AddItem(MakeStdScrollBarSetupItem("" ,"Backlight" ,CurrentLCDBacklight     ,LCDSetupBacklightNotes));
LCDSetupMenu.AddItem(MakeStdScrollBarSetupItem("" ,"Brightness" ,CurrentLCDBrightness   ,LCDSetupBrightnessNotes));
LCDSetupMenu.AddItem(MakeStdScrollBarSetupItem("" ,"Contrast" ,CurrentLCDContrast       ,LCDSetupContrastNotes));
LCDSetupMenu.AddItem(MakeStdScrollBarSetupItem("" ,"Gamma" ,CurrentLCDGamma             ,LCDSetupGammaNotes));
LCDSetupMenu.AddItem(MakeStdScrollBarSetupItem("" ,"X-Pos" ,CurrentLCDXPos              ,LCDSetupPosAndSizeNotes));
LCDSetupMenu.AddItem(MakeStdScrollBarSetupItem("" ,"Y-Pos" ,CurrentLCDYPos              ,LCDSetupPosAndSizeNotes));
LCDSetupMenu.AddItem(MakeStdScrollBarSetupItem("" ,"X-Size" ,CurrentLCDXSize            ,LCDSetupPosAndSizeNotes));
LCDSetupMenu.AddItem(MakeStdScrollBarSetupItem("" ,"Y-Size" ,CurrentLCDYSize            ,LCDSetupPosAndSizeNotes));

var TVSetupMenu=new menu("tv.gif","TV",TVSetupNotes);
TVSetupMenu.AddItem(MakeStdSetupItem("tv.gif","Standard: ",CurrentTVOutMode         ,TVOutSetupStandard));
TVSetupMenu.AddItem(MakeStdScrollBarSetupItem("" ,"Brightness" ,CurrentTVBrightness ,TVOutSetupBrightnessNotes));
TVSetupMenu.AddItem(MakeStdScrollBarSetupItem("" ,"Contrast" ,CurrentTVContrast     ,TVOutSetupContrastNotes));
TVSetupMenu.AddItem(MakeStdScrollBarSetupItem("" ,"Gamma" ,CurrentTVGamma           ,TVOutSetupGammaNotes));
TVSetupMenu.AddItem(MakeStdScrollBarSetupItem("" ,"X-Pos" ,CurrentTVXPos            ,TVOutSetupPosAndSizeNotes));
TVSetupMenu.AddItem(MakeStdScrollBarSetupItem("" ,"Y-Pos" ,CurrentTVYPos            ,TVOutSetupPosAndSizeNotes));
TVSetupMenu.AddItem(MakeStdScrollBarSetupItem("" ,"X-Size" ,CurrentTVXSize          ,TVOutSetupPosAndSizeNotes));
TVSetupMenu.AddItem(MakeStdScrollBarSetupItem("" ,"Y-Size" ,CurrentTVYSize          ,TVOutSetupPosAndSizeNotes));



var PowerSetupMenu=new menu("battery.gif","Power",PowerSetupNotes);
PowerSetupMenu.AddItem(MakeStdSetupItem("","Bat Power Off: ",CurrentBatteryPowerTimeout,PowerBatteryPowerOffNotes));
PowerSetupMenu.AddItem(MakeStdSetupItem("","Bat LCD Off: ",CurrentBatteryLCDTimeout,PowerBatteryLCDOffNotes));
PowerSetupMenu.AddItem(MakeStdSetupItem("","Bat HD Off: ",CurrentBatteryHDTimeout,PowerBatteryHDOffNotes));
PowerSetupMenu.AddItem(MakeStdSetupItem("","AC Power Off: ",CurrentACPowerTimeout,PowerACPowerOffNotes));
PowerSetupMenu.AddItem(MakeStdSetupItem("","AC LCD Off: ",CurrentACLCDTimeout,PowerACLCDOffNotes));
PowerSetupMenu.AddItem(MakeStdSetupItem("","AC HD Off: ",CurrentACHDTimeout,PowerACHDOffNotes));

var ClockSetupMenu=new menu("battery.gif","Clock",ClockSetupNotes);
ClockSetupMenu.AddItem(new item("" ,"Hour: 23"));
ClockSetupMenu.AddItem(new item("" ,"Minute: 03"));
ClockSetupMenu.AddItem(new item("" ,"Reset Seconds"));
ClockSetupMenu.AddItem(new item("" ,"Day: 23"));
ClockSetupMenu.AddItem(new item("" ,"Month: 9"));
ClockSetupMenu.AddItem(new item("" ,"Year: 2002"));

var HDSetupMenu=new menu("hd.gif","Hard Drive Info",HDSetupNotes);
HDSetupMenu.AddItem(new item("" ,GetFileSizeStringShort(TotalFileSize)+" of 18.5g used"));
HDSetupMenu.AddItem(new item("" ,"  in "+ TotalFileCount+" files"));
HDSetupMenu.AddItem(new item("" ,GetFileSizeStringShort(TotalMP3Size)+" in "+TotalMP3Count+" MP3s"));
HDSetupMenu.AddItem(new item("" ,GetFileSizeStringShort(TotalAVISize)+" in "+TotalAVICount+" AVIs"));
HDSetupMenu.AddItem(new item("" ,GetFileSizeStringShort(TotalJPGSize)+" in "+TotalJPGCount+" JPGs"));
HDSetupMenu.AddItem(new item("" ,GetFileSizeStringShort(TotalOtherSize)+" in "+TotalOtherCount+" Others"));

var FirmwareSetupMenu=new menu("battery.gif","Firmware",FirmwareSetupNotes);
FirmwareSetupMenu.AddItem(new item("chip.gif" ,"Current: 2.0.0"));
FirmwareSetupMenu.AddItem(new item("chip.gif" ,"Update Firmware"));

var LangSetupMenu=new menu("language.gif","Language");
LangSetupMenu.AddItem(new item("language.gif" ,"English"));
LangSetupMenu.AddItem(new item("language.gif" ,"French"));
LangSetupMenu.AddItem(new item("language.gif" ,"German"));
LangSetupMenu.AddItem(new item("language.gif" ,"Spanish"));

var RecordSetupMenu=new menu("record.gif","Record Setup",RecordSetupNotes);
RecordSetupMenu.AddItemAndGenSubMenu(new item("","Set Name",null,null,RecordSetNameNotes));
RecordSetupMenu.AddItemAndGenSubMenu(new item("","Set Artist",null,null,RecordSetArtistNotes));
RecordSetupMenu.AddItemAndGenSubMenu(new item("","Set Album",null,null,RecordSetAlbumNotes));
RecordSetupMenu.AddItemAndGenSubMenu(new item("","Set Record Folder",null,null,RecordSetRecordFolderNotes));
RecordSetupMenu.AddItem(MakeStdSetupItem("","Src: ",CurrentRecordSource,RecordSourceNotes));
RecordSetupMenu.AddItem(MakeStdSetupItem("","Quality: ",CurrentRecordQuality,RecordQualityNotes));

var SetupMenu=new menu("jbmmicon.gif","Setup");
SetupMenu.AddItemAndGenSubMenu(new item("sound.gif"     ,"Audio",AudioSetupMenu));
SetupMenu.AddItemAndGenSubMenu(new item("play.gif"      ,"Play",PlaySetupMenu));
SetupMenu.AddItemAndGenSubMenu(new item("lcd.gif"       ,"User Interface",DisplayUISetupMenu));
SetupMenu.AddItemAndGenSubMenu(new item("record.gif"    ,"Record Setup",RecordSetupMenu));
SetupMenu.AddItemAndGenSubMenu(new item("battery.gif"   ,"Power",PowerSetupMenu));
SetupMenu.AddItemAndGenSubMenu(new item("time.gif"      ,"Clock",ClockSetupMenu));
SetupMenu.AddItemAndGenSubMenu(new item("hd.gif"        ,"Hard Disk Info",HDSetupMenu));
SetupMenu.AddItemAndGenSubMenu(new item("chip.gif"      ,"Firmware",FirmwareSetupMenu));
SetupMenu.AddItemAndGenSubMenu(new item("lcd.gif"       ,"LCD",LCDSetupMenu));
SetupMenu.AddItemAndGenSubMenu(new item("tv.gif"        ,"TV-Out",TVSetupMenu));
SetupMenu.AddItem(MakeStdSetupItem("language.gif","Language: ",CurrentLanguage,LanguageNotes));
//SetupMenu.AddItemAndGenSubMenu(new item("language.gif"  ,"Language",LangSetupMenu));

SetupUI=GetBrowserUIObject(SetupMenu,"setup");

SetArchosSkin();
SaveSettings(UserASettings,SetupMenu);

SetMatrixSkin();
SaveSettings(UserBSettings,SetupMenu);

SetDefaultSkin();
SaveSettings(DefaultSettings,SetupMenu);

SetupUI.Tab1Text="USER A";
SetupUI.Tab2Text="USER B";
SetupUI.Tab3Text="RESET";

function LoadUserASettings()    {LoadSettings(UserASettings,SetupUI.CurrentMenu);GotoUserALoadedUI();}
function SaveUserASettings()    {SaveSettings(UserASettings,SetupUI.CurrentMenu);GotoUserASavedUI();}
function LoadUserBSettings()    {LoadSettings(UserBSettings,SetupUI.CurrentMenu);GotoUserBLoadedUI();}
function SaveUserBSettings()    {SaveSettings(UserBSettings,SetupUI.CurrentMenu);GotoUserBSavedUI();}
function LoadDefaultSettings()  {LoadSettings(DefaultSettings,SetupUI.CurrentMenu);GotoDefaultsLoadedUI();}

SetupUI.JBMMF1       =LoadUserASettings;
SetupUI.JBMMF1Hold   =SaveUserASettings;
SetupUI.JBMMF2       =LoadUserBSettings;
SetupUI.JBMMF2Hold   =SaveUserBSettings;
SetupUI.JBMMF3       =LoadDefaultSettings;
SetupUI.Notes       =JBMMSetupUINotes;
