var language;
var resolution;
var defaultDisc;
var userID;

function Init() {
    userID = GetCookie('VHI_UID');
    if (!userID) {
        userID = '';
        for (var i = 0; i < 18; i++) userID += Math.floor(Math.random() * 10);
    }
    SetCookie('VHI_UID', userID, 7);
    InitializeMainMenu();
    if (defaultDisc) ChangeDisc(defaultDisc);
    else ChangeFace(faces[0]);
    
    if (language && !$('languageselector')) language = undefined;
    if (language) {
        $('languageselector').select('img').each(function(lang) {
            $(lang).addClassName('unselected');
        });
        ToggleSelection('languageselector', language);
    }
    if (resolution  && !$('resolutionselector')) resolution = undefined;
    if (resolution) {
        $('resolutionselector').select('img').each(function(res) {
            $(res).addClassName('unselected');
        });
        ToggleSelection('resolutionselector', resolution);
    }
}

var faceColumns;
var cellSpacing;

function InitializeMainMenu() {
    var menu = $('mainmenu').update(new Element('table', {
        border:0, cellpadding:0, cellspacing: cellSpacing || 0
    })).firstDescendant('table').insert(new Element('tbody')).firstDescendant('tbody');
    
    var row;
    for (var i = 0; i < faces.size(); i++) {
        if (i % (faceColumns || 1) == 0) {
            row = new Element('tr');
            menu.insert(row);
        }
        var cell = new Element('td', { align: 'center' });
        var face = faces[i];
        if (Object.isString(face)) {
            cell.insert(face);
        } else {
            var img = new Element('img', {
                src: face.icon, alt: face.name || "", title: face.name || "",
                width: iconWidth, height: iconHeight, 'class': 'cursor'
            });
            img.observe('click', ChangeFace.curry(face));
            cell.insert(img);
            cell.insert(new Element('br'));
            cell.insert(face.name);
        }
        row.insert(cell);
    }
}

var currentFace;
function ChangeFace(face) {
    currentFace = face;

    var menu = $('submenu').update(new Element('table', {
        border:0, cellpadding:0, cellspacing: cellSpacing || 0
    })).firstDescendant('table').insert(new Element('tbody')).firstDescendant('tbody');;

    var row;
    var columns = currentFace.columns || 1;
    for (var i = 0; i < face.discs.size(); i++) {
        if (i % columns == 0) {
            row = new Element('tr');
            menu.insert(row);
        }
        var cell = new Element('td', { align: 'center' });
        var disc = face.discs[i];
        if (Object.isString(disc)) {
            cell.insert(disc);
        } else {
            var img = new Element('img', {
                src: disc.icon, alt: disc.name || "", title: disc.name || "",
                width: iconWidth, height: iconHeight, 'class': 'cursor'
            });
            img.observe('click', ChangeDisc.curry(disc));
            cell.insert(img);
            cell.insert(new Element('br'));
            cell.insert(disc.name);
        }
        row.insert(cell);
    }
    ChangeDisc(face.discs[0]);
}

var currentDisc;
function ChangeDisc(disc) {
    var flash = { userid:userID };
    if (disc) currentDisc = disc;
    else disc = currentDisc;
    if (currentFace) {
        if (currentFace.rings) flash.rings = currentFace.rings;
    }
    if (disc.rings) flash.rings = disc.rings;
    if (disc.config) {
        flash.config = disc.config;
        if ($('resolutionselector')) $('resolutionselector').hide();
        if ($('languageselector')) $('languageselector').hide();
    } else if (disc.dir) {
        var cfg;
        if (language && resolution) cfg = language + '_' + resolution + '.cfg';
        else if (resolution) cfg = resolution + '.cfg';
        else if (language) cfg = language + '.cfg';
        else cfg = 'config.txt';
        flash.config = disc.dir + '/' + cfg;
        if ($('resolutionselector')) $('resolutionselector').show();
        if ($('languageselector')) $('languageselector').show();
    }
    
    Element.replace('swf', '\
<object id="swf" class="swf" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" \
        codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0"> \
    <param name="movie" value="VHIFunIcons.swf"/> \
    <param name="flashvars" value="' + Object.toQueryString(flash) + '"/> \
    <param name="quality" value="high"/> \
    <param name="menu" value="false"/> \
    <embed class="swf" type="application/x-shockwave-flash" \
           src="VHIFunIcons.swf" flashvars="' + Object.toQueryString(flash) + '" \
           quality="high" menu="false" \
           pluginspage="http://www.macromedia.com/go/getflashplayer"></embed> \
</object>');
}

function ChangeLanguage(lang) {
    ToggleSelection('languageselector', language);
    if (Object.isString(lang)) language = lang;
    else language = lang.name;
    ToggleSelection('languageselector', language);
    ChangeDisc();
}

function ChangeResolution(res) {
    ToggleSelection('resolutionselector', resolution);
    if (Object.isString(res)) resolution = res;
    else resolution = res.name;
    ToggleSelection('resolutionselector', resolution);
    ChangeDisc();
}

function ToggleSelection(parent, eltName) {
    var elt = $(parent).select('[name="' + eltName + '"]')[0];
    if (elt)
        elt.toggleClassName('unselected').toggleClassName('selected');
}

function SetCookie(name, value, days) {
	if (days) {
		var date = new Date();
		date.setDate(date.getDate() + days);
		var expires = "; expires=" + date.toGMTString();
	}
	else var expires = "";
	document.cookie = name + "=" + escape(value) + expires + "; path=/";
}

function GetCookie(name) {
    if (document.cookie.length > 0) {
        var start = document.cookie.indexOf(name + "=");
        if (start != -1) {
            start = start + name.length + 1;
            var end = document.cookie.indexOf(";", start);
            if (end == -1) end = document.cookie.length;
            return unescape(document.cookie.substring(start, end));
        } 
    }
    return null;
}
