/**
 * @version     $Id$
 * @copyright   2010 exozet interact
 * @author      frank.fiebig <frank.fiebig@exozet.com>
 * @since       06/2010
 * @package     ClubTV
 * @subpackage  Frontend
 */

/**
 * dom ready - do jquery stuff inside here
 * pay attention to use only jQuery() as selector to avoid side effects with other frameworks
 */
jQuery(document).ready(function(e){

    // liga total logo clicktracker ********************************************
    jQuery('#id_ligatotal_logo').bind("click",function(e){
        var uri         = jQuery('meta[name="portal.clickcounter_url"]').attr('content');
        var client      = jQuery('meta[name="portal.client"]').attr('content');
        var track_url   = uri+'/ct/clubtv/tpp3/'+client+'/ligatotaltracker';
        jQuery.get(track_url, { 'ajax':1 }, function(data) {
            //alert('click tracking done');
        });
    });

    // edit_bank_account ( order new abo) confirm ******************************
    jQuery('.edit_bank_account').live('click', function(e){
        if(!confirm('Sind Sie wirklich sicher, dass Sie ein neues Abo abschließen wollen? \n Wenn ja wird die entsprechende Buchung und Bezahlung auch durchgeführt. \n\n Sollten Sie gerade Probleme mit Ihrem Abo oder mit der Buchung haben, wenden Sie sich bitte an den Service (am besten über das Kontaktformular) bevor sie ein neues Abo abschließen.'))
        {
            return false;
        }
    });

    // captcha reset ***********************************************************
    jQuery('#captcha_reset').live('click', function(e){
        e.preventDefault();
        var nocache = new Date().getTime();
        jQuery('#captcha_image').attr('src', jQuery(this).attr('href')+'?'+nocache)
    });
    
    // noscript/nocookie header ************************************************
    jQuery.cookie('test', 'foo');
    if (jQuery.cookie('test') == 'foo') {
        jQuery('#noscript').addClass('hide');
    } else {
        jQuery('#noscript').removeClass('hide');
    }

    // content folder navigation ***********************************************
    jQuery('.folder').live('click', function(e){
        e.preventDefault();

        var arr     = jQuery(this).attr('href').split('#');
        var target  = jQuery('#'+arr[1]);

        if (target.hasClass('hide')) {
            jQuery('.folder_box').slideUp('fast').addClass('hide');
            target.slideDown('fast').removeClass('hide');
        } else {
            target.slideUp('fast').addClass('hide');
        }
    });
    
    // player seek *************************************************************
    jQuery('.seek').live('click', function(e){
        e.preventDefault();
        var position = jQuery(this).attr('href').replace('#','');
        remote('playerSeekTo', {position:position});
    });
    
    // playlist/player trigger *************************************************
    jQuery('.player').live('click', function(e){
        e.preventDefault();
        jQuery('#page_overlay').fadeOut('fast');
        jQuery('html, body').animate({scrollTop:0}, 'slow');
        var element = jQuery(this);
        remote('playerStartVideo', {url:element.attr('href')});
    });
    jQuery('.playlist').live('click', function(e){
        e.preventDefault();
        jQuery('#page_overlay').fadeOut('fast');
        var element = jQuery(this);
        var params = {
            element     : element,
            layer       : 'playlist',
            showloader  : true,
            totop       : true
        };
        loadLayer(params);
        remote('playerStartVideo', {url:element.attr('href')});
    });
    
    // playlist overlay toggle *************************************************
    jQuery('.playlist_overlay').live('click', function(e){
        e.preventDefault();
        jQuery('#playlist_overlay').slideToggle('fast');
        if(jQuery('.playlist_overlay').hasClass('active')) {
            jQuery('.playlist_overlay').removeClass('active');
        } else {
            jQuery('.playlist_overlay').addClass('active');
        }
    });
    
    // page_overlay loader *****************************************************
    jQuery('.page_overlay_form').live('submit', function(e){
        e.preventDefault();
        var params = {
            element     : jQuery(this),
            layer       : 'page_overlay',
            showloader  : true,
            totop       : true,
            addclass    : 'po_small'
        };
        loadLayer(params);
        loadUserInfo();
        remote('playerPause');
    });
    jQuery('.page_overlay_form input[type="submit"]').live('click', function(e){
        e.preventDefault();
        var params = {
            element     : jQuery(this).parents('form'),
            layer       : 'page_overlay',
            showloader  : true,
            totop       : true,
            addclass    : 'po_small'
        };
        loadLayer(params);
        loadUserInfo();
        remote('playerPause');
    });
    jQuery('.page_overlay_link').live('click', function(e){
        e.preventDefault();
        var params = {
            element     : jQuery(this),
            layer       : 'page_overlay',
            showloader  : true,
            totop       : true,
            addclass    : 'po_small'
        };
        loadLayer(params);
        loadUserInfo();
        remote('playerPause');
    });
    jQuery('.page_overlay_form_medium').live('submit', function(e){
        e.preventDefault();
        var params = {
            element     : jQuery(this),
            layer       : 'page_overlay',
            showloader  : true,
            totop       : true,
            addclass    : 'po_medium'
        };
        loadLayer(params);
        loadUserInfo();
        remote('playerPause');
    });
    jQuery('.page_overlay_form_medium input[type="submit"]').live('click', function(e){
        e.preventDefault();
        var params = {
            element     : jQuery(this).parents('form'),
            layer       : 'page_overlay',
            showloader  : true,
            totop       : true,
            addclass    : 'po_medium'
        };
        loadLayer(params);
        loadUserInfo();
        remote('playerPause');
    });
    jQuery('.page_overlay_link_medium').live('click', function(e){
        e.preventDefault();
        var params = {
            element     : jQuery(this),
            layer       : 'page_overlay',
            showloader  : true,
            totop       : true,
            addclass    : 'po_medium'
        };
        loadLayer(params);
        loadUserInfo();
        remote('playerPause');
    });
    jQuery('.page_overlay_form_large').live('submit', function(e){
        e.preventDefault();
        var params = {
            element     : jQuery(this),
            layer       : 'page_overlay',
            showloader  : true,
            totop       : true,
            addclass    : 'po_large'
        };
        loadLayer(params);
        loadUserInfo();
        remote('playerPause');
    });
    jQuery('.page_overlay_form_large input[type="submit"]').live('click', function(e){
        e.preventDefault();
        var params = {
            element     : jQuery(this).parents('form'),
            layer       : 'page_overlay',
            showloader  : true,
            totop       : true,
            addclass    : 'po_large'
        };
        loadLayer(params);
        loadUserInfo();
        remote('playerPause');
    });
    jQuery('.page_overlay_link_large, a.intern').live('click', function(e){
        e.preventDefault();
        var params = {
            element     : jQuery(this),
            layer       : 'page_overlay',
            showloader  : true,
            totop       : true,
            addclass    : 'po_large'
        };
        loadLayer(params);
        loadUserInfo();
        remote('playerPause');
    });
    
    // page overlay close ******************************************************
    jQuery('#page_overlay_close, .close_button').live('click', function(e){
        e.preventDefault();
        jQuery('#page_overlay').fadeOut('fast');
        jQuery('#page_overlay').html('');
        loadUserInfo();
    });
    
    // contactform layer *******************************************************
    jQuery('#contact_form').live('submit', function(e){
        e.preventDefault();
        var params = {
            element         : jQuery(this),
            layer           : 'contactform'
        };
        loadLayer(params);
    });
    jQuery('#contact_submit').live('click', function(e){
        e.preventDefault();
        var params = {
            element         : jQuery(this).parents('form'),
            layer           : 'contactform'
        };
        loadLayer(params);
    });
    
    // bank account layer ******************************************************
    jQuery('#abo_type').livequery('change', function(e) {
        e.preventDefault();
        toggleAboType(this);

    });

    jQuery('#abo_type').live('click', function(e) {
        e.preventDefault();
        toggleAboType(this);
    });

    function toggleAboType(container)
    {
        if(container.value == 0){
            jQuery('#payment, #coupon, #member_abo').hide();
        }
        else if(container.value == -1){
            jQuery('#payment, #member_abo').hide();
            jQuery('#coupon').show();
        }
        else if(container.value < -1){
            jQuery('#coupon').hide();
            jQuery('#payment, #member_abo').show();
        }
        else{
            jQuery('#coupon, #member_abo').hide();
            jQuery('#payment').show();
        }
    }

    jQuery('#payment_type').livequery('change', function(e){
        e.preventDefault();
        togglePaymentType(this);
    });

    jQuery('#payment_type').live('click', function(e){
        e.preventDefault();
        togglePaymentType(this);
    });

    function togglePaymentType(container)
    {
        switch (container.value) {
            case 'bank':
                jQuery('#credit_card').hide();
                jQuery('#bank').show();
                break;
            case 'cc':
                jQuery('#bank').hide();
                jQuery('#credit_card').show();
                break;
        }
    }

    // search fulltext layer ***************************************************
    jQuery('#search_form').live('submit', function(e){
        e.preventDefault();
        jQuery('#page_overlay').fadeOut('fast');
        var params = {
            element     : jQuery(this),
            layer       : 'teaser',
            showloader  : true,
            tobottom    : true
        };
        loadLayer(params);
    });
    jQuery('#search_submit').live('click', function(e){
        e.preventDefault();
        jQuery('#page_overlay').fadeOut('fast');
        var params = {
            element     : jQuery(this).parents('form'),
            layer       : 'teaser',
            showloader  : true,
            tobottom    : true
        };
        loadLayer(params);
    });
    
    // search match layer ***************************************************
    jQuery('.search_match').live('click', function(e){
        e.preventDefault();
        jQuery('#page_overlay').fadeOut('fast');
        var params = {
            element     : jQuery(this),
            layer       : 'teaser',
            showloader  : true,
            tobottom    : true
        };
        loadLayer(params);
    });
    
    // search match overlay ****************************************************
    jQuery('.search_match_overlay').live('click', function(e){
        e.preventDefault();
        jQuery('#page_overlay').fadeOut('fast');
        //jQuery('#search_match_overlay').slideToggle('fast');
        var params = {
            element     : jQuery(this),
            layer       : 'search_match_overlay',
            showloader  : true
        };
        loadLayer(params);
    });
    jQuery('.search_match_overlay_close').live('click', function(e){
        e.preventDefault();
        jQuery('#page_overlay').fadeOut('fast');
        jQuery('#search_match_overlay').fadeOut('fast');
    });
    
    // form input value reset **************************************************
    jQuery('.reset').live('focus', function(e){
        e.preventDefault();
        jQuery(this).attr('value', '');
    });
    
    // videolist layer *********************************************************
    jQuery('.teaser').live('click', function(e){
        e.preventDefault();
        var params = {
            element     : jQuery(this),
            layer       : 'teaser',
            showloader  : true
        };
        loadLayer(params);
    });
    
    // tooltip z-index *********************************************************
    jQuery('.tooltip_trigger').live('mouseover', function(e){
        e.preventDefault();
        var x = Math.floor(jQuery(this).offset().left - jQuery('#search_match_overlay').offset().left)+5;
        var y = -55;

        jQuery('#club_tooltip').css('display', 'none');
        jQuery('#club_tooltip').html(jQuery(this).siblings('div').html());
        jQuery('#club_tooltip').animate({left:x, top:y}, 0);
        jQuery('#club_tooltip').css('display', 'block');
    })
    jQuery('.tooltip_trigger').live('mouseout', function(e){
        e.preventDefault();
        jQuery('#club_tooltip').css('display', 'none');
        jQuery('#club_tooltip').html('');
    })
    jQuery('.tooltip_item, #club_tooltip').live('mouseover', function(e){
        e.preventDefault();
        
        jQuery(this).addClass('ontop'); // ie6 convinience to set the tooltip ontop
        jQuery('#playlist').addClass('belowtop'); // ie6 convinience to set the search belowtop
    });
    jQuery('.tooltip_item, #club_tooltip').live('mouseout', function(e){
        e.preventDefault();
        jQuery('#playlist').removeClass('belowtop'); // ie6 convinience to reset belowtop
        jQuery(this).removeClass('ontop'); // ie6 convinience to reset ontop
    });
    
    // client injections *******************************************************
    if (jQuery('meta[name="portal.client"]').attr('content') === 'fcn') {
        jQuery('#header').append('<div class="top_banner"><div class="kulmbacher_top_text">präsentiert von</div><div class="kulmbacher_top_logo" title="Kulmbacher"></div></div>');
        jQuery('.kulmbacher_top_logo').live('click', function (e){
            e.preventDefault();
            window.open('http://www.kulmbacher.biz');
        });
        
        jQuery('#page').append('<div class="bottom_banner"><div class="ligatotal" title="Liga Total">In Kooperation mit</div><div class="kulmbacher_bottom_logo" title="Kulmbacher"></div></div>');
        jQuery('.ligatotal').live('click', function (e){
            e.preventDefault();
            window.open('http://www.liga-total.de');
        });
        jQuery('.kulmbacher_bottom_logo').live('click', function (e){
            e.preventDefault();
            window.open('http://www.kulmbacher.biz');
        });
    }
});

