function resize_embed(el, width) {
   old_width = $(el).width();
   old_height = $(el).height();
   t = old_height * width;
   height = Math.round(t / old_width);
   obj = $(el).parent('object');
   if (obj) {
     obj.attr('width', width);
     obj.attr('height', height);
   }
   $(el).attr('width', width);
   $(el).attr('height', height);
}

$.postJSON = function(url, data, callback) {
    $.post(url, data, callback, "json");
};

/**
 * Object PHP_Serializer
 *  JavaScript to PHP serialize / unserialize class.
 * This class converts php variables to javascript and vice versa.
 * ---------------------------------------------
 * @author              Andrea Giammarchi
 */
function PHP_Serializer(UTF8) {

    /** public methods */
    function serialize(v) {
        // returns serialized var
        var s;
        switch(v) {
            case null:
                s = "N;";
                break;
            default:
                s = this[this.__sc2s(v)] ? this[this.__sc2s(v)](v) : this[this.__sc2s(__o)](v);
                break;
        };
        return s;
    };

    function unserialize(s) {
        // returns unserialized var from a php serialized string
        __c = 0;
        __s = s;
        return this[__s.substr(__c, 1)]();
    };

    function stringBytes(s) {
        // returns the php lenght of a string (chars, not bytes)
        return s.length;
    };

    function stringBytesUTF8(s) {
        // returns the php lenght of a string (bytes, not chars)
        var     c, b = 0,
            l = s.length;
        while(l) {
            c = s.charCodeAt(--l);
            b += (c < 128) ? 1 : ((c < 2048) ? 2 : ((c < 65536) ? 3 : 4));
        };
        return b;
    };

    /** private methods */
    function __sc2s(v) {
        return v.constructor.toString();
    };

    function __sc2sKonqueror(v) {
        var f;
        switch(typeof(v)) {
            case ("string" || v instanceof String):
                f = "__sString";
                break;
            case ("number" || v instanceof Number):
                f = "__sNumber";
                break;
            case ("boolean" || v instanceof Boolean):
                f = "__sBoolean";
                break;
            case ("function" || v instanceof Function):
                f = "__sFunction";
                break;
            default:
                f = (v instanceof Array) ? "__sArray" : "__sObject";
                break;
        };
        return f;
    };

    function __sNConstructor(c) {
        return (c === "[function]" || c === "(Internal Function)");
    };

    function __sCommonAO(v) {
        var b, n,
            a = 0,
            s = [];
        for(b in v) {
            n = v[b] == null;
            if(n || v[b].constructor != Function) {
                s[a] = [
                    (!isNaN(b) && parseInt(b).toString() === b ? this.__sNumber(b) : this.__sString(b)),
                    (n ? "N;" : this[this.__sc2s(v[b])] ? this[this.__sc2s(v[b])](v[b]) : this[this.__sc2s(__o)](v[b]))
                ].join("");
                ++a;
            };
        };
        return [a, s.join("")];
    };

    function __sBoolean(v) {
        return ["b:", (v ? "1" : "0"), ";"].join("");
    };

    function __sNumber(v) {
        var     s = v.toString();
        return (s.indexOf(".") < 0 ? ["i:", s, ";"] : ["d:", s, ";"]).join("");
    };

    function __sString(v) {
        return ["s:", v.length, ":\"", v, "\";"].join("");
    };

    function __sStringUTF8(v) {
        return ["s:", this.stringBytes(v), ":\"", v, "\";"].join("");
    };

    function __sArray(v) {
        var     s = this.__sCommonAO(v);
        return ["a:", s[0], ":{", s[1], "}"].join("");
    };

    function __sObject(v) {
        var     o = this.__sc2s(v),
            n = o.substr(__n, (o.indexOf("(") - __n)),
            s = this.__sCommonAO(v);
        return ["O:", this.stringBytes(n), ":\"", n, "\":", s[0], ":{", s[1], "}"].join("");
    };

    function __sObjectIE7(v) {
        var     o = this.__sc2s(v),
            n = o.substr(__n, (o.indexOf("(") - __n)),
            s = this.__sCommonAO(v);
        if(n.charAt(0) === " ")
            n = n.substring(1);
        return ["O:", this.stringBytes(n), ":\"", n, "\":", s[0], ":{", s[1], "}"].join("");
    };

    function __sObjectKonqueror(v) {
        var o = v.constructor.toString(),
            n = this.__sNConstructor(o) ? "Object" : o.substr(__n, (o.indexOf("(") - __n)),
            s = this.__sCommonAO(v);
        return ["O:", this.stringBytes(n), ":\"", n, "\":", s[0], ":{", s[1], "}"].join("");
    };

    function __sFunction(v) {
        return "";
    };

    function __uCommonAO(tmp) {
        var a, k;
        ++__c;
        a = __s.indexOf(":", ++__c);
        k = parseInt(__s.substr(__c, (a - __c))) + 1;
        __c = a + 2;
        while(--k)
            tmp[this[__s.substr(__c, 1)]()] = this[__s.substr(__c, 1)]();
        return tmp;
    };

    function __uBoolean() {
        var b = __s.substr((__c + 2), 1) === "1" ? true : false;
        __c += 4;
        return b;
    };

    function __uNumber() {
        var sli = __s.indexOf(";", (__c + 1)) - 2,
            n = Number(__s.substr((__c + 2), (sli - __c)));
        __c = sli + 3;
        return n;
    };

    function __uStringUTF8() {
        var     c, sls, sli, vls,
            pos = 0;
        __c += 2;
        sls = __s.substr(__c, (__s.indexOf(":", __c) - __c));
        sli = parseInt(sls);
        vls = sls = __c + sls.length + 2;
        while(sli) {
            c = __s.charCodeAt(vls);
            pos += (c < 128) ? 1 : ((c < 2048) ? 2 : ((c < 65536) ? 3 : 4));
            ++vls;
            if(pos === sli)
                sli = 0;
        };
        pos = (vls - sls);
        __c = sls + pos + 2;
        return __s.substr(sls, pos);
    };

    function __uString() {
        var     sls, sli;
        __c += 2;
        sls = __s.substr(__c, (__s.indexOf(":", __c) - __c));
        sli = parseInt(sls);
        sls = __c + sls.length + 2;
        __c = sls + sli + 2;
        return __s.substr(sls, sli);
    };

    function __uArray() {
        var a = this.__uCommonAO([]);
        ++__c;
        return a;
    };

    function __uObject() {
        var     tmp = ["s", __s.substr(++__c, (__s.indexOf(":", (__c + 3)) - __c))].join(""),
            a = tmp.indexOf("\""),
            l = tmp.length - 2,
            o = tmp.substr((a + 1), (l - a));
        if(eval(["typeof(", o, ") === 'undefined'"].join("")))
            eval(["function ", o, "(){};"].join(""));
        __c += l;
        eval(["tmp = this.__uCommonAO(new ", o, "());"].join(""));
        ++__c;
        return tmp;
    };

    function __uNull() {
        __c += 2;
        return null;
    };

    function __constructorCutLength() {
        function ie7bugCheck(){};
        var o1 = new ie7bugCheck(),
            o2 = new Object(),
            c1 = __sc2s(o1),
            c2 = __sc2s(o2);
        if(c1.charAt(0) !== c2.charAt(0))
            __ie7 = true;
        return (__ie7 || c2.indexOf("(") !== 16) ? 9 : 10;
    };

    /** private variables */
    var     __c = 0,
        __ie7 = false,
        __b = __sNConstructor(__c.constructor.toString()),
        __n = __b ? 9 : __constructorCutLength(),
        __s = "",
        __a = [],
        __o = {},
        __f = function(){};

    /** public prototypes */
    PHP_Serializer.prototype.serialize = serialize;
    PHP_Serializer.prototype.unserialize = unserialize;
    PHP_Serializer.prototype.stringBytes = UTF8 ? stringBytesUTF8 : stringBytes;

    /** serialize: private prototypes */
    if(__b) { // Konqueror / Safari prototypes
        PHP_Serializer.prototype.__sc2s = __sc2sKonqueror;
        PHP_Serializer.prototype.__sNConstructor = __sNConstructor;
        PHP_Serializer.prototype.__sCommonAO = __sCommonAO;
        PHP_Serializer.prototype[__sc2sKonqueror(__b)] = __sBoolean;
        PHP_Serializer.prototype.__sNumber =
        PHP_Serializer.prototype[__sc2sKonqueror(__n)] = __sNumber;
        PHP_Serializer.prototype.__sString = PHP_Serializer.prototype[__sc2sKonqueror(__s)] = UTF8 ? __sStringUTF8 : __sString;
        PHP_Serializer.prototype[__sc2sKonqueror(__a)] = __sArray;
        PHP_Serializer.prototype[__sc2sKonqueror(__o)] = __sObjectKonqueror;
        PHP_Serializer.prototype[__sc2sKonqueror(__f)] = __sFunction;
    }
    else { // FireFox, IE, Opera prototypes
        PHP_Serializer.prototype.__sc2s = __sc2s;
        PHP_Serializer.prototype.__sCommonAO = __sCommonAO;
        PHP_Serializer.prototype[__sc2s(__b)] = __sBoolean;
        PHP_Serializer.prototype.__sNumber =
        PHP_Serializer.prototype[__sc2s(__n)] = __sNumber;
        PHP_Serializer.prototype.__sString = PHP_Serializer.prototype[__sc2s(__s)] = UTF8 ? __sStringUTF8 : __sString;
        PHP_Serializer.prototype[__sc2s(__a)] = __sArray;
        PHP_Serializer.prototype[__sc2s(__o)] = __ie7 ? __sObjectIE7 : __sObject;
        PHP_Serializer.prototype[__sc2s(__f)] = __sFunction;
    };

    /** unserialize: private prototypes */
    PHP_Serializer.prototype.__uCommonAO = __uCommonAO;
    PHP_Serializer.prototype.b = __uBoolean;
    PHP_Serializer.prototype.i =
    PHP_Serializer.prototype.d = __uNumber;
    PHP_Serializer.prototype.s = UTF8 ? __uStringUTF8 : __uString;
    PHP_Serializer.prototype.a = __uArray;
    PHP_Serializer.prototype.O = __uObject;
    PHP_Serializer.prototype.N = __uNull;
};

