
//
//  Fermentas Top Menu v0.2 Функцинальность верхнего меню для Fermentas'а
//  FermentasColor v0.2     Специальная функция, которая перекрашивает продукты в цвет из их фирменного каталога 
//  ByFermentasColor v0.1   Специальная функция, которая перекрашивает продукты в цвет из их фирменного каталога по параметрам 
//  tabMenu v0.1            Функцианальность TAB'ов
//  HeightControl           Контроль высоты контентов
//  CheckCells v1.1         По заданной строке объединяет (colspan'ит) ячейки, если они пустые
//  CheckTable v1.6         По заданной таблице объединяет (rowspan'иь) ячейки, если они имеют одинаковые названия
//  CheckRows v1.5          По заданной таблице объединяет (rowspan'иь) ячейки, если они имеют одинаковые названия
//  FermentasFAQ v0.1       Создаёт нужную функцианальность для Truobleshooting guide (Fermentas)
//  FermentasProtocols v0.1 Создаёт нужную функцианальность для Appliaction protocols (Fermentas)
//  hHeight v0.1b           функция вычисляющая высоту объекта
//  mMenu v1.0a             Применяет логику работы открывающихся меню
//  findParent v0.1         Функцию выполняющая поиск первого подходящего парента (parent) по искомому тегу и классу)
//  tt v0.1                 Функция для теста, помчает нужный нам элменет бордером
//  ODS                     ods :)
//  iePause v0.1            которая не работает по-моему :))
//  jDebug v0.2             дебуг
//  aalert v0.4             алерт данных   
//  OpenDD v0.1             В продуктах на протоколы поставить такую же функцианальность как и на FAQ - - 
//  FixLightBox v0.2        Правильная работа галлерей LightBox на Ферментасе
//  mSearch v1.2            Подсвечивает искомую строку на странице классом Finded

    
//------------------- Fermentas Top Menu v0.2 -----------------------------------------------
//issues:
//если быстро водить туда обратно неадекватно сеья ведёт в IE
//код можно улучшить, так как для первого и втрого уровня одно и тоже повторяеться два раза
function FermentasTopMenu(TopMenu) { 
    var fMenu = $j(TopMenu);
    //первый уровень
    fMenu = $j('>UL', fMenu);
    $j('>LI', fMenu).each(function() {
        $j(this).bind("mouseenter", function() {
            $j('LI', fMenu).removeClass('Active');
            $j(this).addClass('Active');
            $j('A', fMenu).removeClass('On'); 
            $j('>A', this).addClass('On');            
        }).bind("mouseleave", function() {
            $j('LI', fMenu).removeClass('Active') 
            $j('A', fMenu).removeClass('On') 
        })  
    })      
}
function FermentasTopMenu2(TopMenu) { 
    fMenu = $j('>UL', TopMenu);
    $j('>LI', fMenu).bind("mouseenter", function() {
        $j('LI', fMenu).removeClass('Active');
        $j(this).addClass('Active');
        $j('A', fMenu).removeClass('On'); 
        $j('>A', this).addClass('On');          
    })
    
    $j('UL', fMenu).bind("mouseleave", function() {
        $j('LI', fMenu).removeClass('Active')
        $j('A', fMenu).removeClass('On') 
    })
}



//------------------- FermentasColor v0.2 -------------------------------
//специальная функция, которая перекрашивает продукты в цвет из их фирменного каталога. 
function FermentasColor(prod) {
    
    //Функция выполняется без параметров
    var item = '';
    for (item in Colors) {
        if (!prod) {
            $j('#ProductList B A').each(function() {
                if (item == $j(this).text()) {
                    $j(this).parent().css({ backgroundColor:Colors[item] }) //расскрашивание
                }
                $j(this).click(function() {
                    obj = $j(this).parent().parent().find('UL');
                    if (obj.get(0).className == 'Close') {
                        obj.removeClass('Close').addClass('Open');
                        exit
                    }
                    if (obj.get(0).className == 'Open') {
                        obj.removeClass('Open').addClass('Close');
                        exit                    
                    }
                    return false
                })
            })
        } else {
            prod.each(function() {
                if ( item == $j('>SPAN>A', this).text() ) {
                    $j('>SPAN', this).css({ backgroundColor:Colors[item] }); //расскрашивание
                    $j('DFN', this).css({ backgroundColor:Colors[item] }) //расскрашивание
                } else if ( item == $j(this).text() ) {
                    $j(this).css({ backgroundColor:Colors[item] }); //расскрашивание    
                } 
            })
        }
    }          
}


//--------------------------------------- byByFermentasColor v0.1-----------------------------------------
//Расскрашивает object в цвет color
function ByFermentasColor(color, aim) {
    for (item in Colors) {
        if (item == $j(color).text()) {
            $j(aim).css({ backgroundColor:Colors[item] }) //расскрашивание
        }
    }
}

