/**
 * RokAjaxSearch - A module that allow to make ajaxian search over Joomla!
 * 
 * Inspired on PixSearch Joomla! module by Henrik Hussfelt <henrik@pixpro.net>
 * 
 * @version		0.8
 * 
 * @license		MIT-style license
 * @author		Djamil Legato <djamil [at] rockettheme.com>
 * @client		Andy Miller @ Rockettheme
 * @copyright	Author
 */

var RokAjaxSearch = new Class({
    version: "0.8",
    options: {
        'results': null,
        'close': null,
        'websearch': false,
        'search': null,
        'readmore': null,
        'noresults': null,
        'advsearch': null,
        'searchlink': null,
        'advsearchlink': null,
        'page': null,
        'page_of': null,
        'uribase': null,
        'limit': null,
        'perpage': null,
        'ordering': null,
        'phrase': null,
        'keyevents': true,
        'hidedivs': null,
        'includelink': null,
        'viewall': null,
        'estimated': null,
        'showestimated': true,
        'showpagination': true,
        'showcategory': true,
        'showreadmore': true,
        'showdescription': true
    },
    initialize: function (options) {
        this.setOptions(options);
        this.timer = null;
        this.rows = ['roksearch_odd', 'roksearch_even'];
        this.inputBox = $('roksearch_search_str').setProperty('autocomplete', 'off');
        var pos = this.inputBox.getCoordinates();
        var left = pos.left + pos.width - $('roksearch_results').getSize().size.x;
        if (left < 0) left = pos.left;
        this.results = $('roksearch_results').setStyles({
            'position': 'absolute',
            'top': pos.top + pos.height,
            'left': left
        }).inject(document.body);
        this.fx = new Fx.Style(this.results, 'opacity').set(0);
        this.current = 0;
        this.type = 'local';
        var perpage = this.options.perpage;
        if (this.options.websearch) {
            this.google = new google.search.WebSearch();
            this.google.setResultSetSize(google.search.Search.SMALL_RESULTSET);
            this.google.setNoHtmlGeneration();
            this.google.setSearchCompleteCallback(this, this.googleComplete);
            $$('#rokajaxsearch .search_options input[type=radio]').each(function (input) {
                input.addEvent('click', function () {
                    this.type = input.value;
                    if (this.type == 'web') this.options.perpage = 4;
                    else this.options.perpage = perpage
                }.bind(this))
            },
            this)
        };
        this.addEvents();
        this.keyEvents()
    },
    googleStart: function () {
        if (!this.inputBox.hasClass('loading')) this.inputBox.addClass('loading');
        this.google.execute(this.inputBox.value)
    },
    googleComplete: function () {
        var results = this.google.results;
        var tmp = $('rokajaxsearch_tmp');
        var ol = new Element('ol', {
            'class': 'list'
        }).inject(tmp);
        results.each(function (res) {
            var li = new Element('li');
            var title_link = new Element('a', {
                'href': res.unescapedUrl
            }).setProperty('target', '_blank').setHTML(res.title);
            var title = new Element('h4').inject(li).adopt(title_link);
            var category = new Element('p').setHTML('<small><a href="' + res.visibleUrl + '" target="_blank">' + res.visibleUrl + '</a></small>').inject(li);
            var content = res.content;
            content = content.replace('<b>', '<span class="highlight">').replace('</b>', '</span>');
            var desc = new Element('div', {
                'class': 'description'
            }).setHTML(content).inject(li);
            li.inject(ol)
        });
        this.results.empty().removeClass('roksearch_results').setStyle('visibility', 'visible');
        this.arrowleft = null;
        this.arrowright = null;
        this.selectedEl = -1;
        this.els = [];
        this.outputTableless();
        tmp.empty().setStyle('visibility', 'visible');
        this.inputBox.removeClass('loading');
        this.fx.start(1);
        this.fireEvent('loaded')
    },
    addEvents: function () {
        this.inputBox.addEvents({
            'click': function () {
                if (this.inputBox.getValue() == this.options.search) this.inputBox.value = ''
            }.bind(this),
            'blur': function () {
                if (this.inputBox.getValue() == '') this.inputBox.value = this.options.search
            }.bind(this),
            'keydown': function (e) {
                e = new Event(e);
                $clear(this.timer);
                if (e.key == 'enter') e.stop()
            },
            'keyup': function (e) {
                e = new Event(e);
                if (e.code == 0 || e.code == 17 || e.code == 18 || e.code == 224 || e.alt || e.control || e.meta) return false;
                if (e.alt || e.control || e.meta || e.key == 'esc' || e.key == 'up' || e.key == 'down' || e.key == 'left' || e.key == 'right') return true;
                if (e.key == 'enter') e.stop();
                if (e.key == 'enter' && this.selectedEl != -1) {
                    if (this.selectedEl || this.selectedEl == 0) location.href = this.els[this.selectedEl].getFirst('a');
                    return false
                };
                $clear(this.timer);
                var lnk = this.options.searchlink.split("?")[0];
                lnk = lnk.replace(this.options.uribase, '');
                lnk = (lnk) ? lnk: "index.php";
                var uri = this.options.uribase + lnk;
                if (this.inputBox.value == '') {
                    var splitDivs = this.options.hidedivs.split(" ");
                    this.results.empty().removeClass('roksearch_results').setStyle('visibility', 'hidden');
                    if (splitDivs.length > 0 && splitDivs != '') splitDivs.each(function (div) {
                        $(div).setStyle('visibility', 'visible')
                    })
                } else {
                    if (this.type == 'local') {
                        var request = new Ajax(uri, {
                            method: 'get',
                            delay: 200,
                            data: {
                                'type': 'raw',
                                'option': 'com_search',
                                'view': 'search',
                                'searchphrase': this.options.phrase,
                                'ordering': this.options.ordering,
                                'limit': this.options.limit,
                                'searchword': this.inputBox.value,
                                'tmpl': 'component',
                                'r': $time()
                            },
                            onRequest: function () {
                                this.inputBox.addClass('loading')
                            }.bind(this),
                            onComplete: function (returns, b, c) {
                                var results = new Element('div').setHTML(returns);
                                var tmp = $('rokajaxsearch_tmp');
                                results.getChildren().each(function (div) {
                                    if (div.getProperty('class') == 'contentpaneopen' || div.id == 'page') {
                                        if (div.id == 'page') {
                                            var rs = div.getElement('.results');
                                            tmp.setHTML((rs) ? rs.innerHTML: '')
                                        } else tmp.setHTML(div.innerHTML)
                                    }
                                });
                                this.results.empty().removeClass('roksearch_results').setStyle('visibility', 'visible');
                                this.arrowleft = null;
                                this.arrowright = null;
                                this.selectedEl = -1;
                                this.els = [];
                                if (results.getElement('.contentpaneopen')) this.outputTable();
                                else this.outputTableless();
                                tmp.empty().setStyle('visibility', 'visible');
                                this.inputBox.removeClass('loading');
                                this.fx.start(1);
                                this.fireEvent('loaded')
                            }.bind(this)
                        });
                        this.timer = request.request.delay(500, request)
                    } else if (this.type == 'web') {
                        this.timer = this.googleStart.delay(500, this)
                    }
                }
            }.bind(this)
        })
    },
    keyEvents: function () {
        var bounds = {
            'keyup': function (e) {
                e = new Event(e);
                if (e.key == 'left' || e.key == 'right' || e.key == 'up' || e.key == 'down' || e.key == 'enter' || e.key == 'esc') {
                    e.stop();
                    if (e.key == 'left' && this.arrowleft) this.arrowleft.fireEvent('click');
                    else if (e.key == 'right' && this.arrowright) this.arrowright.fireEvent('click');
                    else if (e.key == 'esc' && this.close) this.close.fireEvent('click', e);
                    else if (e.key == 'down') {
                        var store = this.selectedEl;
                        if (this.selectedEl == -1) this.selectedEl = (this.options.perpage) * this.current;
                        else if (this.selectedEl + 1 < this.els.length) this.selectedEl++;
                        else return;
                        if (store != -1) this.els[store].fireEvent('mouseleave');
                        if ((this.selectedEl / this.options.perpage).toInt() > this.current) this.arrowright.fireEvent('click', true);
                        if (this.selectedEl || this.selectedEl == 0) this.els[this.selectedEl].fireEvent('mouseenter')
                    } else if (e.key == 'up') {
                        var store = this.selectedEl;
                        if (this.selectedEl == -1) this.selectedEl = (this.options.perpage) * this.current;
                        else if (this.selectedEl - 1 >= 0) this.selectedEl--;
                        else return;
                        if (store != -1) this.els[store].fireEvent('mouseleave');
                        if ((this.selectedEl / this.options.perpage).toInt() < this.current) this.arrowleft.fireEvent('click', true);
                        if (this.selectedEl || this.selectedEl == 0) this.els[this.selectedEl].fireEvent('mouseenter')
                    } else if (e.key == 'enter') {
                        if (this.selectedEl || this.selectedEl == 0) window.location = this.els[this.selectedEl].getElement('a')
                    }
                }
            }.bind(this)
        };
        if (this.options.keyevents) {
            this.addEvent('loaded', function () {
                document.addEvent('keyup', bounds.keyup)
            });
            this.addEvent('unloaded', function () {
                document.removeEvent('keyup', bounds.keyup)
            })
        }
    },
    outputTable: function () {
        var self = this;
        var wrapper1 = new Element('div', {
            'class': 'roksearch_wrapper1'
        }).inject(this.results);
        var wrapper2 = new Element('div', {
            'class': 'roksearch_wrapper2'
        }).inject(wrapper1);
        var wrapper3 = new Element('div', {
            'class': 'roksearch_wrapper3'
        }).inject(wrapper2);
        var wrapper4 = new Element('div', {
            'class': 'roksearch_wrapper4'
        }).inject(wrapper3);
        var header = new Element('div', {
            'class': 'roksearch_header png'
        }).setHTML(this.options.results).injectInside(wrapper4);
        this.close = new Element('a', {
            'id': 'roksearch_link',
            'class': 'png'
        }).setProperty('href', '#').setHTML(this.options.close).injectBefore(header);
        var splitDivs = this.options.hidedivs.split(" ");
        this.close.addEvent('click', function (e) {
            this.fireEvent('unloaded');
            new Event(e).stop();
            this.inputBox.value = this.options.search;
            var self = this;
            this.fx.start(0).chain(function () {
                self.results.empty().removeClass('roksearch_results')
            });
            if (splitDivs.length > 0 && splitDivs != '') splitDivs.each(function (div) {
                $(div).setStyle('visibility', 'visible')
            })
        }.bind(this));
        if (splitDivs.length > 0 && splitDivs != '') splitDivs.each(function (div) {
            $(div).setStyle('visibility', 'hidden')
        });
        this.results.addClass('roksearch_results');
        var searchedRestuls = $$('#rokajaxsearch_tmp fieldset');
        if (searchedRestuls.length > 0) {
            var container = new Element('div', {
                'class': 'container-wrapper'
            }).inject(wrapper4);
            var scroller = new Element('div', {
                'class': 'container-scroller'
            }).inject(container);
            searchedRestuls.each(function (res, i) {
                var data = '';
                data = res.getChildren();
                if (data.length > 0) {
                    data.each(function (div, j) {
                        if (div.getTag() == "div") {
                            if (div.getChildren().length > 2 && !div.getPrevious()) {
                                var suri = div.getFirst().getNext().getProperty('href');
                                var el = new Element('div', {
                                    'class': this.rows[i % 2] + ' png'
                                });
                                var lnk = new Element('a').setProperty('href', suri).injectInside(el);
                                var name = new Element('h3').setHTML(div.getFirst().getNext().getText()).injectInside(lnk);
                                this.els.push(el);
                                el.addEvents({
                                    'mouseenter': function () {
                                        this.addClass(self.rows[i % 2] + '-hover');
                                        self.selectedEl = i
                                    },
                                    'mouseleave': function () {
                                        this.removeClass(self.rows[i % 2] + '-hover');
                                        if (self.selectedEl == i) self.selectedEl = -1
                                    }
                                });
                                if (this.options.showdescription) var description = div.getNext().innerHTML;
                                else var description = '';
                                var desc = new Element('span').setHTML(description).injectAfter(lnk);
                                if (this.options.showcategory) {
                                    var cat = new Element('span', {
                                        'class': 'small'
                                    }).setHTML(div.getChildren().getLast().getText()).injectAfter(lnk);
                                    var br = new Element('br').injectAfter(cat)
                                }
                                if (this.options.showreadmore) {
                                    var lnk = new Element('a', {
                                        'class': 'clr'
                                    }).setProperty('href', suri).setHTML(this.options.readmore).injectAfter(desc);
                                    if (this.options.showdescription) var br = new Element('br').injectAfter(desc)
                                }
                                var innerWrapper1 = new Element('div', {
                                    'class': 'roksearch_result_wrapper1 png'
                                }).inject(scroller);
                                var innerWrapper2 = new Element('div', {
                                    'class': 'roksearch_result_wrapper2 png'
                                }).inject(innerWrapper1);
                                var innerWrapper3 = new Element('div', {
                                    'class': 'roksearch_result_wrapper3 png'
                                }).inject(innerWrapper2);
                                var innerWrapper4 = new Element('div', {
                                    'class': 'roksearch_result_wrapper4 png'
                                }).inject(innerWrapper3);
                                el.inject(innerWrapper4)
                            }
                        }
                    },
                    this)
                }
            },
            this);
            var splitting = scroller.getChildren();
            var max = Math.max(this.options.perpage, splitting.length);
            var min = Math.min(this.options.perpage, splitting.length);
            var perpage = this.options.perpage;
            this.page = [];
            (Math.abs(max / min)).times(function (i) {
                if (splitting[i]) this.page.push(new Element('div', {
                    'class': 'page page-' + i
                }).inject(scroller).setStyle('width', scroller.getStyle('width')));
                for (j = 0, l = perpage; j < l; j++) {
                    if (splitting[i * perpage + j]) splitting[i * perpage + j].inject(this.page[i])
                }
            }.bind(this));
            scroller.setStyle('width', container.getStyle('width').toInt() * Math.round(max / min) + 1000)
        }
        if (!searchedRestuls.length) {
            var el = new Element('div', {
                'class': this.rows[0]
            });
            var name = new Element('h3').setHTML(this.options.noresults).injectInside(el);
            var lnk = new Element('a').setProperty('href', this.options.advsearchlink).injectAfter(name);
            var name = new Element('span').setHTML(this.options.advsearch).injectInside(lnk);
            el.inject(wrapper4)
        } else {
            if (this.options.includelink) {
                var limit = $$('#rokajaxsearch input[name=limit]')[0];
                this.bottombar = new Element('div', {
                    'class': "roksearch_row_btm png"
                });
                var lnk2 = new Element('a').setProperty('href', "#").injectInside(this.bottombar);
                var name = new Element('span').setHTML(this.options.viewall).injectInside(lnk2);
                lnk2.addEvent('click', function (e) {
                    new Event(e).stop();
                    limit.value = '';
                    $('rokajaxsearch').submit()
                });
                this.bottombar.inject(wrapper4);
                if (splitting.length > this.options.perpage) {
                    this.arrowDiv = new Element('div', {
                        'class': 'container-arrows'
                    }).inject(this.bottombar, 'top');
                    this.arrowleft = new Element('div', {
                        'class': 'arrow-left-disabled'
                    }).inject(this.arrowDiv);
                    this.arrowright = new Element('div', {
                        'class': 'arrow-right'
                    }).inject(this.arrowDiv);
                    this.arrowsInit(container)
                }
            }
        }
    },
    outputTableless: function () {
        var self = this;
        var wrapper1 = new Element('div', {
            'class': 'roksearch_wrapper1'
        }).inject(this.results);
        var wrapper2 = new Element('div', {
            'class': 'roksearch_wrapper2'
        }).inject(wrapper1);
        var wrapper3 = new Element('div', {
            'class': 'roksearch_wrapper3'
        }).inject(wrapper2);
        var wrapper4 = new Element('div', {
            'class': 'roksearch_wrapper4'
        }).inject(wrapper3);
        var header = new Element('div', {
            'class': 'roksearch_header png'
        }).setHTML(this.options.results).injectInside(wrapper4);
        if (this.type == 'web') {
            wrapper4.addClass('google-search');
            var poweredbygoogle = '<span class="powered-by-google">(powered by <a href="http://google.com" target="_blank">Google</a>)</span>';
            header.setHTML(this.options.results + poweredbygoogle)
        };
        this.close = new Element('a', {
            'id': 'roksearch_link',
            'class': 'png'
        }).setProperty('href', '#').setHTML(this.options.close).injectBefore(header);
        var splitDivs = this.options.hidedivs.split(" ");
        this.close.addEvent('click', function (e) {
            this.fireEvent('unloaded');
            new Event(e).stop();
            this.inputBox.value = this.options.search;
            var self = this;
            this.fx.start(0).chain(function () {
                self.results.empty().removeClass('roksearch_results')
            });
            if (splitDivs.length > 0 && splitDivs != '') splitDivs.each(function (div) {
                $(div).setStyle('visibility', 'visible')
            })
        }.bind(this));
        if (splitDivs.length > 0 && splitDivs != '') splitDivs.each(function (div) {
            $(div).setStyle('visibility', 'hidden')
        });
        this.results.addClass('roksearch_results');
        var searchedRestuls = $$('#rokajaxsearch_tmp ol.list li');
        if (searchedRestuls.length > 0) {
            var container = new Element('div', {
                'class': 'container-wrapper'
            }).inject(wrapper4);
            var scroller = new Element('div', {
                'class': 'container-scroller'
            }).inject(container);
            searchedRestuls.each(function (res, i) {
                var data = '';
                data = res.getChildren();
                if (data.length > 0) {
                    var suri = res.getElement('a').getProperty('href');
                    var el = new Element('div', {
                        'class': this.rows[i % 2] + ' png'
                    });
                    var lnk = new Element('a').setProperty('href', suri).injectInside(el);
                    if (this.type == 'web') lnk.setProperty('target', '_blank');
                    var name = new Element('h3').setHTML(data[0].getText()).injectInside(lnk);
                    this.els.push(el);
                    el.addEvents({
                        'mouseenter': function () {
                            this.addClass(self.rows[i % 2] + '-hover');
                            self.selectedEl = i
                        },
                        'mouseleave': function () {
                            this.removeClass(self.rows[i % 2] + '-hover');
                            if (self.selectedEl == i) self.selectedEl = -1
                        }
                    });
                    if (this.options.showdescription) var description = data[2].innerHTML;
                    else var description = '';
                    var desc = new Element('span').setHTML(description).injectAfter(lnk);
                    if (this.options.showcategory) {
                        var cat = new Element('span', {
                            'class': 'small'
                        }).setHTML(data[1].getText()).injectAfter(lnk);
                        var br = new Element('br').injectAfter(cat)
                    }
                    if (this.options.showreadmore) {
                        var lnk = new Element('a', {
                            'class': 'clr'
                        }).setProperty('href', suri).setHTML(this.options.readmore).injectAfter(desc);
                        if (this.type == 'web') lnk.setProperty('target', '_blank');
                        if (this.options.showdescription) var br = new Element('br').injectAfter(desc)
                    }
                    var innerWrapper1 = new Element('div', {
                        'class': 'roksearch_result_wrapper1 png'
                    }).inject(scroller);
                    var innerWrapper2 = new Element('div', {
                        'class': 'roksearch_result_wrapper2 png'
                    }).inject(innerWrapper1);
                    var innerWrapper3 = new Element('div', {
                        'class': 'roksearch_result_wrapper3 png'
                    }).inject(innerWrapper2);
                    var innerWrapper4 = new Element('div', {
                        'class': 'roksearch_result_wrapper4 png'
                    }).inject(innerWrapper3);
                    el.inject(innerWrapper4)
                }
            },
            this);
            var splitting = scroller.getChildren();
            var max = Math.max(this.options.perpage, splitting.length);
            var min = Math.min(this.options.perpage, splitting.length);
            var perpage = this.options.perpage;
            this.page = [];
            (Math.abs(max / min)).times(function (i) {
                if (splitting[i]) this.page.push(new Element('div', {
                    'class': 'page page-' + i
                }).inject(scroller).setStyle('width', scroller.getStyle('width')));
                for (j = 0, l = perpage; j < l; j++) {
                    if (splitting[i * perpage + j]) splitting[i * perpage + j].inject(this.page[i])
                }
            }.bind(this));
            if (this.type == 'web') {
                var size = this.page[0].getSize().size;
                this.page[0].setStyle('position', 'relative');
                this.layer = new Element('div', {
                    'class': 'rokajaxsearch-overlay',
                    'styles': {
                        'width': size.x,
                        'height': size.y,
                        'position': 'absolute',
                        'left': 0,
                        'top': 0,
                        'display': 'block',
                        'z-index': 5
                    }
                }).inject(this.page[0], 'top');
                var overlayfx = new Fx.Style(this.layer, 'opacity', {
                    duration: 300
                }).set(0.9)
            }
            scroller.setStyle('width', container.getStyle('width').toInt() * Math.round(max / min) + 1000)
        }
        if (!searchedRestuls.length) {
            var el = new Element('div', {
                'class': this.rows[0]
            });
            var name = new Element('h3').setHTML(this.options.noresults).injectInside(el);
            var lnk = new Element('a').setProperty('href', this.options.advsearchlink).injectAfter(name);
            var name = new Element('span').setHTML(this.options.advsearch).injectInside(lnk);
            el.inject(wrapper4)
        } else {
            if (this.options.includelink) {
                var limit = $$('#rokajaxsearch input[name=limit]')[0];
                this.bottombar = new Element('div', {
                    'class': "roksearch_row_btm png"
                });
                var lnk2 = new Element('a', {
                    'class': 'viewall'
                }).setProperty('href', "#").injectInside(this.bottombar);
                var name = new Element('span').setHTML(this.options.viewall).injectInside(lnk2);
                if (this.type == 'web') {
                    lnk2.setProperties({
                        'href': this.google.cursor.moreResultsUrl,
                        'target': '_blank'
                    });
                    if (this.options.showestimated) var estimated = new Element('span', {
                        'class': 'estimated_res'
                    }).setText('(' + this.google.cursor.estimatedResultCount + ' ' + this.options.estimated + ')').inject(lnk2, 'after');
                    if (this.options.showpagination) {
                        this.pagination = new Element('div', {
                            'class': 'pagination_res'
                        }).inject(estimated || lnk2, 'after');
                        this.pagination.setHTML(this.options.page + ' ' + '<span class="highlight">' + (this.google.cursor.currentPageIndex + 1) + '</span>' + ' ' + this.options.page_of + ' ' + '<span class="highlight">' + this.google.cursor.pages.length + '</span>')
                    }
                } else {
                    lnk2.addEvent('click', function (e) {
                        new Event(e).stop();
                        limit.value = '';
                        $('rokajaxsearch').submit()
                    })
                }
                this.bottombar.inject(wrapper4);
                if (splitting.length > this.options.perpage || (this.type == 'web' && this.google.cursor.pages.length > 1)) {
                    this.arrowDiv = new Element('div', {
                        'class': 'container-arrows'
                    }).inject(this.bottombar, 'top');
                    this.arrowleft = new Element('div', {
                        'class': 'arrow-left-disabled'
                    }).inject(this.arrowDiv);
                    this.arrowright = new Element('div', {
                        'class': 'arrow-right'
                    }).inject(this.arrowDiv);
                    if (this.type == 'web') {
                        if (this.google.cursor) {
                            var current = this.google.cursor.currentPageIndex;
                            if (current > 0) this.arrowleft.removeClass('arrow-left-disabled').addClass('arrow-left');
                            if (current == 7) this.arrowright.removeClass('arrow-right').addClass('arrow-right-disabled')
                        }
                        this.arrowsGoogleInit(container);
                        overlayfx.start(0)
                    } else this.arrowsInit(container)
                }
            }
        }
    },
    arrowsGoogleInit: function (wrapper) {
        this.arrowleft.addEvent('click', function (downkey) {
            if (!downkey && this.selectedEl >= 0) this.els[this.selectedEl].fireEvent('mouseleave');
            if (!downkey) this.selectedEl = -1;
            var current = (this.google.cursor) ? this.google.cursor.currentPageIndex: null;
            if (current - 1 <= 0) {
                this.arrowleft.removeClass('arrow-left').addClass('arrow-left-disabled');
                this.arrowright.removeClass('arrow-right-disabled').addClass('arrow-right')
            } else {
                this.arrowleft.removeClass('arrow-left-disabled').addClass('arrow-left');
                this.arrowright.removeClass('arrow-right-disabled').addClass('arrow-right')
            }
            if (!current) return;
            else {
                if (!this.inputBox.hasClass('loading')) this.inputBox.addClass('loading');
                this.layer.setStyle('opacity', 0.9);
                this.google.gotoPage(current - 1)
            }
        }.bind(this));
        this.arrowright.addEvent('click', function (downkey) {
            if (!downkey && this.selectedEl >= 0) this.els[this.selectedEl].fireEvent('mouseleave');
            if (!downkey) this.selectedEl = -1;
            var current = (this.google.cursor) ? this.google.cursor.currentPageIndex: null;
            if (current + 1 >= this.google.cursor.pages.length) {
                this.arrowleft.removeClass('arrow-left-disabled').addClass('arrow-left');
                this.arrowright.removeClass('arrow-right').addClass('arrow-right-disabled')
            } else {
                this.arrowleft.removeClass('arrow-left').addClass('arrow-left-disabled');
                this.arrowright.removeClass('arrow-right-disabled').addClass('arrow-right')
            }
            if (current >= this.google.cursor.pages.length - 1) return;
            else {
                if (this.arrowleft.hasClass('arrow-left-disabled')) this.arrowleft.removeClass('arrow-left-disabled').addClass('arrow-left');
                if (!this.inputBox.hasClass('loading')) this.inputBox.addClass('loading');
                this.layer.setStyle('opacity', 0.9);
                this.google.gotoPage(current + 1)
            }
        }.bind(this))
    },
    arrowsInit: function (wrapper) {
        this.scroller = new Fx.Scroll(wrapper, {
            wait: false
        });
        this.arrowleft.addEvent('click', function (downkey) {
            if (!downkey && this.selectedEl >= 0) this.els[this.selectedEl].fireEvent('mouseleave');
            if (!downkey) this.selectedEl = -1;
            if (this.current - 1 <= 0) {
                this.arrowleft.removeClass('arrow-left').addClass('arrow-left-disabled');
                this.arrowright.removeClass('arrow-right-disabled').addClass('arrow-right')
            } else {
                this.arrowleft.removeClass('arrow-left-disabled').addClass('arrow-left');
                this.arrowright.removeClass('arrow-right-disabled').addClass('arrow-right')
            }
            if (!this.current) return;
            else {
                if (this.current < 0) this.current = 0;
                else this.current -= 1;
                this.scroller.toElement(this.page[this.current])
            }
        }.bind(this));
        this.arrowright.addEvent('click', function (downkey) {
            if (!downkey && this.selectedEl >= 0) this.els[this.selectedEl].fireEvent('mouseleave');
            if (!downkey) this.selectedEl = -1;
            if (this.current + 1 >= this.page.length - 1) {
                this.arrowleft.removeClass('arrow-left-disabled').addClass('arrow-left');
                this.arrowright.removeClass('arrow-right').addClass('arrow-right-disabled')
            } else {
                this.arrowleft.removeClass('arrow-left').addClass('arrow-left-disabled');
                this.arrowright.removeClass('arrow-right-disabled').addClass('arrow-right')
            }
            if (this.current >= this.page.length) return;
            else {
                if (this.arrowleft.hasClass('arrow-left-disabled')) this.arrowleft.removeClass('arrow-left-disabled').addClass('arrow-left');
                if (this.current >= this.page.length - 1) this.current = this.page.length - 1;
                else this.current += 1;
                this.scroller.toElement(this.page[this.current])
            }
        }.bind(this))
    }
});
RokAjaxSearch.implement(new Options, new Events);
