 // =============================================================
 // Greg Zemskov, (c) Mohito.ru
 // =============================================================
 var g_RefresherHandlerMohito = new Array();
 var g_RefresherHandlerMohitoIDStorage = new Array();
 var g_RefresherHandlerMohitoCurBannerID = new Array();
 var g_RefresherIndex = 0;

 var g_BannerStructMohito = new Array();

 // =============================================================
 // 
 // =============================================================
 function mds_RBAddStruct(l_Struct) {
   l_Index = g_BannerStructMohito.length;
   g_BannerStructMohito[l_Index] = l_Struct;
   return l_Index;
 }

 // =============================================================
 // 
 // =============================================================
 function mds_RBAddBanner(template, delay, freq, bantype) {

   l_Banner = new Array();
   l_Banner[0] = template;
   l_Banner[1] = delay; // delay
   l_Banner[2] = freq; // freq
   l_Banner[3] = Math.floor(10000000 * Math.random(1000000)); // unique ID
   l_Banner[4] = bantype;

   return l_Banner;

 }

 // =============================================================
 // 
 // =============================================================
  function mds_RBGetRandom(par_Left, par_Right) {
    l_RndNumber = Math.random();
    return Math.floor(par_Left + (par_Right - par_Left + 1) * l_RndNumber);
  }

 // =============================================================
 // 
 // =============================================================
 function mds_RBChooseBanner(par_BannerGroup, par_CurrentBannerID) {
   l_Number = par_BannerGroup.length;
   l_StaticArray = new Array();

   l_MaxStaticArray = 0;
   for (i = 0; i < l_Number; i++) {
     if ((par_BannerGroup[i][3] != par_CurrentBannerID) || (l_Number == 1)) { // except the current
       for (j = 0; j < par_BannerGroup[i][2] * 10; j++) {
         l_StaticArray[l_MaxStaticArray++] = i;
       }
     }
   }

   l_Chosen = mds_RBGetRandom(0, l_MaxStaticArray - 1);

   return l_StaticArray[l_Chosen];
 }


 // =============================================================
 // 
 // =============================================================
 function mds_FindRefresherIndexByUniqueID(par_UniqueID) {
   for (k = 0; k < g_RefresherHandlerMohito.length; k++) {
     if (g_RefresherHandlerMohitoIDStorage[k] == par_UniqueID) {
        return k;
     }
   }

   return -1;

 }

 // =============================================================
 // 
 // =============================================================
 /*function mds_RefreshBannerExpiredMohito(par_Index) {
 
 }*/
 function mds_RefreshBannerExpiredMohito(par_Index) {
   l_IndexesToBeUpdated = new Array();
   l_IndexesInSet = new Array();
   l_IndexesNum = 0;

   l_CurSet = g_BannerStructMohito[par_Index].m_Set;

   l_Str = '';
   for (i1 = 0; i1 < l_CurSet.length; i1++) {
     for (j1 = 0; j1 < l_CurSet[i1].length; j1++) {
       l_Str = l_Str + "\npar_Index = " + par_Index + " for [" + i1 + "," + j1 + "] = " + l_CurSet[i1][j1][3];
     }
   }

   for (i2 = 0; i2 < l_CurSet.length; i2++) {
     for (j2 = 0; j2 < l_CurSet[i2].length; j2++) {
        l_TempIndex = mds_FindRefresherIndexByUniqueID(l_CurSet[i2][j2][3]);

        if (l_TempIndex > -1) {
           l_IndexesToBeUpdated[l_IndexesNum] = l_TempIndex;
           l_IndexesInSet[l_IndexesNum] = i2;
           l_IndexesNum++;
        }
     }
   }

   // choose if any banners are expired from this set
   for (h = 0; h < l_IndexesNum; h++) {
        g_RefresherHandlerMohito[l_IndexesToBeUpdated[h]] -= 1;
        
        if (g_RefresherHandlerMohito[l_IndexesToBeUpdated[h]] <= 0) {
           l_Obj = document.getElementById(g_RefresherHandlerMohitoIDStorage[l_IndexesToBeUpdated[h]]);

           l_CurSet = g_BannerStructMohito[par_Index].m_Set[l_IndexesInSet[h]];

           // initial run
           if (g_RefresherHandlerMohitoCurBannerID[l_IndexesToBeUpdated[h]] == null) {
              g_RefresherHandlerMohitoCurBannerID[l_IndexesToBeUpdated[h]] = -1; 
           }

           // get random banner
           l_ChosenBanner = l_CurSet[mds_RBChooseBanner(l_CurSet, g_RefresherHandlerMohitoCurBannerID[l_IndexesToBeUpdated[h]])];
           l_Obj.innerHTML = l_ChosenBanner[0];

           // store its unique id and place
           g_RefresherHandlerMohitoCurBannerID[l_IndexesToBeUpdated[h]] = l_ChosenBanner[3];
           g_RefresherHandlerMohito[l_IndexesToBeUpdated[h]] = l_ChosenBanner[1];

           // set refresh time
           if (g_RefresherHandlerMohito[l_IndexesToBeUpdated[h]] == 0)
              g_RefresherHandlerMohito[l_IndexesToBeUpdated[h]] = 5; // 5 секунд
        }

   } 

   setTimeout("mds_RefreshBannerExpiredMohito(" + par_Index + ");", 1000);
 }

 // =============================================================
 // 
 // =============================================================
 function mds_AssignRefresher(par_OrderNum, par_Banner) {
   g_RefresherHandlerMohito[par_OrderNum] = par_Banner[1];
   g_RefresherHandlerMohitoIDStorage[par_OrderNum] = par_Banner[3];
 }

 // =============================================================
 // 
 // =============================================================
 function mds_RBCreateImgHTMLMohito(par_Index) {
   l_Result = "";

   par_BannerStruct = g_BannerStructMohito[par_Index];
   l_Result += par_BannerStruct.m_StartTemplate;

   for (k = 0; k < par_BannerStruct.m_Set.length; k++) {
     l_ChosenBanner = par_BannerStruct.m_Set[k][mds_RBChooseBanner(par_BannerStruct.m_Set[k])];
     l_Result += '<div id="' + l_ChosenBanner[3] + '">' + l_ChosenBanner[0] + '</div>' + par_BannerStruct.m_MiddleTemplate;
     mds_AssignRefresher(g_RefresherIndex, l_ChosenBanner);
     g_RefresherIndex++;
   }

   l_Result += par_BannerStruct.m_EndTemplate;
   document.write(l_Result);
 }

 // =============================================================
