function onSilverlightError(sender, args){
    var appSource = "";
    if (sender != null && sender != 0) {
        appSource = sender.getHost().Source;
    }
    function sendReplayEvent(){
    }
    var errorType = args.ErrorType;
    var iErrorCode = args.ErrorCode;
    if (errorType == "ImageError" || errorType == "MediaError") {
        return;
    }
    var errMsg = "Unhandled Error in Silverlight Application " + appSource + "\n";
    errMsg += "Code: " + iErrorCode + "    \n";
    errMsg += "Category: " + errorType + "       \n";
    errMsg += "Message: " + args.ErrorMessage + "     \n";
    if (errorType == "ParserError") {
        errMsg += "File: " + args.xamlFile + "     \n";
        errMsg += "Line: " + args.lineNumber + "     \n";
        errMsg += "Position: " + args.charPosition + "     \n";
    }
    else 
        if (errorType == "RuntimeError") {
            if (args.lineNumber != 0) {
                errMsg += "Line: " + args.lineNumber + "     \n";
                errMsg += "Position: " + args.charPosition + "     \n";
            }
            errMsg += "MethodName: " + args.methodName + "     \n";
        }
    throw new Error(errMsg);
}

function showToolTip(contentId, positionLeft){
    show_tooltip($('#silverlightControlHost'), _www_url + '/catalogo/play/' + contentId, contentId, positionLeft);
    $('#silverlightControlHost').qtip('show');
}

function mouseLeave(){
}

function locandinaMouseLeave(){
    //alert("Locandina Mouse Leave");
}

function locandinaMouseEnter(contentId){
    if ($('.tooltipSL').length > 0) {
        if ($('.tooltipSL .tooltip_content_top a').attr('href').split('/')[$('.tooltipSL .tooltip_content_top a').attr('href').split('/').length - 1] != contentId) {
            $('#silverlightControlHost').qtip('hide');
        }
    }
    //alert("Locandina Mouse Enter: " + contentId);
}

function frecciaSxMouseEnter(){
    $('#silverlightControlHost').qtip('hide');
    document.getElementById("Rullo").Content.ScriptableObject.RulloStop();
    document.getElementById("Rullo").Content.ScriptableObject.RulloPlayFrecce();
    //alert("Freccia Sinistra Mouse Enter");
}

function frecciaSxMouseLeave(){
    //alert("Freccia Sinistra Mouse Leave");
}

function frecciaDxMouseEnter(){
    $('#silverlightControlHost').qtip('hide');
    document.getElementById("Rullo").Content.ScriptableObject.RulloStop();
    document.getElementById("Rullo").Content.ScriptableObject.RulloPlayFrecce();
    //alert("Freccia Destra Mouse Enter");
}

function frecciaDxMouseLeave(){
    //alert("Freccia Destra Mouse Leave");
}

function slMouseEnter(){
    //alert("SilverLight Mouse Enter");
}

function slMouseLeave(){
    //alert("SilverLight Mouse Leave");
}

$(document).ready(function(){
    $('.rulloNewsContainer').live('mouseleave', function(){
        if ($('.tooltipSL').length == 0) {
            document.getElementById("Rullo").Content.ScriptableObject.RulloPlay();
        }
    })
});


var slPlayer;
function onSLLoad(sender){
    slPlayer = sender.getHost().Content;
}



function getPlaylist(){
    //return '<?xml version="1.0" encoding="utf-8"?><video><id>160284</id><type>clip</type><episode-number/><episode-type/><brand>uominiedonne</brand><subbrand>uominiedonne/puntata</subbrand><season>uominiedonne/2009_2010</season><production-date>22/03/2010</production-date><expire-date>31/12/9999</expire-date><title>Mꯡge ࡴrois</title><short-description>Marcelo ha un enorme problema: la sua bella Rajaa 衴acciata da Mariana di avere una relazione con il suo convivente...</short-description><long-description/><duration>00:07:51</duration><thumbnail>/uominiedonne/284/160284/C_2_video_160284_videoThumbnail.jpg</thumbnail><essences><essence type="video-f4v"/><essence type="video-wmv"/></essences><brand-info ads="true" area="intrattenimento" category="intrattenimento" subbrand="puntata"><geoconstraints><gloc_allow>*</gloc_allow><gloc_deny/></geoconstraints><brand-description>Uomini e Donne</brand-description><logo>/bin/955.$plit/C_2_brandInfo_49_upiLogo.png</logo><link/><copyright/><networks><network><network-logo>/res/img/loghi/canale5.png</network-logo><airtime>lun - ven ore 14:45</airtime></network></networks></brand-info><visto>24367</visto><rating stars="4" voti="64"/></video>';
    return '<video>\n' +
    '<id>160284</id>\n' +
    '<id_vod>160284</id_vod>\n' +
    '<parental-control>G</parental-control>\n' +
    '<title>Dr House</title>\n' +
    '<typology>SERIETV</typology>\n' +
    '<category>DR HOUSE</category>\n' +
    '<subcategory>STAGIONE 6</subcategory>\n' +
    '<essence type="video-wmv" />\n' +
    '<duration>00:07:51</duration>\n' +
    '<long-description/>\n' +
    '<package>Gallery</package>\n' +
    '<encrypt>N</encrypt>\n' +
    '<id_subscription>12</id_subscription>\n' +
    '<content_type>VOD</content_type>\n' +
    '</video>';
}

