var Page = new Class ({
    options: {
        bodyStyleWide: "#ff9f00",
        bodyStyleNarrow: "#fff",
    
        bTabs: false,
        bDataList: false,
        bPrintLocalDate: false,
        bStickyEnabled: false,
        
        defTab: Class.empty,
        defData: [],
        iTimeOffset: 0,
        iLocalTimeOffset: 2
    },
    initialize: function (options) {
        this.setOptions(options);
        
        // Set page wrapper
        this.setWrapper();
        window.addEvent('resize', function(){
            oPage.setWrapper();
        });
        
        oObj = new Obj();
        oCookie = new Cookie();
        oFav = new Fav();
                
        if (this.options.bTabs) {
            oTabs = new Tabs({
                //defTab: this.options.defTab
                defTab: ($chk(this.options.defTab)) ? this.options.defTab : $$("#tabs ul").getFirst().getProperty('id')
            });
        }
        if (this.options.bDataList) { oDataList = new DataList( {defData: this.options.defData} ); }
        
        if (this.options.bPrintLocalDate && $chk($('forecasts'))) { this.printLocalDate(this.options.iTimeOffset); }
        
        if (this.options.bStickyEnabled) { oInfo = new Info(); }
    },
	setWrapper: function() {
	    var windowWidth = (window.ie6) ? window.getScrollWidth() : window.getWidth();
	    
	    var mainContainerClass = (windowWidth < 890) ? "narrow" : "wide";
	    var footerStyle = (windowWidth < 890) ? "none" : "block";
	    var bodyStyle = (windowWidth < 890) ? this.options.bodyStyleNarrow : this.options.bodyStyleWide;
	    	       
		$("main-container").className = mainContainerClass;
		if ($("main-container-top")) { $("main-container-top").setStyle("display",footerStyle); }
		$("main-container-footer").setStyle("display",footerStyle);
		$E("body").setStyle("background",bodyStyle);
	},
    clrField: function (field,emptyVal) {
        if (field.value == emptyVal) { field.value = ""; }
        field.focus();
    },
    isNumeric: function (val) {
        return (isNaN(val)) ? false : true;
    },
    goToURL: function (url,target) {
        if (arguments.length > 0) {
            var target = (target) ? target : "window";
            (target == "blank") ? window.open(url) : eval(target+".location='"+url+"'");
        }
    },
    getOffsetDate: function (iOffset) {
        try {
            (iOffset) ? this.offset = iOffset : this.offset = 0;

            this.currentDate = new Date();
            //this.utcDate = this.currentDate.getTime() + (this.currentDate.getTimezoneOffset() * 60000);
            //this.offsetDate = new Date(this.utcDate + (3600000*this.offset) + (3600000*this.options.iLocalTimeOffset));
            this.offsetDate = new Date(this.currentDate.getTime() + parseInt(3600000*this.offset));
            
            return this.offsetDate;            
        } catch (e) {
            alert(e);
            return false;
        }
    },    
    getDayOfWeek: function(day, format) {
        try {
            this.aDaysOfWeek = new Array();
            this.aDaysOfWeek[0] = new Array("Sunnuntai","Su");
            this.aDaysOfWeek[1] = new Array("Maanantai","Ma");
            this.aDaysOfWeek[2] = new Array("Tiistai","Ti");
            this.aDaysOfWeek[3] = new Array("Keskiviikko","Ke");
            this.aDaysOfWeek[4] = new Array("Torstai","To");
            this.aDaysOfWeek[5] = new Array("Perjantai","Pe");
            this.aDaysOfWeek[6] = new Array("Lauantai","La");            
            
            return this.aDaysOfWeek[day][format];
        } catch (e) {
            alert(e);
        }
    },
    printLocalDate: function(iOffset) {
        try {
            (iOffset) ? this.offset = iOffset.toFloat() : this.offset = 0;
            
            this.localDate = this.getOffsetDate(this.offset);
            this.minutes = (this.localDate.getMinutes() < 10) ? "0"+this.localDate.getMinutes() : this.localDate.getMinutes();
            
            $("current-time").setHTML(this.getDayOfWeek(this.localDate.getDay(),1) + " " + this.localDate.getHours() + ":" + this.minutes);
        } catch(e) {
            alert(e);
            return false;
        }
    }
});
Page.implement(new Options, new Events);

