// Firebug Console
try {
    console.assert(1);
} catch(e) {
    if (typeof loadFirebugConsole == 'function') {
         loadFirebugConsole();
    }  else {
        console = {
            log: function() {},
            debug: function() {},
            info: function() {},
            warn: function() {},
            assert: function() {}
        }
    }
}

// Class - element
var element=new Class({
	Implements:[Options,Events],
	options:
	{
		'object':null,
		'morph':{'duration':1000}
	},
	'initialize':function(options)
	{
		this.setOptions(options);
		if($chk(this.options.object))
		{
			this.options.object.set('opacity',0);
			if(this.options.morph)
			{
				this.options.object.set('morph',this.options.morph);
			}
		}
		//console.log(this.options);
	},
	'appear':function()
	{
		this.opened=true;
		this.options.object.morph('.opaque');
	},
	'disappear':function()
	{
		this.opened=false;
		this.options.object.morph('.transparent');
	},
	'hide':function()
	{
		this.hidden=true;
		this.options.object.morph('.transparent');
	}
});

// Class - content
var content = new Class({
    Extends: element,
    Implements: [Options, Events],
    'initialize': function(options) {
        //alert('init content');
        this.parent(options);
        //this.options.chain=true;
        var opts = this.options;
        opts.content = opts.object.getElement('#content');
        opts.showhidetab = opts.content.getNext('div.showhidetab').getElement('img');
        opts.size = opts.object.getSize();
        //console.log(opts.size);
        opts.showhidetab.set('opacity', 0);
        opts.showhidetab.set('morph', { 'duration': 300 });
        opts.showhidetab.addEvents({
            'click': function() { ((this.hidden) ? page.showContent() : page.hideContent()) } .bind(this),
            'mouseenter': function() { this.options.showhidetab.morph('.' + info.site + 'showhidetabglow') } .bind(this),
            'mouseleave': function() { this.options.showhidetab.morph('.' + info.site + 'showhidetabunglow') } .bind(this)
        });
        this.height = opts.size.y;
        //console.log(this.options.morph);
    },
    'hide': function(leftnav) {
        //console.log('content:hide()');
        this.hidden = true;
        this.options.content.morph(((info.homepage == true) ? '.contentsquash' : '.contenthide'));
    	this.options.showhidetab.removeClass('shown');
	},
    'show': function() {
		this.options.showhidetab.addClass('shown');
        //console.log('content:show()');
        this.hidden = false;
        this.options.content.morph(((info.homepage == true) ? { 'height': this.height, 'padding': '30px 20px 20px 20px', 'min-height': '180px'} : '.contentshow'));
    },
    'appear': function() {
		this.options.showhidetab.addClass('shown');
        this.appeared = true;
        this.options.object.set('opacity', 1);
        this.options.showhidetab.morph('.opaque');
        // should be chained?
        (function() { this.options.content.morph('.contentappear') } .bind(this)).delay(500);
    },
    'disappear': function() {
        this.appeared = false;
        this.options.showhidetab.morph('.transparent');
        /* should be chained? */
        (function() { this.options.content.morph('.contentdisappear') } .bind(this)).delay(500);
    },
    'moveTo': function(obj) {
        //displayObj(obj);
        this.options.object.setStyles(obj);
    },
    'alignTo': function(el, h, v) {
        var elcoords = el.getCoordinates();
        var contentcoords = this.options.object.getCoordinates();
        //console.log(coords);
        var leftval = (h == 'right') ? elcoords.left + elcoords.width : elcoords.left;
        var topval = (v == 'bottom') ? elcoords.bottom - contentcoords.height : elcoords.top;
        this.moveTo({ 'left': leftval, 'top': topval });
    }
});

