//TheHost.Com.Ua
//Sedinkin Alexandr
//2010
//asedinkin.com.ua
//ASedinkin@gmail.com

document.observe('dom:loaded', function() {
    $$('#top_menu li a').each(function(item) {
        item.observe('focus', function(){
            this.up('li').addClassName('active');
        });
        item.observe('blur', function(){
            this.up('li').removeClassName('active');
        });
    });

    if (searchBox.getField()) searchBox.init();
    if (smallNews.getList()) smallNews.init();
    if (buyForm.getBox()) buyForm.init();
    if (hostingTable.getTables().length > 0) hostingTable.init();
    });

var searchBox = {
    initalValue: "Желаемый домен",

    init: function () {
        with (this.getField()) {
            setValue(this.initalValue);
            addClassName('gray');
            observe('focus', searchBox.onFocus);
            observe('blur', searchBox.onBlur);
        };
        $('search-box').select('div.button').each(function(item) {
            item.observe('click', searchBox.makeDomainsLookup);
        });
        searchBox.getField().observe('keypress', function(event) {
            if (event.keyCode == 13) searchBox.makeDomainsLookup();
        });
    },
    onFocus: function() {
        if (searchBox.getField().hasClassName('gray')) {
            with (searchBox.getField()) {
                setValue('');
                removeClassName('gray');
            };
        }
    },
    onBlur: function() {
        if ((searchBox.getFieldValue() == searchBox.initalValue) || (searchBox.getFieldValue().strip().empty())) {
            with (searchBox.getField()) {
                setValue(searchBox.initalValue);
                addClassName('gray');
            };
        }
    },
    getField: function() {
        this._field = this._field || $('search-field');
        return this._field;
    },
    getFieldValue: function() {
        return searchBox.getField().getValue();
    },
    setCheckboxes: function(state) {
        var checkboxes = $('search-box').select('input.search-checkbox');
        for (var i = 0; i < checkboxes.length; i++) {
            checkboxes[i].checked = state;
        }
    },
    makeDomainsLookup: function() {
        var fieldValue = searchBox.getFieldValue();
        if ((fieldValue != searchBox.initalValue) && (!fieldValue.strip().empty())) {
            fieldValue = fieldValue.escapeHTML();
            var domainsList = searchBox.getDomainsList(fieldValue);
            if (domainsList.length > 0) {
                this._resultDomainsHolder = this._resultDomainsHolder || $('checked-domains');
                this._resultDomainsTable = this._resultDomainsTable || this._resultDomainsHolder.down('table');
                this._resultDomainsTable.innerHTML = '';
                this._resultDomainsHolder.removeClassName('hidden');
                for (var i=0;i<domainsList.length;i++) {
                    this._resultDomainsTable.innerHTML += '<tr id="domain_row_'+domainsList[i]+'"><td class="d-name">'+domainsList[i]+'</td><td class="d-info"><!-- --></td><td class="d-status checking"><!-- --></td><td class="d-action"><!-- --></td></tr>';
                    if (i != domainsList.length-1) this._resultDomainsTable.innerHTML += '<tr><td class="horz-divider" colspan="4"><!-- --></td></tr>';
                    eval("new Ajax.Request('/domains/check_domain', { "+
                        "parameters: {domain:'"+domainsList[i]+"'},"+
                        "onSuccess: function(response) {"+
                            "var domain_row = $('domain_row_"+domainsList[i]+"'),"+
                                "domain_status = domain_row.down('td.d-status'),"+
                                "domain_info = domain_row.down('td.d-info'),"+
                                "domain_action = domain_row.down('td.d-action');"+
                            "if (response.responseJSON) domain_status.removeClassName('checking');"+
                            "if (response.responseJSON.result == 2) {"+
                                "domain_status.addClassName('yes');"+
                                "domain_action.innerHTML = '<a href=\"https://my.thehost.com.ua/manager/billmgr?func=register&welcomfunc=domain.order&welcomparam=price=18&project=1\" target=\"_blank\">Купить</a>';"+
                            "} else {"+
                                "domain_status.addClassName('no');"+
                                "domain_info.innerHTML = '<a href=\"http://who.is/whois/"+domainsList[i]+"/\" target=\"_blank\">информация о домене</a>';"+
                                "domain_action.innerHTML = '<span class=\"red\">Уже занят!</span>';"+
                            "}"+
                        "}"+
                    "});");

                }
            };
        };
    },
    getDomainsList: function(domainName) {
        this._checklistTable = this._checklistTable || $('search-box').down('table.checks-holder');
        this._checklistTableList = this._checklistTableList || this._checklistTable.getElementsBySelector('input.search-checkbox');
        var result = new Array();
        var fullDomainExpr = new RegExp('^.+\\..{2,5}$', 'i');
        //Add domain to list of domains if it contains "."
        var unneededZone = '';
        if (domainName[0] == '.') domainName = domainName.substring(1, domainName.length);
        if (domainName[domainName.length-1] == '.') domainName = domainName.substring(0, domainName.length-1);
        if (fullDomainExpr.test(domainName)) {
            result.push(domainName);
            unneededZone = domainName.substring(domainName.indexOf('.')+1, domainName.length);
            domainName = domainName.substring(0,domainName.indexOf('.'));
        }
        for (var i=0;i<this._checklistTableList.length;i++) {
            if (this._checklistTableList[i].checked && this._checklistTableList[i].name != unneededZone) result.push(domainName+'.'+this._checklistTableList[i].id);
        }
        return result;
    }
};

