var style = 'BASEONLINE';

// listeners
jQuery(document).ready(function(){
	if ($('span[id="lblNextPage"]')) {
	    //next_page = $('#lblNextPage').text();;
	}else {
	    next_page = 'Next page';
	}
	
	if ($('span[id="lblPreviousPage"]')) {
	    //previous_page = $('#lblPreviousPage').text();
	}else {
	    previous_page = 'Previous page';
	}
	
	// initial hiding
    $('div.premiumCreditlisting div.data').hide();
    $('div.premiumCreditlisting').append("<div class='spinner'><img src='/_img/general/spinner.gif' /></div>");
    $('div.premiumCreditlisting div.spinner').hide().fadeTo(0,0);
    
    // tabs
    var firstForm = setTabbing();
    
    // datepicker & default date
    setDatePickers();
    
    // prepair for ajax
    $('.premiumCreditlisting').each(function(){prepairForAjax($(this))});
	
	if (typeof myStyle != 'undefined') {
		// Override the style variable
		style = myStyle;
	}
	
	if (style !== 'BASEONLINE') {
		getPremiumCss();
	}
	
	getLastSearchResults($('.premiumCreditlisting'));
});

$.extend({
  getUrlVars: function(){
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for(var i = 0; i < hashes.length; i++)
    {
      hash = hashes[i].split('=');
      vars.push(hash[0]);
      vars[hash[0]] = hash[1];
    }
    return vars;
  },
  getUrlVar: function(name){
    return $.getUrlVars()[name];
  }
});

function getPremiumCss()
{	
	var cssValue = $.getUrlVar('style');
	var styleElement = $('head');
	if(cssValue == "undefined") return;	
	
	$.ajax({
		url:  contextPath + '_css/brands/premium_' + cssValue + '.css',
		
		success: function(data) {
		  	style = cssValue;
		  	
			displayPremiumCss(data);				
	  	},
	  	
  		error: function() {
  			// Take the default one.
			$.get(contextPath + '_css/brands/premium_' + style + '.css',function(data){
				 displayPremiumCss(data);
		 	});	
		 			
		}		  
	});
	
}

function displayPremiumCss(data) {
	$('head').append('<style type="text/css">' + data+ '</style>');	
	if ($('.btnReset').css('background-image') == 'none') {$('.btnReset')[0].value ='Reset>'} else {$('.btnReset')[0].value =''};
	if ($('.btnGo').css('background-image') == 'none') {$('.btnGo')[0].value ='Go>'}else {$('.btnGo')[0].value =''};
}

function setTabbing(){

    var tab = false;
    var firstForm;

    var i=0;
    $('#premiumCreditTabs ul:first li a').each(function(){
        var a = $(this);
        var href = a.attr('href');
        var div = $(href);

        if (i==0) {
        	firstForm = div.find('form');
        }
        var li = a.parents('li');
        if(div && tab){
            div.hide();
        }else{
            li.addClass('active');
            tab = true;
        }
        a.attr('href','javascript:void(0);');

        a.click(function(){
            ul = $(this).parents('ul');
            li = $(this).parents('li');
            lis = li.siblings();
            lis.removeClass('active');
            li.addClass('active');
            divs = ul.siblings('div:not(#'+href+')');
            divs.hide();
            div.show();

            var form = div.find('form');
            form.submit();
        });
        i++;
    });

    return firstForm;
}

function setDatePickers(){
    $('form.dateRange input:text').each(function(){
        input = $(this);
        input.datepicker({
        	showOn: 'both',
        	buttonImage: contextPath + '_img/general/datepicker.gif',
        	buttonImageOnly: true,
        	buttonText: '',
        	dateFormat: 'dd/mm/yy',
        	changeMonth: true,
        	changeYear: true, firstDay: '1',
        	hideIfNoPrevNext:true, minDate: new Date(2006, 0, 1),
        	nextText: lbl_next,
        	prevText: lbl_previous
        });
    });
}

function prepairForAjax(div){
    $('.btnReset').click(function(){		
		$('#serviceId')[0].value = '';
		$("input[name*='fromDate']")[0].value = '';
		$("input[name*='toDate']")[0].value = '';	
	});	
	
	$('.btnGo').click(function()
	{			
		
		var dataListObject = renderDataListObject(div, false);	
		sendDataListObject(dataListObject,div);
	});	
}

function getLastSearchResults(div) {
	PremiumServiceHandler.getLastSearchCriteria({
		
		callback:function(returnedData) {
			if (returnedData) {
				
				if (returnedData.serviceId) {
					$('input[name="serviceId"]').val(returnedData.serviceId);
				}
				
				if (returnedData.serviceBeforeDate) {
					$('input[name="toDate"]').val(createDate(returnedData.serviceBeforeDate));
				}
				
				if (returnedData.serviceAfterDate) {
					$('input[name="fromDate"]').val(createDate(returnedData.serviceAfterDate));
				}
				
				var dataListObject = renderDataListObject(div, false);	
				sendDataListObject(dataListObject,div);
			}
		}
		
	});
}

