﻿// ie6 background-image flickr
try {
  document.execCommand("BackgroundImageCache", false, true);
} catch(err) {}

var transitionTime = 2000.0;
var imageIndex = 0;
var imageUrls;

var ImageRotator = Class.create();

ImageRotator.prototype = {
    initialize: function(inImageUrls) {
        var oldimageUrls = inImageUrls;
        imageUrls = inImageUrls.split(",");
        
        for (var i=0; i<imageUrls.length; i++) {
            var img = new Image();
            img.src = oldimageUrls[i];
        }
        
        var banner = $('imageRotator');              
            
        banner.setStyle({'backgroundImage':'url(' + imageUrls[imageIndex] + ')'});            
        imageIndex--;
        rotateBanner();

    }
}

function rotateBanner(){

        imageIndex++;
        if(imageIndex>imageUrls.length-1)
            imageIndex = 0;
    
        var banner = $('imageRotator');      
        
        if(banner.childElements().length<1){
            var newImage = new Element('div');
            newImage.setStyle({'opacity':'0'});
            Insertion.Top(banner,newImage);
            banner.newImage = newImage;
        }
        else
        {
            banner.newImage = banner.childElements().first();
            banner.newImage.setStyle({'opacity':'0'});
        }  

        banner.newImage.setStyle({'backgroundImage':'url(' + imageUrls[imageIndex] + ')'});         
         
        Effect.Appear(banner.newImage, {afterFinish: function (el) {
                                            banner.setStyle({'backgroundImage':banner.newImage.getStyle('backgroundImage')});
                                            Effect.Fade(banner.newImage,{duration: 1.0,afterFinish: function(el){
                                               setTimeout('rotateBanner();', transitionTime);
                                            }}); 
                                            
                                        },duration: 1.0});    
          
}

var ResourceSelector = Class.create();

