var g_protocols="bsh,Bubble Shopping,application/x-bubbleshopping;ash,Alertes Shopping.com,application/x-alertesshopping.com";
var g_desktopApps;
function detectDesktopApps() {

    g_desktopApps={};

    var allProtocols=[];
    var rows=g_protocols.split(/;/);
    for(var i=0; i<rows.length; i++) {
        var x=rows[i].split(/,/)
        allProtocols.push([x[0],x[1],x[2]]);
    }

    var isFirefox = !((navigator.userAgent.indexOf('Win')!= -1) && (navigator.userAgent.indexOf('MSIE')!=-1) && (parseInt(navigator.appVersion) >= 4))
    function isProtocolSupported(p) {                
        if( isFirefox ) {
            return typeof(navigator.mimeTypes[p[2]]) == "object";
        } else {
            try {
                var axo = new ActiveXObject("Livesticker.Infos");
                axo.productName = p[1];
                var sVersion = axo.version; 
                return (sVersion != "") ;
            } catch (e) {
                return false;
            }
        }
        return false;
    }

    var p;
    while(p=allProtocols.shift()) {
        if(isProtocolSupported(p)) {                        
            g_desktopApps[p[1]]=p[0];
        }
    }
}

function getProtocol(appName) {
    if((navigator.userAgent.indexOf('Safari')!=-1) || (navigator.userAgent.indexOf('Opera')!=-1)) {
        return;
    }

    detectDesktopApps();

    return g_desktopApps[appName];
}


var body=$("body");
sticker = {
    directory: "",
    setBody: function( stuff ) {$( document.body ).empty().append( stuff )},
    createElement: function( nodeName ) {return document.createElement( nodeName )},
    createTextNode: function( nodeValue ) {return document.createTextNode( nodeValue )},
    getValue: function( name ) {if ( typeof( $.cookie ) != "undefined" && $.cookie(name) ) { return $.cookie(name) } else {if ( typeof (window[name]) != "undefined" ) return window[name];}},
    getConfig: function( key ){ return window.STICKERCONFIG && STICKERCONFIG[ key ]; },
    setTitle: function( title ){},
    displayBody: function(){ sticker.onLoad(); },
    setWidth: function(){},
    callbacks: {},
    getText: function(str){ return str; },
    setResizable: function(b){},
    setIcon:function(src) {},
    setLink:function(url) {},
    setValue:function(n,v) {
        var c_path = g_cookie_path || "/";
        var c_domain = g_cookie_domain || "";
        if ( typeof ( $.cookie ) != "undefined" ) { if (! v ) { $.cookie(n,null, { "expires": -1, "path": c_path, "domain": c_domain }) } else {$.cookie(n,v, { "expires": 1000, "path": c_path, "domain": c_domain })} } else { window[n] = v } },
    displayLoading:function() {},
    setRefresh:function(s) {},
    body:$("body"),
    lang:function() {if ( typeof (window.lang) != "undefined" ) return window.lang;},
    type:self.type,
    id:self.id,
    resizeTo:function(w,h){ /* MyRss 2.0 if(self.isWindowsSticker) window.external.resizeTo(w,h); */},
    moveTo:function(x,y) { /* MyRss 2.0if(self.isWindowsSticker) window.external.moveTo(x,y); */},
    directory:"",
    setCounter:function(int) {},
    clearCounter:function() {},
    close:function(o){}
};