// Class - roomsandsuites
var roomsandsuites = new Class({
    Extends: element,
    Implements: [Options, Events, Chain],
    'initialize': function(options) { 
    
        //console.log('roomsandsuites:initialize()');   
        //this.parent(options);
        this.options = options;
        var opts = this.options;
        
        //console.log(opts.tabs);
        opts.dllevel1 = opts.object.getElement('dl.level1');
        opts.content = opts.dllevel1.getChildren('dd');
        
        var bigh = 239;
        var texts = opts.object.getElements('div.text');
        var dls = opts.object.getElements('dl');
        var dds = opts.object.getElements('dd');
        
        // find empty dt tags and add class="first"
        opts.object.getElements('dt:empty').addClass('first');
        texts.each(function(el, i) {
            bigh = Math.max(el.getSize().y, bigh);
        });
        dls.each(function(el, i) {
            bigh = Math.max(el.getSize().y, bigh);
        });
        this.height = bigh;
        //alert(bigh);
        texts.each(function(el, i) {
            el.setStyle('height', bigh);
        });
        dds.each(function(el, i) {
            el.setStyle('height', bigh);
        });
        dls.each(function(el, i) {
            el.setStyle('height', bigh);
        });
        this.height = bigh;
        
        // Show - First Element
        opts.content[0].addClass('first').getPrevious('dt').addClass('first');
        
        
        opts.dllevel1.getChildren('dt').each(function(el, i) {
            el.addEvents(
			{
			    'click': function(ele) {
                    //console.log(ele);
			        this.showLevel1(ele);
			    } .bind(this, el),
			    'mouseenter': function() { this.addClass('highlight') },
			    'mouseleave': function() { this.removeClass('highlight') }
			});
            var level2 = null;
            var mover = el.getNext('dd').getElement('div.mover');
            //console.log(mover.getElements('dl.level2'));
            if (mover.getElements('dl.level2').length > 0) {
                level2 = mover.getElement('dl.level2').getChildren('dt');
            }
            //console.log('working');
            //console.log(level2);
            if (level2 != null) {
                level2.each(function(el2, i2) {
                    el2.addEvents(
					{
					    'click': function(ele) {
					        //console.log('level2:click');
					        //console.log(ele);
					        this.showLevel2(ele);
					    } .bind(this, el2),
					    'mouseenter': function() { this.addClass('highlight') },
					    'mouseleave': function() { this.removeClass('highlight') }
					});
                } .bind(this));
            }
        } .bind(this));
        opts.level = 0;
        opts.showhidetab = opts.object.getElement('div.showhidetab');
        opts.flourish = opts.showhidetab.getElement('img');
        opts.showhidetab.addEvents({
            'click': function() { ((this.hidden) ? page.showContent() : page.hideContent()) } .bind(this),
            'mouseenter': function() { this.options.flourish.morph('.' + info.site + 'showhidetabglow') } .bind(this),
            'mouseleave': function() { this.options.flourish.morph('.' + info.site + 'showhidetabunglow') } .bind(this)
        });
    },
    'hide': function() {
        this.hidden = true;
        this.options.dllevel1.morph('.semitransparent').getChildren('dt.open').getNext('dd').morph('.ddlevel1hidden').getElement('div.mover').getElement('div.text').morph('.semitransparent');
        this.options.dllevel1.morph('.semitransparent').getChildren('dt.open').getNext('dd').morph('.ddlevel1hidden').getElement('div#startteaserRight').getElement('div.text').morph('.semitransparent');
        //this.options.showhidetab.morph('.rasshthidden');
    	//this.options.flourish.removeClass('shown');
    },
    'show': function() {
        this.hidden = false;
        this.options.dllevel1.morph('.opaque').getChildren('dt.open').getNext('dd').morph('.ddlevel1shown').getElement('div.mover').getElement('div.text').morph('.opaque');
        //this.options.showhidetab.morph('.rasshtshown');
		//this.options.flourish.addClass('shown');
    },
    'appear': function() {
        //console.log('roomsandsuites:appear()');
        this.appeared = true;
        this.options.object.morph('.rasappear');
		this.options.flourish.addClass('shown');
    },
    'disappear': function() {
        this.appeared = false;
        this.options.object.morph('.rasdisappear');
    },
    'showLevel1': function(el) {
        this.level = 1;
        if (!this.hidden) {
            this.ddshown1 = el;
            // hide shown panel
            el.getParent().getChildren('dt.open').removeClass('open').getNext('dd').morph('.ddlevel1hidden');
            // show clicked panel
            (function() { el.addClass('open').getNext('dd').morph('.ddlevel1shown') }).delay(500);
            //slide to level 1
            el.getNext('dd').getElement('div.mover').morph('.moverlevel1');
        }
        else {
            this.show();
            if (this.ddshown1 != el) this.showLevel1(el);
        }
    },
    'showLevel2': function(el) {
        this.level = 2;
        this.ddshown2 = el;
        // hide shown panel
        el.getParent().getChildren('dt.open').removeClass('open').getNext('dd').morph('.ddlevel2hidden');
        // show clicked panel
        el.addClass('open');
        (function() { el.getNext('dd').morph('.ddlevel2shown') }).delay(500);
        //slide to level 2
        el.getParent().getParent('div.mover').morph('.moverlevel2');
        var roomcode = el.get('class').replace(/.*RT_([^\s]+).*/, '$1').toLowerCase();
        //console.log(info.roomImages[roomcode]);
        if (info.roomImages[roomcode]) {
            //alert(roomcode + '\n' + info.roomImages[roomcode][$random(0, info.roomImages[roomcode].length - 1)]);
            page.setBackground(info.roomImages[roomcode][$random(0, info.roomImages[roomcode].length - 1)]);
        }
        if ($('ctl00_HeaderBookingForm_ctl00_filter_room_type')) {
            $('ctl00_HeaderBookingForm_ctl00_filter_room_type').value = roomcode;
        }
    }
});

