//For Foobaroid
//modified by Neonphytismo a.k.a neonasahi From I.M.S

var bw = 24;
var bh = 24;
var left_margin = 0;
var top_margin = 0;

IDC_ARROW = 32512;
IDC_HAND = 32649;

function RGB(r,g,b){ return (0xff000000|(r<<16)|(g<<8)|(b)); }

///////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////
var g_drag = 0;
var bool;
var g_metadb;
var images_path = fb.FoobarPath+"skins\\foobaroid\\FileMenu\\Info\\";

var imgname;
var rating;
var nrating;
var lrating;
var img;
var rating = 0;
var g_metadb = fb.GetFocusItem();

on_item_focus_change();

function on_paint(gr){

	if (g_metadb) {
		for (i = 1; i < 6; i++) {
			img = gdi.image(images_path + ((i > (g_drag ? lrating : rating)) ? "off.png" : "on.png"));
			gr.DrawImage(img, left_margin + bw * (i-1), top_margin, bw, bh, 0, 0, img.Width, img.Height);
		}
	}
}

function on_mouse_lbtn_up(x,y){
if (lrating !=rating && g_metadb){
    if (window.GetProperty("RatingInDB",false)){
        fb.RunContextCommandWithMetadb("Rating/"+((lrating==0) ? "<not set>" : lrating),g_metadb);
   }else{
        g_metadb.UpdateFileInfoSimple("RATING",lrating);
        }
   }
}

function on_mouse_move(x, y) {
    window.SetCursor(IDC_HAND);
	if (g_metadb) {
		g_drag = 1;
		nrating = Math.ceil((x - left_margin) / bw);
		if (nrating > 5) nrating = 5;
		if (nrating != lrating) {
			lrating = nrating;
			window.Repaint();
		}
	}
}

function on_mouse_leave() {
	on_metadb_changed();
    window.SetCursor(IDC_ARROW);
}

function on_metadb_changed() {
g_drag = 0;
if (window.GetProperty("RatingInDB",false)){
var rating_db = fb.TitleFormat("%rating%");
rating = rating_db.EvalWithMetadb(g_metadb);
}else{
var rating_tag = fb.TitleFormat("$meta(rating)");	
rating = rating_tag.EvalWithMetadb(g_metadb);
}

if (rating == "?") rating = 0;

	lrating = rating;
	window.Repaint();
}

function on_playback_new_track(metadb) {
	on_item_focus_change();
}

function on_size() {
	ww = window.Width;
	wh = window.Height;
}

function on_item_focus_change() {
	if (g_metadb) window.UnwatchMetadb();
	g_metadb = fb.IsPlaying ? fb.GetNowPlaying() : fb.GetFocusItem();
	if (g_metadb) {
		try { on_metadb_changed(); } catch(e) {}
		window.WatchMetadb(g_metadb);
	}
}

// Flags of Menu
var MF_SEPARATOR = 0x00000800;
var MF_GRAYED = 0x00000001;
var MF_UNCHECKED = 0x00000000;
var MF_CHECKED = 0x00000008;
var MF_STRING = 0x00000000;
var MF_POPUP = 0x00000010;

function PopupOptionsMenu(x,y) {
    var basemenu = window.CreatePopupMenu();
    var ret = 0;

    basemenu.AppendMenuItem(MF_STRING, 1, "Save To Database");
    basemenu.AppendMenuItem(MF_STRING, 2, "Save To Tag");
    basemenu.AppendMenuItem(MF_STRING, 3, "Reset statistics");

    basemenu.CheckMenuRadioItem(1, 2, window.GetProperty("RatingInDB")? 1:2);
    
    ret = basemenu.TrackPopupMenu(x, y);

switch (ret){
case 1:
window.SetProperty("RatingInDB",true);
window.NotifyOthers("RatingInDB",true);
break;
case 2:
window.SetProperty("RatingInDB",false);
window.NotifyOthers("RatingInDB",false);
break;
case 3:
fb.RunContextCommandWithMetadb("Playback Statistics/Reset statistics",g_metadb);
break;
}

basemenu.Dispose();
}
// return true if you want to supress system context menu
function on_mouse_rbtn_up(x, y, mask) {
PopupOptionsMenu(x,y);
return true;
}

function on_notify_data(name, info) {
if(name == "RatingInDB"){
window.SetProperty("RatingInDB",info);
on_metadb_changed();
}
}