var P_BASE = new Object();
var P_EXT_BASE = new Object();
var P_N_FOOTBALL_BASE = new Object();
var P_KINO = new Object();
var P_VIP_KINO = new Object();
var P_SPORT = new Object();
var P_SUPER_SPORT = new Object();
var P_N_FOOTBALL = new Object();
var P_NIGHT = new Object();
var P_HD = new Object();



/** битовые идентификаторы */
P_BASE.id = 1;
P_EXT_BASE.id = 1<<1;
P_N_FOOTBALL_BASE.id = 1<<2;
P_KINO.id = 1<<3;
P_VIP_KINO.id = 1<<4;
P_SPORT.id = 1<<5;
P_SUPER_SPORT.id = 1<<6;
P_N_FOOTBALL.id = 1<<7;
P_NIGHT.id = 1<<8;
P_HD.id = 1<<9;

/** 
    битовые идентификаторы прав
    используются для проверки - больше ли новая подписка, чем старая.
    все биты, установленные в старой подписке, должны быть в новой 
*/
var BASE_RIGHTS = 1;
var EXT_BASE_RIGHTS = 1<<1;
var N_FOOTBALL_RIGHTS = 1<<2;
var KINO_RIGHTS = 1 << 3;
var VIP_KINO_RIGHTS = 1<<4;
var SPORT_RIGHTS = 1 << 5;
var SUPER_SPORT_RIGHTS = 1 << 6;
var NIGHT_RIGHTS = 1<<7;
var HD_RIGHTS = 1<<8;

P_BASE.rights = BASE_RIGHTS;
P_EXT_BASE.rights = BASE_RIGHTS | EXT_BASE_RIGHTS;
P_N_FOOTBALL_BASE.rights = N_FOOTBALL_RIGHTS;
P_KINO.rights = KINO_RIGHTS;
P_VIP_KINO.rights = KINO_RIGHTS | VIP_KINO_RIGHTS;
P_SPORT.rights = SPORT_RIGHTS;
P_SUPER_SPORT.rights = SPORT_RIGHTS | SUPER_SPORT_RIGHTS;
P_N_FOOTBALL.rights = N_FOOTBALL_RIGHTS;
P_NIGHT.rights = NIGHT_RIGHTS;
P_HD.rights = HD_RIGHTS;

/** Названия пакетов */
P_BASE.name = "  БАЗОВЫЙ";
P_EXT_BASE.name = "  БАЗОВЫЙ РАСШИРЕННЫЙ";
P_N_FOOTBALL_BASE.name = "  НАШ ФУТБОЛ";
P_KINO.name = "  КИНО";
P_VIP_KINO.name = "  VIP КИНО";
P_SPORT.name = "  СПОРТ";
P_SUPER_SPORT.name = "  СУПЕРСПОРТ";
P_N_FOOTBALL.name = "  НАШ ФУТБОЛ";
P_NIGHT.name = "  НОЧНОЙ";
P_HD.name = "  HD";

/** названия пакетов для имен переменных */
P_BASE.vname = "base";
P_EXT_BASE.vname = "ext_base";
P_N_FOOTBALL_BASE.vname = "n_football_base";
P_KINO.vname = "kino";
P_VIP_KINO.vname = "vip_kino";
P_SPORT.vname = "sport";
P_SUPER_SPORT.vname = "supersport";
P_N_FOOTBALL.vname = "n_football";
P_NIGHT.vname = "night";
P_HD.vname = "hd";

/** запрещенные комбинации */
P_SUPER_SPORT.restricted = [P_N_FOOTBALL];
P_N_FOOTBALL_BASE.restricted = [P_SPORT,P_SUPER_SPORT,P_KINO,P_VIP_KINO,P_N_FOOTBALL,P_NIGHT,P_HD];


/** Группы пакетов */

var G_BASE = new Object();
var G_KINO = new Object();
var G_SPORT = new Object();
var G_N_FOOTBALL = new Object();
var G_NIGHT = new Object();
var G_HD = new Object();

G_BASE.id = "base";
G_KINO.id = "kino";
G_SPORT.id = "sport";
G_N_FOOTBALL.id = "nfootball";
G_NIGHT.id = "night";
G_HD.id = "hd";


G_BASE.req = true;
G_KINO.req = false;
G_SPORT.req = false;
G_N_FOOTBALL.req = false;
G_NIGHT.req = false;
G_HD.req = false;