// Class - controller
controller = new Class({
    Implements: [Options, Events, Chain],
    'options': {},
    'elements': {},
    'biggestheight': 156, //should get from title_stripe
    'initialize': function(options) {
    
        var themorph = { 'duration': 800, 'transition': Fx.Transitions.Cubic.easeInOut };
    
        if ($('content')) {
            this.elements.thecontent = new content({ 'object': $('contentholder'), 'morph': themorph });
        }
        
        if ($('roomsandsuites')) {   
            this.elements.thecontent = new roomsandsuites({ 'object': $('roomsandsuites'), 'morph': themorph });
            //console.log(this.elements.thecontent);
        }  
    },
    'dim': function() {
        $('foreground').morph('.mostlytransparent');
    },
    'bright': function() {
        $('foreground').morph('.opaque');
    },
    'appear': function() {
        this.appeared = true;
        this.chain(this.appearchain);
        // fire the effects chain with a short delay
        //2010-06-GTM (function() { this.callChain() } .bind(this)).delay(4000);
		this.callChain()
    },
    'disappear': function() {
        this.appeared = false;
        this.chain(this.disappearchain);
        // fire the effects chain
        this.callChain();
    },
    'showGallery': function() {
        //alert('page:showGallery()');
        if (this.elements.thecontent) {
            this.elements.thecontent.hide();
        }
        if (this.elements.accordionpromo) {
            this.elements.accordionpromo.hide();
        }
        (function() { this.elements.thegallery.show() } .bind(this)).delay(500);
    },
    'hideGallery': function() {
        //alert('page:hideGallery()');
        if (this.elements.thecontent) {
            //this.elements.thecontent.show();
        }
        if (this.elements.accordionpromo) {
            this.elements.accordionpromo.show();
        }
        this.elements.thegallery.hide();
    },
    'showBookingform': function() {
        if (this.elements.thegallery && this.elements.thegallery.shown) {
            this.user_visibility.push(this.elements.thegallery);
            this.hideGallery();
            this.gallery_on = true;
        }
        if (this.elements.thecontent && !this.elements.thecontent.hidden) {
            // we don't want to show the content
            //this.user_visibility.push(this.elements.thecontent);
            this.elements.thecontent.hide();
        }
        if (this.elements.accordionpromo && !this.elements.accordionpromo.hidden) {
            if (!this.gallery_on) this.user_visibility.push(this.elements.accordionpromo);
            this.elements.accordionpromo.hide();
        }
        if (this.elements.loginform && this.elements.loginform.shown) {
            if (!this.gallery_on) this.user_visibility.push(this.elements.loginform);
            this.elements.loginform.hide();
        }
        this.elements.bookingform.show();
    },
    'hideBookingform': function() {
        if (this.gallery_on) {
            this.showGallery();
        } else {
            this.user_visibility.each(function(e) {
                e.show();
            });
        }
        this.elements.bookingform.hide();
        // important reset the values
        this.user_visibility = new Array();
    },
    'showContent': function() {
        //alert('page:showContent()');
        if (this.elements.thegallery && this.elements.thegallery.shown) {
            this.hideGallery();
        } // else {
        this.elements.thecontent.show();
        //}
    },
    'hideContent': function() {
        //alert('page:hideContent()');
        this.elements.thecontent.hide(this.elements.theleftnav);
    },
    'changeBackground': function(el, hotel) {
        //alert('page:changeBackground()');
        if (hotel && $('ctl00_Footer_DotComHotelNameLink')) {
            $('ctl00_Footer_DotComHotelNameLink').set('text', hotel.name);
            $('ctl00_Footer_DotComHotelNameLink').set('href', hotel.link);
        }
        this.setBackground(el.src);
    },
    'setBackground': function(src) {
        //alert('page:setBackground()\n' + src.replace('/Small/', '/'+info.imagesize+'/'));
        this.elements['background' + info.currentBackground].changeBackground(src.replace('/Small/', '/' + info.imagesize + '/'));
        info.currentBackground = (info.currentBackground == 1) ? 2 : 1;
    },
    'resetTimer': function(el) {
        if (this.appeared == false) {
            this.appear();
        }
        //hide all elements after 1 hour
        this.timer = this.disappear.delay(10000); //(60 * 60 * 1000)
    }
});

