(function(){
    var CFOG = [
	[18, "trainclass"],
    [20, "product"],
    [21, "return"],
    [22, "inkarta"],
    [23, "changes"],
    [24, "via"],
    [25, "group"],
    [26, "presale"],
    [27, "from"],
    [28, "to"],
    [29, "inkartavalidity"],
    [30, "persons"]
	];

	var MISKEY = "MISSING", EMKEY = "EMPTY";
	

	var translate = {
		"9" : { MISKEY: "9999999"},
		"10" : { "1" : "ano",
			     "0" : "ne",
		         MISKEY : "9999999"},
		"11" : {"STANDARD" : "fyzicka",
			   "MOTO" : "moto",
			   "BUSSINES" : "pravnicka",
				EMKEY : "nezjisteno",
				MISKEY : "9999999"},
		"12" : { EMKEY : "bez platebni metody",
			     MISKEY: "9999999"},
		"14" : { },
		"17" : {"SEAT" : "misto",
			   "COUCHETTE" : "lehatko",
			   "BERTH" : "luzko"
			   },
		"18" : { "-1" : "0",
		         MISKEY : "9999999"},
		"20" : {
			"RESERVATION" : "pouze rezervace",
			"INTERNATIONAL" : "pouze mezinarodni rezervace",
			"ELISKA" : "eLiska",
			"PROLONG" : "prolongace sluzebnich karet",
			"MOTO_CHARGE" : "poplatek za MO/TO transakci",
			"INKARTA" : "zadost o IK se zakaznickou aplikaci",
			"CDDB" : "SporoTiket Evropa - Nemecko",
			"CDZSSK" : "SporoTiket Evropa - Slovensko",
			"CDOBB" : "SporoTiket Evropa - Rakousko",
			"CDMAV" : "SporoTiket Evropa - Madarsko",
			"INKARTARP" : "zadost o IK bez zakaznickou aplikaci",
			"CDPKP" : "SporoTiket Evropa - Polsko",
			"CDSZ" : "SporoTiket Evropa - Slovinsko",
			"NTTICKET" : "vnitrostatni jizdenka",
			"RECLAMATION" : "reklamacni prihlaska",
			"CDTIP" : "nabidka CD Tip",
			"INKARTACONT" : "zadost o pokracovaci  IK se zakaznickou aplikaci",
			"INKARTARPCONT" : "zadost o pokracovaci  IK bez zakaznicke aplikace",
			"INKARTAPRODUCTPURCHASE" : "dokoupeni aplikace na IK",
			"RAILWAYTICKET" : "tratova jizdenka",
			"RECHARGE_EP" : "dobiti EP na IK",
			"SPOROTIKET" : "SporoTiket Cesko",
			"CDDSB" : "SporoTiket Evropa - Dansko",
			"ECP" : "cestovni pojisteni ECP",
			"NETTICKET" : "sitova jizdenka CD Net a SONE+",
			"NETTICKETSONE" : "sitova jizdenka SONE+",
			"NETTICKETCDNET" : "sitova jizdenka CD Net",
			"LUGGAGE" : "zavazadlovy listek",
			"PARKING" : "Parkovaci voucher",
			"NTTICKETANDRES" : "vnitrostatni jizdenka",
			"DOG" : "prepravne pro psa",
			"SUPPLEMENT1T" : "doplatek do prvni tridy",
			"CDPROMO" : "jízdenka ČD Promo",
			"CDPROMOANDRES" : "jízdenka ČD Promo s místenkou",
			EMKEY : "ostatni"
		},
		"21" : { "0" : "tam",
				 "1" : "tam a zpet",
				 "2" : "0",
		         MISKEY : "9999999"},
		"22" : { EMKEY : "0",
				 MISKEY : "9999999"},
		"23" : { "0" : "bez prestupu",
				 "-1" : "0",
				 MISKEY : "9999999"},
		"24" : { EMKEY : "0",
		         MISKEY : "9999999"},
		"25" : { "1" : "ano",
			     "0" : "ne",
		         MISKEY : "9999999"},
		"26" : { "-1" : "0",
			     MISKEY : "9999999",
				 "0" : "v den prodeje"},
		"27" : { EMKEY : "0",
				 MISKEY : "9999999"},
		"28" : { EMKEY : "0",
		         MISKEY : "9999999"},
		"29" : { "-1" : "0",
		         MISKEY : "0",
		         EMKEY : "0"},
		"30" : { "-1" : "0",
		         MISKEY : "0"}
	};

	var debug = true;
	var ogdate = new RegExp("(\\d{2})\\.(\\d{2})\\.(\\d{4})");

    function getTracker() {
        if (typeof(YWA) !== "undefined") {
            return YWA.getTracker("10001232432462");
        }
        return undefined;
    }
	
	function debugOG(cart, trac) {
		if ((typeof(jQuery) !== "undefined") && (typeof(JSON) === "object")) {
			var seril = JSON.stringify(cart);
			jQuery.ajax({
				"type" : "POST",
				 "url" : "/yahoodebug/yho",
			  "global" : "false",
				"data" : {"og" : seril,
						  "azid" : trac.MEMBERID,
						  "first" : trac.CF10,
						  "ordid" : trac.CF09,
						  "utype" : trac.CF11,
				          "paym"  : trac.CF12,
						  "lang"  : trac.CF01}
			});
		}
	}

	function debugItem(cart, trac) {
		if ((typeof(jQuery) !== "undefined") && (typeof(trac) === "object")) {
			if (debug) {
				var dbg = "";
				var i;
				for (i = 1; i < 38; i++) {
					var name = "CF" + ((i < 10) ? "0" : "") + i;
					var val = trac[name];
					if (typeof(val) !== "undefined") {
						var strval = String(val);
						if (strval.length > 0) {
							if (dbg.length !== 0) {
								dbg += "|";
							}
							dbg += name + "=" + strval;
						}
					}
				}
				jQuery.ajax({
					"type" : "POST",
					 "url" : "/yahoodebug/yhi",
				  "global" : "false",
					"data" : {"item" : dbg,
							  "ordid" : cart.ordernumber}
				});
			}
		}
	}

	function translatetoYahoo(cfnum, value) {
		var cfnumkey = String(cfnum);
		var val = String(value);
		if (translate.hasOwnProperty(cfnumkey)) {
			if (translate[cfnumkey].hasOwnProperty(val)) {
				return translate[cfnumkey][val];
			} else if ((val.length === 0) && 
					(typeof(translate[cfnumkey].EMKEY)) === "string" ){
				return translate[cfnumkey].EMKEY;
			}
		}
		return value;
	}

    function fillCF(itemname, cfnum, cart, tr) {
		if (typeof(cart) === "object") {
			var yahooValue;
			if (cart.hasOwnProperty(itemname)) {
				yahooValue = translatetoYahoo(cfnum, cart[itemname]);
				// platnost z desetin roku na cele mesice
				if (cfnum == 29) {
					yahooValue = Math.floor(parseFloat(yahooValue) * 12.0);
				}
				// duplicita "pres"
				if (cfnum == 24) {
					vias = yahooValue.split(";");
					if (vias.length > 1) {
						if (vias[0] === vias[1]) {
							yahooValue = vias[0];
						}
					}
				}
			} else {
				if (typeof(translate[String(cfnum)].MISKEY) === "string") {
					yahooValue = translate[String(cfnum)].MISKEY;
				}
			}
			if (typeof(yahooValue) === "string") {
				yahooValue = yahooValue.replace(";",",");
			}
			tr.setCF(cfnum, yahooValue);
		}
    }


    function fillItem(item, tr) {
        var i,j;
        for (i=0, j = CFOG.length; i < j; i++) {
            fillCF(CFOG[i][1], CFOG[i][0], item, tr);
        }
    }


    function fillBase(cart, itemid, tr) {
        tr.setAction('01');
        if (cart.items[itemid].hasOwnProperty("ticketnumber")) {
            tr.setOrderId(cart.items[itemid].ticketnumber);
        }
		var amount = 0;
        if (cart.items[itemid].hasOwnProperty("price")) {
			var price = parseInt(cart.items[itemid].price, 10) / 100;
			if (price !== 0) {
	            amount = "CZK" + price;
			}
        }
		tr.setAmount(amount);
        fillItem(cart ,tr);
    }


    function fillTrain(item, tr) {
        if (item.hasOwnProperty("trains")) {
            var i,j, val = "";
            for(i=0,j=item.trains.length; i < j; i++) {
				var t = item.trains[i];
                if ((t.hasOwnProperty('type')) 
						&& (t.type.length > 0)
						&& (t.hasOwnProperty('number'))
						&& (String(t.number).length > 0)
						&& (t.hasOwnProperty('return'))) {
					val += t.type + " " + t.number;
                }
                if (i < (j - 1)) {
                    val += ",";
                }
            }
			if (val.length > 0) {
	            tr.setCF(19, val);
			} else {
	            tr.setCF(19, "0");
			}
        }
    }

	function fillRestype(cart, track) {
		if (cart.hasOwnProperty('restype')
				&& (cart.restype.hasOwnProperty("length"))) {
			var res = cart.restype;
			var dir = cart["return"];
			var tval = "";
			var zval = "";
			if ((typeof(res[0]) === "string") && (res[0].length > 0)) {
				tval = translatetoYahoo(17, res[0]);
			}
			if ((typeof(res[1]) === "string") && (res[1].length > 0)) {
				zval = translatetoYahoo(17, res[1]);
			}
			var val = "";
			if ((tval.length > 0) && (zval.length > 0)) {
				val = tval + "," + zval;
			} else {
				if (tval.length > 0) {
					val = tval;
				} else {
					if (zval.length > 0) {
						val = zval;
					}
				}
			}
			if (val.length > 0) {
				track.setCF(17, val);
			} else {
				track.setCF(17, "0");
			}
		}
	}
	
	function fillDate(cart, track) {
		var yahoodate;
		if (cart.hasOwnProperty("departure")) {
			var dp = cart.departure;
			if (ogdate.test(dp)) {
				var m = ogdate.exec(dp);
				yahoodate = m[3] + "-" + m[2] + "-" + m[1];
			}
		} else {
			yahoodate = "2111-11-11";
		}
		track.setCF(31, yahoodate);
	}


    function fillCart(cart) {
        if (cart.hasOwnProperty("items")) {
            var i,j;
            for (i = 0, j = cart.items.length; i < j; i++) {
                var trac = getTracker();
                if (trac) {
                    fillBase(cart, i, trac);
					fillDate(cart.items[i], trac);
                    fillItem(cart.items[i], trac);
                    fillTrain(cart.items[i], trac);
					fillRestype(cart.items[i], trac);
					debugItem(cart, trac);
                    trac.submit_action();
                }
            }
        }
    }

	function fillSearch(srchresult, srchtext) {
		if (srchresult.hasOwnProperty("searchcount") && srchtext.hasOwnProperty("searchtext")) {
			var trac = getTracker();
			trac.setAction("INTERNAL_SEARCH");
			trac.setISK(srchtext.searchtext);
			trac.setISR(srchresult.searchcount);
			trac.submit_action();
		}
	}

	function eshopVersion(tracker) {
		var context = document.location.pathname.split("/");
		if (context.length > 1) {
			var ctx = context[1].toLowerCase();
			if (ctx === "eshop") {
				tracker.setDocumentGroup("eshop 1G");
			} else if (ctx === "eshop2g") {
				tracker.setDocumentGroup("eshop 2G");
			}
		}
	}

	function fillUrlParams(tracker) {
		var srch = window.location.search;
		if (srch.length > 1) {
			var pairs = srch.substr(1).split('&');
			var j = pairs.length;
			while (j--) {
				var ipair = pairs[j].split("=");
				var pname = unescape(ipair[0]);			
				var pval = (ipair.length > 1) ? unescape(ipair[1]) : null;
				if (pname === "utm_source") {
					tracker.setCF(33, pval);
				} else if (pname === "utm_medium") {
					tracker.setCF(34, pval);
				} else if (pname === "utm_content") {
					tracker.setCF(35, pval);
				} else if (pname === "utm_campaign") {
					tracker.setCF(36, pval);
				} else if (pname === "utm_hash") {
					tracker.setCF(37, pval);
				}
			}
		}
	}

    var YWATracker = getTracker();
    if (YWATracker) {
		var id = 0;
		var lang = "CZ";
        if (typeof(azak) !== "undefined") {
            if (azak.hasOwnProperty("id")) {
                id = azak.id;
            }
            if ((azak.hasOwnProperty("lang")) && (azak.lang === "en")) {
                lang = "EN";
			}
        }
		if (id === 0) {
			id = "";
		}
		YWATracker.setCF(1, lang);
		YWATracker.setMemberId(id);
		fillUrlParams(YWATracker);
		if (typeof(ywaCart) === "object") {
			fillCF("ordernumber", 9, ywaCart, YWATracker);
			fillCF("firstpurchase", 10, ywaCart, YWATracker);
			fillCF("usertype", 11, ywaCart, YWATracker);
			fillCF("paymentmethod", 12, ywaCart, YWATracker);
			fillCF("smsinfo", 14, ywaCart, YWATracker);
			debugOG(ywaCart, YWATracker);
		}
		if (typeof(YWATracker["CF34"]) !== "undefined") {
				debugItem({ordernumber: 0}, YWATracker);
		}
		eshopVersion(YWATracker);
        YWATracker.submit();

        if (typeof(ywaCart) === "object") {
            fillCart(ywaCart);
        }

		if ((typeof(ywaWTD) === "object") && (typeof(ywaWTD2) === "object")) {
			fillSearch(ywaWTD, ywaWTD2);
		}
    }
}());