ResourceSelector.prototype = {
    initialize: function() {
       
        $$('.resourceselector').each(function(el) {
              this.init(el);
              //Event.observe(el, 'mouseover', this.onMouseOver.bindAsEventListener(this));
              //Event.observe(el, 'mouseout', this.onMouseOut.bindAsEventListener(this));
              
            var add = el.select('.add')[0];
            add.selector = el;
            add.observe('click', function(event) {
                var element = event.element();
                this.addRow(element.selector);
            }.bind(this));
              
        }.bind(this));
    },
    
    init : function(selector) {
        var drop = selector.select('select').first();
        var tb = selector.select('.selectedvalue').first();
        tb.value = ',' + tb.value;
        
        var selectedOptions = new Array();
        for(var i=0; i<drop.options.length; i++) {
            if(tb.value.indexOf(',' + drop.options[i].value + ',') >= 0)
                selectedOptions[selectedOptions.length] = drop.options[i];
        }
        selectedOptions.each(function(opt) {
            opt.selected = true;
            this.addRow(selector);
        }.bind(this));
    },
    
    addRow : function(selector) {
        var drop = selector.select('select').first();
        var tb = selector.select('.selectedvalue').first();
        var lastRow = selector.select('.dropdown').first();
        
        if(drop.selectedIndex >= 0) {
            // get selected option
            var opt = drop.options[drop.selectedIndex];
            var val = opt.value;
            var txt = opt.text;
            var txt_l = txt.toLowerCase();
            
            // remove from drop down
            drop.options[drop.selectedIndex] = null;
            drop.selectedIndex = 0;
            if(drop.options.length == 0) {
                drop.disabled = true;
                drop.setStyle({'background-color': 'f7f7f7'});
            }
            
            // add to text box
            if(tb.value.indexOf(',' + val + ',') < 0)
                tb.value += ',' + val;
            tb.value += ',';
            tb.value = tb.value.replace(',,,', ',');
            tb.value = tb.value.replace(',,', ',');
            // work out where to inject this row
            var before = null;
            var trs = selector.select('tr');
            trs.each(function(tr) {
                if(!tr.hasClassName('dropdown')) {
                    var trval = tr.select('input').first().value.toLowerCase();
                    var comp = (trval < txt_l) - (txt_l < trval);
                    if(comp > 0)
                        before = tr;
                }
            });
            if(before == null)
                before = lastRow;
            
            // add new row to table
            var newRow = new Element('tr');
            Insertion.After(before, newRow);            
            var tbCell = new Element('td');
            Insertion.Top(newRow, tbCell);
            var tbNew = new Element('input').addClassName('text');
            Insertion.Top(tbCell, tbNew);
            tbNew.type = 'text';
            tbNew.value = txt;
            var dlCell = new Element('td');
            Insertion.Bottom(newRow,dlCell);
            
            // add delete link
            var link = new Element('a').addClassName('delete');
            Insertion.Top(dlCell,link);
            link.innerHTML = 'x';
            link.selectedValue = val;
            link.selectedText = txt;
            link.row = newRow;
            link.selector = selector;
            link.href = 'javascript:void(0)';
            
            link.observe('click', function(event) {
                var element = event.element();
                this.deleteRow(element.selector,element,element.row);
            }.bind(this));          
        }
    },
    deleteRow : function(selector, link, row) {
        var drop = selector.select('select').first();
        var tb = selector.select('.selectedvalue').first();
        var lastRow = selector.select('.dropdown').first();
        
        // put option back in drop down
        var opt = new Option(link.selectedText, link.selectedValue);
        drop.options[drop.options.length] = opt;
        opt.selected = true;
        this.sortDrop(drop);
        drop.disabled = false;
        drop.setStyle({'background-color': 'ffffff'});
        //lastRow.setStyle('display', 'block');
        
        // remove row from table
        row.remove();
        
        // remove from selected text
        tb.value = tb.value.replace(link.selectedValue, '');
        tb.value += ',';
        tb.value = tb.value.replace(',,,', ',');
        tb.value = tb.value.replace(',,', ',');    
    },
    
    sortDrop : function(drop){
        // collect current options in array
        var copyOption = new Array();
        for (var i = 0; i < drop.options.length; i++)
            copyOption[i] = new Array(drop.options[i].text, drop.options[i].value, drop.options[i].selected);

        // sort array by text
        copyOption.sort(
            function(a, b) { 
                return (b[0].toLowerCase() < a[0].toLowerCase()) - (a[0].toLowerCase() < b[0].toLowerCase()); 
            }
        );

        // clear current options
        drop.options.length = 0;

        // add sorted options back to dropdown
        for (var i = 0; i < copyOption.length; i++) {
            var opt = new Option(copyOption[i][0], copyOption[i][1], copyOption[i][2]);
            drop.options[drop.options.length] = opt;
        }    
    }
    
 
}

var NewsletterSignupErrorBoxChecker = Class.create();

NewsletterSignupErrorBoxChecker.prototype = {
    initialize : function()
    {
        var inputBoxes = $$('.haserror');
        inputBoxes.each(function(item)
        {
            if(!item.hasClassName('ignore'))
            {
                item.setStyle({'border':'none'});
                $(item.parentNode).addClassName('textboxwrappererror');
                $(item.parentNode).removeClassName('textboxwrapper');
            }
        });
    }
};

var GalleryItemBorder = Class.create();

GalleryItemBorder.prototype = {
    initialize : function()
    {
        var pics = $$('.galleryitem');
        pics.each(function(item)
        {
            Insertion.Bottom(item,'<img src="/images/galleryimage_border.png" class="border" />');
        });
    }
}

Event.observe(window, 'load', function() { 
    new ResourceSelector();
    externalLinks();
    new NewsletterSignupErrorBoxChecker();
    new GalleryItemBorder();

});

function OnClientModeChange(editor)
{
    var htmlArea = document.getElementById("RadEContentTextarea" + editor.Id); 
    htmlArea.style.width = (editor.GetWidth() - 24) + "px";
}