//---------------------------------------tabMenu v0.1-----------------------------------------------------  
//функцианальность TAB'ов


function MenuTab(MenuLocation) {     
    var tMenu = $j(MenuLocation);
    $j('>DD', tMenu).css({ display:'none' });
    $j('>DT', tMenu).addClass('TabTitle');
    $j('DT.TabTitle:first', tMenu).addClass('Active');
    $j('<div id="TabContainer"><q class="T"></q></div>').insertAfter(tMenu);  
    if (!$j.browser.msie) {
        $j('DD:first', tMenu).clone().appendTo('#TabContainer').css({ display:'table' });
    } else {
        $j('DD:first', tMenu).clone().appendTo('#TabContainer').css({ display:'block' }); 
    }
    $j('DT.TabTitle', tMenu).click(function() {                     
        $j('#TabContainer').remove();    
        $j('<div id="TabContainer"><q class="T"></q></div>').insertAfter(tMenu);  
        $j('DT.TabTitle.Active', tMenu).removeClass('Active');  
        $j(this).addClass('Active');
        if (!$j.browser.msie) {
            $j('~DD:first', this).clone().appendTo('#TabContainer').css({ display:'table' });  
        } else {
            $j('~DD:first', this).clone().appendTo('#TabContainer').css({ display:'block' }); 
        }
        FixLightBox('#TabContainer'); 

   $j('#contentHide2').removeClass('hide').addClass('');
   $j('#contentHide3').removeClass('hide').addClass('');  
   $j('#contentHide4').removeClass('hide').addClass('');                                
    });
    FixLightBox('#TabContainer'); 
     
}    
           
//-------------------- Контроль высоты контентов---------------------------------------------
function HeightControl() {
    var conLeft = $j('#Left');
    var conRight = $j('#Content');
    var hContact = $j('#BlockContacts').height();
    if ( conLeft.height() > conRight.height() ) {
        $j('>DIV.Block', conRight).height( conLeft.height() - 17 + hContact)
    } else {
        conLeft.height(conRight.height()-$j('#BlockContacts').height());
        $j('>DIV.Block', conRight).height(conRight.height())
    }
}
      
//------------------- CheckCells v1.1 -------------------------------
//функция: по заданной строке объединяет (colspan'ит) ячейки, если они пустые
//issues: no :)     


function CheckCells(data) {
    var aim = $j(data);
    var order = 0;
    $j('TD', aim).each(function() {
        if ( $j(this).html() == '') {
            $j('TD:eq('+(order-1)+')', aim).attr('colspan', 
                ( 
                    $j('TD:eq('+(order-1)+')', aim).attr('colspan') 
                ? 
                    parseInt($j('TD:eq('+(order-1)+')', aim).attr('colspan')) + 1 
                : 
                    2 
                )
            );
            $j(this).remove(); 
        } else {
            order++
        }
    })
    
}   
    
//------------------- CheckTable v1.6 -------------------------------
//функция: по заданной таблице объединяет (rowspan'иь) ячейки, если они имеют одинаковые названия
//issues:    
function CheckTable(table) {
    var aim = $j(table);
    var count_td = 0;
    var count_tr = $j('TR', aim).length;
    /*count_tr = 20;  */
    //получаем колиество столбцов в таблице
    $j('TR', aim).each(function() { if (count_td < $j('TD', this).length) { count_td = $j('TD', this).length } });
    //нумерация всей таблицы от 0   
    for (var tr = 0; tr < count_tr; tr++) {
        CheckCells('TR:eq('+tr+')');
        $j('TR:eq('+tr+') TD', aim).each(function(td) {
            $j(this).attr('tr', tr).attr('td', td);
            $j(this).parent().attr('td_count', td+1);            
        })
    }    
    
    for (var i = count_tr-1; i != -1; i--) {
        var j_lim = $j('TR:eq('+i+')', aim).attr('td_count');
        for (var j = 0; j < j_lim; j++) {
            var td_this = $j('TR:eq('+i+') TD[td='+j+']', aim);        
            var td_next = $j('TR:eq('+(i+1)+') TD[td='+j+']', aim);
            if ( td_this.text() == td_next.text() ) {
                td_this.attr('rowspan', (td_next.attr('rowspan') ? parseInt(td_next.attr('rowspan'))+1 : 2))
                td_next.remove();
            }
        }
    }   
          
    if ($j.browser.msie) {
        $j('TABLE', aim).clone().appendTo(aim);
        $j('TABLE:eq(0)', aim).remove();
    }
}