/**
 *
 *  Base64 encode / decode
 *  http://www.webtoolkit.info/
 *
 */
var Base64 = {

  // private property
  _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",

  // public method for encoding
  encode : function (input) {
    var output = "";
    var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
    var i = 0;

    input = Base64._utf8_encode(input);

    while (i < input.length) {

      chr1 = input.charCodeAt(i++);
      chr2 = input.charCodeAt(i++);
      chr3 = input.charCodeAt(i++);

      enc1 = chr1 >> 2;
      enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
      enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
      enc4 = chr3 & 63;

      if (isNaN(chr2)) {
        enc3 = enc4 = 64;
      } else if (isNaN(chr3)) {
        enc4 = 64;
      }

      output = output +
      this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
      this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);

    }

    return output;
  },

  // public method for decoding
  decode : function (input) {
    var output = "";
    var chr1, chr2, chr3;
    var enc1, enc2, enc3, enc4;
    var i = 0;

    input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

    while (i < input.length) {

      enc1 = this._keyStr.indexOf(input.charAt(i++));
      enc2 = this._keyStr.indexOf(input.charAt(i++));
      enc3 = this._keyStr.indexOf(input.charAt(i++));
      enc4 = this._keyStr.indexOf(input.charAt(i++));

      chr1 = (enc1 << 2) | (enc2 >> 4);
      chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
      chr3 = ((enc3 & 3) << 6) | enc4;

      output = output + String.fromCharCode(chr1);

      if (enc3 != 64) {
        output = output + String.fromCharCode(chr2);
      }
      if (enc4 != 64) {
        output = output + String.fromCharCode(chr3);
      }

    }

    output = Base64._utf8_decode(output);

    return output;

  },

  // private method for UTF-8 encoding
  _utf8_encode : function (string) {
    string = string.replace(/\r\n/g,"\n");
    var utftext = "";

    for (var n = 0; n < string.length; n++) {

      var c = string.charCodeAt(n);

      if (c < 128) {
        utftext += String.fromCharCode(c);
      }
      else if((c > 127) && (c < 2048)) {
        utftext += String.fromCharCode((c >> 6) | 192);
        utftext += String.fromCharCode((c & 63) | 128);
      }
      else {
        utftext += String.fromCharCode((c >> 12) | 224);
        utftext += String.fromCharCode(((c >> 6) & 63) | 128);
        utftext += String.fromCharCode((c & 63) | 128);
      }

    }

    return utftext;
  },

  // private method for UTF-8 decoding
  _utf8_decode : function (utftext) {
    var string = "";
    var i = 0;
    var c = c1 = c2 = 0;

    while ( i < utftext.length ) {

      c = utftext.charCodeAt(i);

      if (c < 128) {
        string += String.fromCharCode(c);
        i++;
      }
      else if((c > 191) && (c < 224)) {
        c2 = utftext.charCodeAt(i+1);
        string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
        i += 2;
      }
      else {
        c2 = utftext.charCodeAt(i+1);
        c3 = utftext.charCodeAt(i+2);
        string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
        i += 3;
      }

    }

    return string;
  }
}