// Var - Info
var info = { 'classes': ['hotel', 'ht1'],
    'site': 'hotel',
    'template': 'ht1',
    'type': 1,
    'currentBackground': 1,
    'homepage': false,
    'language': 'en',
    'imagesizes': { 'BackgroundSmall': { 'x': 1024, 'y': 768 }, 'BackgroundMedium': { 'x': 1680, 'y': 1260 }, 'Large': { 'x': 1920, 'y': 1440} },
    'type2list': ['ht4', 'ht5'],
    'fullbackground': ['st1', 'ct2', 'ct5', 'ct6', 'ct7', 'ct8', 'ct9', 'ct10', 'ct11', 'ct12', 'ct13', 'ct14', 'ht4', 'ht5', 'ht6', 'ht7', 'ht8', 'ht9', 'ht10', 'ht11', 'ht12', 'ht13', 'ht14', 'ht16'],
    'whitetemplates': ['st1', 'ct2', 'ct6', 'ct9', 'ct10', 'ct11', 'ct12', 'ct13', 'ht5', 'ht8', 'ht9', 'ht10', 'ht12', 'ht14', 'ht16']
};


// Function - initpage
function initpage() {

    var infodiv = (window.pageinfo) ? window.pageinfo : 'ctl00_pageinfo';
    if ($(infodiv)) {
        var classtext = $(infodiv).get('class');
        info.classes = classtext.split(' ');
        info.site = classtext.replace(/.*(dotcom|hotel).*/, '$1');
    }

    page = new controller({});
    //page.appear();
}


// Add Event
window.addEvent('load', initpage);