// loader functions ************************************************************
function loadUserInfo() {
    setTimeout(function(){
        var params = {
            target  : jQuery('#welcome'),
            layer   : 'welcome',
            url     : jQuery('meta[name="user.info"]').attr('content'),
            method  : 'get'
        };
        processLayer(params);
    }, 600);
}

function hideLoader()
{
    jQuery('#loader').addClass('hide');
}

function loadLayer(params) {
    params.target  = jQuery('#'+params.layer);
    // extract loading informations
    if(params.element.attr('href') !== undefined && params.element.attr('href') !== '') {
        params.url      = params.element.attr('href');
        params.method   = 'get';
    }else if(params.element.attr('action') !== undefined && params.element.attr('action') !== '') {
        params.form     = params.element;
        params.url      = params.form.attr('action');
        params.method   = params.form.attr('method');
    }else if(params.element.attr('name') != undefined && params.element.attr('name') !== '') {
        params.form     = jQuery(params.element.attr('name'));
        params.url      = params.form.attr('action');
        params.method   = params.form.attr('method');
    }
    
    // switch to payone if payment is cc
    if (
        params.form !== undefined
        && params.form.attr('name') == 'bank_form'
        && jQuery('#payment_type').attr('value') === 'cc'
        && jQuery('#abo_type').attr('value') !== '-1'
        && jQuery('#abo_type').attr('value') !== '0'
    ) {
        var datearray   = jQuery('#credit_card_valid_to').attr('value').split('.');
        var mon         = datearray[0];
        var year        = datearray[1];
        var data        = {
            cardholder      : jQuery('#credit_card_owner').attr('value'),
            cardpan         : jQuery('#credit_card_number').attr('value'),
            cardtype        : jQuery('#credit_card_type').attr('value'),
            cardexpiremonth : mon,
            cardexpireyear  : year,
            cardcvc2        : jQuery('#credit_card_sec_number').attr('value'),
            request         : jQuery('#cc_request').attr('value'),
            mode            : jQuery('#mode').attr('value'),
            mid             : jQuery('#mid').attr('value'),
            aid             : jQuery('#aid').attr('value'),
            portalid        : jQuery('#portalid').attr('value'),
            encoding        : jQuery('#encoding').attr('value'),
            storecarddata   : jQuery('#storecarddata').attr('value'),
            language        : jQuery('#language').attr('value'),
            hash            : jQuery('#cc_hash').attr('value')
        }
        requestPayone(data, 'processPayoneResponseCC');
    } else if (
        params.form !== undefined
        && params.form.attr('name') == 'bank_form'
        && jQuery('#payment_type').attr('value') === 'bank'
        && jQuery('#abo_type').attr('value') !== '-1'
        && jQuery('#abo_type').attr('value') !== '0'
    ) {
        var data        = {
            bankaccount     : jQuery('#bank_account_number').attr('value'),
            bankcode        : jQuery('#bank_code').attr('value'),
            bankcountry     : 'DE',
            request         : jQuery('#ba_request').attr('value'),
            checktype       : jQuery('#checktype').attr('value'),
            mode            : jQuery('#mode').attr('value'),
            mid             : jQuery('#mid').attr('value'),
            aid             : jQuery('#aid').attr('value'),
            portalid        : jQuery('#portalid').attr('value'),
            encoding        : jQuery('#encoding').attr('value'),
            language        : jQuery('#language').attr('value'),
            hash            : jQuery('#ba_hash').attr('value')
        }
        requestPayone(data, 'processPayoneResponseBank');
    } else {
        processLayer(params);
    }
}