/* -- CONVERT INTO PROTOTYPE -- */
function TicketQuantitySelector()
{   
    this.ticketTypes = Array();
    this.totalTicketCostElement = $('TotalTicketCostElement');
    this.totalBookingFeeElement = $('TotalBookingFeeElement');
    this.totalDeliveryCostElement = $('TotalDeliveryCostElement');
    this.totalCostElement = $('TotalCostElement');    
    this.subTotalElement = $('SubTotalElement');    
       
    this.registerTicketRow = function(rowId, ticketTypeCost, ticketBookingFee)
    {
        this.ticketTypes[this.ticketTypes.length] = new TicketType($(rowId), ticketTypeCost, ticketBookingFee, this);
    };
    this.update = function()
    {   
        var deliveryCost = 0;
        var totalTicketCost = 0;
        var totalBookingFee = 0;
        
        deliveryCost = this.totalDeliveryCostElement.innerHTML.replace("£", "");       
        
        for(var i = 0; i < this.ticketTypes.length; i++)
        {
            var ticketType = this.ticketTypes[i];
            ticketType.update();
            var ticketTypeQuantity = ticketType.getSelectedQuantity();
            totalTicketCost += ticketTypeQuantity * ticketType.cost;
            totalBookingFee += ticketTypeQuantity * ticketType.bookingFee;
        }
        this.totalTicketCostElement.innerHTML = "&pound;" + totalTicketCost.toFixed(2);
        this.totalBookingFeeElement.innerHTML = "&pound;" + totalBookingFee.toFixed(2);        
        this.subTotalElement.innerHTML = "&pound;" + (totalTicketCost + totalBookingFee).toFixed(2);        
        this.totalCostElement.innerHTML = "&pound;" + (totalTicketCost + totalBookingFee + parseFloat(deliveryCost)).toFixed(2);
    };
}
function TicketType(row, ticketTypeCost, ticketBookingFee, selector)
{
    this.cost = ticketTypeCost;
    this.bookingFee = ticketBookingFee;
    this.totalElement = row.getElementsByClassName('totalelement')[0];
    this.quantitySelect = row.getElementsByClassName('quantityselect')[0];
    this.quantitySelect.selector = selector;
    
     this.quantitySelect.observe('change', function(event) {
                var element = event.element();
                element.selector.update();
     });

    this.getSelectedQuantity = function()
    {
        return this.quantitySelect.options[this.quantitySelect.selectedIndex].text;
    }
    this.getTotalCost = function()
    {
        var selectedQuantity = this.getSelectedQuantity();
        return selectedQuantity * (this.cost + this.bookingFee);
    }
    this.update = function()
    {
        this.totalElement.innerHTML = "&pound;" + this.getTotalCost().toFixed(2);
    };
}

function externalLinks() {
 if (!document.getElementsByTagName) return;
 var anchors = document.getElementsByTagName("a");
 for (var i=0; i<anchors.length; i++) {
   var anchor = anchors[i];
   if (anchor.getAttribute("href") &&
       anchor.getAttribute("rel") == "external")
     anchor.target = "_blank";
 }
}

function SetDeliveryPrice(element)
{   
    this.totalCostElement = $('TotalCostElement');
    this.totalDeliveryCostElement = $('TotalDeliveryCostElement');
    this.subTotalElement = $('SubTotalElement');    
    var totalCost = subTotalElement.innerHTML.replace("£", "");        
    var deliveryCost = element.options[element.selectedIndex].value;
        
    totalDeliveryCostElement.innerHTML = "&pound;" + parseFloat(deliveryCost).toFixed(2);
    totalCostElement.innerHTML = "&pound;" + (parseFloat(deliveryCost) + parseFloat(totalCost)).toFixed(2);            
}

function setRowTotal(element)
{
    var qty = element.options[element.selectedIndex].text;
    var price = document.getElementById("tentprice").innerHTML;    
    var rowtotal = eval(price * qty).toFixed(2);
    document.getElementById("rowtotal").innerHTML = rowtotal;        
}