var Res = new Class({
    options: {
    },
    initialize: function (options) {
        this.setOptions(options);
    },
    selectPayment: function(el) {
        try {
            $$('p.payment-types label').each(function(item,index){
                item.removeClass("selected");
            });
            $(el).getParent().addClass("selected");
        } catch (e) {
            alert(e);
        }
    }
});
Res.implement(new Options, new Events);

var Obj = new Class({
    options: {
        fx: Class.empty,
        lastShown: Class.empty
    },
    initialize: function (options) {
        this.setOptions(options);
    },
    hide: function(el) {
        try {
            if(!$(el))
                return;
            if($(el).getStyle('display')=='none')
                return;           
        
            if (arguments.length > 0) {
                if(!window.ie6) {
                    if ($chk($('content-fader'))) {
                        if ($("content-fader").getStyle('opacity') > 0) {
			                this.options.fx.start(0.1, 0);
			            }
			            $("content-fader").remove();
                    }
                } else {
                    if ($chk($('ie6-iframe'))) {
                        $('ie6-iframe').remove();
                    }
                }
                $(el).setStyle('display','none');
            }
        } catch (e) {
            alert(e);
        }
    },
    show: function(el,x,y,modal) {
        try {
            if(!$(el))
                return;
            if($(el).getStyle('display')=='block')
                return;           
            $(el).setStyle('display', 'block');
            if (x && y) {
                $(el).setStyles({
                    'position': 'absolute',
                    'left': x+'px',
                    'top': y+'px'             
                });
            }
            if (modal) {
                this.setModal(el);
                window.onresize = this.setModalDimensions.bindAsEventListener(window);		        
            }
        } catch (e) {
            alert(e);
        }
    },
    setModal: function(el) {
        try {
            $(el).setStyle('z-index',100);
            
            // Remove any previous instances
            if(!window.ie6) {
                if ($chk($('content-fader'))) { $('content-fader').remove(); }
            } else {
                if ($chk($('ie6-iframe'))) { $('ie6-iframe').remove(); }
            }
            
            if(!window.ie6) {
                var contentFader = new Element('div', {
                    'id': 'content-fader',
                    'styles': {
	                    'position': 'absolute',
	                    'left': '0px',
	                    'top': '0px',
                        'background-color': '#000',
                        'z-index': 90,
                        'opacity': 0
                    }
                }).injectInside(document.body);

                // initialize fade method
                this.options.fx = contentFader.effect('opacity', { 
                    onStart: function() { 
                        if (contentFader.getStyle('opacity') == 0) { // show
	                        contentFader.setStyle('display', 'block');
                        } else {
	                        contentFader.setStyle('display', 'none');
                        }
                    }.bind(this),
                    onComplete: function() { 
                        if (contentFader.getStyle('opacity') == 0) { // hidden
	                        contentFader.setStyle('display', 'none');
                        } else {
	                        contentFader.setStyle('display', 'block');
                        }
                    }.bind(this)
                });
            } else {
	            var modalIFrame = new Element('iframe', { 
		            'id': 'ie6-iframe',
		            'styles': {
		                'position': 'absolute',
		                'left': '0px',
		                'top': '0px',
                        'z-index': 80
		            }
	            }).injectInside(document.body);
	            modalIFrame.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)';
	        }
	        
	        if(window.ie6) {
	            // we only need this for ie6 iframe
	            this.options.lastShown = $(el);
	        }
	        
	        this.setModalDimensions();
            
            // start fader effect
            if(!window.ie6) {
                this.options.fx.start(0, 0.1);
            }
    			    
			//$(el).focus();
        } catch(e) {
            alert(e);
        }
    },
    setModalDimensions: function() {
        try {
            if(!window.ie6) {
                if ($chk($('content-fader'))) {
                    $('content-fader').setStyles({
                        'width': window.getScrollWidth(),
                        'height': window.getScrollHeight()
                    });
                }
            } else {
                // todo place under modal layer
                if ($chk($('ie6-iframe'))) {
                    if(this.options.lastShown) {
                        var coords = this.options.lastShown.getCoordinates();
                        $('ie6-iframe').setStyles({
	                        'left': coords.left + 'px',
	                        'top': coords.top + 'px',
                            'width': coords.width + 'px',
                            'height': coords.height + 'px' 
                        });
                    }
                }
            }
        } catch (e) {
            alert(e);
        }
    },
    toggle: function(el) {
        if (el.style.display == '' || el.style.display == 'none') {
            el.style.display = 'block';
        } else {
            el.style.display = 'none';
        }
    },
    switchImage: function(oImg,src) {
        oImg.src = src;
    }
});
Obj.implement(new Options, new Events);

