﻿/**
 * @author Ged
 */

var navData = new Array();
var currentPrintedCouponsCookieValue;
var currentCouponsToPrintCookieValue;
var tmpCoupons = new Array(); // not needed

function coupon_init()
{
    // Define change handler for each coupon's checkbox, label and couponBox div
	$('div.couponContent').click(function(e){
		if(!$(this).parent().parent().hasClass('selected'))
		{
	        on_coupon_click($(this).parent().parent().attr('ean'), $(this).parent().parent().attr('tag'), $(this).parent().parent().attr('event'), $(this).parent().parent().attr('catparams'));
		}
	});
	$('div.selectButton').click(function(e){
		if(!$(this).parent().parent().parent().hasClass('selected'))
		{
	        on_coupon_click($(this).parent().parent().parent().attr('ean'), $(this).parent().parent().parent().attr('tag'), $(this).parent().parent().parent().attr('event'), $(this).parent().parent().parent().attr('catparams'));
		}
	});

    // Find total number of coupons on page
    var numCoupons = $('.couponZone li').length;

	// Initialise basket
	var basket = "";
	for(var i=0;i<numCoupons;i++)
		basket += "<li class='blank'></li>";
	$('.couponSelectedTop ul').append(basket);

    // Define click handler for print button
	$('.btnPrint').click(function(e){
		if($(this).hasClass('active'))
		{
			tmpCoupons = new Array(); // not needed

			$('.couponSelectedTop ul li:.selected').each(function(){
				var ean = $(this).attr('ean')
				tmpCoupons.push(ean); // not needed
			});

			coupon_send(); // not needed
		}
		
		e.preventDefault();
	});

    // 
    init_basketcontent_and_couponselections_from_cookies();	
	update_basketcontrols();
	getTreeNav();
	couponUrlToProperCase();
}

function clear_cross_selling_cookie()
{
    $.cookie("CouponsToCrossSellPG", null, { path: '/' });
}

function on_coupon_click(ean, tag, eventName, catParams)
{
    coupon_add1(ean, tag, catParams);
    coupon_select1(ean, true, tag, catParams);
    update_basketcontrols();
    $(document).ready(function () {
        if (taggingCouponEventEnabled == 'true') {
            if (eventName != 'Default') {
                AddCouponEventHandler(eventName, tag, catParams);
            }
        }
    });
    //update_cookies_from_basket();
}

function coupon_filter(path)
{       
	if(path && path != 'home')
	{
		$('ul.couponZone li').hide();
		$('ul.couponZone li[path^="'+path+'"]').filter(':not(.printed)').show();
	}
	else
		$('ul.couponZone li').filter(':not(.printed)').show();
		
	coupon_nav(path);
	$.cookie("couponNav", path ? path : null, { path: '/' });
}
coupon_initialize = true;

function coupon_select(ean, selected)
{
	var $coupon = $('.couponZone li[ean="'+ean+'"]');
	if($coupon)
	{
		if(selected)
		{
			$coupon.find('input:checkbox').attr({checked:true,disabled:'disabled'});
			$coupon.addClass('selected');
			$coupon.find('label').text('Το κουπόνι επιλέχτηκε');

            // Update cookie, if needed	
            var cookieToPrint = $.cookie("CouponsToPrintPG");
            var listToPrint;
            if (cookieToPrint)
            {
	            listToPrint = cookieToPrint.split('|');
	            if ($.inArray(ean, listToPrint) == -1)
	            {
                    listToPrint.push(ean);
                    $.cookie("CouponsToPrintPG", listToPrint.join('|'), { path: '/' });
                }
	        }
	        else
	        {
	            listToPrint = new Array();
                listToPrint.push(ean);
                $.cookie("CouponsToPrintPG", listToPrint.join('|'), { path: '/' });
	        }
		}
		else{
			$coupon.find('input:checkbox').removeAttr("checked");
			$coupon.find('input:checkbox').removeAttr("disabled");
			$coupon.removeClass('selected');
			$coupon.find('label').text('Επιλέξτε αυτό το κουπόνι');
		}
	}
}