// do layer loading *******************************************************************************
function processLayer(params) {
    var html = '';

    // load deeplink if its a secure url and we already not at that url
    // secure-clubtv.tvnext.tv
    if(params.url.search(/secure/i) > 0 && window.location.hostname.search(/secure/i) === -1)
    {
        window.location.replace(params.url);
        return;
    }
    
    // move browser window to top
    if(params.totop !== undefined && params.totop === true) {
        jQuery('html, body').animate({scrollTop:0}, 0);
    }
    // move browser window to bottom
    if(params.tobottom !== undefined && params.tobottom === true) {
        jQuery('html, body').animate({scrollTop: jQuery('body').attr('scrollHeight')}, 0);
    }
    // append given uri param
    if(params.uri_append !== undefined && params.uri_append !== null) {
        params.url = params.url+params.uri_append;
    }
    // show loading info
    if(params.showloader !== undefined && params.showloader === true) {
        jQuery('#loader').removeClass('hide');
    }
    // remove certain class
    if(params.removeclass !== undefined && params.removeclass !== null) {
        params.target.removeClass(params.removeclass);
    }
    // add certain class
    if(params.addclass !== undefined && params.addclass !== null) {
        params.target.removeClass('po_small po_medium po_large');
        params.target.addClass(params.addclass);
    }
    // inect close button
    if (params.layer === 'page_overlay') {
        html += '<a href="'+jQuery('meta[name="index"]').attr('content')+'" id="page_overlay_close" class="close cursor" title="Fenster schliessen">Schliessen</a>';
    }
    
    // method switch
    if(params.method == 'get'){
        jQuery.get(params.url, { 'ajax': 1 }, function(data) {
            html += data;
            params.target.html(html);

            if (params.showloader !== undefined && params.showloader === true)
            {
                hideLoader();
            }
        });
    }else if(params.method == 'post'){
        jQuery.post(params.url, params.form.serialize(), function(data) {
            html += data;
            params.target.html(html);

            if (params.showloader !== undefined && params.showloader === true) 
            {
                hideLoader();
            }
        });
    }
    params.target.fadeIn('fast');
}