var Info = new Class({ 
    staticShow: function(target,caller,pos,yModifier,padleft,padright) {
            (pos) ? this.pos = pos : this.pos = false; // true = left, false = right
            var x = $('page-container').getCoordinates().left+200;
            //x += (this.pos) ? -425 : $(caller).getCoordinates().width+5;
            var y = $(target).getCoordinates().top + yModifier;

            if(navigator.appName=="Microsoft Internet Explorer" && parseFloat(navigator.appVersion)<=6) { 
                if(padleft!=0)
                    $(caller).setStyle('padding-left',padleft+'px');
                if(padright!=0)
                    $(caller).setStyle('padding-right',padright+'px');
            }
            oObj.show(caller,x,y,true);
               
    }, 
    dynamicShow: function(caller,target,pos,yModifier) {
        try {
            (pos) ? this.pos = pos : this.pos = false; // true = left, false = right
            
            var x = $(caller).getCoordinates().left; // -$('page-container').getCoordinates().left;
            x += (this.pos) ? -425 : $(caller).getCoordinates().width+5;
            
            var y = $(caller).getCoordinates().top + yModifier;
            
            oObj.show(target,x,y,true);
            
        } catch (e) {
            alert(e);
        }        
    },
    show: function(caller,target,pos) {
        try {
            (pos) ? this.pos = pos : this.pos = false; // true = left, false = right
            
            var x = $(caller).getCoordinates().left; // -$('page-container').getCoordinates().left;
            x += (this.pos) ? -425 : $(caller).getCoordinates().width+5;
            
            var y = $(caller).getCoordinates().top
            
            oObj.show(target,x,y,true);
            
        } catch (e) {
            alert(e);
        }        
    },
    hide: function (target) {
        try {
            oObj.hide(target);
        } catch (e) {
            alert(e);
        }
    }
});

var Tabs = new Class ({
    options: {
        defTab: $$("#tabs ul").getFirst().getProperty('id')
    },    
    initialize: function (options) {
        this.setOptions(options);
        if ($("tabs")) {
            this.show(this.options.defTab);
        }
    },
    show: function (iTab) {
        if (arguments.length > 0 && parseInt(iTab,10) >= 0) {
            $$("#tabs ul li").each(function(item) {
                item.removeClass("tab-active");
                item.removeClass("tab-active-adjacent");
                $("tab-content-"+item.getProperty('id')).setStyle('display','none');
            });
            
            $(iTab.toString()).addClass("tab-active");
            
            if ($chk($(iTab.toString()).getNext())) {
                $(iTab.toString()).getNext().addClass("tab-active-adjacent");
            }
            
            $("tab-content-"+iTab).setStyle('display','block');
            if(window.ie6 && window.at_rebuildRoomsForIE6 && window.oSearchController) {    
                // Used for IE6 related bug regarding CS00008 - if selects are dynamically created inside display: none area, IE6 doesn't want to reveal their content afterwards                
                at_rebuildRoomsForIE6();
            }
        }
    }
});
Tabs.implement(new Options, new Events);

var DataList = new Class({
    options: {
        defData: []
    },
    initialize: function (options) {
        this.setOptions(options);
        
        //hide all initially
        $$('dl.narrative-list dd').each(function(item){
            this.hide(item.getProperty('id'));
        },this);
        
        //open defaults / passed in narratives
        this.options.defData.each(function(item){
            this.show(item);
        },this);
    },
    toggle: function (item) {
        try {
            ($(item).getStyle('display') == "none") ? this.show(item) : this.hide(item);
        } catch (e) {
            alert(e);
        }
    },
    show: function(item) {
        try {
            //$("title-"+item).addClass("open");
            $(item).getPrevious().getFirst().addClass("open");
            $(item).setStyle('display','block');
        } catch (e) {
            alert(e);
        }
    },
    hide: function(item) {
        try {
            //$("title-"+item).removeClass("open");
            $(item).getPrevious().getFirst().removeClass("open");
            $(item).setStyle('display','none');
        } catch (e) {
            alert(e);
        }
    }
});
DataList.implement(new Options, new Events);

