if (typeof(qa_json_allegro) !== 'object') {
var JsonApi = function(){ 
	this.name = 'qa_json_allegro';
	var that = this;
	var counter = 0;
	var qnr = 0;
	var onPageParsedCallbacks = [];
	var placements = {};
	var onPlacementDataCallbacks = {};
	var parsedContent = '';
	var spliterUrl = 'https://emiter.allegrostatic.pl/quad/json_spliter?prefix=allegro&namespace=' + this.name;
	var cookieCheckUrl ='https://emiter.allegrostatic.pl/deimos/check/';
	this.addtypes = {
'T': {name: 'box', imagers: {favico: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=box&element=FAVICO&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_'}},
'F': {name: 'flash', imagers: {image: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=flash&element=IMAGE&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_', flash: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=flash&element=FLASH&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_', iframe: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=flash&element=iframe&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_'}},
'L': {name: 'largeFlash', imagers: {image: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=largeFlash&element=IMAGE&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_', flash: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=largeFlash&element=FLASH&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_', iframe: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=largeFlash&element=iframe&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_'}},
'A': {name: 'awatar', imagers: {image: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=awatar&element=IMAGE&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_'}},
'E': {name: 'exclusive_normal', imagers: {image: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=exclusive_normal&element=IMAGE&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_'}},
'S': {name: 'exclusive_sky', imagers: {image: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=exclusive_sky&element=IMAGE&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_'}},
'R': {name: 'exclusive_narrow', imagers: {image: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=exclusive_narrow&element=IMAGE&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_'}},
'B': {name: 'exclusive_big', imagers: {image: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=exclusive_big&element=IMAGE&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_'}},
'Z': {name: 'imgK', imagers: {image: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=imgK&element=IMAGE&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_'}},
'Y': {name: 'imgSP', imagers: {image: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=imgSP&element=IMAGE&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_'}},
'X': {name: 'imgDP', imagers: {image: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=imgDP&element=IMAGE&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_'}},
'W': {name: 'imgDB', imagers: {image: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=imgDB&element=IMAGE&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_'}},
'V': {name: 'imgSW', imagers: {image: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=imgSW&element=IMAGE&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_'}},
'U': {name: 'imgMP', imagers: {image: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=imgMP&element=IMAGE&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_'}},
'm': {name: 'img750x100', imagers: {image: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=img750x100&element=IMAGE&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_'}},
'M': {name: 'img750x200', imagers: {image: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=img750x200&element=IMAGE&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_'}},
'O': {name: 'csAd', imagers: {image: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=csAd&element=IMAGE&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_'}},
'N': {name: 'nkbox', imagers: {image: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=nkbox&element=IMAGE&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_'}},
'G': {name: 'gadgetAd', imagers: {}},
'g': {name: 'rtbNativeAd', imagers: {}},
'K': {name: 'flashK', imagers: {image: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=flashK&element=IMAGE&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_', flash: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=flashK&element=FLASH&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_', iframe: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=flashK&element=iframe&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_'}},
'J': {name: 'flashDP', imagers: {image: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=flashDP&element=IMAGE&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_', flash: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=flashDP&element=FLASH&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_', iframe: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=flashDP&element=iframe&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_'}},
'Q': {name: 'flashSW', imagers: {image: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=flashSW&element=IMAGE&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_', flash: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=flashSW&element=FLASH&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_', iframe: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=flashSW&element=iframe&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_'}},
'P': {name: 'flashDB', imagers: {image: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=flashDB&element=IMAGE&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_', flash: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=flashDB&element=FLASH&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_', iframe: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=flashDB&element=iframe&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_'}},
'p': {name: 'flash750x100', imagers: {image: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=flash750x100&element=IMAGE&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_', flash: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=flash750x100&element=FLASH&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_', iframe: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=flash750x100&element=iframe&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_'}},
'q': {name: 'flash750x200', imagers: {image: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=flash750x200&element=IMAGE&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_', flash: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=flash750x200&element=FLASH&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_', iframe: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=flash750x200&element=iframe&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_'}},
'C': {name: 'cs_140_100', imagers: {image: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=cs_140_100&element=IMAGE&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_'}},
'D': {name: 'cs_300_210', imagers: {image: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=cs_300_210&element=IMAGE&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_'}},
'H': {name: 'cs_300_150', imagers: {image: '_PROTOCOL_://_HOST_/_/getImageII/?vid=_ID_&typ=cs_300_150&element=IMAGE&scale=_SCALE_&prefix=_PREFIX_&nc=_TS_'}}
};
	this.typetocode = {"box":"","flash":"F","largeFlash":"L","awatar":"A","exclusive_normal":"E","exclusive_sky":"S","exclusive_narrow":"R","exclusive_big":"B","imgK":"Z","imgSP":"Y","imgDP":"X","imgDB":"W","imgSW":"V","imgMP":"U","img750x100":"m","img750x200":"M","csAd":"O","nkbox":"N","gadgetAd":"G","rtbNativeAd":"g","flashK":"K","flashDP":"J","flashSW":"Q","flashDB":"P","flash750x100":"p","flash750x200":"q","cs_140_100":"C","cs_300_210":"D","cs_300_150":"H"};

	this.generatelongid = function(params){
        var id = (new Date().getTime() + "*").slice(-13,-1);
        var charSet = "0123456789";
        var charSetSize = charSet.length;

        if(Math.random() < 0.5) {
            id = '-' + id;
        }

        for (var i = 1; i <= 7; i++) {
            var randPos = Math.floor(Math.random() * charSetSize);
            id += charSet[randPos];
        }

        return id;
	}

	this.impressionId = this.generatelongid();

    this.data = {
            "responses": []
    };

	this.ifnull = function(x, onnull){
		if (x === undefined) return onnull;
	    if (x === null) return onnull;
	    if (typeof(x) === 'number' && isNaN(x)) return onnull;
	    if (x === '') return onnull;
	    return x;
	}
	
	var logerror = function(arg) {
		if(typeof(console) == 'undefined'){
			return;
		}
		if (console) {
			console.error(arg);
		}
	}
	
	var getCallbackNameFromFunction = function(name, callback){
		var callback_name = name + '_' + counter++;
		that[callback_name] = function(response){
			callback(response);
		}
		return that.name + '.' + callback_name;
	}
	
	var getCallbackName = function(fieldName, params){
		if(params.hasOwnProperty(fieldName)){
			return getCallbackNameFromFunction(fieldName, params[fieldName]);
		} else if(params.hasOwnProperty(fieldName + '_name')){
			return params[fieldName + '_name'];
		} else {
			return that.name + '.emptycallback';
		}
	}
	
	var loadScript = function(src){
		var sc = document.createElement('script');
		sc.type = 'text/javascript';
		sc.src = src;
		document.getElementsByTagName('head')[0].appendChild(sc);
	}
	
	var addPlacementDataCallback = function(hash, callback){
		if(! onPlacementDataCallbacks.hasOwnProperty(hash)){
			onPlacementDataCallbacks[hash] = [callback];
		} else {
			onPlacementDataCallbacks[hash].push(callback);
		}
	}
	
	this.placementdatacallback = function(params){
		that.impressionId = params.impressionId;
		var placement = params.placement;
		placements[placement.hash] = placement;
		var callbacks = onPlacementDataCallbacks[placement.hash];
		if(callbacks) {
			while(callbacks.length > 0){
				try {
					callbacks.pop()(placement);
				} catch(e){
					logerror(e);
				}
			}
		}
	}
	
	var getSpliterQuery = function(queryString, callback_onsuccess_name, callback_onerror_name){
		var url = spliterUrl + '&' + queryString 
			+ "&callback_onerror=" + callback_onerror_name
			+ '&callback_onsuccess=' + callback_onsuccess_name;
		if (that.impressionId) {
			url = url + '&iid=' + that.impressionId;
		}
		return url;
	}
	
	this._getSpliterTypesData = function(typescount){
		var ret = typescount['box'];
		
		for(t in typescount){
			if(t != 'box'){
				var count = typescount[t];
				if(count > 0 && that.typetocode.hasOwnProperty(t)){
					var code = that.typetocode[t];
					ret += ':' + code + count; 
				}
			}
		}
		return ret;
	}
	
	this.getImageUrlForAd = function(advertisement, scale, params){
		return that.getAdElementUrl(advertisement, 'image', scale, params);
	}
	
	this.getAdElementUrl = function(box, ktory, scale, params) {
	    if (box.empty) return null;
	    ktory = that.ifnull(ktory, 'image');
	    var ret = box['images'];
	    if (!ret || !ret.filter(function( obj ) {return obj.type == ktory.toUpperCase()}).length > 0) {
		  var code = this.typetocode[box.type];
	      var type = this.addtypes[code];
	      if (!type || !type.imagers[ktory]) {
	        logerror('unknown imager: ' + box.type + '.' + ktory);
	        return null;
	      }
	      ret = type.imagers[ktory];
			ret = ret.replace(/_PROTOCOL_/g, 'https');
			ret = ret.replace(/_HOST_/g, 'emiter.allegrostatic.pl');
			ret = ret.replace(/_PREFIX_/g, 'allegro');
			ret = ret.replace(/_ID_/g, box.id);
			ret = ret.replace(/_TYP_/g, box.type);
			ret = ret.replace(/_ELEMENT_/g, ktory);
			ret = ret.replace(/_TS_/g, box.timestamp);
			ret = ret.replace(/_SCALE_/g, that.ifnull(scale, 1));
			ret = ret.replace('_MOD3_', Math.floor(Math.random() * 3));
	    } else {
			ret = ret.filter(function( obj ) {return obj.type == ktory.toUpperCase()})[0].url;
		}
		if(box.type !== 'rtbNativeAd') {
			if(params.maxwidth){
				ret += '&maxw=' + params.maxwidth;
			}
			if(params.maxheight){
				ret += '&maxh=' + params.maxheight;
			}
		}

	    return ret;
	}
	
	var afterLoadPlacementCallback = function(queryParams) {
		return function(placement){
			queryParams.hasCachedContent= placement.hasCachedContent;
			queryParams.placement = placement;
			loadAdsImpl(queryParams);
		}
	}
	
	this._getPlacementData = function(hash, callback){
		addPlacementDataCallback(hash, callback);
		var src = getSpliterQuery("prid=0&caid=0&decode=" + hash, that.name + ".placementdatacallback", that.name + ".defaultonerrorcallback");
		loadScript(src);
	}
	
	this._parse = function(callback){
		if(parsedContent){
			callback(parsedContent);
			return;
		}
		onPageParsedCallbacks.push(callback);
		var parserSrc = 'https://emiter.allegrostatic.pl/deimos/parserNc/?prefix=allegro&namespace=' + this.name;
		loadScript(parserSrc);
	}
	
	this.parsercallback = function(content){
		if (!content) {
			content = ' ';
		}
		parsedContent = content;
		while(onPageParsedCallbacks.length > 0){
			try {
				onPageParsedCallbacks.pop()(content);
			} catch(e){
				logerror(e);
			}
		}
	}
	
	var placementDataReady = function(params){
		return params.placement && params.placement.publisherId && params.placement.channelId && params.placement.form;
	}
	
	var contentReady = function(params){
		if(params.content) return true;
		return false;
	}
	
	this._checkQueryParams = function(params){
	}
	
	this.getBasicParams = function(){
		return {
			typescount: {"box":1,"flash":0,"awatar":0,"exclusive_normal":0,"exclusive_sky":0,"exclusive_narrow":0,"exclusive_big":0,"imgK":0,"imgSP":0,"imgDP":0,"imgDB":0,"imgSW":0,"imgMP":0,"gadgetAd":0,"flashK":0,"flashDP":0,"flashSW":0,"flashDB":0}
		}
	}
	
	var addContentToList = function(allWords, key, value){
		if(!isNaN(parseInt(key))){
			allWords.push("_" + key);
		}
		return allWords.concat(value);
	}
	
	var getRealContent = function(content){
		if(typeof(content) === 'object'){
			var allWords = [];
			for (var key in content) {
				  if (content.hasOwnProperty(key)) {
					allWords = addContentToList(allWords, key, content[key]);
				  }
			}
			return allWords.join("+");
		}else if (content){
			return content.replace(new RegExp(" ", 'g'), "+");
		}
		else {
			return '';
		}
	}
	
	this.realContent = getRealContent;
	
	this.addWithoutParameter = function(queryStr){
		var withoutParamValue = this.getSplittedExistingIds();
		if (withoutParamValue != 'undefined'){
			queryStr = queryStr + '&without='+withoutParamValue;
		}
		return queryStr;
	}
	
	this.getSplittedExistingIds = function() {
		var ids = this.getExistingAdsIds();
	    var toReturn = '' + ids[0];
	    for (i = 1; i < ids.length; i++) {
	        toReturn = toReturn + ',' + ids[i];
	    }
	    return toReturn;
	}

	this.getExistingAdsIds = function() {
	    var ids = [];
	    var responses = this.data.responses;
	    for (i = 0; i < responses.length; i++) {
	        if (typeof responses[i].ads != 'undefined') {
	            for (j = 0; j < responses[i].ads.length; j++) {
	                if (ids.indexOf(responses[i].ads[j].id) == -1) {
	                    ids.push(responses[i].ads[j].id);
	                }
	            }
	        }
	    }
	    return ids;
	}

	this.httpGet = function (theUrl,callback,params)
	{
		// var xmlHttp = new XMLHttpRequest();
		//
		// xmlHttp.onreadystatechange = function() {
		// 	if (xmlHttp.readyState == 4 && xmlHttp.status == 200){
		// 		callback(params);
		// 	}
		// }
		// xmlHttp.withCredentials = true;
		// xmlHttp.open( "GET", theUrl, true );
		// xmlHttp.send( null );
		// return xmlHttp.responseText;
		callback(params);
	}

	this._getAds = function(queryParams){
		var placement = queryParams.placement;
		var queryStr = "prid=" + placement.publisherId 
				+ '&caid=' + placement.channelId
				+ "&form=" + placement.id + ':' + that._getSpliterTypesData(queryParams.typescount) 
				+ "&content=" + getRealContent(queryParams.content)
				+ '&type=2&qnr=' + qnr;
		if (queryParams.custom) {
			queryStr = queryStr + '&custom=' + queryParams.custom;
		}
		queryStr = that.addWithoutParameter(queryStr);
		var spliter_src = getSpliterQuery(queryStr, queryParams.callback_onsuccess_name, queryParams.callback_onerror_name); 
		loadScript(spliter_src);
		qnr++;
	}
	
	var loadAdsImpl = function(queryParams){
		if(  (queryParams.content || queryParams.hasCachedContent) && queryParams.placement){
			return that._getAds(queryParams);
		} else if(! queryParams.placement){
			that._getPlacementData(queryParams.hash, afterLoadPlacementCallback(queryParams));
			return;
		} else if(! queryParams.content){
			that._parse(function(content){
				queryParams.content = content;
				loadAdsImpl(queryParams);
			});
			return;
		}
		logerror("loadAdsImpl - shouldn't get here");
	}


	that.loadAds = function(params) {
		// if(params.isAfterCheck == true){
		// 	that.loadAdsCallback(params);
		// 	return;
		// }
		that.httpGet(cookieCheckUrl, that.loadAdsCallback,params);
	}

	this.loadAdsCallback = function(params) {
		that._checkQueryParams(params);
		
		var callback_onerror_name = getCallbackName('callback_onerror', params);
		var callback_onsuccess_name = getCallbackName('callback_onsuccess', params);
		
		var queryParams = {
				callback_onerror_name: callback_onerror_name,
				callback_onsuccess_name: callback_onsuccess_name
		};
		
		if(contentReady(params)){
			queryParams.content = params.content;
		}
		if(placementDataReady(params)){
			queryParams.placement = params.placement;
		} else {
			queryParams.hash = params.hash;
			queryParams.typescount = params.typescount;
		}
		if (params.custom) {
			queryParams.custom = params.custom;
		}
		if (params.placement) {
			queryParams.placement = params.placement;
			queryParams.hasCachedContent= params.placement.hasCachedContent;
		}

		loadAdsImpl(queryParams);
		
		
	}
	
	this.emptycallback = function(){}
	
	this.defaultonerrorcallback = function(){
		logerror("got error from server");
	}

	this.createIframes = function(urls) {
		var urlArray = urls.split("^ ^");
		var arrayLength = urlArray.length;
		for (var i = 0; i < arrayLength; i++) {
			this.createIframe(urlArray[i]);
		}
	}

	this.createIframe = function(ifrUrl) {
		if (!ifrUrl || ifrUrl === 'null') return;
		var div = document.createElement('div');
		var ifrm = document.createElement("iframe");
		ifrm.src = ifrUrl;
		ifrm.style.display = 'none';
		div.appendChild(ifrm);
		document.body.appendChild(div);
	}
	
	
	var addContentToList = function(allWords, key, value){
		allWords.push("@" + key + "$");
		for(var w in value){
			allWords.push(value[w].replace(new RegExp(" ", 'g'), "_"));
		}
		return allWords;
	}
	
}

qa_json_allegro = new JsonApi();


if (typeof(qa_json_allegro_callback) !== "undefined") {
	if (typeof(qa_json_allegro_callback) === "function") {
		callback = qa_json_allegro_callback;
		callback();
	}
}


}