G_BASE.pack = [P_BASE,P_EXT_BASE,P_N_FOOTBALL_BASE];
G_KINO.pack = [P_KINO,P_VIP_KINO];
G_SPORT.pack = [P_SPORT,P_SUPER_SPORT];
G_N_FOOTBALL.pack = [P_N_FOOTBALL];
G_NIGHT.pack = [P_NIGHT];
G_HD.pack = [P_HD];

G_BASE.selection =  P_BASE;
G_KINO.selection = null;
G_SPORT.selection = null;
G_N_FOOTBALL.selection = null;
G_NIGHT.selection = null;
G_HD.selection = null;


var GROUPS = [G_BASE,G_KINO,G_SPORT,G_N_FOOTBALL,G_NIGHT,G_HD];

/** проставим каждому пакету его группу*/
for( i in GROUPS)
{
    var group = GROUPS[i];
    for( j in group.pack)
    {
        group.pack[j].group = group;
    }
}

var prices = new Array();
/** базовый */
prices[P_BASE.id] = 550.0;
prices[P_BASE.id | P_KINO.id] = 850.0;
prices[P_BASE.id | P_SPORT.id] = 850.0;
prices[P_BASE.id | P_NIGHT.id] = 850.0;
prices[P_BASE.id | P_KINO.id | P_SPORT.id] = 1100.0;
prices[P_BASE.id | P_KINO.id | P_SUPER_SPORT.id] = 1400.0;
prices[P_BASE.id | P_KINO.id | P_NIGHT.id] = 1100.0;
prices[P_BASE.id | P_KINO.id | P_SPORT.id | P_NIGHT.id] = 1250.0;
prices[P_BASE.id | P_KINO.id | P_SUPER_SPORT.id | P_NIGHT.id] = 1550.0;
prices[P_BASE.id | P_VIP_KINO.id] = 1050.0;
prices[P_BASE.id | P_SUPER_SPORT.id] = 1150.0;
prices[P_BASE.id | P_VIP_KINO.id | P_SPORT.id] = 1250.0;
prices[P_BASE.id | P_VIP_KINO.id | P_SUPER_SPORT.id] = 1550.0;
prices[P_BASE.id | P_VIP_KINO.id | P_NIGHT.id] = 1250.0;
prices[P_BASE.id | P_VIP_KINO.id | P_SPORT.id | P_NIGHT.id] = 1350.0;
prices[P_BASE.id | P_VIP_KINO.id | P_SUPER_SPORT.id | P_NIGHT.id] = 1650.0;
prices[P_BASE.id | P_SPORT.id | P_NIGHT.id] = 1100.0;
prices[P_BASE.id | P_SUPER_SPORT.id | P_NIGHT.id] = 1400.0;

prices[P_BASE.id | P_HD.id] = 1500.0;
prices[P_BASE.id | P_KINO.id| P_HD.id] = 1550.0;
prices[P_BASE.id | P_SPORT.id| P_HD.id] = 1550.0;
prices[P_BASE.id | P_NIGHT.id| P_HD.id] = 1550.0;
prices[P_BASE.id | P_KINO.id | P_SPORT.id| P_HD.id] = 1700.0;
prices[P_BASE.id | P_KINO.id | P_SUPER_SPORT.id| P_HD.id] = 1900.0;
prices[P_BASE.id | P_KINO.id | P_NIGHT.id| P_HD.id] = 1700.0;
prices[P_BASE.id | P_KINO.id | P_SPORT.id | P_NIGHT.id| P_HD.id] = 1800.0;
prices[P_BASE.id | P_KINO.id | P_SUPER_SPORT.id | P_NIGHT.id| P_HD.id] = 1950.0;
prices[P_BASE.id | P_VIP_KINO.id| P_HD.id] = 1650.0;
prices[P_BASE.id | P_SUPER_SPORT.id | P_HD.id] = 1750.0;
prices[P_BASE.id | P_VIP_KINO.id | P_SPORT.id | P_HD.id] = 1800.0;
prices[P_BASE.id | P_VIP_KINO.id | P_SUPER_SPORT.id | P_HD.id] = 1950.0;
prices[P_BASE.id | P_VIP_KINO.id | P_NIGHT.id | P_HD.id] = 1800.0;
prices[P_BASE.id | P_VIP_KINO.id | P_SPORT.id | P_NIGHT.id | P_HD.id] = 1850.0;
prices[P_BASE.id | P_VIP_KINO.id | P_SUPER_SPORT.id | P_NIGHT.id | P_HD.id] = 2000.0;
prices[P_BASE.id | P_SPORT.id | P_NIGHT.id | P_HD.id] = 1700.0;
prices[P_BASE.id | P_SUPER_SPORT.id | P_NIGHT.id | P_HD.id] = 1900.0;


