/**
 * @author PeteAllison
 * @description Handles the new event adverts
 */
// <![CDATA[

window.addEvent('domready', function(){
    var runningCost = 0; // Actual running cost
    var displayedCost = 0; // Cost currently being shown
    var cost = new Roar({
        'container': $('eventCost'),
        'position': 'topRight',
        'duration': false
    });

    // Loop through all items that have a cost and calculate the running cost
    if ($('eventForm')) {
        $('eventForm').getElements('div span.details').each(function(item){
            details = JSON.decode(item.get('text'));
            var field = item.getParent('div').getElement('input,select,textarea');
            if (details.cost) {
                if (field.nodeName == 'INPUT' || field.nodeName == 'TEXTAREA') {
                    if (field.get('type') == 'checkbox' || field.get('type') == 'radio') {
                        if (field.get('checked') == true)
                            runningCost += details.cost;
                    } else {
                        if (field.get('value') != '')
                            runningCost += details.cost;
                    }
                } else if (field.nodeName == 'SELECT') {
                    if (field.selectedIndex != 0)
                        runningCost += details.cost;
                }
            }
        });
    }

    $('popupHelp').setStyle('display', 'block');

    if ($('eventForm')) {
        $('event_secretary_email').addEvent('change', function(){
            if ($('event_secretary_email').get('value') != '') {
                $('advertiser_email').getParent('div').removeClass('required');
            } else {
                $('advertiser_email').getParent('div').addClass('required');
            }
        })

        $('eventForm').getElements('input, select,span.information, textarea').each(function(element) {
            var details;
            if ((details = element.getParent('div').getElement('span.details'))) {
                details = JSON.decode(details.get('text'));
                if (element.nodeName == 'SPAN') {
                    element.addEvents({
                        'mouseover': function(){
                            showPopup(this);
                        },
                        'mouseout': function(){
                            hidePopup();
                        }
                    })
                } else {
                    element.addEvents({
                        'focus': function(){
                            showPopup(this)
                        },
                        'blur': function(){
                            hidePopup();
                        },
                        'change': function(){
                            if (this.get('value') != '')
                                this.removeClass('error');
                            if (this.nodeName == 'SELECT' && this.selectedIndex != 0)
                                this.removeClass('error');
                            if (details.cost) {
                                if (this.nodeName == 'INPUT' || this.nodeName == 'TEXTAREA') {
                                    if (this.get('type') == 'checkbox' || this.get('type') == 'radio') {
                                        if (this.get('checked') == true) {
                                            runningCost += details.cost;
                                        } else {
                                            runningCost -= details.cost;
                                        }
                                    } else {
                                        if (this.get('value') != '') {
                                            runningCost += details.cost;
                                        } else {
                                            runningCost -= details.cost;
                                        }
                                    }
                                } else if (this.nodeName == 'SELECT') {
                                    if (this.selectedIndex != 0) {
                                        runningCost += details.cost;
                                    } else {
                                        runningCost -= details.cost;
                                    }
                                }
                                calcCost();
                            }

                        }
                    })
                }
            }
        })

        function showPopup(element){
            var me = element.getCoordinates();
            var details = JSON.decode(element.getParent('div').getElement('span.details').get('text'))
            if (details.cost) {
                details.help += '<br/><br/>This will cost <strong>&pound;' + details.cost + '</strong>';
            }
            if (element.nodeName == 'TEXTAREA') {
                me = {
                    'top': me.top,
                    'left': me.left + 327
                }
            }
            if (element.nodeName == 'SPAN') {
                me = {
                    'top': me.top,
                    'left': me.left + 20
                }
            }
            $('popupHelp').setStyles({
                'top': me.top - 3,
                'left': me.left + 310
            }).set('html', details.help).fade('in');
        }
        function hidePopup(){
            $('popupHelp').fade('out');
        }

        function calcCost(){
            if (runningCost != displayedCost) {
                cost.empty();
                displayedCost = runningCost;
				var amountPaid = '';
				if ($('paid')) {
					amountPaid = '<br/>You have already paid ' + $('paid').get('value').toInt() + ' for this advert';
				}
                if (runningCost > 0)
                    cost.alert('Total cost', 'The cost for this event advertisement is &pound;' + runningCost + amountPaid);
            }
        }

        new ec_Calendar($('eventCalendar'), {
            classes: ['bluecal'],
            direction: 1
        });
        var log = new Roar({
            'container': $('log'),
            'position': 'bottomRight',
            'duration': 5000
        });
        var link = $('select-0');


        if (link.nodeName == 'A') {
            var linkIdle = link.get('html');
            function linkUpdate(){
                if (!swf.uploading)
                    return;
                var size = Swiff.Uploader.formatUnit(swf.size, 'b');
                link.set('html', '<span class="small">' + swf.percentLoaded + '% of ' + size + '</span>');
            }
            var swf = new Swiff.Uploader({
                path: '/js/fancyupload/source/Swiff.Uploader.swf',
                url: $('select-0').getParent('form').get('action'),
                verbose: true,
                queued: false,
                target: link,
                instantStart: true,
                typeFilter: {
                    'Documents (*.pdf, *.doc, *.xls)': '*.pdf; *.doc; *.xls;'
                },
                fileSizeMax: 2 * 1024 * 1024,
                onSelectSuccess: function(files){
                    if (Browser.Platform.linux)
                        window.alert('Due to a misbehaviour of Adobe Flash Player on Linux,\nthe browser will probably freeze during the upload process.\nSince you are prepared now, the upload will start right away ...');
                    log.alert('Starting Upload', 'Uploading <em>' + files[0].name + '</em> (' + Swiff.Uploader.formatUnit(files[0].size, 'b') + ')');
                    this.setEnabled(false);
                },
                onSelectFail: function(files){
                    log.alert('<em>' + files[0].name + '</em> was not added!', 'Please select an image smaller than 2 Mb. (Error: #' + files[0].validationError + ')');
                },
                appendCookieData: true,
                onQueue: linkUpdate,
                onFileComplete: function(file){
                    if (file.response.error) {
                        log.alert('Failed Upload', 'Uploading <em>' + this.fileList[0].name + '</em> failed, please try again. (Error: #' + this.fileList[0].response.code + ' ' + this.fileList[0].response.error + ')');
                    } else {
                        var md5 = JSON.decode(file.response.text, true).hash;
                        log.alert('Successful Upload', 'Your schedule has been successfully uploaded')
                    }
                    file.remove();
                    $('select-0').set('text', 'Uploaded ' + file.name);
                    runningCost += JSON.decode($('select-0').getParent('div').getElement('span.details').get('text')).cost;
                    calcCost();
                    //this.setEnabled(true);
                },
                onComplete: function(){
                    //link.set('html', linkIdle);
                }
            })
        }

        $('eventForm').addEvent('submit', function(event){
            var errors = false;
            $('eventForm').getElements('div.required input').each(function(element){
                var forceError = false;
                if (element.id.contains('email'))
                    forceError = !emailValid(element.get('value'));

                if (element.get('value') == '' || forceError) {
                    errors = true;
                    element.addClass('error');
                } else {
                    element.removeClass('error');
                }
            });
            $('eventForm').getElements('div.required select').each(function(element){
                if (element.selectedIndex == 0) {
                    errors = true;
                    element.addClass('error');
                } else {
                    element.removeClass('error');
                }
            });
            $('eventForm').getElements('div.required textarea').each(function(element){
                if (element.get('value') == '') {
                    errors = true;
                    element.addClass('error');
                } else {
                    element.removeClass('error');
                }
            });

            if (errors == true) {
                log.alert('Error', 'Your form appears to contain errors, please fix marked problems and try again.');
                var event = new Event(event);
                event.stop();
                return false;
            }
        });

        calcCost();
    }
});

function emailValid(email){
    return email.test(/^[a-z0-9._\+%-]+@[a-z0-9.-]+\.[a-z]{2,4}$/i);
}

// IE console.log() error prevention
if (!console) {
    var console = new Object({
        log: function(){
        }
    });
}

// ]]>