var beApiBaseUrl = JSON_DOMAIN;
var beApiSetFavoritesUrl = "SetFavorite";
var beApiIsFavoriteUrl = "GetIsFavoriteContent";
var beApiStopContentUrl = "StopContent";
var beApiGetContentDetailsUrl = "GetContentDetails";
var beApiCheckContentsRightsUrl = "CheckContentRights";
var localCh = "PCTV";
var cookieKey = "pctv_fa_cookie";


function addToFavorites(){
    var apiResponse = SetFavorites("Y");
    if (apiResponse.resultCode == 'OK') 
        MDS.user.incFav();
    return createResponseXml(apiResponse.resultCode, apiResponse.message);
}

function removeFromFavorites(){
    var apiResponse = SetFavorites("N");
    if (apiResponse.resultCode == 'OK') 
        MDS.user.delFav();
    return createResponseXml(apiResponse.resultCode, apiResponse.message);
}

function SetFavorites(isFav){
    if (content && content.contentId) {
        var setFavoritesUrl = beApiBaseUrl + beApiSetFavoritesUrl;
        pars = new Array();
        pars[0] = "contentId";
        pars[1] = "isFavorite";
        pars[2] = "channel";
        vals = new Array();
        vals[0] = content.contentId;
        vals[1] = isFav;
        vals[2] = localCh;
        return doPost(setFavoritesUrl, pars, vals);
    } else {
        return getGenericErrorJson();
    }
}


function isFavorite(){
    if (content && content.contentId) {
        var isFavoriteUrl = beApiBaseUrl + beApiIsFavoriteUrl;
        pars = new Array();
        pars[0] = "contentId";
        pars[1] = "channel";
        vals = new Array();
        vals[0] = content.contentId;
        vals[1] = localCh;

        var jsonResponse = doPost(isFavoriteUrl, pars, vals);
        
        if (jsonResponse.resultCode.toUpperCase() == "OK") {
            return true;
        }
        else {
            return false;
        }
    }
    else {
        return false;
    }
    
}

function sendStopEvent(loop){
    if (loop == undefined) 
        loop = true;
    if (checkUserLogged()) {
        var apiResponse;
        var sendStopEventUrl = beApiBaseUrl + beApiStopContentUrl;
        if (slPlayer && content && content.contentId && content.type) {
            pars = new Array();
            pars[0] = "contentId";
            pars[1] = "type";
            if (window.section) 
                pars[2] = "section";
            pars[3] = "bookmark";
            pars[4] = "deltaThreshold";
            pars[5] = "channel";
            
            vals = new Array();
            vals[0] = content.contentId;
            
            // controllo se promo o extra e passo alla stopContent il valore corretto per non contarlo nei tempi di visione
            if (window.contentRights && contentRights.resultCode == 'OK' && !window.extraId) {
                vals[1] = (loopContents && loop) ? 'VLC' : content.type;
            }
            else 
                if (window.extraId) {
                    vals[1] = 'EXTRA';
                }
                else 
                    if (contentRights.resultCode == 'KO') {
                        vals[1] = 'PROMO';
                    }
            
            if (window.section) 
                vals[2] = getQueryVariable("section");
            try {
              var bookmark = slPlayer.mpPageBridge.getBookmark();
              vals[3] = bookmark;
              if (window.contentRights && contentRights.resultCode == 'OK') {
                var percent = (bookmark == 0) ? 100 : (Math.round((bookmark*100)/content.duration));
                MDS.bookmarks.setContentFruition(content.contentId,percent);
              }
              vals[4] = slPlayer.mpPageBridge.getDeltaThreshold();
            } 
            catch (e) {
                vals[3] = 0;
                vals[4] = 0;
            }
            vals[5] = localCh;
            
            apiResponse = doPost(sendStopEventUrl, pars, vals);
            
            if (loopContents && loop) {
                slPlayer = {};
                content = {};
                if (($.inArray($('#extracontainer li.selected').get(0), $('#extracontainer li')) + 1) % 6 == 0) 
                    $('#extracontainer .jcarousel-next').click();
                if ($('#extracontainer li.selected').next().find('a').size()) {
                    $('#extracontainer li.selected').next().find('a').click();
                }
                else {
                    extraCarousel.carousel.scroll(0);
                    $('#extracontainer li:first').find('a').click();
                }
            }
            
        }
        else {
            // fallback in caso il player non sia istanziato faccio partire la stopContent
            pars = new Array();
            pars[0] = "contentId";
            pars[1] = "type";
            if (window.section) 
                pars[2] = "section";
            pars[3] = "bookmark";
            pars[4] = "deltaThreshold";
            pars[5] = "channel";
            
            vals = new Array();
            vals[0] = content.contentId;
            
            // controllo se promo o extra e passo alla stopContent il valore corretto per non contarlo nei tempi di visione
            
            
            vals[1] = 'LIVE';
            if (window.section) 
                vals[2] = getQueryVariable("section");
            if (contentRights && contentRights.resultObj && contentRights.resultObj.bookmark) {
                vals[3] = contentRights.resultObj.bookmark;
            }
            else {
                vals[3] = 0;
            }
            vals[4] = 0;
            vals[5] = localCh;
            
            apiResponse = doPost(sendStopEventUrl, pars, vals);
            
            //var apiResponse = getGenericErrorJson();
        }
        
        var responseSC;
        try {
            responseSC = createResponseXml(apiResponse.resultCode, apiResponse.message);
        } 
        catch (e) {
            log('StopContent non valida ->');
            log(apiResponse);
            responseSC = getGenericErrorJson();
        }
        
        return responseSC;
    }
    else {
        return false;
    }
}