var buyForm = {
    okMessage: "Спасибо за доверие!<br />Ваша заявка успешно отправлена. В ближайшее время с Вами свяжутся по электронной почте для окончания процедуры регистрации.<br /><br /><a href=\"/\">Вернуться на главную страницу</a>",

    init: function() {
        this.formTable = this.formTable || $('form-box-table');
        this.formBoxRights = this.formBoxRights || $('form-box-rights');
        this.formBoxMessage = this.formBoxMessage || $('form-box-message');
        this.formBoxButton = this.formBoxButton || $('form-box-button');
        this.formBoxButton.observe('click', buyForm.submit);
        this.fields = this.formTable.select('input[type="text"], input[type="password"]');
        this.submitFields = this.fields.concat(this.formTable.select('select, textarea'));
    },
    getBox: function() {
        this.formBox = this.formBox || $('form-box');
        return this.formBox;
    },
    submit: function() {
        if (Prototype.Browser.WebKit) {
            $$('[style~="z-index:"]').each(function(item) {
                if (item.getStyle('z-index') == '-1') item.setStyle({height: 'auto'});
            });
        }
        if (buyForm.check().length == 0) {
            var params = $H();
            for (var i=0; i<buyForm.submitFields.length; i++) {
                params.set(buyForm.submitFields[i].name, buyForm.submitFields[i].getValue());
            }
            var request_uri = '/hosting/perform_order';
            //service_hd - only on hosting order form
            if ($('service_hd')) {
                if ($('service_hd').checked) {
                    params.set('service','hosting_domain');
                } else {
                    params.set('service','hosting');
                }
            } else {
                request_uri = '/vps_vds/perform_order';
            }
            new Ajax.Request(request_uri, {
                parameters: params,
                onComplete: function(response) {
                    buyForm.formTable.hide();
                    buyForm.formBoxButton.hide();
                    buyForm.formBoxRights.hide();
                    buyForm.formBoxMessage.show();
                    buyForm.formBox.morph('height: 16.5em');
                    setTimeout('buyForm.formBoxMessage.innerHTML = buyForm.okMessage;', 1000);
                }
            });
        } else {
            var message = '';
            if (buyForm.check().indexOf(1) != -1) {
                message += 'Пожалуйста, заполните все отмеченные обязательные поля!<br/>';
            }
            if (buyForm.check().indexOf(2) != -1) {
                message += 'Выбранный тарифный план не предоставляется на месяц!<br/>';
            }
            if (buyForm.check().indexOf(3) != -1) {
                message += 'Выбранный тарифный план не предоставляется на 6 месяцев!<br/>';
            }
            buyForm.flashMessage(message);
        }
    },
    check: function() {
        var result = [];
        for (var i=0; i<buyForm.fields.length; i++) {
            if (buyForm.fields[i].getValue().strip() == "") {
                buyForm.fields[i].up('td').addClassName('alerted');
                result.push(1);
            } else if (buyForm.fields[i].up('td').hasClassName('alerted')) {
                buyForm.fields[i].up('td').removeClassName('alerted');
            }
            //service_hd - only on hosting order form
            if ($('service_hd')) {
                this.getHostingTerms();
                this._hostingTerms.removeClassName('alerted');
                if (this.getHostingTerms() == 'month') {
                    if (this.getHostingPlan() == 'free' || this.getHostingPlan() == 'visiting_card' || this.getHostingPlan() == 'my_site' || this.getHostingPlan() == 'work') {
                        this._hostingTerms.addClassName('alerted');
                        result.push(2);
                    }
                } else if (this.getHostingTerms() == '6_months') {
                    if (this.getHostingPlan() == 'free' || this.getHostingPlan() == 'visiting_card') {
                        this._hostingTerms.addClassName('alerted');
                        result.push(3);
                    }
                }
            }
        }
        return result;
    },
    getHostingPlan: function () {
        this._hosting = this._hosting || $('hosting');
        return this._hosting.getValue();
    },
    getHostingTerms: function () {
        this._hostingTerms = this._hostingTerms || $('hosting_terms');
        return this._hostingTerms.getValue();
    },
    flashMessage: function(message) {
        this._flashBox = this._flashBox || $('flash-box');
        this._flashBox.innerHTML = message;
        this._flashBox.removeClassName('hidden');
        new Effect.Highlight(this._flashBox, { startcolor: '#be1d07',
    endcolor: '#ffd5cf' });
    }
    };

    var smallNews = {
    init: function() {
        with (this.getList()) {
            select('li a').each(function(item) {
                item.observe('click', function(event){
                    this.up('li').down('.hidden').removeClassName('hidden');
                    this.up('span').addClassName('hidden');
                    event.stop();
                });
            });
        };
    },
    getList: function() {
        this._newsList = this._newsList || $('small_news');
        return this._newsList;
    }
    };

    var hostingTable = {
    _tableRows : $H(),

    init: function() {
        this.getTables().each(function(advancedTable) {
            hostingTable.initStickers(advancedTable);
            with (advancedTable) {
                observe('mouseover', function(event) {
                    var cell = event.findElement('td');
                    if (!cell) { return false; }
                    hostingTable.resetStickers(advancedTable);
                    if (cell.hasClassName('price')) {
                        var position = Element.positionedOffset(cell),
                            sticker = advancedTable.sticker;
                        sticker.initialized = true;
                        sticker.setStyle('top: '+(position.top-110)+'px');
                        sticker.setStyle('left: '+(position.left-(120-cell.getWidth())/2)+'px');
                        sticker.show();
                        if (cell.hasClassName('p3')) {
                            sticker.addClassName('p3');
                        } else if (cell.hasClassName('p5')) {
                            sticker.addClassName('p5');
                        } else if (cell.hasClassName('p10')) {
                            sticker.addClassName('p10');
                        } else if (cell.hasClassName('p20')) {
                            sticker.addClassName('p20');
                        }
                    }
                    var cellId = cell.identify(),
                        row = event.findElement('tr');
                    row.rowItems = row.rowItems || row.select('td');
                    row.rowItemsLength = row.rowItemsLength || row.rowItems.length;
                    for (var i=1;i<row.rowItemsLength;i++) {
                        if (row.rowItems[i].identify() == cellId) {
                            var rows = hostingTable.getRows(advancedTable);
                            for (var j=1;j<rows.length;j++) {
                                rows[j].rowItems = rows[j].rowItems || rows[j].select('td');
                                rows[j].rowItemsLength = rows[j].rowItemsLength || rows[j].rowItems.length;
                                for (var k=1;k<rows[j].rowItemsLength;k++) {
                                    if (k == i) {
                                        rows[j].rowItems[k].addClassName('highligted');
                                    } else {
                                        rows[j].rowItems[k].removeClassName('highligted');
                                    }
                                }
                            }
                            break;
                        }
                    }
                });
                observe('mouseleave', function(event) {
                    var eventTable = Event.findElement(event, '.advanced_table');
                    if (eventTable) {
                        hostingTable.resetStickers(eventTable);
                        var rows = hostingTable.getRows(eventTable);
                        for (var j=1;j<rows.length;j++) {
                            for (var k=1;k<rows[j].rowItemsLength;k++) {
                                rows[j].rowItems[k].removeClassName('highligted');
                            }
                        }
                    }
                });
            }
        });
    },
    getTables: function() {
        if (!this._tables) {
            this._tables = [];
            var tables = $$('.advanced_table')
            for (var i=0;i<=tables.length-1;i++) {
                if (!tables[i].hasClassName('disable_mouse_hover')) this._tables.push(tables[i]);
            }
        }
        return this._tables;
    },
    getRows: function(table) {
        if (!this._tableRows.get(table.identify())) {
            this._tableRows.set(table.identify(), $(table).select('tr'));
        }

        return	this._tableRows.get(table.identify())
    },
    initStickers: function(advancedTable) {
        var stickerImage = new Image();
        stickerImage.src = '/img/stickers1_sprite.png';
        var sticker = new Element('div', {className: 'sticker'});
        advancedTable.sticker = sticker;
        advancedTable.appendChild(sticker);
        sticker.observe('mousemove', function(event) {
            if (event.layerY < 110) hostingTable.resetSticker(sticker);
        });
    },
    resetSticker: function(sticker) {
        if (sticker.initialized) {
            with (sticker) {
                hide();
                removeClassName('p3');
                removeClassName('p5');
                removeClassName('p10');
                removeClassName('p20');
                initialized = false;
            }
        }
    },
    resetStickers: function(advancedTable) {
        var sticker = advancedTable.sticker;
        hostingTable.resetSticker(advancedTable.sticker);
    }
};

