/** host aplikacji sklepu */
var ESHOP_HOST = 'http://sklep.play.pl';
/** url aplikacji sklepu */
var ESHOP_URL = ESHOP_HOST + '/ecommerce/control/';

function afterChannelNotificationRequest(obj) {
	if (obj.action == 'get') {
		if (obj.success) {
			var d = getDomain();
			var opt = d ? {path: '/', domain: d} : {path: '/'};
			var taskId = obj.taskId;//przy sukcesie nigdy null
			$.cookie('CHANNEL_NOTIFICATION', taskId, opt); // taskId='' - wywolanie ok, tylko brak notyfikacji, lub klient nie typu replay
			if (taskId) { // jesli jest task
				//wyswietl notyfikacje
				showChannelNotification();
			}
		}
	}
}

function showChannelNotification() { //function can be overriden
	changeLinksClientType('hrefreplay');
}

function closeChannelNotification() {
	var d = getDomain();
	var opt = d ? {path: '/', domain: d} : {path: '/'};
	$.cookie('CHANNEL_NOTIFICATION', '', opt); //pamietamy, ze zamknal, nie pytamy wiecej
}

function checkChannelNotification() {
	var taskId = $.cookie('CHANNEL_NOTIFICATION');
	if (taskId == null) { // jesli '' nic nie rob
		//do action='get' request
		jQuery.ajax({
			type: 'POST',
			url: gWebportalContext + 'channelNotification',
			data: {
				action: 'get'
			},
			success: function(d,t,x){
				jQuery('#section').after(d);
			},
			error: function(r,s,t) {
			}
		});
	} else if (taskId) { // jesli jest task
		//wyswietl notyfikacje
		showChannelNotification();
	}
}

function resetLoggedUserBar() {
	var d = getDomain();
	var opt = d ? {path: '/', domain: d} : {path: '/'};
	$.cookie('LOGGED_USER_BAR', null, opt); //wymus sprawdzenie
}

function showLoggedUserBar(data) {
	var barHtml = '<div id="infoBar"><div class="inside">' + data.loggedPrefix + '<strong>' + data[0]
		+ '</strong> <a href="' + data[1] + '"><span>' + data[2] +'</span></a>'
		+ '<a href="' + data[3] + '"><span>' + data[4] + '</span></a></div></div>';
	if ($('#infoBar').length < 1) {
		$('body:first').prepend(barHtml);
	} else {
		$('#infoBar').replaceWith(barHtml);
	}
}

function checkLoggedUserBar() {
	var bar = $.cookie('LOGGED_USER_BAR');
	if (bar == null) { //jak zalogowany lub brak danych, to sprawdzaj
		jQuery.ajax({
			type: 'POST',
			url: gWebportalContext + 'logoBox',
			data: {
				action: 'getuserinfo',
				system: 'WP'
			},
			success: function(d,t,x){
				if (!d) return;
				var data = [];
				data.loggedPrefix = '';
				if (d.indexOf('Zalogowany:') >= 0) {
					data.loggedPrefix = 'Zalogowany: ';
				} else if (d.indexOf('Zarządzaj numerem:') >= 0) {
					data.loggedPrefix = 'Zarządzaj numerem: ';
				}
				var logged = $('li',d).length == 3 && data.loggedPrefix;
				if (logged) {
					var i = 0;
					$('li',d).each(function() {
						if (i == 0) {
							data.push($.trim($(this).text().replace(/Zalogowany:\s*/gi, '').replace(/Zarządzaj numerem:\s*/gi, '')));
						} else {
							data.push($(this).find('a').attr('href'));
							data.push($(this).text());
						}
						++i;
					});
					showLoggedUserBar(data);
					resetLoggedUserBar(); //jak zalogowany, to sprawdzaj
				} else {
					$('#infoBar').replaceWith('');
					var d = getDomain();
					var opt = d ? {path: '/', domain: d} : {path: '/'};
					$.cookie('LOGGED_USER_BAR', 'no', opt); //jak nie zalogowany, to nie sprawdzaj
				}
			},
			error: function(r,s,t) {
			}
		});
	}
}

/**
 * Przygotowuje link przejscia do koszyka.
 * @param cmsId - identyfikator cms'owy telefonu
 * @param rateId - identyfikator planu taryfowego np: 'LongPlay29'
 * @param isNoPhoneOffer - opcjonalna flaga, czy oferta bezterminalowa (default false) 
 */
function prepareCartUrl(cmsId, rateId, isNoPhoneOffer) {
	if (isNoPhoneOffer) {
		if (!rateId) {
			return rateId;
		} else if (rateId.indexOf('http') == 0) {
			return rateId; // jesli oferta bezterminalowa nie ma mapowania, uzywamy linkow bezposrednio z NO_PHONE_LINK, i wtedy je zwracamy.
		}
	}
    var model = null;
    if (cmsId && !isNoPhoneOffer) {
    	var phone = dict.getNodes("PHONE","[cmsid='"+cmsId+"']");
    	$(phone).each(function(i){
    	    if (i == 0) {
    	        model = $(this).attr("Model");
    	    }
    	});    	    	        	    	        
    }
    var url = ESHOP_URL + "addpostpaid";    
    var retUrl = "";
    if (model) {
        retUrl = url + "?add_product_id=" + model;
    }
    if (rateId) {
    	var linkDictSuffix = rateId.replace(/_((\d+)|(VIP))$/,"").replace(/_((\d+)|(VIP))$/,"");
    	var link = dict.getNodes("LINK" + "_" + linkDictSuffix,"[cmsid='"+(isNoPhoneOffer ? rateId : cmsId)+"']");
    	$(link).each(function(i){
    	    if (i == 0) {
    	    	var attrRateId = $(this).attr(rateId);
    	    	if (attrRateId && attrRateId.indexOf('http') != 0) {
    	    		retUrl = url + attrRateId;
    	    	} else {
    	    		retUrl = attrRateId;
    	    	}
    	    }
    	});
    }
    return retUrl;
}

