﻿/**
*	Pemberton Festival 2008 - Javascript Tools
*
*	@date		
*	@author		Michael Giuliano
*	@copyright	Live Nation (Music) UK
*/


function showHomepageMap() {
	jQuery('#bigMap').lightBox();
	jQuery('#bigMap').click();
}



/**
*  Loader function
*  Add a function to window.onload event
*/
function addLoadEvent(func, args) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = function() {
            func(args);
        }
    } else {
        window.onload = function() {
            if (oldonload) {
                oldonload();
            }
            func(args);
        }
    }
}



/**
*  Accordion Effects
*  Initialises accordion, and desactivate links
*/
var StartEffects = {

    divId: null,
    displayClass: null,
    stretcherClass: null,
    specialEffects: null,
    disableIE6: false,
    openFirstElement: false,

    init: function(args) {
        this.disableIE6 = args[4];
        if (this.disableIE6) {
            var rslt = navigator.appVersion.match(/MSIE (\d+\.\d+)/, '');
            var isIE6 = (rslt != null && Number(rslt[1]) >= 5.5 && Number(rslt[1]) < 7);
        } else {
            var isIE6 = false;
        }
        if (!isIE6) {

            this.divId = args[0];           // Block ID
            this.displayClass = args[1];    // Display block class name
            this.stretcherClass = args[2];  // Stretcher block class name
            this.specialEffects = args[3];  // Special effect to apply after the Accordion affect

            var stretchers = document.getElementsByClassName(this.stretcherClass);
            var toggles = document.getElementsByClassName(this.displayClass);

            // disable link
            var tl = toggles.length;

            for (i = 0; i < tl; i++) {
                var aTags = toggles[i].getElementsByTagName("a");
                if (aTags[0])
                    aTags[0].onclick = function() {
                        return false;
                    };
            }

            // accordion effect
            var myAccordion = new fx.Accordion(
		        toggles, stretchers, { opacity: true, duration: 400 }, this.specialEffects
	        );


            var qs = location.href.split('?')[1];
            if (qs != 'undefined' && qs != null) {
                if (qs.indexOf('info') >= 0) { // Info page
                    var cid = qs.split('&')[0].split('=')[1];
                    myAccordion.showThisHideOpen(stretchers[cid - 1]);
                } else {
                    // Unknown parameter - reload page with no querystring
                    var tmp = location.href.split('?')[0].split('/');
                    var section = tmp[tmp.length - 2];
                    location.href = '/' + section + '/';
                }
            } else {
                // Default - open first div
                this.openFirstElement = args[5];
                if (this.openFirstElement) {
                    myAccordion.showThisHideOpen(stretchers[0]);
                }
            }

        }
    }

};


/**
*  Activates the link with the "active" class
*/
var ActiveEffects = {

    mode: '',
    obj: null,

    init: function(m, o) {
        this.mode = m;
        this.obj = o;
        var aTag = this.obj.getElementsByTagName('a')[0];
        switch (this.mode) {
            case 'open':
                aTag.parentNode.style.display = "active";
                this.obj.style.backgroundColor = "#3272b2";
                aTag.className = 'active';
                break;
            case 'close':
                aTag.parentNode.style.display = "";
                this.obj.style.backgroundColor = "";
               // aTag.className = '';
                break;
            case 'closeAndOpen':
                aTag.parentNode.style.display = "";
                this.obj.style.backgroundColor = "";
               // aTag.className = '';
                break;
        }
    }

};



