var p_cur=null;
var p_lock=false;
function purp_toggle(o,h)
{
    if(p_lock) return false;
    p_lock=true;
    var m = purp_maximized();

    function myCallBackOnFinish(o)
        {
            var o = purp_current();
            var i = 0;
            var m = purp_maximized();
            while( o!=null &&  i++ < 4)
            {
                if(m)
                    purp_appear(o,i);
                else
                    Element.hide(o);
                o=purp_getNext(o);
            }
        }
if(h) {
    if(m)   
    {
        Element.removeClassName('features','maximized');
        myCallBackOnFinish($('features'));
        new Effect.Parallel([
        new Effect.Morph('features', {style: 'width: 187px !important; left: 581px !important'}),
        new Effect.Morph('morefeatures', {style: 'width: 187px !important'})
        ],{duration: 0.5,afterFinish: function(o){ purp_appear(p_cur,1);  } });
    }
    else
    {
        Element.addClassName('features','maximized');
        Element.hide(purp_current());
        new Effect.Parallel([
        new Effect.Morph('features', {style: 'width: 768px !important; left: 0px !important'}),
        new Effect.Morph('morefeatures', {style: 'width: 768px !important'})
        ],{duration: 0.5,afterFinish:  function(o){ myCallBackOnFinish(o); }});
    }	
}
else {
    if(m)   
    {
        Element.removeClassName('features','maximized');
        myCallBackOnFinish($('features'));
        new Effect.Parallel([
        new Effect.Morph('features', {style: 'width: 188px !important; left: 580px !important'}),
        new Effect.Morph('morefeatures', {style: 'width: 182px !important'})
        ],{duration: 0.5,afterFinish: function(o){ purp_appear(p_cur,1);  } });
    }
    else
    {
        Element.addClassName('features','maximized');
        Element.hide(purp_current());
        new Effect.Parallel([
        new Effect.Morph('features', {style: 'width: 768px !important; left: 0px !important'}),
        new Effect.Morph('morefeatures', {style: 'width: 762px !important'})
        ],{duration: 0.5,afterFinish:  function(o){ myCallBackOnFinish(o); }});
    }
}
    return false;
}
function purp_appear(o,i)
{
    var m = purp_maximized();
    var d = .4+.1*(i);
    for(var j=1;j<=4;j++)
    {
        Element.removeClassName(o,'purple_'+j);
    }
    Element.addClassName(o,'purple_'+i);
    if(i==4||!m)
        return Effect.Appear(o,{duration: d,afterFinish:function(o){p_lock=false;}});
    else
        return Effect.Appear(o,{duration: d});
}
function purp_next(o)
{
    if(p_lock) return false;
    var m = purp_maximized();
    var c =m?4:1;
    var n = purp_current();
    // hide  n i times
    for(var i = 0; i<c; i++)
    {
        Element.hide(n);
        n=purp_getNext(n);
    }
    // show n i times
    for(var i = 0; i<c; i++)
    {
        purp_appear(n,i+1);
        n=purp_getNext(n);
    }

    return false;
}
function purp_prev(o)
{
    if(p_lock) return false;
    var m = purp_maximized();
    var c =m?4:1;
    var on = purp_current();
    var n = on;
    // hide  n i times
    for(var i = 0; i<c; i++)
    {
        Element.hide(n);
        n=purp_getNext(n);
    }
    n=purp_getPrev(on);
    for(var i = 0; i<c; i++)
    {
        purp_appear(n,m?-i+4:1);
        n=purp_getPrev(n);
    }

    return false;
}

function purp_current()
{
    var div = document.getElementById('features_list');
    var nodeList = div.childNodes;
    for(i=0;i<nodeList.length;i++){
        if(nodeList.item(i).nodeName=="LI"){
            if(Element.visible(nodeList.item(i))==true){
                p_cur=nodeList.item(i);
                return nodeList.item(i);
            }
        }
    }
    return p_cur;
}

function purp_maximized()
{
    return Element.hasClassName('features','maximized');
}

function purp_getNext(li)
{
    tag=li.nodeName;
    o=li;
    while(o!=null) {
        if(o.nodeName==tag && o!=li)
            return o;
        o=o.nextSibling;
    }
    o=li.parentNode.firstChild;
    while(o!=null) {
        if(o.nodeName==tag && o!=li)
        {
            o.parentNode.appendChild(o);
            return o;
        }
        o=o.nextSibling;
    }
    return li; // safety
}

function purp_getPrev(li)
{
    tag=li.nodeName;
    o=li;
    while(o!=null) {
        if(o.nodeName==tag && o!=li)
            return o;
        o=o.previousSibling;
    }
    o=li.parentNode.lastChild;
    while(o!=null) {
        if(o.nodeName==tag && o!=li)
        {
            o.parentNode.insertBefore(o,o.parentNode.firstChild);
            return o;
        }
        o=o.previousSibling;
    }
    return li; // safety
}