// call payone api ********************************************************************************
function requestPayone(data, callback) {
    var options = {
        return_type : 'object',
        callback_function_name : callback
    }
    var request = new PayoneRequest(data, options);
    request.checkAndStore();
}

// payment functions ***********************************************************
function processPayoneResponseBank(response) {
    if (response.get('status') == 'VALID') {
        var element = jQuery('#bank_form');
        var params = {
            target      : jQuery('#page_overlay'),
            element     : element,
            layer       : 'page_overlay',
            showloader  : true,
            totop       : true,
            addclass    : 'po_medium',
            form        : element,
            url         : element.attr('action'),
            method      : element.attr('method')
        }
        // finally send the form
        processLayer(params);
    }
    else {
        alert(response.get('customermessage'));
    }
}

// payment functions ***********************************************************
function processPayoneResponseCC(response) {
    if (response.get('status') == 'VALID') {
        // reset cc values we are not allowed to save
        jQuery('#credit_card_number').attr('value', response.get('truncatedcardpan')); // for further usage (masked cc number)
        jQuery('#pseudocardpan').attr('value', response.get('pseudocardpan')); // for further usage (cc identifier)
        var element = jQuery('#bank_form');
        var params = {
            target      : jQuery('#page_overlay'),
            element     : element,
            layer       : 'page_overlay',
            showloader  : true,
            totop       : true,
            addclass    : 'po_medium',
            form        : element,
            url         : element.attr('action'),
            method      : element.attr('method')
        }
        // finally send the form
        processLayer(params);
    }
    else {
        alert(response.get('customermessage'));
    }
}