/**
*  News page Functions
*/
var News = {

    newsId: null,               // Block ID containing ALL News headers & details
    newsDetailsClass: null,     // Block Class containing Specific News details
    newsHeaderClass: null,      // Block Class containing Specific News header

    newsItems: new Array(),
    newsHeaders: new Array(),

    init: function(args) {

        this.newsId = args[0];
        this.newsDetailsClass = args[1];
        this.newsHeaderClass = args[2];

        // Build News blocks objects
        var block = $(this.newsId);
        var el = block.getElementsByTagName('div');
        var el_length = el.length;
        for (i = 0; i < el_length; i++) {
            if (el[i].className == this.newsDetailsClass) {
                var tmp = el[i];
                News.setParam(tmp, 'newsId', el[i].id);
                News.newsItems.push(tmp);
            } else if (el[i].className == this.newsHeaderClass) {
                var aTags = el[i].getElementsByTagName('a');
                var aL = aTags.length;
                for (j = 0; j < aL; j++) {
                    News.setParam(aTags[j], 'newsId', aTags[j].id);
                    aTags[j].onclick = function() {
                        News.showInfo(this);
                        //return false;
                    }
                    News.newsHeaders.push(aTags[j]);
                }
            }
        }

        // Show correct block function of query string
        var qs = location.href.split('?')[1];
        if (qs != 'undefined' && qs != null) {
            qs = qs.split('#')[0];
            var aid = qs.split('=')[1];
            var o = new Object;
            News.setParam(o, 'newsId', aid);
            News.showInfo(o);
        } else {
            // Default
            News.showInfo(News.newsItems[0]);
        }

    },

    showInfo: function(el) {
        var l = News.newsItems.length;
        if (typeof (el) == 'object') { // Action triggered by a click event
            for (i = 0; i < l; i++) {
                if (News.newsItems[i].newsId == el.newsId) {
                    News.newsItems[i].style.display = 'block';
                } else {
                    News.newsItems[i].style.display = 'none';
                }
            }
        } else {
            for (i = 0; i < l; i++) {
                if (News.newsItems[i].newsId == el) {
                    News.newsItems[i].style.display = 'block';
                } else {
                    News.newsItems[i].style.display = 'none';
                }
            }
        }
        var loader = $('loader');
        if (loader != null) loader.style.display = 'none';
    },

    setParam: function(e, param, value) {
        e[param] = value;
    },

    getParam: function(e, param) {
        return e[param];
    }

};



/**
*  Tickets page Functions
*/
var Tickets = {

    ticketsId: null,                // Block ID containing ALL Tickets details for ALL Categories
    ticketsClass: null,             // Block Class containing Specific Tickets details
    ticketsHeadersId: null,         // Block ID containing ALL Tickets headers
    ticketsHeaderClass: null,       // Block Class containing Specific Tickets header
    activeColor: null,              // Color of active header

    ticketsItems: new Array(),
    ticketsHeaders: new Array(),

    init: function(args) {

        this.ticketsId = args[0];
        this.ticketsClass = args[1];
        this.ticketsHeadersId = args[2];
        this.ticketsHeaderClass = args[3];
        Tickets.activeColor = args[4];

        // Build Tickets blocks objects
        var block = $(this.ticketsId);
        var el = block.getElementsByTagName('div');
        var el_length = el.length;
        for (i = 0; i < el_length; i++) {
            if (el[i].className == this.ticketsClass) {
                var tmp = el[i];
                Tickets.setParam(tmp, 'catId', el[i].id.split(':')[0]);
                Tickets.setParam(tmp, 'cId', el[i].id.split(':')[1]);
                Tickets.ticketsItems.push(tmp);
            }
        }

        // Disable headers links & add click events
        var block = $(this.ticketsHeadersId);
        var el = block.getElementsByTagName('div');
        var el_length = el.length;
        for (i = 0; i < el_length; i++) {
            if (el[i].className == this.ticketsHeaderClass) {
                var aTags = el[i].getElementsByTagName('a');
                var aL = aTags.length;
                for (j = 0; j < aL; j++) {
                    Tickets.setParam(aTags[j], 'catId', aTags[j].id.split(':')[0]);
                    Tickets.setParam(aTags[j], 'cId', aTags[j].id.split(':')[1]);
                    aTags[j].onclick = function() {
                        Tickets.showInfo(this);
                        return false;
                    }
                    Tickets.ticketsHeaders.push(aTags[j]);
                }
            }
        }

        // Show first Tickets block
        Tickets.showInfo(Tickets.ticketsItems[0]);

    },

    showInfo: function(el) {
        var activeEl = null;
        var l = Tickets.ticketsItems.length;
        for (i = 0; i < l; i++) {
            if (Tickets.getParam(Tickets.ticketsItems[i], 'catId') == Tickets.getParam(el, 'catId')) {
                if (Tickets.getParam(Tickets.ticketsItems[i], 'cId') == Tickets.getParam(el, 'cId')) {
                    Tickets.ticketsItems[i].style.display = 'block';
                    activeEl = el;
                } else {
                    Tickets.ticketsItems[i].style.display = 'none';
                }
            } else {
                Tickets.ticketsItems[i].style.display = 'none';
            }
        }
        if (activeEl != null) {
            Tickets.activate(el);
        }
        var loader = $('loader');
        if (loader != null) loader.style.display = 'none';
    },

    activate: function(el) {
        var l = Tickets.ticketsHeaders.length;
        for (i = 0; i < l; i++) {
            if (Tickets.ticketsHeaders[i] == el) {
                Tickets.ticketsHeaders[i].style.color = Tickets.activeColor;
            } else {
                Tickets.ticketsHeaders[i].style.color = '';
            }
        }
    },

    setParam: function(e, param, value) {
        e[param] = value;
    },

    getParam: function(e, param) {
        return e[param];
    }

};