function extractParamFromUri(uri, paramName) {
  if (!uri) {
    return;
  }
  var uri = uri.split('#')[0];  // Remove anchor.
  var parts = uri.split('?');  // Check for query params.
  if (parts.length == 1) {
    return;
  }
  var query = decodeURI(parts[1]);

  // Find url param.
  paramName += '=';
  var params = query.split('&');
  for (var i = 0, param; param = params[i]; ++i) {
    if (param.indexOf(paramName) === 0) {
      return unescape(param.split('=')[1]);
    }
  }
}

// ROI Tracking
function getVisitorInfo() {
  var roiOptions = {
        localCookieName: 'roi_track',
        localCookieDuration: 0,
        remoteCookieAPI: 'http://app.blogo.it/cookie/index.php',
        remoteCookieName: 'roi_track',
        sourceParameter: 'source',
        keywordParameter: 'q',
        remoteCookieDuration: 0
      },
      cookieDomain = document.domain.substring(document.domain.indexOf('.')),
      campaignSource = extractParamFromUri(window.location.href, roiOptions.sourceParameter),
      campaignKeywords = campaignSource ? extractParamFromUri(window.location.href, roiOptions.keywordParameter) : '',
      visitorInfo = {source: '', keyword: '', paid: false},
      localCookie = $.cookie(roiOptions.localCookieName);
  if (campaignSource) {
    visitorInfo.source = campaignSource;
    visitorInfo.keyword = campaignKeywords;
    visitorInfo.paid = true;
    var php = new PHP_Serializer(true);
     $.cookie(roiOptions.localCookieName, php.serialize(visitorInfo),{path:'/', domain: cookieDomain});
  } else {
    // check cookie
    if (localCookie) {
      var php = new PHP_Serializer(true);
      var cookieInfo = php.unserialize(localCookie);
      visitorInfo.source = cookieInfo.source || '';
      visitorInfo.keyword = cookieInfo.keyword || '';
      visitorInfo.paid = cookieInfo.paid || false;
    }
  }
  return visitorInfo;
}