function coupon_select1(ean, selected, tag,  catParams)
{
	var $coupon = ($('.couponZone li[ean="'+ean+'"]') && $('.couponZone li[tag="'+tag+'"]'));
	if($coupon)
	{
		if(selected)
		{
			$coupon.find('input:checkbox').attr({checked:true,disabled:'disabled'});
			$coupon.addClass('selected');
			$coupon.find('label').text('Το κουπόνι επιλέχτηκε');

            // Update cookie, if needed	
            var cookieToPrint = $.cookie("CouponsToPrintPG");
            var listToPrint;
            if (cookieToPrint)
            {
	            listToPrint = cookieToPrint.split('|');
	            var couponValue = ean + "~" + tag + "~" + catParams;
	            if ($.inArray(couponValue, listToPrint) == -1)
	            {
                    listToPrint.push(couponValue);
                    $.cookie("CouponsToPrintPG", listToPrint.join('|'), { path: '/' });
                }
	        }
	        else
	        {
	            listToPrint = new Array();
                var couponValue = ean + "~" + tag + "~" + catParams;
                listToPrint.push(couponValue);
                $.cookie("CouponsToPrintPG", listToPrint.join('|'), { path: '/' });
	        }
		}
		else
		{
			$coupon.find('input:checkbox').removeAttr("checked");
			$coupon.find('input:checkbox').removeAttr("disabled");
			$coupon.removeClass('selected');
			$coupon.find('label').text('Επιλέξτε αυτό το κουπόνι');
		}
	}
}

function coupon_add(ean)
{
	var $li = $('.couponSelectedTop li:not(.selected, .printed)').filter(':first');

	if($li && $('.couponZone li[ean="'+ean+'"]').length)
	{
		$li.addClass('selected');
		$li.removeClass('blank');
		$li.attr('ean', ean);
		$li.append('<a href="#" class="delete"></a><img src="/Assets/Modules/Campaigns/Coupons/' + ean + '_small.png" />');
		$li.find('a').click(function(e){
				coupon_delete($(this).parent().attr('ean'));
        		coupon_select(ean, false);
        		update_basketcontrols();
        		update_cookies_from_basket();
				e.preventDefault();
			});
	}
}

function coupon_add1(ean, tag, catParams)
{
	var $li = $('.couponSelectedTop li:not(.selected, .printed)').filter(':first');

	if($li && $('.couponZone li[ean="'+ean+'"]').length && $('.couponZone li[tag="'+tag+'"]').length)
	{
		$li.addClass('selected');
		$li.removeClass('blank');
		$li.attr('ean', ean);
		$li.attr('tag', tag);
		$li.attr('catparams', catParams);
		$li.append('<a href="#" class="delete"></a><img src="/Assets/Modules/Campaigns/Coupons/' + ean + '_small.png" />');
		$li.find('a').click(function(e){
				coupon_delete1($(this).parent().attr('ean'), $(this).parent().attr('tag'), $(this).parent().attr('catparams'));
        		coupon_select1(ean, false, tag, catParams);
        		update_basketcontrols();
        		update_cookies_from_basket();
				e.preventDefault();
			});
	}
}

function coupon_delete1(ean, tag, catParams)
{
	var $li =  ( $('.couponSelectedTop li[ean="'+ean+'"]') && ($('.couponSelectedTop li[tag="'+tag+'"]')));
	if ($li) {

	    $(document).ready(function () {
	        if (taggingCouponEventEnabled == 'true') {
	            RemoveCouponEventHandler('RemoveCouponFromBasket', tag, catParams);
	        }
	    });

		$li.remove();
		$('.couponSelectedTop ul').append("<li class='blank'></li>");
	}
}

function coupon_delete(ean)
{	
	var $li = $('.couponSelectedTop li[ean="'+ean+'"]');
	if($li)
	{
		$li.remove();
		$('.couponSelectedTop ul').append("<li class='blank'></li>");
	}
}

function coupon_print(ean, validity)
{
	var $li = $('.couponSelectedTop li[ean="'+ean+'"]');
	
	if($li)
	{
		$li.removeClass('selected').addClass('printed');
		$li.find('a').replaceWith('<span class="printOff"></span>');
		$li.attr('validity',validity);
		$('.couponZone li[ean="'+ean+'"]').addClass('printed');
		$('.couponZone li[ean="'+ean+'"]').hide();
		
		$li.hover(showToolTip,hideToolTip).mousemove(moveToolTip);
	}
}

function coupon_send()
{
	return tmpCoupons;
}