/**
*  Info page active effect functions
*  Called after the accordion effect is over
*/
var ActiveEffects_Info = {

    mode: '',
    obj: null,
    tracker: 0,

    init: function(m, o) {
        this.mode = m;
        this.obj = o;
        var aTag = this.obj.getElementsByTagName('a')[0];
        switch (this.mode) {
            case 'open':
                aTag.className = 'active';
                break;
            case 'close':
                aTag.className = '';
                break;
            case 'closeAndOpen':
                aTag.className = '';
                break;
        }

        // Call the Info init function - only once
        if (this.tracker <= 0) {
            this.tracker++;
            var args = new Array('infoHolder', 'infoRightBlock', 'infoHeadersHolder', 'infoHeader', '#0082ea');
            Info.init(args);
        }
    }

};

/**
*  Info page Functions
*/
var Info = {

    infoId: null,               // Block ID containing ALL Info details for ALL Categories
    infoClass: null,            // Block Class containing Specific Info details
    infoHeadersId: null,        // Block ID containing ALL Info headers
    infoHeaderClass: null,      // Block Class containing Specific Info header
    activeColor: null,          // Color of active header

    infoItems: new Array(),
    infoHeaders: new Array(),

    init: function(args) {

        this.infoId = args[0];
        this.infoClass = args[1];
        this.infoHeadersId = args[2];
        this.infoHeaderClass = args[3];
        Info.activeColor = args[4];

        // Build info blocks objects
        var block = $(this.infoId);
        var el = block.getElementsByTagName('div');
        var el_length = el.length;
        for (i = 0; i < el_length; i++) {
            if (el[i].className == this.infoClass) {
                var tmp = el[i];
                Info.setParam(tmp, 'catId', el[i].id.split(':')[0]);
                Info.setParam(tmp, 'faqId', el[i].id.split(':')[1]);
                Info.infoItems.push(tmp);
            }
        }

        // Disable headers links & add click events
        var block = $(this.infoHeadersId);
        var el = block.getElementsByTagName('div');
        var el_length = el.length;
        for (i = 0; i < el_length; i++) {
            if (el[i].className == this.infoHeaderClass) {
                var aTags = el[i].getElementsByTagName('a');
                var aL = aTags.length;
                for (j = 0; j < aL; j++) {
                    Info.setParam(aTags[j], 'catId', aTags[j].id.split(':')[0]);
                    Info.setParam(aTags[j], 'faqId', aTags[j].id.split(':')[1]);
                    aTags[j].onclick = function() {
                        Info.showInfo(this);
                        return false;
                    }
                    Info.infoHeaders.push(aTags[j]);
                }
            }
        }

        // Show first info block
        // Show correct block function of query string
        var qs = location.href.split('?')[1];
        if (qs != 'undefined' && qs != null) {
            var o = new Object;
            Info.setParam(o, 'catId', qs.split('&')[0].split('=')[1]);
            Info.setParam(o, 'faqId', qs.split('&')[1].split('=')[1]);
            Info.showInfo(o);
        } else {
            // Default
            Info.showInfo(Info.infoItems[0]);
        }

    },

    showInfo: function(el) {
        var activeEl = null;
        var l = Info.infoItems.length;
        for (i = 0; i < l; i++) {
            if (Info.infoItems[i].catId == el.catId) {
                if (Info.infoItems[i].faqId == el.faqId) {
                    Info.infoItems[i].style.display = 'block';
                    activeEl = el;
                } else {
                    Info.infoItems[i].style.display = 'none';
                }
            } else {
                Info.infoItems[i].style.display = 'none';
            }
        }
        if (activeEl != null) {
            Info.activate(el);
        }
        var loader = $('loader');
        if (loader != null) loader.style.display = 'none';
    },

    activate: function(el) {
        var l = Info.infoHeaders.length;
        for (i = 0; i < l; i++) {
            if (Info.infoHeaders[i].catId == el.catId) {
                if (Info.infoHeaders[i].faqId == el.faqId) {
                    Info.infoHeaders[i].style.color = Info.activeColor;
                } else {
                    Info.infoHeaders[i].style.color = '';
                }
            } else {
                Info.infoHeaders[i].style.color = '';
            }
        }
    },

    setParam: function(e, param, value) {
        e[param] = value;
    },

    getParam: function(e, param) {
        return e[param];
    }

};