var Fav = new Class ({
    options: {
        sFavList: "",
        aFavList: [],
        aFavListItem: [],
        sFavLayer: "favourites-container",
        sFavListContainer: "fav-list-container",
        sFavListHTML: "",
        pageContainerOffsetX: 144,
        pageContainerOffsetY: 100
    },  
    initialize: function (options) {
        this.setOptions(options);
        this.options.sFavList = oCookie.getCookie("suntours_favlist");
    },   
    show: function () {
        try {
            this.createFavList();
            oObj.show(this.options.sFavLayer, $('page-container').getCoordinates().left+this.options.pageContainerOffsetX-100, this.options.pageContainerOffsetY, true);
        } catch (e) {
            alert(e);
        }
    },   
    createFavList: function () {
        try {
            // Refresh from Cookie
            this.options.sFavList = (oCookie.getCookie("suntours_favlist") == null) ? "" : oCookie.getCookie("suntours_favlist");
            
            if (this.options.sFavList.length > 0 && this.options.sFavList != null) {
                
                var table = new Element('table', { 'id': 'fav-list', 'cellspacing': 0 }).injectInside(this.options.sFavListContainer);
                var thead = new Element('thead').injectInside(table);
                var tr = new Element('tr').injectInside(thead);
                
                var th = new Element('th').injectInside(tr);
                var th = new Element('th', {'class':'fav-item'}).setHTML("Suosikkisi").injectInside(tr);
                var th = new Element('th').setHTML("Poista").injectInside(tr);
                var th = new Element('th').setHTML("Hae matkaa").injectInside(tr);
                
                var tbody = new Element('tbody').injectAfter(thead);
                
                /*
                <table id="fav-list" cellspacing="0">
                    <thead>
                        <tr>
                            <th></th>
                            <th class="fav-item">Suosikkisi</th>
                            <th>Poista</th>
                            <th>Hae matkaa</th>
                        </tr>
                    </thead>
                    <tbody>
                */
                
                // FAVLIST FORMAT:
                // seasoncode|itemcode|itemtype|itemname|tbnurl
                this.options.aFavList = this.options.sFavList.split("#");
                
                for (var i = 0; i < this.options.aFavList.length; i++) {
                    this.options.aFavListItem = this.options.aFavList[i].split("|");
                    
                    /*
                    <tr>
                        <td><img src="'+this.options.aFavListItem[4]+'" class="fav-item-img" width="90" height="56" alt="'+this.options.aFavListItem[3]+'" /></td>
                        <td class="fav-item"><p><span class="fav-label">'+this.options.aFavListItem[2]+':</span> <a href="/Atcomweb.aspx">'+this.options.aFavListItem[3]+'</a></p></td>
                        <td><a href="javascript: oFav.remove('+i+');"><img src="../images/icons/bin.gif" alt="Poista" /></a></td>
                        <td><a href="../book/index.html"><img src="../images/buttons/hae_matkaa.gif" alt="Hae matkaa" /></a></td>
                    </tr>                    
                    */
                    
                    var tr = new Element('tr').injectInside(tbody);
                    
                    var td = new Element('td').injectInside(tr);
                    if(this.options.aFavListItem[4]) {
                        var img = new Element('img',{
                            'src': this.options.aFavListItem[4],
                            'class': 'fav-item-img',
                            'width': "90",
                            'height': "56",
                            'alt': this.options.aFavListItem[3]
                        }).injectInside(td);
                    }
                    
                    var td = new Element('td',{'class':'fav-item'}).injectInside(tr);
                    var p = new Element('p').injectInside(td);
                    var span = new Element('span',{'class':'fav-label'}).setHTML(this.options.aFavListItem[2]+':').injectInside(p);
                    var a = new Element('a',{'href':decodeURI(this.options.aFavListItem[5])}).setHTML(this.options.aFavListItem[3]).injectInside(p); 

                    var td = new Element('td').injectInside(tr);
                    var a = new Element('a',{'href':'javascript: oFav.remove('+i+')'}).injectInside(td);
                    var img = new Element('img',{'src': 'images/icons/bin.gif','alt':'Poista'}).injectInside(a);
                    
                    var td = new Element('td').injectInside(tr);
                    if(this.options.aFavListItem[2] == 'Maa')
                        var a = new Element('a',{'href':'Atcomweb.aspx?p=CS00016&CTY1_ID='+this.options.aFavListItem[6]}).injectInside(td);
                    else
                        var a = new Element('a',{'href':'Atcomweb.aspx?p=CS00016&CTY3_ID='+this.options.aFavListItem[6]}).injectInside(td);
                    var img = new Element('img',{'src': 'images/buttons/hae_matkaa.gif','alt':'Hae matkaa'}).injectInside(a);
                    
                    
                }
            } else {
                var p = new Element('p').setHTML("Muistilistasi on tyhj&auml;").injectInside(this.options.sFavListContainer);
            }
        } catch (e) {
            this.options.sFavList = "";
            oCookie.setCookie("suntours_favlist", this.options.sFavList, new Date(expiryDate.getFullYear(), expiryDate.getMonth(), expiryDate.getDate()), "/");
            alert(e);
        }
    },
    removeFavListFromDOM: function() {
        $(this.options.sFavListContainer).empty();
    },
    hide: function () {
        this.removeFavListFromDOM();
        oObj.hide(this.options.sFavLayer);
    },
    add: function (sSeasonCode, sItemCode, sItemType, sItemName, sTbnURL, sUrl, sItemNameCode) {
        try {
            this.options.sFavList = (oCookie.getCookie("suntours_favlist") == null) ? "" : oCookie.getCookie("suntours_favlist");
            if(this.options.sFavList.indexOf(sSeasonCode + "|" + sItemCode + "|" + sItemType) == -1) {
                if (this.options.sFavList.length > 0 && this.options.sFavList != null) this.options.sFavList += "#";
                this.options.sFavList += sSeasonCode +"|"+ sItemCode +"|"+ sItemType +"|"+ sItemName +"|"+ sTbnURL +"|"+ sUrl+"|"+sItemNameCode;
                
                // Expires in 6 months (6*30 days = 15552000000 ms)
                var currentDate = new Date();
                var expiryDate = new Date(currentDate.getTime() + 15552000000);
                oCookie.setCookie("suntours_favlist", this.options.sFavList, new Date(expiryDate.getFullYear(), expiryDate.getMonth(), expiryDate.getDate()), "/");
            }
                
            // Show favourites
            this.show();
            
        } catch (e) {
            alert(e);
        }
    },
    remove: function (iDel) {
        try {
            this.options.sFavList = oCookie.getCookie("suntours_favlist");
            this.options.aFavList.splice(iDel, 1);                    
            this.options.sFavList = this.options.aFavList.join("#");
            
            // Expires in 6 months (6*30 days = 15552000000 ms)
            var currentDate = new Date();
            var expiryDate = new Date(currentDate.getTime() + 15552000000);
            oCookie.setCookie("suntours_favlist", this.options.sFavList, new Date(expiryDate.getFullYear(), expiryDate.getMonth(), expiryDate.getDate()), "/");
            
            //Refresh FavList
            this.removeFavListFromDOM();
            this.createFavList();
        } catch (e) {
            alert(e);
        }        
    }
})
Fav.implement(new Options, new Events);

var Cookie = new Class({
    setCookie: function (sName, sValue, oExpires, sPath, sDomain, bSecure) {
        var sCookie = sName + "=" + encodeURIComponent(sValue);
        
        if (oExpires) sCookie += "; expires=" + oExpires.toGMTString();
        
        if (sPath) sCookie += "; path=" + sPath;
        
        if (sDomain) sCookie += "; domain=" + sDomain;
        
        if (bSecure) sCookie += "; secure";
        
        document.cookie = sCookie;
    },
    getCookie: function (sName) {
        var sRE = "(?:; )?" + sName + "=([^;]*);?";
        var oRE = new RegExp(sRE);
        
        if (oRE.test(document.cookie)) {
            return decodeURIComponent(RegExp["$1"]);
        } else {
            return null;
        }
    },
    deleteCookie: function (sName, sPath, sDomain) {
        setCookie(sName, "", new Date(0), sPath, sDomain);
    }
});

function openSummerFavList() {
    mm_openWindow('http://kesapre.aurinkomatkat.fi/muistilista.asp', 'Muistilista', 500, 550, 1, 0);

}

function QueueImg(hideDiv,showDiv){

	$(hideDiv).style.display = "none";
	$(showDiv).style.display = "inline";

}


// $Rev: 1343 $