function update_basketcontrols()
{
    // UPDATE message saying how many coupons are left to print
	var $set = $('.couponSelectedTop li:not(.selected, .printed)')
	var text = $set.length == 1 ? $set.length+" κουπόνι" : $set.length+" κουπόνια"
	$('.leftCoupons p span').text(text);
	
	//UPDATE AMOUNT
	var amount = 0;
	$('.couponSelectedTop ul li:has(img)').each(function(){
		var ean = $(this).attr('ean');
		amount += parse_float_from_price_content_html($('.couponZone li[ean="'+ean+'"]').find('.pricecontent').text());
	});
	
	amount = amount.toFixed(2);
	$('.economyBox').html(amount+"<span>€</span>");
	
	//UPDATE BTNPRINT and
	//show message about selected coupons and printing (below
	//top print button), if and only if print button is enabled
	if($('.couponSelectedTop li.selected').length)
	{
		$('.btnPrint').addClass('active');
		$('.btnPrint').removeAttr('disabled');
	    $('.printMention span').show();
	}
	else
	{
		$('.btnPrint').removeClass('active');
		$('.btnPrint').attr('disabled', 'disabled');
    	$('.printMention span').hide();
	}

    // On Cross-Selling page: enable/disable print button
	if($('.couponZone  li.selected').length)
	{
		$('.btnLaunchPrint').addClass('active');
		$('.btnLaunchPrint').removeAttr('disabled');
	}
	else
	{
		$('.btnLaunchPrint').removeClass('active');
		$('.btnLaunchPrint').attr('disabled', 'disabled');
    }
	
	// Show message telling user to fill basket, if basket is empty, hide it otherwise
	if($('.couponSelectedTop li:has(img)').length)
		$('.waitinCoupon').hide();
	else
		$('.waitinCoupon').show();
}

function parse_float_from_price_content_html(priceContentHtml)
{
    return parseFloat(priceContentHtml
        .replace("<span>", "")
        .replace("</span>", "")
        .replace("<sup>", "")
        .replace("</sup>", "")
        .replace("€", "").replace(",", "."));
}

function init_basketcontent_and_couponselections_from_cookies()
{
	var list = new Array();
	
	var couponsPrinted = $.cookie("PrintedCouponsPG");
	if(couponsPrinted)
	{
		list = couponsPrinted.split('|');
		var tab;
		for(var i=0; i<list.length; i++)
		{
			tab = list[i].split('_');
			coupon_add(tab[0]);
			coupon_print(tab[0],tab[1]);
		}
	}

	var couponsToPrint = $.cookie("CouponsToPrintPG");	
	if(couponsToPrint)
	{
		list = couponsToPrint.split('|');
		
		for(var i=0; i<list.length; i++)
		{
		    var couponValue = new Array();
		    couponValue = list[i].split('~');
			coupon_add1(couponValue[0], couponValue[1], couponValue[2]);			
			coupon_select1(couponValue[0], true, couponValue[1], couponValue[2]);
		}
	}
}

function update_cookies_from_basket()
{
	//Printed coupons
	var listPrinted = new Array();
	
	var couponsPrinted = $.cookie("PrintedCouponsPG");
	if(couponsPrinted)
	{
		listPrinted = couponsPrinted.split('|');
	}
	
	$('.couponSelectedTop li.printed').each(function(){
		if ($.inArray($(this).attr('ean')+'_'+$(this).attr('validity'), listPrinted) == -1)
		{
			listPrinted.push($(this).attr('ean')+'_'+$(this).attr('validity'));
		}
	});	
	if(listPrinted.length)
		$.cookie("PrintedCouponsPG", listPrinted.join('|'), { path: '/' });
	
	//Coupons to Print
	var listToPrint = new Array();
	$('.couponSelectedTop li:has(img)').each(function(){
	    if ($.inArray($(this).attr('ean')+'_'+$(this).attr('validity'), listPrinted) == -1)
	    {
	        var couponValue = $(this).attr('ean') + "~" + $(this).attr('tag') + "~" + $(this).attr('catparams');
            listToPrint.push(couponValue);
		}
	});
    $.cookie("CouponsToPrintPG", listToPrint.join('|'), { path: '/' });
}

function getTreeNav()
{
	var listRub = new Array();
	$('ul.couponZone li').filter(':not(.printed)').each(function(){
		listRub.push($(this).attr('path'));
	});
	
	for(var i=0;i<listRub.length;i++)
	{
		classList = listRub[i].split('/');
		makeTree(navData, classList);
	}
}

function makeTree(parent, tab)
{
	if(tab.length)
	{
		var id = tab.shift();
		if(id.length)
		{
			if(!parent[id])
				parent[id] = {label:id}
		
			makeTree(parent[id], tab);
		}
	}
}