/**
*  Accomodation page Functions
*/
var Accomodation = {

    accomodationId: null,               // Block ID containing ALL Accomodation details
    accomodationDetailsClass: null,     // Block Class containing Accomodation details
    accomodationHeaderClass: null,       // Block Class containing Accomodation headers

    accomodationItems: new Array(),
    accomodationHeaders: new Array(),

    init: function(args) {

        this.accomodationId = args[0];
        this.accomodationDetailsClass = args[1];
        this.accomodationHeaderClass = args[2];

        // Build Accomodation Details objects
        var block = $(this.accomodationId);
        var el = block.getElementsByTagName('div');
        var el_length = el.length;
        for (i = 0; i < el_length; i++) {
            if (el[i].className == this.accomodationDetailsClass) {
                var tmp = el[i];
                Accomodation.setParam(tmp, 'aId', el[i].id);
                Accomodation.accomodationItems.push(tmp);
            }
        }

        // Disable headers links & add click events
        var aTags = block.getElementsByTagName('a');
        var aL = aTags.length;
        for (i = 0; i < aL; i++) {
            if (aTags[i].className == this.accomodationHeaderClass) {
                Accomodation.setParam(aTags[i], 'aId', aTags[i].id);
                aTags[i].onclick = function() {
                    Accomodation.showInfo(this);
                    return false;
                }
                Accomodation.accomodationHeaders.push(aTags[i]);
            }
        }

        // Show first Tickets block
        Accomodation.showInfo(Accomodation.accomodationItems[0]);

    },

    showInfo: function(el) {
        var l = Accomodation.accomodationItems.length;
        for (i = 0; i < l; i++) {
            if (Accomodation.getParam(Accomodation.accomodationItems[i], 'aId') == Accomodation.getParam(el, 'aId')) {
                Accomodation.accomodationItems[i].style.display = 'block';
                Accomodation.accomodationHeaders[i].className = 'active';
            } else {
                Accomodation.accomodationItems[i].style.display = 'none';
                Accomodation.accomodationHeaders[i].className = '';
            }
        }
        var loader = $('loader');
        if (loader != null) loader.style.display = 'none';
    },

    setParam: function(e, param, value) {
        e[param] = value;
    },

    getParam: function(e, param) {
        return e[param];
    }

};



/**
*  Partners page Functions
*/
var Partners = {

    partnersId: null,               // Block ID containing ALL Partners details
    partnersDetailsClass: null,     // Block Class containing Partners details
    partnersHeaderClass: null,       // Block Class containing Partners headers

    partnersItems: new Array(),
    partnersHeaders: new Array(),

    init: function(args) {

        this.partnersId = args[0];
        this.partnersDetailsClass = args[1];
        this.partnersHeaderClass = args[2];

        // Build Partners Details objects
        var block = $(this.partnersId);
        var el = block.getElementsByTagName('div');
        var el_length = el.length;
        for (i = 0; i < el_length; i++) {
            if (el[i].className == this.partnersDetailsClass) {
                var tmp = el[i];
                Partners.setParam(tmp, 'pId', el[i].id);
                Partners.partnersItems.push(tmp);
            }
        }

        // Disable headers links & add click events
        var aTags = block.getElementsByTagName('a');
        var aL = aTags.length;
        for (i = 0; i < aL; i++) {
            if (aTags[i].className == this.partnersHeaderClass) {
                Partners.setParam(aTags[i], 'pId', aTags[i].id);
                aTags[i].onclick = function() {
                    Partners.showInfo(this);
                    return false;
                }
                Partners.partnersHeaders.push(aTags[i]);
            }
        }

        // Show first Tickets block
        Partners.showInfo(Partners.partnersItems[5]);

    },

    showInfo: function(el) {
        var l = Partners.partnersItems.length;
        for (i = 0; i < l; i++) {
            if (Partners.getParam(Partners.partnersItems[i], 'pId') == Partners.getParam(el, 'pId')) {
                Partners.partnersItems[i].style.display = 'block';
            } else {
                Partners.partnersItems[i].style.display = 'none';
            }
        }
        var loader = $('loader');
        if (loader != null) loader.style.display = 'none';
    },

    setParam: function(e, param, value) {
        e[param] = value;
    },

    getParam: function(e, param) {
        return e[param];
    }

};