function doPost(postUrl, params, values){
    var paramsString = "";
    try {
        if (params && params.length > 0 && values && values.length > 0) {
        
            for (var i = 0; i < params.length; i++) {
                paramsString += params[i] + "=" + values[i] + "&";
            }
            
            paramsString = paramsString.substring(0, paramsString.length - 1);
        }
        var jsonStringResponse = $.ajax({
            type: "POST",
            url: postUrl,
            data: paramsString,
            async: false,
            dataType: 'text'
        }).responseText;
        
        return jQuery.parseJSON(jsonStringResponse);
        
    } 
    catch (e) {
        return getGenericErrorJson();
    }
}

function getStartTime(){
    if (bookmark) 
        return parseFloat(bookmark);
    else {
        return 0;
    }
}



function isLogged(){
    var allCookies = document.cookie.split(';');
    var tempCookie = '';
    var cookieName = cookieKey;
    var cookieFound = false;
    
    for (i = 0; i < allCookies.length; i++) {
    
        tempCookie = allCookies[i].split('=');
        
        //currCookieName = tempCookie[0];
        currCookieName = tempCookie[0].replace(/^\s+|\s+$/g, '');
        
        if (currCookieName == cookieName) {
            return 1;
        }
    }
    
    return 0;
}


function getCookie(){
    var allCookies = document.cookie.split(';');
    var tempCookie = '';
    var cookieName = cookieKey;
    var currCookieName = '';
    var cookieValue = '';
    var cookieFound = false;
    
    for (i = 0; i < allCookies.length; i++) {
    
        tempCookie = allCookies[i].split('=');
        
        currCookieName = tempCookie[0].replace(/^\s+|\s+$/g, '');
        //currCookieName = tempCookie[0];        
        
        if (currCookieName == cookieName) {
            cookieFound = true;
            
            if (tempCookie.length > 1) {
                //cookieValue = tempCookie[1];            
                cookieValue = unescape(tempCookie[1].replace(/^\s+|\s+$/g, ''));
            }
            
            return cookieValue;
        }
        
        tempCookie = null;
        currCookieName = '';
    }
    
    return cookieValue;
}


function createResponseXml(result, message){
    var resp = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
    resp += "<response>";
    resp += "<result>";
    resp += result;
    resp += "</result>";
    resp += "<message>";
    resp += message;
    resp += "</message>";
    resp += "</response>";
    return resp;
}

function getGenericErrorJson(){
    var errorJsonString = "{\"resultCode\":\"KO\",\"message\":\"Unable to complete the request\"}";
    return jQuery.parseJSON(errorJsonString);
}

function getQueryVariable(variable){
    var query = window.location.search.substring(1);
    var vars = query.split("&");
    for (var i = 0; i < vars.length; i++) {
        var pair = vars[i].split("=");
        if (pair[0] == variable) {
            return pair[1];
        }
    }
    return "CATALOGUE";
}

// player volume
var defaultVolume = 0.6;
function getInitialVolume(){
    if ($.cookie('v', {
        path: '/'
    })) {
        return parseFloat($.cookie('v', {
            path: '/'
        }));
    }
    else {
        $.cookie('v', defaultVolume, {
            path: '/'
        });
        return defaultVolume;
    }
}

function setVolume(v){
    $.cookie('v', v, {
        path: '/'
    });
}

// controllo fruizione
function getTokenKey(){
    if (isLogged()) {
        return $.parseJSON($.ajax({
            url: JSON_DOMAIN + 'checkUser',
            async: false,
            dataType: 'json'
        }).responseText).resultObj.token;
    }
    else {
        return 0;
    }
}

// Trailer ON/OFF
// variabile defaultTrailer settata nel config.js
function getStateTrailer(){
    if ($.cookie('trailer', {
        path: '/'
    })) {
        return ($.cookie('trailer', {
            path: '/'
        }) === "true") ? true : false;
    }
    else {
        setStateTrailer(DEFAULT_TRAILER);
        return DEFAULT_TRAILER;
    }
}

function setStateTrailer(_stateTrailer){ //boolean
    var trailerExp = new Date();
    trailerExp.setFullYear(trailerExp.getFullYear() + 1);
    $.cookie('trailer', _stateTrailer, {
        path: '/',
        expires: trailerExp
    });
}

function getJSONDOMAIN(){
    return JSON_DOMAIN;
}