function renderDataListObject(div, refetchData){

    div = $(div);

    var pageId = 1;

	var serviceBeforeDate;
	var serviceAfterDate;
	
	if (Date.parse(div.find('input[name="toDate"]').val())) {
		serviceBeforeDate = new Date(parseDate(div.find('input[name="toDate"]').val()));
	}
	
	if (Date.parse(div.find('input[name="fromDate"]').val())) {
		serviceAfterDate = new Date(parseDate(div.find('input[name="fromDate"]').val()));
	}

    return {
        serviceBeforeDate   : serviceBeforeDate,
        serviceAfterDate     : serviceAfterDate,
        serviceId  : div.find('input[name="serviceId"]').val(),
        exactMatch: true,
        pageSize    : -1,
        pageId      : pageId
    };
}

function sendDataListObject(obj,div){
	if (validateCriteria(obj)) {
		hideNoData(div);
	
		showSpinner(div);
	
		var div = $(div);
	    var search = obj;
	    PremiumServiceHandler.getContentServiceDistributionsByCriteria(search, {
	
	        callback:function(returnedData) {
	        	if (returnedData && returnedData.entities.length > 0) {
		            buildTable(div, returnedData);
		           
		            var totalRows = returnedData.totalSize;
	
					hideNoData(div);
		            div.find('.data').show();
		       }else {
		            div.find('.data').hide();
		            showNoData(div);
		       }
		       
		       setSpinnerHeight(div);
			   removeSpinner(div);
	        },
	
	        errorHandler: function(errorString, exception) {
		       removeSpinner(div);
	        }
	    });
	}
}

function validateCriteria(search) {
	var valid = true;
	var errors = '';
	
	if (trim(search.serviceId) == '') {
		valid = false;
		errors = errors + err_serviceIdRequired + '<br />'
	}
	
	if (search.serviceBeforeDate == null && search.serviceAfterDate == null) {
		valid = false;
		errors = errors + err_dateRangeRequired + '<br />'
	}
	
	if (search.serviceBeforeDate && search.serviceAfterDate ) {
		beforeDt = new Date(parseDate($('input[name="toDate"]').val()));
		afterDt =  new Date(parseDate($('input[name="fromDate"]').val()));
		if (afterDt.isAfter(beforeDt)) {
			valid = false;
			errors = errors + err_startAfterEnd + '<br />'
		}
	}
	
	if (!valid) {
		if (style == 'BASEONLINE') {
			showError(null,errors,'.dateRange','right');
		}else {
			showTableError(errors);
		}
	}else {
		if (style !== 'BASEONLINE') {
			hideTableError();
		}
	}
	
	return valid;
}

function showTableError(errors) {
	$('p.error').show();
	var p = $('p.error:visible');
	p.html('<strong>' + errors + '</strong>');
}

function hideTableError() {
	var p = $('p.error:visible');
	p.html('');
	p.hide();
}

function showNoData(div) {
	div.find('.error').show();
	var p = $('p.error:visible');
	p.html('<strong>' + lbl_noData + '</strong>');
}

function hideNoData(div) {
	var p = $('p.error:visible');
	div.find('.error').hide();
}

function showSpinner(div){

    var div = $(div);
    var spinner = div.find('.spinner').show();
    spinner.css({
        height: div.height()
    }).fadeTo('fast',0.3);

}


function removeSpinner(div){

    var div = $(div);
    div.find('.spinner').fadeTo('fast',0,function(){
        $(this).hide().height(0);
    });

}

function setSpinnerHeight(div){

    $(div).find('.spinner').css({
        height: div.height()
    });

}