//------------------- CheckRows v1.5 -------------------------------
//функция: по заданной таблице объединяет (rowspan'иь) ячейки, если они имеют одинаковые названия
//issues:  
function CheckRows(table) {
    var aim = $j(table);
    var count_td = 0;
    var count_tr = $j('TR', aim).length;
    /*count_tr = 20;  */
    //получаем колиество столбцов в таблице
    $j('TR', aim).each(function() { if (count_td < $j('TD', this).length) { count_td = $j('TD', this).length } });
    //нумерация всей таблицы от 0   
    for (var tr = 0; tr < count_tr; tr++) {
        CheckCells('TR:eq('+tr+')');
        $j('TR:eq('+tr+') TD', aim).each(function(td) {
            $j(this).attr('tr', tr).attr('td', td);
            $j(this).parent().attr('td_count', td+1);            
        })
    } 
    if ($j.browser.msie) {
        $j(aim).clone().insertAfter(aim);
        $j(aim).parent().find('TABLE:eq(0)').remove();
    }
} 
    
    
//------------------- FermentasFAQ v0.1 -------------------------------
//функция: Создаёт нужную функцианальность для Truobleshooting guide (Fermentas)
//issues: no
function FermentasFAQ(obj) {
    var aim = $j(obj);
    $j('.lev_sub', aim).addClass('Close');
    $j('.Text', aim).addClass('Close');
    $j('.lev_1', aim).toggle(function() {
        $j(this).addClass('Open');
        $j('~DIV.lev_sub:first', this).removeClass('Close');
    }, function() {
        $j(this).removeClass('Open');
        $j('~DIV.lev_sub:first', this).addClass('Close');
    });
    
    $j('.lev_2', aim).toggle(function() {
        $j('~DIV.lev_sub:first', this).removeClass('Close');
    }, function() {
        $j('~DIV.lev_sub:first', this).addClass('Close');
    });
    
    $j('.lev_3', aim).toggle(function() {
        $j('~DIV.Text:first', this).removeClass('Close');
    }, function() {
        $j('~DIV.Text:first', this).addClass('Close');
    });
}

//------------------- FermentasProtocols v0.1 -------------------------------
//функция: Создаёт нужную функцианальность для Appliaction protocols (Fermentas)
//issues: no
function AProtocols(obj) {
    var aim = $j(obj);
    $j('.lev_sub', aim).addClass('Close');
    $j('.Text DD', aim).addClass('Close');
    $j('.lev_1', aim).toggle(function() {
        $j(this).addClass('Open');
        $j('~.lev_sub:first', this).removeClass('Close');
    }, function() {
        $j(this).removeClass('Open');
        $j('~.lev_sub:first', this).addClass('Close');
    });
    
    $j('.Text DT', aim).toggle(function() {
        $j(this).addClass('Open');
        $j('~DD:first', this).removeClass('Close');
    }, function() {
        $j(this).removeClass('Open');
        $j('~DD:first', this).addClass('Close');
    });
    
}

//------------------- hHeight v0.1b -------------------------------
//функция вычисляющая высоту объекта
//issues:
// 
$j.fn.hheight = function() {
    var h = $j(this);
    var hh = $j(this).height();
    var zz = 1;
    $j('>*', h).each(function() {
/*        $j(this).hheight()*/
    })
    return hh
}


//-------------------- mMenu v1.0a for Fermentas ------------------------
//Применяет логику работы открывающихся меню
function mMenuF(menu) {
    /*var menu = {};
    menu = $j(menu); */
    $j('UL UL', menu).addClass('Close');
    $j('LI:has(UL>LI)>SPAN>A>DFN', menu).addClass('toOpen');
    $j('SPAN.Active~UL:has(LI)', menu).removeClass('Close').addClass('Open');
    $j('SPAN:has(~UL>LI).Active DFN', menu).removeClass('toOpen').addClass('toClose');
    
    $j('DFN', menu).click(function() {
        if ($j(this).get(0).className == 'toOpen') {
        //открыть меню
            $j(this).removeClass('toOpen').addClass('toClose');
            $j(this).parent().parent().find('~UL').removeClass('Close').addClass('Open')
        } else {
        //закрыть меню
            $j(this).removeClass('toClose').addClass('toOpen');
            $j(this).parent().parent().find('~UL').removeClass('Open').addClass('Close')
        }  
        return false
    })
}


//---------------------------------------findParent v0.1-----------------------------------------------------   
// findParent(Tag, Class);
//Функцию выполняющая поиск первого подходящего парента (parent) по искомому тегу и классу)
//

// Issues:
// если не будет например pTag или pClass
// если будет несколько калссов?
// что делать если надо искать по ID
// что будет если ничего не найдётся           
$j.fn.findParent = function(pTag, pClass) {
    var fObject = $j(this);
    var fClass = 'NaN';
    var fTag = 'NaN';
    
    while ( (fTag != pTag) && ( fClass != pClass) ) {       
        fObject = fObject.parent();
        fClass = fObject.get(0).className;
        fTag = fObject.get(0).tagName;
    }
    return fObject
} 