/** базовый расширенный */
prices[P_EXT_BASE.id] = 750.0;
prices[P_EXT_BASE.id | P_KINO.id] = 1050.0;
prices[P_EXT_BASE.id | P_SPORT.id] = 1050.0;
prices[P_EXT_BASE.id | P_NIGHT.id] = 1050.0;
prices[P_EXT_BASE.id | P_KINO.id | P_SPORT.id] = 1300.0;
prices[P_EXT_BASE.id | P_KINO.id | P_SUPER_SPORT.id] = 1600.0;
prices[P_EXT_BASE.id | P_KINO.id | P_NIGHT.id] = 1300.0;
prices[P_EXT_BASE.id | P_KINO.id | P_SPORT.id | P_NIGHT.id] = 1450.0;
prices[P_EXT_BASE.id | P_KINO.id | P_SUPER_SPORT.id | P_NIGHT.id] = 1750.0;
prices[P_EXT_BASE.id | P_VIP_KINO.id] = 1250.0;
prices[P_EXT_BASE.id | P_SUPER_SPORT.id] = 1350.0;
prices[P_EXT_BASE.id | P_VIP_KINO.id | P_SPORT.id] = 1450.0;
prices[P_EXT_BASE.id | P_VIP_KINO.id | P_SUPER_SPORT.id] = 1750.0;
prices[P_EXT_BASE.id | P_VIP_KINO.id | P_NIGHT.id] = 1450.0;
prices[P_EXT_BASE.id | P_VIP_KINO.id | P_SPORT.id | P_NIGHT.id] = 1550.0;
prices[P_EXT_BASE.id | P_VIP_KINO.id | P_SUPER_SPORT.id | P_NIGHT.id] = 1850.0;
prices[P_EXT_BASE.id | P_SPORT.id | P_NIGHT.id] = 1300.0;
prices[P_EXT_BASE.id | P_SUPER_SPORT.id | P_NIGHT.id] = 1600.0;

prices[P_EXT_BASE.id | P_HD.id] = 1700.0;
prices[P_EXT_BASE.id | P_KINO.id | P_HD.id] = 1750.0;
prices[P_EXT_BASE.id | P_SPORT.id | P_HD.id] = 1750.0;
prices[P_EXT_BASE.id | P_NIGHT.id | P_HD.id] = 1750.0;
prices[P_EXT_BASE.id | P_KINO.id | P_SPORT.id | P_HD.id] = 1900.0;
prices[P_EXT_BASE.id | P_KINO.id | P_NIGHT.id | P_HD.id] = 1900.0;
prices[P_EXT_BASE.id | P_KINO.id | P_SUPER_SPORT.id | P_HD.id] = 2100.0;
prices[P_EXT_BASE.id | P_KINO.id | P_SPORT.id | P_NIGHT.id | P_HD.id] = 2000.0;
prices[P_EXT_BASE.id | P_KINO.id | P_SUPER_SPORT.id | P_NIGHT.id | P_HD.id] = 2150.0;
prices[P_EXT_BASE.id | P_VIP_KINO.id | P_HD.id] = 1850.0;
prices[P_EXT_BASE.id | P_SUPER_SPORT.id | P_HD.id] = 1950.0;
prices[P_EXT_BASE.id | P_VIP_KINO.id | P_SPORT.id | P_HD.id] = 2000.0;
prices[P_EXT_BASE.id | P_VIP_KINO.id | P_SUPER_SPORT.id | P_HD.id] = 2150.0;
prices[P_EXT_BASE.id | P_VIP_KINO.id | P_NIGHT.id | P_HD.id] = 2000.0;
prices[P_EXT_BASE.id | P_VIP_KINO.id | P_SPORT.id | P_NIGHT.id | P_HD.id] = 2050.0;
prices[P_EXT_BASE.id | P_VIP_KINO.id | P_SUPER_SPORT.id | P_NIGHT.id | P_HD.id] = 2200.0;
prices[P_EXT_BASE.id | P_SPORT.id | P_NIGHT.id | P_HD.id] = 1900.0;
prices[P_EXT_BASE.id | P_SUPER_SPORT.id | P_NIGHT.id | P_HD.id] = 2100.0;