function coupon_nav(path)
{
	var navHTML = "";
	var navRail = "";
	var navId = "";
	var prevId = "";
	var prevClass = "";
	var num = 0;
	var homelink = "";
	var categorylink = "";
	var brandlink = "";
	
	$('.summaryRailWay ul li').remove();
	$('ul.summaryList li').remove();
	
	var all = $('ul.couponZone li').filter(':not(.printed)').length;
		
	if(path && path != 'home')
	{
		var pathList = path.split('/');
		
		var data = getNavData(pathList.slice(0), navData);
		for(var id in data)
		{
			if(data[id] instanceof Object)
			{
				navId = path+"/"+id;
				num = $('ul.couponZone li[path^="'+navId+'"]').filter(':not(.printed)').length;				
				brandlink = $('ul.couponZone li[path^="'+navId+'"]').attr('brandlink');
				navHTML += "<li path='"+navId+"'><a href='" + brandlink + "'>"+data[id].label+"</a> <em>("+num+")</em></li>";
			}
		}
		
		navRail = "<li path='home'><a href='#'>Όλα τα κουπόνια <em>("+all+")</em></a></li>";		
		navId = "";
		while(pathList.length)
		{
			var id = pathList.shift();
			navId += navId != "" ? "/"+id : id;
			num = $('ul.couponZone li[path^="'+navId+'"]').filter(':not(.printed)').length;
			
			if(pathList.length == 0)
				navRail += "<li class='last'><span>"+id+"<em>("+num+")</em></span></li>";
			else
			{			
		        categorylink = $('ul.couponZone li[path^="'+navId+'"]').attr('categorylink');				        
				navRail += "<li path='"+navId+"'><a href='"+categorylink+"'>"+id+"<em>("+num+")</em></a></li>";
		    }
			if(pathList.length == 1)
			{
				var prevClass = navId;
				var prevId = " "+id;
			}
		}	
		
		if (prevClass == '')
		    prevClass = 'home'
		navHTML += "<li path='" + prevClass + "' class='back'><a href='#'>επιστροφή σε όλα τα κουπόνια" + prevId + "</a></li>";
	}
	else
	{		
	    path = '';
		for(var id in navData)
		{
			num = $('ul.couponZone li[path^="'+id+'"]').filter(':not(.printed)').length;
			categorylink = $('ul.couponZone li[path^="'+id+'"]').attr('categorylink');
			navHTML += "<li path='"+id+"'><a href='"+categorylink+"'>"+navData[id].label+"</a> <em>("+num+")</em></li>";
		}
		navRail = "<li class='last'><a href='#'>Όλα τα κουπόνια <em>(" + all + ")</em></a></li>";
	}
	
	$('.summaryRailWay ul').append(navRail);
	$('ul.summaryList').append(navHTML);
	
	$('.wpSummaryListTop li').click(function(e){
				//coupon_filter($(this).attr('path'));
				var path = $(this).attr('path');
				location.hash = path ? path : '';
				e.preventDefault();
			});
}

// Sets up periodic check for change in the cookies CouponsToPrint and PrintedCoupons
// cookie (once every second), to update basket accordingly. The basket update must be
// done this way (using polling) since there are overlays that modify the cookies, but
// the main coupon page is not notified of these changes.
function setup_cookie_polling()
{
    setInterval("poll_coookies();", 1000);
}

function poll_coookies()
{
    if (currentCouponsToPrintCookieValue != $.cookie("CouponsToPrintPG"))
    {
        currentCouponsToPrintCookieValue = $.cookie("CouponsToPrintPG");
        if (currentCouponsToPrintCookieValue != null)
        {
            var couponsToPrintStructs = currentCouponsToPrintCookieValue.split('|');
		    for(var i = 0; i < couponsToPrintStructs.length; ++i)
		    {
                if (couponsToPrintStructs[i])
                {
		            var couponsToPrintEanAndTag = couponsToPrintStructs[i].split("~");
		            if (couponsToPrintEanAndTag && couponsToPrintEanAndTag[0] && couponsToPrintEanAndTag[1] && couponsToPrintEanAndTag[2])
		            {
		                var couponToPrintEan = couponsToPrintEanAndTag[0];
		                var couponTag = couponsToPrintEanAndTag[1];
						var couponCatParams = couponsToPrintEanAndTag[2];
		                var $li = $('.couponSelectedTop li[ean="'+couponToPrintEan+'"]');
		                if($li.length == 0)
		                {
		                    coupon_add1(couponToPrintEan, couponTag, couponCatParams);
    		                coupon_select1(couponToPrintEan, true, couponTag, couponCatParams);
		                }
		            }
		        }
            }
        }
    	update_basketcontrols();
    }

    if (currentPrintedCouponsCookieValue != $.cookie("PrintedCouponsPG"))
    {
        currentPrintedCouponsCookieValue = $.cookie("PrintedCouponsPG");
        if (currentPrintedCouponsCookieValue != null)
        {
            var printedCoupons = currentPrintedCouponsCookieValue.split('|');
		    for(var i = 0; i < printedCoupons.length; ++i)
		    {
		        var printedCouponEan = printedCoupons[i].split("_")[0];
		        var printedCouponValidityDate = printedCoupons[i].split("_")[1];
		        coupon_print(printedCouponEan, printedCouponValidityDate);
            }
        }
    	update_basketcontrols();
    }
}