//-----------------------------------------tt v0.1---------------------------------------------------     
//Функция для теста, помчает нужный нам элменет бордером
$j.fn.tt = function() {
    $j(this).css({ border:'1px solid blue' })
}

//------------------- ODS -----------------------------------------------   
//ods :)
function ods() {
    message = '';
    for( var i = 0; i < arguments.length; i++)
        message += i + ' = ' + arguments[i] + '\n';
    prompt('DEBUG\n\n' + message, message);
}

//------------------- iePause v0.1 --------------------------------------
//которая не работает по-моему :))   
function iePause() {
    if ($j.browser.msie) {
        for ( i=1; i<100; i++ ) {
            //специальная пауза для IE
        }
    }
    return false;
}

//------------------- jDebug v0.2 --------------------------------------
//дебуг  
function jDebug(data)
{   
    var jData = $j(data).clone();
    var jContainer = $j('<div id="jDebug"></div>');
    $j('#jDebug').css({
        height:'300px',
        border:'1px solid blue',
        overflow:'hidden'
    }); 
    jContainer.empty();
    if ( $j("#jDebug").size() == 0 ) {
        $j("body").prepend(jContainer.empty())
    } else {
        $j("#jDebug").html('')                
    } 
    $j("#jDebug").append(jData);
}

//------------------- aalert v0.4 --------------------------------------
//алерт данных
function aa(data) {
  data = data ||'Alert';
  alert(data);  
}

//------------------- OpenDD v0.1 --------------------------------------  
//В продуктах на протоколы поставить такую же функцианальность как и на FAQ - -  
function OpenDD(obj) {
    if ( $j(obj).attr('var') == '1' ) {
        $j(obj).removeClass('Close');
        $j('~DD:eq(0)', obj).removeClass('Close');
        $j(obj).attr('var', '2')
    } else if ( $j(obj).attr('var') == '2' ) {
        $j(obj).addClass('Close');
        $j('~DD:eq(0)', obj).addClass('Close');       
        $j(obj).attr('var', '1')
    }
}

//------------------- FixLightBox v0.2 --------------------------------------  
//Правильная работа галлерей LightBox на Ферментасе
function FixLightBox(selector) {
    var aim = $j(selector);
    $j('A[rel="lightbox[testtwo]"]', aim).each(function() {
        $j(this).attr('rel', $j(this).attr('rel') + '_tab' );
    });
    $j('A[rel="lightbox[Lot]"]', aim).each(function() {
        $j(this).attr('rel', $j(this).attr('rel') + '_tab' );
    });
}

//------------------- mSearch v1.2 -------------------------------------- 
//Подсвечивает искомую строку на странице классом Finded
//issues: не настраиваемые указатели точного места
//todo: сделать вывод счётчика найденных вхождений (2.0)         
function mSearch(selector) {
    var aim = $j(selector);
    var button = $j('.onPage', aim);
    //эмуляция Click'а
    button.mousedown(function() {
        $j(this).html('<span style="position:relative; top:1px;">' + $j(this).text() + '</span>');
        $j('.Finded').removeClass('Finded');
    }).mouseup(function() {
        $j(this).html($j(this).text());
        mSearchDo(selector);
    });
    $j('INPUT', aim).keypress(function (e) {
        if (e.which == 13) {
            mSearchDo(selector);
            return false
        }
    });  
}
function mSearchDo(selector) {
    var aim = $j(selector);
    var find = $j('INPUT[name="onpage"]', aim).val();
    var c = 0; //счётчик найденных слов
    $j('DIV.Center *:not(:has(>*))').each(function() {
        var text = $j(this).text(); //текст, в котором происходит поиск
        var find_new = ''; //найденное слова
        var text_new = '';  //текст, содержащий найденное слово
        var j = 0; //счётчик букв искомой слова
        for (var i=0; i<=text.length; i++) { //проходим по каждой букве текста
            if (( text.charAt(i).toUpperCase() == find.charAt(j) )||( text.charAt(i).toLowerCase() == find.charAt(j) )) { //проверка совпадения букв в тексте - с буквами искомого слова, с учётом регистров (верхнего и нижнего)
                find_new += text.charAt(i) ; //записываем найденные буквы искомого слова
                if ( (j+1) == find.length) { //если нашли искомое слово
                    c++;
                    text_new +='<span class="Finded">' + find_new + '</span>'; //подсвечиваем найденное слово
                    find_new = ''; //удаляем найденные буквы
                    j = 0; //выставляем счётчик заново
                } else {
                    j++; //счётчик следующей буквы в искомом слове
                }
            } else {
                text_new += find_new + text.charAt(i);//записываем ненайденные буквы
                find_new = ''; //удаляем найденные буквы
                j = 0; //выставляем счётчик заново
            }
        }
        $j(this).html(text_new); //вывод обработанного текста
    });
} 


     