function getAdsenseCodes(blog, country, context, paid) {
  var countryCodeAfcFree = {
        'it_IT': '7632590267',
				'CRC':   '3874414751',
        'es_ES': '7510946194',
        'en_US': '5493180734',
        'fr_FR': '1033271775',
        'pt_BR': '3733723970'
      },
      countryCodeAfcPaid = {
        'it_IT': '8168553510',
				'CRC':   '0668028877',
        'es_ES': '2447284723',
        'en_US': '8570089917',
        'fr_FR': '8570089917',
        'pt_BR': '5794917992'
      },
      countryCodeAfsFree = {
        'it_IT': '2454216970',
				'CRC':   '2175906302',
        'es_ES': '5158436792',
        'en_US': '7635611262',
        'fr_FR': '3460493052',
        'pt_BR': '3868137859'
      },
      countryCodeAfsPaid = {
        'it_IT': '5733425467',
				'CRC':   '9119548266',
        'es_ES': '4128452330',
        'en_US': '6948242957',
        'fr_FR': '6082505945',
        'pt_BR': '0445838791'
      }
      blogCodeAfcFree = {
        'autoblog': '4650855297',
        'motoblog': '8983385539',
        'tvbog': '1757995103',
        'travelblog': '2101912669',
        'ecoblog': '9898582492',
        'fashionblog': '2831097237',
        'deluxeblog': '1174092992',
        'pinkblog': '0745408683',
        'benessereblog': '8804971351',
        'designerblog': '8752676224',
        'gadgetblog': '8756504740',
        'melablog': '2361497146',
        'mobileblog': '1532837802',
        'soldiblog': '5784051710',
        'calcioblog': '3425069773',
        'clickblog': '1732184105',
        'gustoblog': '6278939335',
        '02blog': '4685479695',
        'toysblog': '0632989763',
        'outdoorblog': '5109749127',
        'soundsblog': '6902161342',
        'comicsblog': '8900918513',
        'blogvoip': '7746132661',
        'appblog': '7055535934',
        '06blog': '4787730198',
        'finanzablog': '3823022929',
        'motorsportblog': '4451100115',
        'booksblog': '4291721197',
        'ossblog': '3738013643',
        'oroscopoblog': '9839583012',
        'englishblog': '6283922071',
        'blogo': '3124754951',
        'bebeblog': '6893540548',
        'cineblog': '6036416398',
        'crimeblog': '2309446930',
        'betsblog': '4537497730',
        'happyblog': '4341401204',
        'polisblog': '7391226793',
        'petsblog': '7472212122',
        'softblog': '3109518752',
        'artsblog': '3313055108',
        'queerblog': '3355327365',
        'downloadblog': '0007008910',
        'blogapuntate': '2514730801',
        'gamesblog': '4702339431',
        'gossipblog': '0433724211',
        'aziende': '5845167035',
        'cinema': '9937956723',
        'guida': '9904830299'
      },
      blogCodeAfcPaid = {
        'autoblog': '3177529076',
        'motoblog': '8613082918',
        'tvbog': '0783310466',
        'travelblog': '7668934177',
        'ecoblog': '9555889628',
        'fashionblog': '7850496411',
        'deluxeblog': '6232322057',
        'pinkblog': '6616638641',
        'benessereblog': '1017835620',
        'designerblog': '7265185002',
        'gadgetblog': '4742336936',
        'melablog': '8089069886',
        'mobileblog': '7858960517',
        'soldiblog': '9101554799',
        'calcioblog': '0580794774',
        'clickblog': '7520468570',
        'gustoblog': '4489836417',
        '02blog': '7369234040',
        'toysblog': '7970537650',
        'outdoorblog': '4362583623',
        'soundsblog': '4444935347',
        'comicsblog': '2051665338',
        'blogvoip': '2524691531',
        'appblog': '0646206680',
        '06blog': '4935268217',
        'finanzablog': '5124844220',
        'motorsportblog': '0410576337',
        'booksblog': '5753049726',
        'ossblog': '6726572115',
        'oroscopoblog': '1386961726',
        'englishblog': '1218766739',
        'blogo': '4958474292',
        'bebeblog': '8252102503',
        'cineblog': '8749446607',
        'crimeblog': '2999098642',
        'betsblog': '1202654098',
        'happyblog': '7273533208',
        'polisblog': '3030303192',
        'petsblog': '0235160327',
        'softblog': '6912777382',
        'artsblog': '3732722724',
        'queerblog': '9509569151',
        'downloadblog': '5935681454',
        'blogapuntate': '1492720910',
        'gamesblog': '9119608137',
        'gossipblog': '9074850534',
        'aziende': '8369693215',
        'cinema': '7657688327',
        'guida': '2760334349'
      },
      blogCodeAfsFree = {
        'autoblog': '3870755722',
        'motoblog': '7641443041',
        'tvbog': '3971947999',
        'travelblog': '4325269477',
        'ecoblog': '6098832922',
        'fashionblog': '4193340851',
        'deluxeblog': '8275775460',
        'pinkblog': '0173384881',
        'benessereblog': '6621936553',
        'designerblog': '1099958307',
        'gadgetblog': '1533983792',
        'melablog': '8835939584',
        'mobileblog': '6572586121',
        'soldiblog': '9549018455',
        'calcioblog': '1387347049',
        'clickblog': '8733630919',
        'gustoblog': '8224918192',
        '02blog': '6998919668',
        'toysblog': '4678402935',
        'outdoorblog': '7149953482',
        'soundsblog': '9016154848',
        'comicsblog': '2910965306',
        'blogvoip': '9900050417',
        'appblog': '3472001690',
        '06blog': '8222110657',
        'finanzablog': '0752495921',
        'motorsportblog': '5827105901',
        'booksblog': '9282709123',
        'ossblog': '3482040505',
        'oroscopoblog': '8873763666',
        'englishblog': '9117759165',
        'blogo': '2988116172',
        'bebeblog': '8744156821',
        'cineblog': '9640781167',
        'crimeblog': '3104402752',
        'betsblog': '2055281671',
        'happyblog': '0631639604',
        'polisblog': '2663955927',
        'petsblog': '9879488236',
        'softblog': '2048484368',
        'artsblog': '7854443122',
        'queerblog': '5859817780',
        'downloadblog': '9035786480',
        'blogapuntate': '9663699649',
        'gamesblog': '5150914366',
        'gossipblog': '7118612360',
        'aziende': '1529211729',
        'cinema': '6057331558',
        'guida': '0803997924'
      },
      blogCodeAfsPaid = {
        'autoblog': '7270213676',
        'motoblog': '4279648412',
        'tvbog': '0661867919',
        'travelblog': '2760307563',
        'ecoblog': '6045258150',
        'fashionblog': '7704856721',
        'deluxeblog': '7025063877',
        'pinkblog': '1121209447',
        'benessereblog': '7254208527',
        'designerblog': '3093098943',
        'gadgetblog': '7224558571',
        'melablog': '9825622550',
        'mobileblog': '9032081987',
        'soldiblog': '0056350355',
        'calcioblog': '2530349331',
        'clickblog': '9131269172',
        'gustoblog': '4455351236',
        '02blog': '6458887304',
        'toysblog': '9942557526',
        'outdoorblog': '8303827594',
        'soundsblog': '4214476222',
        'comicsblog': '5545096195',
        'blogvoip': '7598107619',
        'appblog': '9895641075',
        '06blog': '5361265125',
        'finanzablog': '0674623292',
        'motorsportblog': '1078734302',
        'booksblog': '9794897992',
        'ossblog': '7608154094',
        'oroscopoblog': '9807524889',
        'englishblog': '7704856721',
        'blogo': '8122746230',
        'bebeblog': '2199290527',
        'cineblog': '8834559361',
        'crimeblog': '3454785165',
        'betsblog': '5455644291',
        'happyblog': '8703078382',
        'polisblog': '7777690480',
        'petsblog': '4915717124',
        'softblog': '2307753787',
        'artsblog': '9431826108',
        'queerblog': '0451511458',
        'downloadblog': '8463701200',
        'blogapuntate': '8524347240',
        'gamesblog': '5756180432',
        'gossipblog': '9851897405',
        'aziende': '2661930204',
        'cinema': '7261078462',
        'guida': '7376696839'
      },
      countryCodes = null, blogCodes = null,
      adsenseChannels = {country: '', blog: ''};
  if (context == 'search') {
    countryCodes = paid ? countryCodeAfsPaid : countryCodeAfsFree;
    blogCodes = paid ? blogCodeAfsPaid : blogCodeAfsFree;
  } else {
    countryCodes = paid ? countryCodeAfcPaid : countryCodeAfcFree;
    blogCodes = paid ? blogCodeAfcPaid : blogCodeAfcFree;
  }
  adsenseChannels.country = countryCodes[country] ? countryCodes[country] : '';
  adsenseChannels.blog = blogCodes[blog] ? blogCodes[blog] : '';
  return adsenseChannels;
}