function getLinkDict(id) {
	var link = prepareCartUrl(null, id, true);
	return link;
}

function redirectLinkDict(id, defaultUrl) {
	var link = getLinkDict(id)
	link = link ? link : (defaultUrl ? defaultUrl : '#');
	window.location.href = link;
}

function prepareEshopLink(currentPhoneId, rateId, linkType, pomotionId) {
	 where = "'[cmsid='"+currentPhoneId+"'][PROMOTION_ID='"+pomotionId+"']'";
	 var links = dict.getNodes("MODEM_PHONE", where);
	 var link = "";
	 $(links).each(function(){
		  link = $(this).attr(rateId+"_"+linkType);  
	 });
	 return link;
}

function getUrlVars(){
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('#')[0].split('&');
    for(var i = 0; i < hashes.length; i++)
    {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }
    return vars;
}

var gXmlCache = [];

function getFullAjaxUrl(params) {
	if (!params) return '';
	var url = params.url ? params.url : '';
	if (params.data) {
		var first = true;
		for (x in params.data){
			url += (first ? '?' : '&') + x + '=' + params.data[x];
			first = false;
		}
	}
	return url;
}

function loadXml(params) {
	var cacheKey = getFullAjaxUrl(params);
	var fromCache = gXmlCache[cacheKey];
	if (fromCache != null && params.complete != undefined && params.complete != null) {
		params.complete(fromCache, "200");
		return;
	}
	
	var p = [];
	for (var x in params) p[x] = params[x];
	
	p.error = function(req, status, err) {
		try {
			var xml = parseXml(req);
			if (xml != null && xml != "" && params.complete != null) {
				params.complete(xml, status);
				return;
			}
		} catch (er) {}
		if (params.error != null) params.error(req, status, err);
	}
	p.complete = function(req, txtStatus) {
		gXmlCache[cacheKey] = req;
		if (params.complete != null && params.complete != undefined)
			params.complete(req, txtStatus);
	}
	$.ajax(p);
}


function parseXml(req) {
	if (req.responseXML != null) return req.responseXML;
	var str =  req.responseText;
	if (str == null) str = req;
  if (window.ActiveXObject) {
    var doc = new ActiveXObject('Microsoft.XMLDOM');
    doc.loadXML(str);
    return doc;
  } else if (window.DOMParser) {
    return (new DOMParser).parseFromString(str, 'text/xml');
  } else
    return "";
}

function fillTopMenuCartUrl() {
	var topMenuCartUrl = "";
	var cmsId = null;
	var rateId = null;
	var offerData = _cMB.getOfferData();
	if (offerData != undefined && offerData.tA != undefined && offerData.wA != undefined) {
		rateId = offerData.tA.v + offerData.wA.v;
	}
	var productData = _cMB.getProductData();
	if (productData != undefined && productData.pid != undefined) {
		cmsId = productData.pid;
	}
		
	if (cmsId == null) {
		topMenuCartUrl = ESHOP_URL + "showcart";
	} else {
		topMenuCartUrl = prepareCartUrl(cmsId, rateId);
	}	
	$(".cart a[title=Koszyk]").attr('href',topMenuCartUrl);
}

function getDomain() {
	var domain = null;
	try {
		domain = gDomain; //global
	} catch (e) {}
	return domain;
}

var userSniffer = {
		options : {
			expires: 60
		},
		get : function(param) {
			var userData = jQuery.parseJSON(jQuery.cookie('PLAY_USER'));
			if (!userData) return undefined;
			return userData[param];
		},
		set : function(param, value) {
			var userData = jQuery.parseJSON(jQuery.cookie('PLAY_USER'));
			if (!userData) userData = {};
			userData[param] = value;
			var d = getDomain();
			var opt = d ? {path: '/', domain: d, expires: this.options.expires} : {path: '/', expires: this.options.expires};
			jQuery.cookie('PLAY_USER', JSON.stringify(userData), opt);
		},
		remove : function() {
			var d = getDomain();
			jQuery.cookie('PLAY_USER', null, {path: '/'});
			if (d) jQuery.cookie('PLAY_USER', null, {path: '/', domain: d});
		}
	};

function changeLinksClientType(newHrefAttr, selector) {
	var sel = selector ? selector : 'a';
	$(sel).each(function() {
		var newHref = $(this).attr(newHrefAttr);
		if (newHref) {
			$(this).attr('href', newHref);
		}
	});
}

function changeLinksClientTypeAware() {
	var network = userSniffer.get('network');
	if (network == 'play') {
		changeLinksClientType('hrefupsell');
	}
	checkChannelNotification();
}

function setNotPlayClient() { //kasowanie cookie klienta upsell
	userSniffer.remove();
}

function getRetentionCartUrl(mode) {
	//RETENCJA-MOCK
	if (mode == 'online') {
		return 'http://sklep.play.pl/ecommerce/control/retentioninternetrate';
	} else if (mode == 'mix') {
		return 'http://sklep.play.pl/ecommerce/control/retentionmixrate';
	}
	return 'http://sklep.play.pl/ecommerce/control/retentionpostpaidrate';
}

$(document).ready(function(){
	try {
		$.cookie('CHANNEL_NOTIFICATION');//jesli brak jQuery.cookie, to exception i brak sprawdzen
		changeLinksClientTypeAware();
	} catch(e){}
	
	var skip = false;
	try {
		skip = GLOBAL_ESHOP_UTILS ? true : false;
	} catch (e) {}
	if (!skip) {
		fillTopMenuCartUrl();
	}
});
