var CityGenerator;
CityGenerator = Class.create
({

    formIdPrefix:   '',
    hideClass:      'hide',
    popupClass:     'popup',
    actual:         '',
    activeClass:    'active',
    inputClass:     'inputC',
    activeInput:    'selectedI',
    deactiveInput:  'deselectI',
    popupId:        'popup',
    akcieId:        '',
    wrongId:        'wrong_mail',
    ifOpera:        false,
    ifIE6:          false,
    ifFF:           false,
    ifIE7:          false,

    getHelp:
        function(id, myClass)
        {
            var thisClass = this;
            $(id).removeClassName(thisClass.activeClass);

            var autoC =
                new Ajax.Autocompleter( id, 'autocomplete_choices', 'autocomplChoices.php',
                    {
                        paramName: 'param',
                        frequency: 0.1,
                        updateElement: updatedInput,
                        afterUpdateElement: getSelectionId,
                        onShow: showDiv,
                        parameters: 'field=' + id
                    });

            function updatedInput(li)
            {
                $(id).value = li.innerHTML;
                $(id).removeClassName('inputAutoC');
                // XS: Tu to funguje ok
				document.getElementById('h_' + id).value = li.id;
            };

            function getSelectionId(text, li, element)
            {
                window.alert('ss');
                var num = id.substr(-1);
                if (id.indexOf('auto') != -1)
                {
                    $('hiddenOd' + num).value = li.id;
                }
                else
                {
                    $('hiddenWh' + num).value = li.id;
                }
                $('autocomplete_choices').addClassName(thisClass.hideClass);
                $(id).addClassName(thisClass.deactiveClass);
                $(id).removeClassName('inputAutoC');
            };

            function showDiv(element, update)
            {
                element.addClassName('inputAutoC');
                if(!update.style.position || update.style.position=='absolute')
                {
                    update.style.position = 'absolute';
                    Position.clone(element, update,
                        {
                            setHeight: false,
                            offsetTop: element.offsetHeight
                        });
                }
                Effect.Appear(update,{duration:0.15});
                update.setStyle({width: '170px', marginTop: '0px'});

                $('type' + myClass.actual.substr(myClass.actual.length - 1)).setStyle({visibility: 'hidden'});

                Event.observe( $('autocompleter_' + myClass.actual.substr(myClass.actual.length - 1)), 'blur',
                    function()
                    {
                       $('type' + myClass.actual.substr(myClass.actual.length - 1)).setStyle({visibility: 'visible'});
                    });

                Event.observe( $('where' + myClass.actual.substr(myClass.actual.length - 1)), 'blur',
                    function()
                    {
                       $('type' + myClass.actual.substr(myClass.actual.length - 1)).setStyle({visibility: 'visible'});
                    });

            };
        },



    wrongMail:
        function()
        {
            var thisClass = this;
            var emailregVyr = new RegExp("^[0-9a-z_]+(\\.[0-9a-z_]+)*@([12]?[0-9]{0,2}(\\.[12]?[0-9]{0,2}){3}|([a-z][0-9a-z\\-]*\\.)+[a-z]{2,6})$");
            var text = $(this.akcieId + 'A').value;
            $(this.akcieId + 'A').value = "";

            if (emailregVyr.test(text))
            {
                /* subor ktory spracuje formular sa zadava pri formulari do action */
                id = 'akcie';
                $(id).request(
                {
                    parameters: $(id).serialize(),

                    onComplete:
                        function(t)
                        {
                             var response = t.responseText || 'nic som neobdrzal';

                             /* sem sa da co sa spravi ak formular prejde */
                             alert(response);
                        }
                });
                return false;
            }
            else
            {
                $(this.wrongId).removeClassName(this.hideClass);
                $(this.wrongId).select('input')[0].value = text;
                var leftV = $(this.akcieId + 'A').cumulativeOffset()[0];
                var topV = $(this.akcieId + 'A').cumulativeOffset()[1];
                $(this.wrongId).setStyle({left: leftV + 'px', top: topV - 8 + 'px'});

                var thisClass = this;
                Event.observe($('wrongIn'), 'keypress',
                    function(event)
                    {
                        if (navigator.appName == "Microsoft Internet Explorer")
                        {
                            character = String.fromCharCode(event.keyCode);
                        }
                        else
                        {
                            character = String.fromCharCode(event.which);
                        }
                        text = $('wrongIn').value + character;
                        if (emailregVyr.test(text))
                        {

                            $(thisClass.wrongId).addClassName(thisClass.hideClass);
                            $(thisClass.akcieId + 'A').removeClassName(this.hideClass);
                            $(thisClass.akcieId + 'A').value = text;
                        }
                    });

                return false;
            }
        },

    /**
    * Nastavi farebnu verziu stranky na jednu z 3 moznych farieb
    */

    ChangeColor:
        function(color)
        {
        	if (color == 'blue') {
        		document.body.className = 'eurolines';
        		if (document.getElementById('left_menu_panel'))
        			document.getElementById('left_menu_panel').className = 'bluemenu';
        		if (document.getElementById('ticketLink'))
        			document.getElementById('ticketLink').className = 'btn_open_blue';
        	} else {
        		document.body.className = 'slovaklines';
        		if (document.getElementById('left_menu_panel'))
        			document.getElementById('left_menu_panel').className = 'redmenu';
        		if (document.getElementById('ticketLink'))
        			document.getElementById('ticketLink').className = 'btn_open';
        	}
        		document.getElementById('aside2').className = color;

        	return false;
        },

    /**
     * Prepinanie medzi dvoma hlavnymi farebnymi verziami stranky
     *
     */
     SwitchColor:
        function()
        {
        	if ((this.actual == 'm_1') || (this.actual == 'm_3'))
        		this.ChangeColor('blue');
        	else
        		this.ChangeColor('red');

        	return false;
        },

    /**
     * Zobrazi jednu zo zaloziek formularu, je potrebne zmenit farebnu verziu
     * zodpovedajucu farbe zalozky
     */

    ShowTab:
        function(tID)
        {
            $(this.formIdPrefix + this.actual).addClassName(this.hideClass);
            $('li' + this.actual.substr(this.actual.length - 1)).removeClassName('active');
            this.actual = tID;
            $(this.formIdPrefix + this.actual).removeClassName(this.hideClass);
            $('li' + this.actual.substr(this.actual.length - 1)).addClassName('active');
        },

    /**
     * Prepne z prvej zalozky na druhu a naopak a zmeni farebnu verziu
     */

    SwitchTab:
        function(id)
        {
            this.SwitchColor();
        	if ((this.actual == 'm_1') || (this.actual == 'm_3'))
        		this.ShowTab('m_2'); // ak mame slovaklines, zobrazi tab pre eurolines
        	else
        		this.ShowTab('m_1');

        	return false;
        },

    checkForm:
        function(id, result)
        {
            var thisClass = this;
            sthWrong = '';
            pocet = 0;
            $('infoo' + this.actual).innerHTML = '&nbsp;';
//             $('infoo' + this.actual).setStyle({marginTop: '0px'});
            $(id).select('input').each(
                function(s)
                {
                    var myClass = thisClass;
                    if (s.id.indexOf('h_auto') != -1)
                    {
                        var fromText = $(s.id).value;
                        if (fromText == "")
                        {
                            sthWrong += 'Neplatná východzia destinácia<br />';
                            pocet++;

                            if (result) result = false;
                        }
                    }

                    if (s.id.indexOf('h_where') != -1)
                    {
                        var whereText = $(s.id).value;
                        if (whereText == "")
                        {
                            sthWrong += 'Neplatná cieľová destinácia<br />';
                            pocet++;

                            if (result) result = false;
                        }
                    }

                    if ((s.id.indexOf('cas_od') != -1))
                    {
                        var whereText = $(s.id).value;
                        var goodTime = new RegExp("^[0-9]{1,2}\:[0-9]{2}$");
                        if (!goodTime.test(whereText))
                        {
                            sthWrong += 'Neplatný čas odchodu<br />';
                            pocet++;

                            if (result) result = false;
                        }
                    }

                    if ((s.id.indexOf('cas_pri') != -1))
                    {
                        var whereText = $(s.id).value;
                        var goodTime = new RegExp("^[0-9]{1,2}\:[0-9]{2}$");
                        if (!goodTime.test(whereText))
                        {
                            sthWrong += 'Neplatný čas príchodu<br />';
                            pocet++;

                            if (result) result = false;
                        }
                    }

                    if ((s.id.indexOf('odchod') != -1))
                    {
                        var whereText = $(s.id).value;
                        var goodTime = new RegExp("^[0-9]{1,2}\\.[0-9]{1,2}\\.[0-9]{4}$");
                        if (!goodTime.test(whereText))
                        {
                            sthWrong += 'Neplatný dátum odchodu<br />';
                            pocet++;

                            if (result) result = false;
                        }
                    }

                    if ((s.id.indexOf('prichod') != -1))
                    {
                        var whereText = $(s.id).value;
                        var goodTime = new RegExp("^[0-9]{1,2}\\.[0-9]{1,2}\\.[0-9]{4}$");
                        if (!goodTime.test(whereText))
                        {
                            sthWrong += 'Neplatný dátum príchodu<br />';
                            pocet++;

                            if (result) result = false;
                        }
                    }
                });

            if (!result)
            {
                if (this.ifOpera)
                {
                    vrch = ((pocet*13) - 40)/2;
                    vyska = pocet*18;
                }
                else if (this.ifIE6)
                {
                    vrch = ((pocet*12) - 30)/2;
                    vyska = pocet*12;
                }
                else if (this.ifIE7)
                {
                    vrch = ((pocet*13) - 30)/2;
                    vyska = pocet*20;
                }
                else // if (this.ifFF)
                {
                    vrch = ((pocet*13) + 5)/2;
                    vyska = pocet*13;
                }

                var newD = document.createElement("div");

                var firstI = $('infoo' + id.substr(id.length - 3));
                firstI.setStyle({height: vyska + 2});

                newD.innerHTML =
                    '<div style="width: 15px; height: ' + vyska + 'px; margin: ' + vrch + 'px 10px 0px 10px; float: left;">' +
                        '<img src="fileadmin/templates/img/alert2.gif" alt="alert" style="width: 14px; height: 15px; margin-top: 0px;" />' +
                    '</div>' +
                    '<div style="padding-top: 5px; margin-top: -20px;">' + sthWrong + '</div>';

                firstI.appendChild(newD);

                $('infoo' + this.actual).addClassName('badI');
                $('infoo' + this.actual).removeClassName('hide');
            }
            return result;
        },

	changeActual:
	    function(id)
	    {
	        this.actual = id;
		},

	initialize:
        function(menuDiv, formId, act, akcie)
        {
            x = navigator;

            if ((x.appCodeName.indexOf('Mozilla') != -1) && (x.appName.indexOf('Netscape') != -1)) this.ifFF = true;
            else if (x.appVersion.indexOf('MSIE 7.0') != -1) this.ifIE7 = true;
            else if (x.appVersion.indexOf('MSIE 6.0') != -1) this.ifIE6 = true;
            else if (x.appName.indexOf('Opera') != -1) this.ifOpera = true;

            this.formIdPrefix = formId;
            this.actual = act;
            this.akcieId = akcie;
            var thisClass = this;

            $$('.' + this.inputClass).each(
                function(s)
                {
                    var myClass = thisClass;

                    Event.observe(s.id, 'focus',
                        function()
                        {
                            $('autocomplete_choices').removeClassName(myClass.hideClass);
                            myClass.getHelp(s.id, myClass);
                        });

                    Event.observe(s.id, 'blur',
                        function()
                        {
                            $(s.id).removeClassName('inputAutoC');
                        });
                });

            $$('#aside input,select').each(
                function(s)
                {
                    var myClass = thisClass;

                    if (((s.readAttribute('type') == 'text') || (s.id.indexOf('type') != -1)) && (s.id.indexOf('akcie') == -1))
                    {
                        s.addClassName(myClass.deactiveInput);

                        if (myClass.ifIE6)
                           s.setStyle({marginLeft: '-5px'});

                        Event.observe(s, 'blur',
                            function()
                            {
                                if ((s.id.indexOf('wh') != -1) || (s.id.indexOf('auto') != -1) || (s.id.indexOf('cas') != -1))
                                {

                                    s.removeClassName(myClass.activeInput);

                                    if (myClass.ifIE6)
                                        s.setStyle({width: '150px', height: '25px'})
                                    else if (!myClass.ifOpera)
                                    	s.setStyle({width: '145px', height: '15px', padding: '3px 0px 0px 7px'});
                                    else
                                        s.setStyle({width: '145px', height: '10px'});
                                }
                                else if ((s.id.indexOf('odchod') != -1) || (s.id.indexOf('prichod') != -1))
                                {
                                    s.removeClassName(myClass.activeInput + '2');
                                    if (navigator.appVersion.indexOf('MSIE 6') != -1)
                                    	s.setStyle({width: '115px', height: '25px'});
                				    else
                				        s.setStyle({width: '105px', height: '15px', padding: '3px 0px 4px 7px'});
                                }

                                s.ancestors()[0].setStyle({marginBottom: '10px'});
                                s.addClassName(myClass.deactiveInput);

                                $(myClass.popupId + '_' + s.id).addClassName(myClass.hideClass);
                                $(myClass.popupId + '_' + s.id).removeClassName(myClass.popupClass);
                            });

                        Event.observe(s, 'click',
                            function()
                            {
                                s.ancestors()[3].setStyle({marginTop: '10px'});
                                if ((s.id.indexOf('wh') != -1) || (s.id.indexOf('auto') != -1) || (s.id.indexOf('cas') != -1))
                                {
                                    s.addClassName(myClass.activeInput);

                                    if (myClass.ifIE6)
                                        s.setStyle({width: '170px', height: '35px',marginLeft: '-5px'});
                                    else if (!myClass.ifOpera)
										s.setStyle({width: '163px', height: '25px',padding: '9px 0 0 7px'});
									else s.setStyle({width: '163px', height: '25px',padding: '4px 0 5px 7px'});

                                    s.ancestors()[0].setStyle({marginBottom: '5px'});
                                }
                                else if ((s.id.indexOf('odchod') != -1) || (s.id.indexOf('prichod') != -1))
                                {
                                    s.addClassName(myClass.activeInput + '2');
                                    if (myClass.ifIE6)
										s.setStyle({width: '120px', height: '30px'});
									else
									    s.setStyle({width: '114px', height: '28px', marginTop: '-5px'});
                                    s.ancestors()[0].setStyle({marginBottom: '7px'});
                                }

                                s.removeClassName(myClass.deactiveInput);

                                $(myClass.popupId + '_' + s.id).removeClassName(myClass.hideClass);
                                $(myClass.popupId + '_' + s.id).addClassName(myClass.popupClass);
                                $(myClass.popupId + '_' + s.id).setStyle({left: (180 + s.cumulativeOffset()[0]) + 'px', top: (10 + s.cumulativeOffset()[1]) + 'px'});
                            });
                    }
                });

            $$('.tab').each(
                function(e)
                {
                    $(e.id).addClassName(thisClass.hideClass);
                });

            $(this.formIdPrefix + this.actual).removeClassName(this.hideClass);
            $(this.actual).ancestors()[0].addClassName(this.activeClass);

            $(menuDiv).select('a').each
            (
                function(e)
                {
                    var myClass = thisClass;
                    Event.observe(e, 'click',
                        function()
                        {
                            $(myClass.formIdPrefix + myClass.actual).addClassName(myClass.hideClass);
                            $(myClass.actual).ancestors()[0].removeClassName(myClass.activeClass);

                            $(myClass.formIdPrefix + e.id).removeClassName(myClass.hideClass);
                            $(e.id).ancestors()[0].addClassName(myClass.activeClass);
                            myClass.actual = e.id;
                        });
                }
            );
        }
})
