function collapse(category_id) {
    //collapse
    Element.hide('min_category_'+category_id);
    Element.show('plus_category_'+category_id);
    Element.hide('category_children_'+category_id);
}
function expand(category_id) {
    //collapse
    Element.show('min_category_'+category_id);
    Element.hide('plus_category_'+category_id);
    Element.show('category_children_'+category_id);
}



function MarkSub(id)
{
    var subs = $$('#category_children_'+id+' .unsubscribedcategory');
    for(var c = 0; c < subs.length; c++)
    {
        Element.removeClassName($(subs[c]),'unsubscribedcategory');
        Element.addClassName($(subs[c]),'subscribedcategory');
    }
}

function MarkUnSub(id)
{
    var subs = $$('#category_children_'+id+' .subscribedcategory');
    for(var c = 0; c < subs.length; c++)
    {
        Element.removeClassName($(subs[c]),'subscribedcategory');
        Element.addClassName($(subs[c]),'unsubscribedcategory');
    }
}

/* subscriptionCallback is an url that must be suffixed with '/(un)subscribe/category_id/pub_id' */
function toggleTuneSubscription(tune_id,category_id,subscriptionCallback) {
    var el = $('subscription_'+category_id);
    //toggle class and call async (un)subscription controller
    if(Element.hasClassName(el,'subscribedcategory')) {
        //was subscribed 
        new Ajax.Updater('',subscriptionCallback+'/unsubscribe/'+category_id+'/'+tune_id,{evalScripts:true});
        Element.removeClassName(el,'subscribedcategory');
        Element.addClassName(el,'unsubscribedcategory');
        MarkUnSub(category_id);
    } else {
        //was unsubscribed 
        new Ajax.Updater('',subscriptionCallback+'/subscribe/'+category_id+'/'+tune_id,{evalScripts:true});
        Element.removeClassName(el,'unsubscribedcategory');
        Element.addClassName(el,'subscribedcategory');
        MarkSub(category_id);
    }
}