/** добавляем наш футбол и 149 рублей */
for( n in prices)
{
    if( (n & P_SUPER_SPORT.id )==0 && (n & P_N_FOOTBALL.id )==0)
    {
        var index = n | P_N_FOOTBALL.id;
        prices[index] = prices[n]+149.0;
    }
}
/** наш футбол */
prices[P_N_FOOTBALL_BASE.id] = 299.0;

function checked( img)
{
    return img.src.indexOf( 'on.gif')!=-1;
};
function check( img)
{
    if( img.pack.input)
        img.pack.input.value = 1;
    img.src = 'img/on.gif';
}
function uncheck( img)
{
    if( img.pack.input)
        img.pack.input.value = 0;
    img.src = 'img/off.gif';    
}

/** права первоначальной подписки */
var initialRights;
// Массив для хранения чекбоксов
var checkboxes = new Array();
var priceDisplay;
/** подписка разрешена только в сторону увеличения? */
var fixx;
function createCalculator( form, fixed)
{
    fixx = fixed;
    var basecontainer = document.getElementById( "calculator");    
    for( i in GROUPS)
    {
        var group = GROUPS[i];
        if( group.disabled)
            continue;
        var container = document.createElement( "div");
        group.container = container;
        basecontainer.appendChild( container);
        container.id = group.id;
        container.setAttribute( "class", "group")
        container.className="group";
        for( j in group.pack)
        {
            var pack = group.pack[j];
            var divv = document.createElement( "div");
            container.appendChild( divv);
            var chbox = document.createElement( "img");
            chbox.setAttribute( "src", "img/off.gif");
            divv.appendChild( chbox);
                        
            // выделяем сразу первый элемент в группе
            chbox.pack = pack;
            chbox.group = group;
            chbox.onclick = changeValue;
            pack.checkbox = chbox;
            checkboxes.push( chbox);
            var txt = document.createTextNode( pack.name);
            divv.appendChild( txt);
            if( form!=null)
            {
                var input = document.createElement( "input");
                input.setAttribute( "name", pack.vname);
                input.setAttribute( "type", "hidden");
                input.value = 0;
                form.appendChild( input);
                pack.input = input;
            }
        }
    }
    priceDisplay = document.createElement( "div");
    priceDisplay.id="price";
    basecontainer.appendChild( priceDisplay);
    packHref = document.createElement( "a");
    packHref.setAttribute( "href", "/packages");
    packHref.style.marginLeft = "3px";

    basecontainer.appendChild( packHref);
    setPack(P_BASE);
    setPrice();
}
function setPack( pack)
{
    chkBoxPressed( pack.checkbox);
}
function chkBoxPressed( box)
{
    if( checked(box) && box.group.req)
    {
        return;
    }
    if( !checked( box))
    {
        check( box);
        box.group.checked = box;
        for( i in checkboxes)
        {
            var bbox = checkboxes[i];
            if( bbox != box && bbox.group == box.group)
                uncheck( bbox);
        }
    }
    else
    {
        uncheck( box);
        box.group.checked = null;
    }
    //выставляем значение переменной
    for( i in GROUPS)
    {
        var group = GROUPS[i];
        if( !group.disabled && group.container.style.display == 'none')
            group.container.style.display = 'block';
    }
    for( i in checkboxes)
    {
        var box = checkboxes[i];
        if( box.pack.restricted && checked(box))
        {
           for( i in box.pack.restricted)
           {
               var pack = box.pack.restricted[i];
               uncheck( pack.checkbox);
               pack.group.container.style.display = 'none';
           }
        }
    }
    setPrice();
}
function changeValue()
{
    chkBoxPressed( this);
}
function setPrice()
{
    priceDisplay.innerHTML = "<br><strong>Абонентская плата:</strong> <br><font style=\"font-size: 17px;\"><strong>"+computePrice()+"</strong> рублей";
}
function computeRights()
{
    var rights = 0;
    for( i in checkboxes)
    {
        var box = checkboxes[i];
        if( checked( box))
            rights = rights | box.pack.rights;
    }
    return rights;
}
function computePrice()
{
    var collect = 0;
    for( i in checkboxes)
    {
        var box = checkboxes[i];
        if( checked( box))
            collect = collect | box.pack.id;
    }
    return prices[collect];
}
function fixSubscription()
{
    initialRights = computeRights();
}
/** провериь, изменили ли форму */
function checkEquality()
{
    return computeRights()!=initialRights;
}

/** Проверить, больше ли новый пакет, нежели предыдущий */
function isGreater()
{
    return (initialRights & computeRights())==initialRights;
}