my =
{
    sticker: sticker,
    xpath: function( nameSpaces )
    {
        var nsResolver, selectionNamespaces;
        if( nameSpaces )
        {
            nsResolver = function( ns )
            {
                return nameSpaces[ ns ];
            };

            var tmp = [];
            for( var ns in nameSpaces )
            {
                tmp.push( 'xmlns:' + ns + '="' + nameSpaces[ ns ] + '"' );
            }
            var selectionNamespaces = tmp.join( " " );
        }

        function __evaluate( xmlNode, xpathExpression, resultType )
        {
            // XPathEvaluator is implemented on objects that implement Document
            var xpe = xmlNode.ownerDocument || xmlNode;
            return xpe.evaluate( xpathExpression, xmlNode,
                nsResolver || xpe.createNSResolver( xpe.documentElement ), resultType, null);
        };

        function __setSelectionNamespaces( xmlNode )
        {
            ( xmlNode.ownerDocument || xmlNode ).setProperty( "SelectionNamespaces", selectionNamespaces );
        };

        return {
            selectSingleNode: function( xmlNode, xpathExpression )
            {
                try
                {
                    var result = __evaluate( xmlNode, xpathExpression, XPathResult.FIRST_ORDERED_NODE_TYPE );
                    return result && result.singleNodeValue;
                }
                catch( e )
                {
                    __setSelectionNamespaces( xmlNode );
                    return xmlNode.selectSingleNode( xpathExpression );
                }
            },
            selectNodes: function( xmlNode, xpathExpression )
            {
                try
                {
                    var result = __evaluate( xmlNode, xpathExpression, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE  );
                    var ret = [];
                    for( var i=0; i<result.snapshotLength; i++ )
                    {
                        ret.push( result.snapshotItem( i ) );
                    }
                    return ret;
                }
                catch( e )
                {
                    __setSelectionNamespaces( xmlNode );
                    return xmlNode.selectNodes( xpathExpression );
                }
            }
        }
    },
    network: {
        getType:function( url, type, cb ) {
            var host = url.match( /^[^:\/]+:\/+([^\/]+)/ );
            if( host && host[ 1 ]!=location.host )
            {
                url = "/proxy/url.php?targeturl=" + encodeURIComponent( url );
            }
            window.console && console.log( 'host: "' + host[ 1 ] + '"' );
            var args = {
                url: url,
                success: cb.onSuccess || cb,
                error: function(xhr){ cb.onFailure( xhr.status ); },
                dataType: type,
                timeout: 30 * 1000  //30 secondes par défaut
            };

            $.ajax( args );
        },
        getText:function(url, cb) {
            return this.getType( url, "text", cb );
        },
        getJSON:function(url, cb) {
            return this.getType( url, "json", cb );
        },
        getXML:function(url, cb) {
            return this.getType( url, "xml", cb );
        }
    },
    sentinel: function(){ return null; },
    sentinels: function(){ return {}; },
    browser: {
        openURL: function( url ){ window.open( url ); }
    },
    platform:{
        name:"dummy",
        support:function(x) {
            return false;
        },
        preferedWidth:400
    },
    desktop:{
        callApp:function(application, message, params) {
            var protocol=getProtocol(application);
            if(protocol==undefined)
                return;

            var paramsAry=[];
            for(var i in params) {
                if(typeof(params[i])=="string" || typeof(params[i])=="number")
                    paramsAry.push(encodeURIComponent(i)+"="+encodeURIComponent(params[i]));
            }
            window.location.href = (protocol+"://"+message+"?"+paramsAry.join("&"));
            //window.navigate(protocol+"://"+message+"?"+paramsAry.join("&"));
        },
        callSticker:function(application, stickerID, methodName, params) {
            var args={};
            args.stickerID=stickerID;
            args.methodName=methodName;
            for(var i in params)
                args[i]=params[i];
            
            this.callApp(application, "my.desktop.callSticker", args);
        },
        hasApp:function(appName) {
            detectDesktopApps();

            return g_desktopApps[appName]!=undefined;
        }
    }
};

my.xpath.escape = function( str )
{
    var strparts = [];
    
    while( true )
    {
        var qindex = str.indexOf( "'" );
        var dqindex = str.indexOf( '"' );
        if( qindex == -1 )
        {
            strparts.push( "'" + str + "'" );
            break;
        }
        if( dqindex == -1 )
        {
            strparts.push( '"' + str + '"' );
            break;
        }
        if( dqindex > qindex )
        {
            strparts.push( '"' + str.slice( 0, dqindex ) + '"' );
            str = str.slice( dqindex );
        }
        else
        {
            strparts.push( "'" + str.slice( 0, qindex ) + "'" );
            str = str.slice( qindex );
        }
    }
    return ( strparts.length > 1 )
        ? "concat(" + strparts.join( "," ) + ")"
        : strparts[ 0 ];
};


function Trace_Debug( text ) {};

//alert( "hop:" + my.desktop.hasApp( "Bubble Shopping" ) );
//my.desktop.callSticker( "Bubble Shopping", "idf39170a160b140dda5d15e6370231a63", "search", {keyword:"\\'\""} );
