YAHOO.namespace('forex');
YAHOO.forex.Hint = function(glossaryTerms, options) {
    this._glossaryTerms = glossaryTerms;
    if (YAHOO.lang.isUndefined(options)) {
        var options = {};
    }
    this._tooltipId = options.tooltipId || 'tooltip' + Math.floor(Math.random() * 1000);
    this._hintClass = options.hintClass || 'hint';
    this._class = options.searchClass || 'glossaryHighlight';
    this._showCount = options.showCount || false;
    this._termLength = options.termLength || 3;
    while (YAHOO.util.Dom.get(this._tooltipId)) {
        this._tooltipId = 'tooltip' + Math.floor(Math.random() * 1000);
    }
    this._init();
}
YAHOO.forex.Hint.prototype = {
    _tooltip: null,

    _init: function() {
        var glossaryText = YAHOO.util.Dom.getElementsByClassName(this._class);
        for (var i = 0; i < glossaryText.length; i++) {
            this._replaceContent(glossaryText[i]);
        }

        var keywords = YAHOO.util.Dom.getElementsByClassName(this._hintClass, 'a');
        this._tooltip = new YAHOO.widget.Tooltip(this._tooltipId, {context:keywords, width: "300px"});
        this._tooltip.contextTriggerEvent.subscribe(this._setContext, this, true);
    },

    _initTerms: function(terms) {
        var result = [];
        for (var i = 0; i < this._termLength; i++) {
            result.push({string: [], indexes: [], endFlag: false});
            for (var j = 0; j < this._termLength - i; j++) {
                result[i].string.push('');
                result[i].indexes.push(0);
            }
        }
        return result;
    },

    _shiftTerms : function(terms) {
        terms[0].string.shift();
        terms[0].indexes.shift();
        terms[0].endFlag = (terms[0].endFlag) ? --terms[0].endFlag : false;
        for (var i = 1; i < terms.length; i++) {
            for (var j = 0; j < terms[i].string.length; j++) {
                terms[i].string[j] = terms[0].string[j];
                terms[i].indexes[j] = terms[0].indexes[j];
            }

            if (YAHOO.lang.isNumber(terms[0].endFlag) && (terms[0].endFlag + 1 < terms[i].string.length)) {
                terms[i].endFlag = terms[0].endFlag;
            }
        }
        
        terms[terms.length - 1].endFlag = false;
        
        return terms;
    },

    _makeTerms: function(terms, word, index) {
        if (!word) {
            return this._shiftTerms(terms);
        }
        word = word.replace(/\s*/g, '');
        var lang = YAHOO.lang;
        var endPos = word.length;
        while (lang.isNull(word.substr(endPos - 1, 1).match(/[a-zA-Z\u0430-\u044f\u0410-\u042f\)]/)) && endPos) {
            endPos--;
        }

        if (endPos < word.length) {
            word = word.substring(0, endPos);
            terms[0].endFlag = terms[0].string.length - 1;
            if (word == '') {
                return terms;
            } 
            terms[0].endFlag++;
        }

        terms[0].string.push(word);
        terms[0].indexes.push(index);
        
        return this._shiftTerms(terms);
    },

    _makeHint: function(terms, end) {
        var result = {element: null}
        for (var i in terms) {
            if (terms[i].endFlag && (terms[i].endFlag < terms[i].string.length - 1)) {
                continue;
            }
            var term = terms[i].string.join(' ')
            var termObject = this._glossaryTerms[term.toLowerCase()];
            if (termObject) {
                if (this._showCount) {
                    if (termObject.count >= this._showCount) {
                        break;
                    }
                    termObject.count = (termObject.count == null) ? 1 : ++termObject.count;
                }
                result.index = terms[i].indexes[0];
                result.length = terms[i].indexes.pop() + terms[i].string.pop().length - result.index;
                result.element = document.createElement('a');
                result.element.className = this._hintClass;
                result.element.setAttribute('href', termObject.link);
                result.element.innerHTML = term;
                break;
            }
        }
        
        return result;
    },

    _parseText: function(child) {
        var words = child.nodeValue.split(' ');
        var index = 0;
        var terms = this._initTerms();
        var i = -1;
        
        do {
            i++;
            var word = false;
            if (YAHOO.lang.isString(words[i])) {
                if ((words[i] == '') || words[i].match(/^\s$/)) {
                    index += words[i].length + 1;
                    
                    continue;
                }

                word = words[i];
            }

            terms = this._makeTerms(terms, word, index);
            
            if (YAHOO.lang.isUndefined(terms[this._termLength - 1].string[0])) {
                break;
            }

            var object = this._makeHint(terms);
            if (YAHOO.lang.isNull(object.element)) {
                if (word) {
                    index += word.length + 1;
                }
                continue;
            }

            var newChild = child.splitText(object.index);
            newChild.nodeValue = newChild.nodeValue.substr(object.length);
            child.parentNode.insertBefore(object.element, newChild);
            this._parseText(newChild);
            break;
        } while (1);
    },

    _replaceContent: function(element) {
        var child = element.firstChild;
        while (!YAHOO.lang.isNull(child)) {
            if ((child.tagName == 'A') || (child.tagName == 'IMG')) {
            } else if (child.nodeName == '#text') {
                this._parseText(child);
            } else {
                this._replaceContent(child);
            }

            child = child.nextSibling;
        }
    },

    _setContext: function(type, args) {
        var glossaryTerm = args[0];
        var hintContent = this._glossaryTerms[glossaryTerm.innerHTML.toLowerCase()].hintContent;
        this._tooltip.cfg.setProperty('text', hintContent);
    }
};var glossaryObj = [];glossaryObj[22] = {link: "/glossary/letter8/#word22", hintContent:"сведения о проведенных операциях и состоянии клиентского счета у брокера"};glossaryObj[70] = {link: "/glossary/letter8/#word70", hintContent:"American Stock Exchange"};glossaryObj[27] = {link: "http://www.fxclub.org/tools_info/", hintContent:"Аналитика рынка FOREX-спектр новостей, прогнозов и комментариев экспертов"};glossaryObj[7] = {link: "/glossary/letter8/#word7", hintContent:"Цена, по которой кто-либо желает продать Вам валюту."};glossaryObj[6] = {link: "/glossary/letter7/#word6", hintContent:"Цена, по которой Вы можете купить валюту."};glossaryObj[39] = {link: "/glossary/letter7/#word39", hintContent:"Компания через которую Вы можете зарабатывать деньги на финасовых рынках."};glossaryObj[66] = {link: "http://www.fxclub.org/condition_contrade/", hintContent:"Классический тарифный план работы с FOREX CLUB и одноименный торговый терминал(еще известен как Rumus) для работы на этом тарифе"};glossaryObj[14] = {link: "/glossary/letter9/#word14", hintContent:"пара валют (например цена евро к доллару), из которых состоит котировка на валютном рынке Forex."};glossaryObj[45] = {link: "/glossary/letter18/#word45", hintContent:"Совершение торговых операций внутри торговой сессии или внутри торгового дня без переноса открытых позиций на следующий торговый день или сессию."};glossaryObj[62] = {link: "/glossary/letter18/#word62", hintContent:"Специальный сотрудник компании FOREX CLUB, который обслуживает сделки клиентов"};glossaryObj[28] = {link: "http://www.fxclub.org/condition_virtcount/", hintContent:"Учебный счет, позволит торговать на рынке FOREX, не рискуя РЕАЛЬНЫМИ деньгами - разница только в этом!"};glossaryObj[21] = {link: "http://www.fxclub.org/about_mission/", hintContent:"Компания Forex Club - Ваш партнер в работе на рынке FOREX, с нами Вы будете зарабатывать биржевой торговлей"};glossaryObj[67] = {link: "http://www.fxclub.org/moscow_news/2009/07/08/5835.html", hintContent:"собственный TV канал компании в сети интернет, в эфире - самые актуальные новости и события с крупнейших бирж мира"};glossaryObj[46] = {link: "/glossary/letter14/#word46", hintContent:"Разрыв на графике цен, как правило бывает на выходных, когда рынок не работатет и происходят важные события"};glossaryObj[17] = {link: "/glossary/letter14/#word17", hintContent:"время по Гринвичу от которого начинаются часовые пояса (например Москва +3 зимой и +4 летом)"};glossaryObj[24] = {link: "/glossary/letter16/#word24", hintContent:"Торговля на рынке FOREX через сеть Интернет из любого места в мире без начальников и подчиненных."};glossaryObj[25] = {link: "/glossary/letter16/#word25", hintContent:"Инвестирование – это процесс преумножения вашего капитала. Деньги делают деньги"};glossaryObj[57] = {link: "/glossary/letter10/#word57", hintContent:"Инструмент FOREX CLUB, который позволит Вам имея меньшие деньги совершать сделки на рынке на большие суммы"};glossaryObj[30] = {link: "/glossary/letter10/#word30", hintContent:"Ваше персональное имя пользователя или псевдоним для входа в ту или иную систему"};glossaryObj[10] = {link: "/glossary/letter10/#word10", hintContent:"убыток от сделки"};glossaryObj[11] = {link: "/glossary/letter10/#word11", hintContent:"базовый объем валюты на которую заключается сделка"};glossaryObj[53] = {link: "/glossary/letter17/#word53", hintContent:"Требуемое количество денег на счете для поддержания открытых позиций(сделок) на рынке FOREX."};glossaryObj[65] = {link: "http://www.fxclub.org/condition_contrade/", hintContent:"Прогрессивный тарифный план работы с FOREX CLUB и одноименный торговый терминал для работы на этом тарифе"};glossaryObj[69] = {link: "/glossary/letter22/#word69", hintContent:"The National Association of Securities Dealers Automated Quotations"};glossaryObj[71] = {link: "/glossary/letter22/#word71", hintContent:"Нью-Йоркская товарная биржа (New York Merchantile Exchange)"};glossaryObj[52] = {link: "/glossary/letter22/#word52", hintContent:"Старейшая и крупнейшая биржа в США. Основана в 1792 г. Расположена на Уолл-стрит в Нью-Йорке."};glossaryObj[15] = {link: "/glossary/letter12/#word15", hintContent:"Приказ дилеру совершить сделку на рынке при наступлении определенных событий"};glossaryObj[50] = {link: "/glossary/letter12/#word50", hintContent:"Переход открытой позиции на следующий рабочий день"};glossaryObj[18] = {link: "/glossary/letter15/#word18", hintContent:"это минимально возможное изменение котировки (цены)"};glossaryObj[49] = {link: "/glossary/letter15/#word49", hintContent:"Прибыль от сделки"};glossaryObj[56] = {link: "/glossary/letter23/#word56", hintContent:"Текущее значение цены валютных пар по которым можно заключить сделку, может выражаться в виде цены Bid и  Ask"};glossaryObj[12] = {link: "/glossary/letter6/#word12", hintContent:"Разница между ценой покупки и продажи (bid и ask), точно так же как в обменном пункте на улице"};glossaryObj[19] = {link: "/glossary/letter6/#word19", hintContent:"ограничение убытков - указание дилеру закрыть сделку при достижении убытка определенного уровня"};glossaryObj[5] = {link: "/glossary/letter6/#word5", hintContent:"плата, которая взимается или начисляется трейдеру за перенос позиции на Forex на следующий день из за разницы процентных ставок"};glossaryObj[43] = {link: "/glossary/letter13/#word43", hintContent:"Единичная котировка, поступающая из информационной системы."};glossaryObj[32] = {link: "/glossary/letter13/#word32", hintContent:"Клиент FOREX CLUB, который через нас заключает сделки на рынке FOREX с целью получения прибыли"};glossaryObj[29] = {link: "http://www.fxclub.org/tools_soft/", hintContent:"Программа, устанавливаемая на компьютер клиента, позволяющая торговать на рынке FOREX"};glossaryObj[16] = {link: "/glossary/letter13/#word16", hintContent:"общая тенденция на рынке - положительный тренд (цена вверх) и отрицательный (вниз)"};glossaryObj[68] = {link: "/glossary/letter26/#word68", hintContent:"улица в Нью-Йорке, на которой расположены крупнейшие мировые площадки в США"};glossaryObj[58] = {link: "http://kroufr.ru/content/view/29/226/", hintContent:"Организация, объединяющая крупных игроков рынка, стоящая на защите интересов клиентов."};glossaryObj[72] = {link: "https://secure.fxclub.org/", hintContent:"УТС - система Управления Торговым Счетом в FOREX CLUB. Пополнить счет, снять прибыль, сменить пароль - все это делается в УТС"};var glossaryTerms = [];glossaryTerms['account statement'] = glossaryObj[22];glossaryTerms['стейтмент'] = glossaryObj[22];glossaryTerms['amex'] = glossaryObj[70];glossaryTerms['analytics'] = glossaryObj[27];glossaryTerms['аналитическая информация'] = glossaryObj[27];glossaryTerms['аналитической информации'] = glossaryObj[27];glossaryTerms['аналитической информацией'] = glossaryObj[27];glossaryTerms['ask'] = glossaryObj[7];glossaryTerms['аск'] = glossaryObj[7];glossaryTerms['offer'] = glossaryObj[7];glossaryTerms['аску'] = glossaryObj[7];glossaryTerms['аски'] = glossaryObj[7];glossaryTerms['аскам'] = glossaryObj[7];glossaryTerms['bid'] = glossaryObj[6];glossaryTerms['бид'] = glossaryObj[6];glossaryTerms['бида'] = glossaryObj[6];glossaryTerms['бидом'] = glossaryObj[6];glossaryTerms['бидов'] = glossaryObj[6];glossaryTerms['биды'] = glossaryObj[6];glossaryTerms['бидам'] = glossaryObj[6];glossaryTerms['broker'] = glossaryObj[39];glossaryTerms['брокер'] = glossaryObj[39];glossaryTerms['ДЦ'] = glossaryObj[39];glossaryTerms['дилинговый центр'] = glossaryObj[39];glossaryTerms['classicforex'] = glossaryObj[66];glossaryTerms['classic forex'] = glossaryObj[66];glossaryTerms['currency pair'] = glossaryObj[14];glossaryTerms['Валютная пара'] = glossaryObj[14];glossaryTerms['валютной пары'] = glossaryObj[14];glossaryTerms['валютной паре'] = glossaryObj[14];glossaryTerms['валютной парой'] = glossaryObj[14];glossaryTerms['day trading'] = glossaryObj[45];glossaryTerms['Торговля внутри дня'] = glossaryObj[45];glossaryTerms['dealer'] = glossaryObj[62];glossaryTerms['Дилер'] = glossaryObj[62];glossaryTerms['demo account'] = glossaryObj[28];glossaryTerms['учебный счет'] = glossaryObj[28];glossaryTerms['демо счет'] = glossaryObj[28];glossaryTerms['demo счет'] = glossaryObj[28];glossaryTerms['демонстрационный счет'] = glossaryObj[28];glossaryTerms['forex club'] = glossaryObj[21];glossaryTerms['форекс клуб'] = glossaryObj[21];glossaryTerms['forex сlub'] = glossaryObj[21];glossaryTerms['forex сlub'] = glossaryObj[21];glossaryTerms['forex club tv'] = glossaryObj[67];glossaryTerms['gap'] = glossaryObj[46];glossaryTerms['гэп'] = glossaryObj[46];glossaryTerms['гэпах'] = glossaryObj[46];glossaryTerms['гэпом'] = glossaryObj[46];glossaryTerms['гэпами'] = glossaryObj[46];glossaryTerms['gmt'] = glossaryObj[17];glossaryTerms['internet trading'] = glossaryObj[24];glossaryTerms['интернет-трейдинг'] = glossaryObj[24];glossaryTerms['трейдинг'] = glossaryObj[24];glossaryTerms['биржевая торговля'] = glossaryObj[24];glossaryTerms['биржевой торговле'] = glossaryObj[24];glossaryTerms['investment'] = glossaryObj[25];glossaryTerms['инвестирование'] = glossaryObj[25];glossaryTerms['инвестиции'] = glossaryObj[25];glossaryTerms['инвестировать'] = glossaryObj[25];glossaryTerms['инвестициями'] = glossaryObj[25];glossaryTerms['leverage'] = glossaryObj[57];glossaryTerms['Кредитное плечо'] = glossaryObj[57];glossaryTerms['login'] = glossaryObj[30];glossaryTerms['логин'] = glossaryObj[30];glossaryTerms['loss'] = glossaryObj[10];glossaryTerms['лосс'] = glossaryObj[10];glossaryTerms['лось'] = glossaryObj[10];glossaryTerms['lot'] = glossaryObj[11];glossaryTerms['лот'] = glossaryObj[11];glossaryTerms['лота'] = glossaryObj[11];glossaryTerms['лотом'] = glossaryObj[11];glossaryTerms['лотами'] = glossaryObj[11];glossaryTerms['лотов'] = glossaryObj[11];glossaryTerms['margin'] = glossaryObj[53];glossaryTerms['Маржа'] = glossaryObj[53];glossaryTerms['modernforex'] = glossaryObj[65];glossaryTerms['modern forex'] = glossaryObj[65];glossaryTerms['nasdaq'] = glossaryObj[69];glossaryTerms['-'] = glossaryObj[69];glossaryTerms['nymex'] = glossaryObj[71];glossaryTerms['nyse'] = glossaryObj[52];glossaryTerms['order'] = glossaryObj[15];glossaryTerms['ордер'] = glossaryObj[15];glossaryTerms['ордера'] = glossaryObj[15];glossaryTerms['ордеру'] = glossaryObj[15];glossaryTerms['ордером'] = glossaryObj[15];glossaryTerms['ордере'] = glossaryObj[15];glossaryTerms['ордерам'] = glossaryObj[15];glossaryTerms['ордерами'] = glossaryObj[15];glossaryTerms['overnight'] = glossaryObj[50];glossaryTerms['овернайт'] = glossaryObj[50];glossaryTerms['pips'] = glossaryObj[18];glossaryTerms['пипс'] = glossaryObj[18];glossaryTerms['пункт'] = glossaryObj[18];glossaryTerms['пипсом'] = glossaryObj[18];glossaryTerms['пунктом'] = glossaryObj[18];glossaryTerms['пунктов'] = glossaryObj[18];glossaryTerms['profit'] = glossaryObj[49];glossaryTerms['профит'] = glossaryObj[49];glossaryTerms['quote'] = glossaryObj[56];glossaryTerms['котировка'] = glossaryObj[56];glossaryTerms['котировок'] = glossaryObj[56];glossaryTerms['котировки'] = glossaryObj[56];glossaryTerms['котировками'] = glossaryObj[56];glossaryTerms['spread'] = glossaryObj[12];glossaryTerms['спрэд'] = glossaryObj[12];glossaryTerms['спрэда'] = glossaryObj[12];glossaryTerms['спрэдом'] = glossaryObj[12];glossaryTerms['спрэдами'] = glossaryObj[12];glossaryTerms['stop loss'] = glossaryObj[19];glossaryTerms['стоп лосс'] = glossaryObj[19];glossaryTerms['стоп лоссы'] = glossaryObj[19];glossaryTerms['стоп лоссом'] = glossaryObj[19];glossaryTerms['стоп лоссами'] = glossaryObj[19];glossaryTerms['стоп лоссов'] = glossaryObj[19];glossaryTerms['swap'] = glossaryObj[5];glossaryTerms['своп'] = glossaryObj[5];glossaryTerms['свопы'] = glossaryObj[5];glossaryTerms['свопов'] = glossaryObj[5];glossaryTerms['своп пункты'] = glossaryObj[5];glossaryTerms['swap пункты'] = glossaryObj[5];glossaryTerms['swap tom next'] = glossaryObj[5];glossaryTerms['tick'] = glossaryObj[43];glossaryTerms['тик'] = glossaryObj[43];glossaryTerms['тиков'] = glossaryObj[43];glossaryTerms['тики'] = glossaryObj[43];glossaryTerms['trader'] = glossaryObj[32];glossaryTerms['трейдер'] = glossaryObj[32];glossaryTerms['trading terminal'] = glossaryObj[29];glossaryTerms['торговый терминал'] = glossaryObj[29];glossaryTerms['терминал'] = glossaryObj[29];glossaryTerms['терминалом'] = glossaryObj[29];glossaryTerms['терминала'] = glossaryObj[29];glossaryTerms['терминалу'] = glossaryObj[29];glossaryTerms['торговая платформа'] = glossaryObj[29];glossaryTerms['trend'] = glossaryObj[16];glossaryTerms['тренд'] = glossaryObj[16];glossaryTerms['тренда'] = glossaryObj[16];glossaryTerms['трендом'] = glossaryObj[16];glossaryTerms['тренды'] = glossaryObj[16];glossaryTerms['wall street'] = glossaryObj[68];glossaryTerms['КРОУФР'] = glossaryObj[58];glossaryTerms['Комиссия по регулированию отношений участников финансовых рынков'] = glossaryObj[58];glossaryTerms[''] = glossaryObj[58];glossaryTerms['УТС'] = glossaryObj[72];glossaryTerms['(УТС)'] = glossaryObj[72];glossaryTerms['утс'] = glossaryObj[72];glossaryTerms['(утс)'] = glossaryObj[72];glossaryTerms['(УТС)'] = glossaryObj[72];YAHOO.util.Event.onDOMReady(function () {
    new YAHOO.forex.Hint(
            glossaryTerms,  
            { 
              showCount: 2
            }
    );
});
