
var domainStructure;
var language;

window.addEvent('domready', function(){
    if ($('domainInput') && $('content')){
        domainSuggestInit();
        checkMouseout.periodical(1000);
    }



    var language = undefined;
    if( $('languageInput'))
    {
	language = $('languageInput').value;
    }
    if ((language == undefined || language.length < 2) && document.domain != undefined)
    {
        var tmp = document.domain.toLowerCase();
        if (tmp.search(/^(www\.)?ovh(-hosting)?\./) >= 0)
        {
            language = tmp.replace(/^(www\.)?ovh(-hosting)?\.([a-z]+\.)?([a-z]+).*$/, '$4');
        }
    }
    language = language.replace(/\//g, '');

    var params = $H({ "domain" : "abc", "language": language });
    var plop =  new Request.JSON({
            url: '/cgi-bin/ajax/domainSuggest2.cgi',
            onSuccess: function(obj, txt){
                domainStructure = obj;
            }
        }).send(params.toQueryString());


});

function checkMouseout(){
    if (!domainSuggestVars.isMouseOver) removeSuggestBox();
    else {
        $('content').setStyle('display', 'block');
    }
}

var domainSuggestVars = $H({
    'row_current' : 0,
    'row_maximum' : 0,
    'isMouseOver' : false,
    'timer' : null,
    'lastRequest' : null
});

function domainSuggestInit(){

    $('domainInput').addEvents({
        'mouseover': function(){
            domainSuggestVars.isMouseOver = true;
        },
        'mouseout': function(){
            domainSuggestVars.isMouseOver = false;
        },
        'click': function(){
            domainSuggestSearch();
        },
        'focus': function(){
            domainSuggestSearch();
        },
        'blur': function(){
            if(!domainSuggestVars.isMouseOver) removeSuggestBox();
        },
        'keyup': function(event){
        
            switch(event.key){

                case 'down':
                    if(domainSuggestVars.row_current<(domainSuggestVars.row_maximum-1)) changeSelectedRow('down');
                break;

                case 'up':
                    if(domainSuggestVars.row_current>0) changeSelectedRow('up');
                break;
                
                case 'enter':
                    selectRow();
                    removeSuggestBox();
                break;
                
                case 'esc':
                    removeSuggestBox();
                break;
               
                case 'backspace':
                    if($('domainInput').value.length) domainSuggestWait();
                break;

                default:
                    var regexp = /\w|-|_/; 
                    if(regexp.test(event.key)) domainSuggestWait();
                break;
            }
        }
    });
}

function domainSuggestWait(){

    domainSuggestLaodingTable.run();

    $clear(domainSuggestVars.timer);
    //domainSuggestVars.timer = domainSuggestSearch.delay(60);
    domainSuggestVars.timer = domainSuggestSearch.delay(500);
}

var domainSuggestLaodingTable = function() {
    $('content').empty();

    // main box
    var mbox = new Element('table', {
        'class': 'domainSuggestBox',
        'cellspacing': '0',
        'cellpadding':'5'
    });

    var box = new Element('tbody', {});


    domainSuggestVars.row_maximum = 0;
    var myIndex = 1;

    var domain = $('domainInput').value;
    domain = domain.toLowerCase();
    domain = domain.replace(/(\s|!|"|#|\$|%|&|'|\(|\)|\*|\+|\`|\/|:|;|\<|=|\>|\?|@|\[|\]|\\|\^|\{|\||\}|~|,)/g, '');
    domain = domain.replace(/^www\./, '');
    if (domain != $('domainInput').value) $('domainInput').value = domain;
    
    // remove tld 
    domain = domain.replace(/\..*/, '');

    if (domain.length <2.9) { return; }

    var obj = domainStructure;
    obj.domain = domain;

    if ($defined(obj)){
        obj.search.each(function(res){

            if (res.available != -1){

            var text = (res.available ? js_domainAvailable : js_domainNotAvailable);
           
            // building img src var for action row
            if (res.available == '1') { var img = "/images/domains/odline/action-order.jpg"; }
            else { var img = "/images/domains/odline/action-transfer.jpg"; }

            // a row
            
            var myTr = new Element('tr', {
                'id': 'row_'+myIndex,
                'name': obj.domain+"."+res.tld,
                'class': 'domainSuggestBoxRow'
            });

            new Element('td', {
                'html': obj.domain+"<span class='bold'>."+res.tld+"</span>"
            }).inject(myTr);

            new Element('td', {
                'class': 'result',
                'html': "    <img src='/images/ajax-loader2.gif'/>"
            }).inject(myTr);

            // action row
            new Element('td', {
                'class': 'action',
                'html': '<img src="'+img+'"/>',
                'styles': {
                    'text-align': 'right'
                }
            }).inject(myTr);
           
            myTr.inject(box);

            myIndex++;

            }
        });
    }
    var myTr = new Element('tr', {});
    
    new Element('td', {
        'id': 'row_'+myIndex,
        'html': js_domainSuggestMore,
        'class': 'domainSuggestBoxRow',
        'class': 'link',
        'colspan': '3',
        'events': {
            'mouseover': function(myIndex){
                domainSuggestVars.isMouseOver = true;
                changeSelectedRow(myIndex);
            }.bind(this, myIndex),
            'mouseout': function(){
                domainSuggestVars.isMouseOver = false;
            },
            'click': function(){
                $('domainmode').value = 'bulk';
                $('stayHere').value = '1';
                $('domainInput').setProperty('name','domain_domainChooser_bulkdomains');
                $('domForm').submit();
            }
        }
    }).inject(myTr);
    
    myTr.inject(box);
    myIndex++;

    domainSuggestVars.row_maximum = myIndex;
    changeSelectedRow(0);

    box.inject(mbox);
    mbox.inject($('content'));
    $('content').setStyle('display', 'block');
}

function domainSuggestSearch(){

    var domain = $('domainInput').value;
    
    // clean domain name, prevent bad characters
    domain = domain.toLowerCase();
    domain = domain.replace(/(\s|!|"|#|\$|%|&|'|\(|\)|\*|\+|\`|\/|:|;|\<|=|\>|\?|@|\[|\]|\\|\^|\{|\||\}|~|,)/g, '');
    domain = domain.replace(/^www\./, '');
    if (domain != $('domainInput').value) $('domainInput').value = domain;
    
    // remove tld 
    domain = domain.replace(/\..*/, '');

    if (domain.length < 3){
        removeSuggestBox();
        return;
    }
    
    var language = $('languageInput').value;
    if ((language == undefined || language.length < 2) && document.domain != undefined)
    {
        var tmp = document.domain.toLowerCase();
        if (tmp.search(/^(www\.)?ovh\./) >= 0)
        {
            language = tmp.replace(/^(www\.)?ovh\.([a-z]+\.)?([a-z]+).*$/, '$3');
        }
    }

    language = language.replace(/\//g, '');
    
    var params = $H({ "domain" : domain, "language": language });


    if (domainSuggestVars.lastRequest != undefined) domainSuggestVars.lastRequest.cancel();

    domainSuggestVars.lastRequest = new Request.JSON({
        url: '/cgi-bin/ajax/domainSuggest2.cgi',
        onSuccess: function(obj, txt){
            domainSuggestComplete(obj, txt);
        }
    }).send(params.toQueryString());
}

function domainSuggestComplete(obj, txt)
{
    $('content').empty();

    // main box
    var mbox = new Element('table', {
        'class': 'domainSuggestBox',
        'cellspacing': '0',
        'cellpadding':'5'
    });

    var box = new Element('tbody', {});


    domainSuggestVars.row_maximum = 0;
    var myIndex = 1;

    if ($defined(obj)){
        obj.search.each(function(res){

            if (res.available != -1){

            var text = (res.available ? js_domainAvailable : js_domainNotAvailable);
           
            // building img src var for action row
            if (res.available == '1') { var img = "/images/domains/odline/action-order.jpg"; }
            else { var img = "/images/domains/odline/action-transfer.jpg"; }

            // a row
            
            var myTr = new Element('tr', {
                'id': 'row_'+myIndex,
                'name': obj.domain+"."+res.tld,
                'class': 'domainSuggestBoxRow',
                'events': {
                    'mouseover': function(myIndex){
                        domainSuggestVars.isMouseOver = true;
                        changeSelectedRow(myIndex);
                    }.bind(this, myIndex),
                    'mouseout': function(){
                        domainSuggestVars.isMouseOver = false;
                    },
                    'click': function(myIndex){
                        selectRow(myIndex, obj.domain+"."+res.tld);
                        removeSuggestBox();
                    }.bind(this, myIndex)
                }
            });

            new Element('td', {
                'html': obj.domain+"<span class='bold'>."+res.tld+"</span>"
            }).inject(myTr);

            new Element('td', {
                'class': 'result',
                'html': text
            }).inject(myTr);

            // action row
            new Element('td', {
                'class': 'action',
                'html': '<img src="'+img+'"/>',
                'styles': {
                    'text-align': 'right'
                }
            }).inject(myTr);
           
            myTr.inject(box);

            myIndex++;

            }
        });
    }else{
        /*
        var myTr = new Element('tr', {});
        
        new Element('td', {
            'id': 'row_'+myIndex,
            'html': js_domainSuggestMaintenance,
            'class': 'red',
            'colspan': '3'
        }).inject(myTr);
        
        myTr.inject(box);
        */
    }

    var myTr = new Element('tr', {});
    
    new Element('td', {
        'id': 'row_'+myIndex,
        'html': js_domainSuggestMore,
        'class': 'domainSuggestBoxRow',
        'class': 'link',
        'colspan': '3',
        'events': {
            'mouseover': function(myIndex){
                domainSuggestVars.isMouseOver = true;
                changeSelectedRow(myIndex);
            }.bind(this, myIndex),
            'mouseout': function(){
                domainSuggestVars.isMouseOver = false;
            },
            'click': function(){
                $('domainmode').value = 'bulk';
                $('stayHere').value = '1';
                $('domainInput').setProperty('name','domain_domainChooser_bulkdomains');
                $('domForm').submit();
            }
        }
    }).inject(myTr);
    
    myTr.inject(box);
    myIndex++;

    domainSuggestVars.row_maximum = myIndex;
    changeSelectedRow(0);

    box.inject(mbox);
    mbox.inject($('content'));
    $('content').setStyle('display', 'block');
}

function changeSelectedRow(type){

    var myRow = $('row_'+domainSuggestVars.row_current);
        
    if ($defined(myRow)) myRow.removeClass('selected');
        
    // update current row index  
    if (type == 'up') domainSuggestVars.row_current--;
    else if (type == 'down') domainSuggestVars.row_current++;
    else domainSuggestVars.row_current = type;

    myRow = $('row_'+domainSuggestVars.row_current);
    if ($defined(myRow)) myRow.addClass('selected');
}

function removeSuggestBox(){
    $('content').setStyle('display', 'none');
}

function selectRow(id, dom){

    if(!$defined(id)) id = domainSuggestVars.row_current;

    if($defined($('row_'+id)))
    {
        $('domainInput').value = $('row_'+id).getProperty('name');
        $('domainInput').setProperty('name','domaines');
        $('domForm').submit();
    }
}

