var search123Class = Class.create();

search123Class.getInstance = function() {
    if (typeof (search123Class.instance) == 'undefined') {
        search123Class.instance = new search123Class();
    }
    return search123Class.instance;
};

Object.extend(search123Class.prototype, {
    _idBlock: 'search123',
    _s123LessButton: 's123LessButton',
    _s123MoreButton: 's123MoreButton',
    _idBlock: 'search123',
    _cPosition: 0,
    _maxElements: 5,
    _ieDetect: (Prototype.Browser.IE ? true: false),
    _paddingFF: 2,
    _widthOfBlock: null,
    initialize: function() {
        Event.observe(window, 'load', this._init.bindAsEventListener(this));
    },
    _init: function() {
        if (document.getElementById(this._idBlock)
         && document.getElementById(this._s123LessButton)
          && document.getElementById(this._s123MoreButton)) {
            this._loadEvents();
            this._render();
            this._picsDetect();
        }
    },
    _loadEvents: function(event) {
        Event.observe('moveBackwardSearch123', 'click', this._moveBackward.bindAsEventListener(this)); 
        Event.observe('moveForwardSearch123', 'click', this._moveForward.bindAsEventListener(this));
    },
    _render: function() {
        var self = this;
        if (! $('search123')) return;
        $('search123').hide();
        //reset
        this._cPosition = 0;
        $('search123').setStyle({left: '0px'});

        var searchParent = $('search123').ancestors().first();
        if (this._ieDetect) $(searchParent).setStyle({width: 'auto'}); // reset width

        var currect = Math.floor((searchParent.getWidth() - 
                                  (this._ieDetect ? 0 : parseInt(searchParent.getStyle('paddingLeft')) + 
                                                        parseInt(searchParent.getStyle('paddingRight'))))/2);
        this._widthOfBlock = currect + (this._ieDetect ? 0 : this._paddingFF * 2);
        $('search123').setStyle({width: (this._widthOfBlock)* 5});

        $A($('search123').getElementsByTagName('div')).each(function(el){
            if (typeof el == 'object' && el.tagName && el.tagName.toLowerCase() == 'div')
                $(el).setStyle({width: currect + 'px'})
        });

        if (this._ieDetect) $(searchParent).setStyle({width: this._widthOfBlock * 2 + 'px'});
        $('search123').show();
        if (document.getElementById('countSearch123')) {
            var val = parseInt(document.getElementById('countSearch123').value);

            if (val != 0) {
                this._maxElements = val;
            }
        }
    },
    _deleteEvents: function(event) {
        Event.stopObserving('moveBackwardSearch123', 'click', this._moveBackward); 
        Event.stopObserving('moveForwardSearch123', 'click', this._moveForward); 
    },
    _moveBackward: function()
    {
        if (this._cPosition > 0) {
            new Effect.Move(this._idBlock, {
                x: this._widthOfBlock,
                mode: 'relative',
                beforeStart: this._deleteEvents,
                afterFinish: this._loadEvents.bindAsEventListener(this)
            });
            this._cPosition = this._cPosition - 1;
            this._picsDetect();
        }
    },
    _moveForward: function()
    {
        if (this._maxElements > (this._cPosition + 2)) {
            new Effect.Move(this._idBlock, {
                x: -this._widthOfBlock,
                mode: 'relative',
                beforeStart: this._deleteEvents,
                afterFinish: this._loadEvents.bindAsEventListener(this)
            });
            this._cPosition = this._cPosition + 1;
            this._picsDetect();
        }
    },
    _picsDetect: function()
    {
        if (this._cPosition > 0) {
            $(this._s123LessButton).setStyle({cursor: 'pointer'});
        } else {
            $(this._s123LessButton).setStyle({cursor: 'default'});
        }
        
        if (this._maxElements > (this._cPosition + 2)) {
            $(this._s123MoreButton).setStyle({cursor: 'pointer'});
        } else {
            $(this._s123MoreButton).setStyle({cursor: 'default'});
        }
    }
});
search123Class.getInstance();