function buildTable(div, returnedData) {
	var data = returnedData.entities;
	var div = $(div);


    var rows = '';
    var tbody = div.find('table:first tbody:first');
    for(i=0;i<data.length;i++){
    	rows += '<tr>';
    	rows += '<td class="tdPremium">';
    	
    	var serviceType = data[i].contentService.type.label;
    	var lblServiceType;
    	if (serviceType == 'SMS MO') {
    		lblServiceType = lbl_smsMO;
    	}
    	if (serviceType == 'SMS MT') {
    		lblServiceType = lbl_smsMT;
    	}
    	if (serviceType == 'MMS MO') {
    		lblServiceType = lbl_mmsMO;
    	}
    	if (serviceType == 'MMS MT') {
    		lblServiceType = lbl_mmsMT;
    	}
    	if (serviceType == 'WAP') {
    		lblServiceType = lbl_WAP;
    	}
    	if (serviceType == 'Voice') {
    		lblServiceType = lbl_call;
    	}
    	
    	rows += '<h5>'+ data[i].contentService.serviceId.serviceId + ' - ' + lblServiceType + ' - ' + lbl_periodFrom +  ' ' +  createDate(data[i].startDate)+ ' ' + lbl_periodUntil + ' ' + createDate(data[i].endDate) +'</h5>';
    	rows += '<table>';
		rows += '<tr>';
		var price = data[i].price;
		rows += '<th>' + lbl_setupPrice + ':</th>';
		
		if (price.setupPrice) {
			rows += '<td colspan="2">&euro; '+ formatDecimal(price.setupPrice, 4, true) +'</td>';
		}else {
			rows += '<td colspan="2">-</td>';
		}
		
		rows += '</tr><tr>';
		rows += '<th valign="top">' + lbl_minutePrice + ':</th>';
		
		if (price.minutePrice) {
			rows += '<td colspan="2" valign="top">&euro; '+formatDecimal(price.minutePrice, 4, true) +'</td>';
		}else {
			rows += '<td colspan="2" valign="top">-</td>';
		}
    	
    	rows += '</tr><tr>';
				
		rows += '<th>&nbsp;</th>';
		rows += '<td colspan="2" valign="top">&nbsp;</td>';
		
		rows += '</tr><tr>';
		
		var provider = data[i].contentProvider;
		
		rows += '<th valign="top">' + lbl_contentProvider + ':</th>';
		rows += '<td valign="top"><strong>'+provider.name +'</strong></td>';
		rows += '<th valign="top"></th>';
		rows += '<td valign="top"></td>';
		rows += '</tr><tr>';
		rows += '<th valign="top">' + lbl_address + ':</th>';
		
		var providerDetail = provider.currentDetail;
		
		if (providerDetail.street && !isUnknown(providerDetail.street)) {
			rows += '<td>' + providerDetail.street + '<br />';
		}else {
			rows += '<td> - <br />';
		}
		
		if (providerDetail.postalCode && !isUnknown(providerDetail.postalCode) && providerDetail.city && !isUnknown(providerDetail.city)) {
			rows += providerDetail.postalCode + ' ' + providerDetail.city + '<br />';
		}else {
			rows += '- <br />';
		}
		
		rows += $('#'+providerDetail.country).text() + '</td>';
		
		rows += '<th valign="top">' + lbl_customerService + ':</th>';
		
		if (providerDetail.phone && !isUnknown(providerDetail.phone)) {
			rows+= '<td valign="top">' + providerDetail.phone + '<br/>';
		}else {
			rows+= '<td valign="top"> - <br/>';
		}
		
		if (providerDetail.email && !isUnknown(providerDetail.email)) {
			if (isValidEmail(providerDetail.email)) {
				rows += '<a href="mailto:' + providerDetail.email + '">' + providerDetail.email + "</a><br />";
			}else {
				rows += providerDetail.email + '<br />';
			}
		}else {
			rows += '- <br />';
		}
		
		if (providerDetail.url && !isUnknown(providerDetail.url)) {
			if (isValidUrl(providerDetail.url)) {
				rows += '<a href="' + providerDetail.url + '" target="_blank">' + providerDetail.url + "</a><br />";
			}else {
				rows += providerDetail.url + '<br />'
			}
		}else {
			rows += '- <br />';
		}
		
		rows += '</td></tr><tr>';
		rows += '<th valign="top"></th>';
		
		if (providerDetail.website && !isUnknown(providerDetail.website)) {
			if (isValidUrl(providerDetail.website)) {
				rows += '<td><a href="' + providerDetail.website + '" target="_blank">' + providerDetail.website + "</a></td>";
			}else {
				rows += '<td>' + providerDetail.website + '</td>';
			}
		}else {
			rows += '<td> - </td>';
		}		
		
		rows += '</tr>';
		rows += '</table>';
		
		if ( i != data.length-1 ) {
			rows += '<tr><td class="tdEmptyPremium">&nbsp;</td></tr>';
		} 
		rows += '</tr>';
    };
    
    tbody.html(rows);
    setTableOddEven();
}

function createDate(dateField) {
	var dt = '-';
	if(dateField) {
		dt = new Date(dateField.getTime()).toString('dd/MM/yyyy'); 			
	}
	return dt;
}

function parseDate(dt) {
	return dt.substring(6,10) + '/' + dt.substring(3,5) + '/'+ dt.substring(0, 2); 
}

function createUrl(url) {
	if (url && (url.indexOf('http') == -1 || url.indexOf('https') == -1)) {
		return 'http://' + url;
	}
	
	return url;
}

function isUnknown(value) {
	if (value && value.toLowerCase() == 'unkown') {
		return true;
	}
	return false;
}

function formatDecimal(decimal) {
	formatDecimal(decimal, 2, false)
}

function formatDecimal(decimal, fragmentDigits, cents) {
	if (cents == true) {
		decimal = decimal / 100;
	}
	var fixedDecimal = decimal.toFixed(fragmentDigits);
	return formatStringToDecimalString(fixedDecimal.toString());
}

function formatStringToDecimalString(decimalTxt) {
	decimalTxt = decimalTxt.replace(',','');
	return decimalTxt.replace('.',',');
}