function getNavData(list, tab)
{
	if(list.length)
	{
		var id = list.shift();
		tab = getNavData(list, tab[id]);
	}
	
	return tab;
}

function showToolTip(e)
{
	$('.toolTip').show();
	$('.toolTip span').text("Το κουπόνι είναι έγκυρο για το κατάστημα μέχρι " + $(this).attr('validity'));
}

function hideToolTip(e)
{
	$('.toolTip').hide();
}

function moveToolTip(e)
{
	var $e_x = e.pageX;
	var $e_y = e.pageY;
	
	var $tt = $('.toolTip');
	$tt_x = $tt.outerWidth();
	$tt_y = $tt.outerHeight();
	
	var $bd = $('body');
	$bd_x = $bd.outerWidth();
	$bd_y = $bd.outerHeight();
	
	$tt.css({
		'top': $e_y+$tt_y > $bd_y ? $e_y - $tt_y : $e_y,
		'left': $e_x+$tt_x + 20 > $bd_x ? $e_x - $tt_x - 10 : $e_x + 15
	});
}

function couponUrlToProperCase()
{
    var listRub = new Array();
    var newCouponNavValue = "";
    var couponNavValue = $.cookie("couponNav");

    $('ul.couponZone li').filter(':not(.printed)').each(function(){
        listRub.push($(this).attr('path')+ "," +$(this).attr('seoTitle'));
    });

    if (couponNavValue != null)
    {
        for(var i=0; i<listRub.length; i++)
	    {		    
	        var splitList = listRub[i].split(",");
	        var splitListRub = splitList[0].toString().split("/");
	        var splitListSEO = splitList[1].toString().split("/");
	        var splitCouponNavValue = couponNavValue.split("/");
            
	        if(splitCouponNavValue.length == 1)
	        {	            
	        	if(splitListSEO[0] != null && couponNavValue.toLowerCase() == splitListSEO[0].toLowerCase())
    		        newCouponNavValue = splitListRub[0];  
	        }
	        else if (splitCouponNavValue.length == 2)
	        {   
	            if(splitListSEO[0] != null && splitListSEO[1] != null && splitCouponNavValue[0].toLowerCase() == splitListSEO[0].toLowerCase() && splitCouponNavValue[1].toLowerCase() == splitListSEO[1].toLowerCase())
		            newCouponNavValue = splitListRub[0] + "/" + splitListRub[1];
	        }
	    }
	}	
	$.cookie("couponNav", newCouponNavValue, { path: '/' });		
}

function moveEansToPrintedCouponCookie()
{
		var validityDate = new Date(new Date().getTime() + 30*24*60*60*1000);
		var validityMonth = validityDate.getMonth() + 1;
		var validityYear = validityDate.getFullYear();
		var validityDay = validityDate.getDate();
		var formattedValidityDate = validityDay + "/" + validityMonth + "/" + validityYear;
		
        var currentCouponsToPrintCookieValue = $.cookie("CouponsToPrintPG");
        if (currentCouponsToPrintCookieValue != null)
        {
			var printedCouponList = new Array();
            var couponsToPrintStructs = currentCouponsToPrintCookieValue.split('|');
		    for(var i = 0; i < couponsToPrintStructs.length; ++i)
		    {
                if (couponsToPrintStructs[i])
                {
		            var couponsToPrintEanAndTag = couponsToPrintStructs[i].split("~");
		            if (couponsToPrintEanAndTag && couponsToPrintEanAndTag[0] && couponsToPrintEanAndTag[1])
		            {
						var cookieValue = couponsToPrintEanAndTag[0] + "_" + formattedValidityDate;
		                printedCouponList.push(cookieValue);
		            }
		        }
            }
        }
		
		if($.cookie("PrintedCouponsPG"))
		{
			$.cookie("PrintedCouponsPG", $.cookie("PrintedCouponsPG") + "|"+ printedCouponList.join('|'), { path: '/' });
		}
		else
		{
			$.cookie("PrintedCouponsPG", printedCouponList.join('|'), { path: '/' });
		}
		
		$.cookie("CouponsToPrintPG", null, { path: '/' });	
}
