



// used to split all categories from string to multy dimension array
// banner_cats - initial String array
function prepare(banner_cats){
    var j,i;
    for (j=0; j<banner_cats.length; j++){
        banner_cats[j] = banner_cats[j].split(',');
        for (i=0; i<banner_cats[j].length;i++){
            banner_cats[j][i] = banner_cats[j][i].substring(8);
        }
    }
    return banner_cats;
}
// Return all banners wich contain category from cats array
// banner_cats - all banners
// cats - array of categories from banner holder
function getBannerByCats(banner_cats , cats){
    var j,i,k;
    var isbreak = false;
    var result = new Array();
    for (j=0; j<banner_cats.length; j++){                     // iterate all banners
        for (i=0; i<banner_cats[j].length;i++){             // iterate banner categories array
            for (k=0; k<cats.length; k++) {                    // iterate sought categories
                if (cats[k] == banner_cats[j][i]) {
                    result.push(j);
                    isbreak = true;                            
                    break;
                };
            }
            if (isbreak){
                isbreak = false;
                break;
            }    
        }
    }
    return result
}

// banners storage object
function banner_storage(){
 // array of links
 this.links =  [    'http://www.velcom.by/ru/private/equipment',  'http://www.velcom.by/ru/about/news/16680.htm',  'http://www.velcom.by/ru/business/roaming/15648.htm',  'http://www.velcom.by/ru/private/services/11137.htm',  'http://www.velcom.by/ru/business/phones',  'http://www.velcom.by/ru/business/services/melofon.htm',  'http://www.velcom.by/ru/business/services/12416.htm',  'http://www.velcom.by/ru/business/services/12406.htm',  'http://www.velcom.by/ru/business/services/2405.htm',  'http://www.velcom.by/ru/business/services/12405.htm',  'http://www.velcom.by/ru/business/services/command.htm',  'http://www.velcom.by/ru/private/campaigns/11447.htm',  ];        
// array of images
 this.images = [    '/ru/images/b_images/Modem_225x100_rus.jpg',  '/ru/images/b_images/format_nomera.jpg',  '/ru/images/b_images/L-1roam-225.jpg',  '/ru/images/b_images/paymen-rus.jpg',  '/ru/images/b_images/ru/225x100_RU.JPG',  '/ru/images/b_images/Velcom_banner_225x100_corporation_rus.jpg',  '/ru/images/b_images/Velcom_banner_225x100_mail_rus.jpg',  '/ru/images/b_images/transport_225x100_rus.jpg',  '/ru/images/b_images/short-number-rus.jpg',  '/ru/images/b_images/ofis_225x100_rus.jpg',  '/ru/images/b_images/ru/Team_225x100_rus.jpg',  '/ru/images/b_images/modem10r225100rus.jpg',  ];   
 // array of flash elements
 this.flash =  [    '',  '',  '',  '',  '',  '',  '',  '',  '',  '',  '',  '',  ]; 
 // array of categories
 this.cats =   [    'Banners:Private Hot Offer 2',  'Banners:Business Hot Offer 3,Banners:Private Hot Offer 3',  'Banners:Business Hot Offer 2,Banners:',  'Banners:Private Hot Offer 1',  'Banners:Business Hot Offer 1',  'Banners:Business Hot Offer 3',  'Banners:Business Hot Offer 2,Banners:',  'Banners:Business Hot Offer 2,Banners:',  'Banners:Business Hot Offer 3,Banners:',  'Banners:Business Hot Offer 2,Banners:',  'Banners:Business Hot Offer 3',  '',  ];   
// array of banner type
 this.types =  [    'picture',  'picture',  'picture',  'picture',  'picture',  'picture',  'picture',  'picture',  'picture',  'picture',  'picture',  'picture',  ];   
// flash or picture

if (!this.types[this.types.length-1]){
    this.types.pop(); 
    this.flash.pop();  
    this.links.pop();
    this.images.pop();
    this.cats.pop();
 }

 this.prepare = new prepare(this.cats);
 
}
// used to remove used_banners from possible_banners
function bannerSplice(possible_banners,used_banners){
    var i,j;
    for (i=0; i<possible_banners.length; i++){             // iterate possible banners
        for (j=0; j<used_banners.length; j++){
            if (possible_banners[i] == used_banners[j]){
                possible_banners.splice(i,1);
                i--;                                     // go to one element before
                break;
            }
        }
        
    }
    return possible_banners;
}
// used to set banner in banner holder
// link - holder element with parsed categories
// storage - all banners
//used_banners - currently used banners
function setBanner(link, storage,used_banners){
    var possible_banners = getBannerByCats (storage.cats, link.cats);
    var pos_ban_temp = new Array();
    pos_ban_temp = possible_banners.slice(0);             // copy array
    pos_ban_temp = bannerSplice(pos_ban_temp, used_banners );
    var banner_pos;
    var rand;
    if (pos_ban_temp.length == 0){
        rand = Math.ceil(Math.random()*(possible_banners.length))-1;
        banner_pos = possible_banners[rand];            // getting banner position in storage
    } else {
        rand = Math.ceil(Math.random()*(pos_ban_temp.length))-1;
        banner_pos = pos_ban_temp[rand];                 // getting banner position in storage
    } 
    var banner_type = storage.types[banner_pos];
    if (banner_type != 'undefined' &&  banner_type.indexOf('flash')>-1){
                                                        // product flash
        var flash = new Array();
        flash.push(' <object height="100" width="225" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000">');
        flash.push('<param value="' + storage.flash[banner_pos] +'" name="movie"/>');
        flash.push('<param value="best" name="quality"/><param value="Window" name="wmode"/>'); 
        flash.push('<embed height="100" width="225" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" wmode="Window" quality="best" src="');
        flash.push(storage.flash[banner_pos]);
        flash.push('"/></object>');
        var temp_el = document.createElement('div');    // replace <a href> to "flash"
        temp_el.innerHTML=flash.join('');
        link.parentNode.appendChild(temp_el);
        link.parentNode.removeChild(link);
    } else {                                            // product simple link
        link.innerHTML="<img src='"+storage.images[banner_pos] +"' style='border:0;'/>";        
        link.setAttribute('href',storage.links[banner_pos]);
        link.style.visibility="visible";
    }
    
    return banner_pos;
} 
// comparator helps in banner-holders sorting
// sort by categories array length
function sortHolders(a,b)
{
 return a.cats.length - b.cats.length;
}
// main function for banners rotation
function rotateBanners(){
    try{
        var a = document.getElementsByName("category_link");    // all holders
        var i=0, j=0;
        var storage = new banner_storage();  // all banners
                   
        var a_array = new Array();
        var a_cats_temp;
        var used_banners = new Array();                            // used banners
        for (i=0; i < a.length; i++){                            // getting holder's categories 
            a_cats_temp = a[i].innerHTML.split(',');
            for (j=0; j<a_cats_temp.length; j++){
              a_cats_temp[j] = a_cats_temp[j].substring(8);        // Remove common part of category name
              if (a_cats_temp[j].length ==0){
                a_cats_temp.splice(j,1);
              }
            }
            
            if (a_cats_temp.length != 0){
              a[i].cats = a_cats_temp;
              a_array.push(a[i]);                                    // for special feature that helps avoid duplicates        
            } 
        }
        
        a_array.sort(sortHolders);                                 // special feature helps avoid duplicates
         for (i=0; i < a_array.length; i++){
            var temp = setBanner(a_array[i], storage, used_banners);    // main banner setter
            used_banners.push(temp);                            // remember used banners
        }
    } catch(err){
    }
}
addOnloadEvent(rotateBanners);


