var levels = new Array();
var descriptions = new Array();
var categories = new Array();
var selectedIndex = 0;
var levelIndecies = new Array();
var df_initX = 0;
var df_initY = 0;
var df_firstSelectionDone = false;

document.addEvent('domready', function(){
	// autoload language
	var ygt = new Gettext("dinform");
	
	var levelDrop = $('level_dropdown');
	df_initY = levelDrop.getStyle('top');
	df_initX = levelDrop.getStyle('left');
	if ($('df_users_level').selectedIndex == 0) {
		levelDrop.setStyle('top', '120px');
		levelDrop.setStyle('left', Math.round((990 - parseInt(levelDrop.getStyle('width')))/2));
		$('pageExplanation').setStyle('visibility', 'visible');
		$('productContent').fade('hide');
	} else {
		df_firstSelectionDone = true;
		$('buyButton').addClass('ok');
	}
	$('df_users_level').addEvent('change', levelClick);
	descriptions = $('descriptionColumn').getElements('div');
	
	$('buyButton').addEvent('click', orderProduct);
		
	$('campaignCode').addEvent('keyup', checkCampaignCode);
	lastCampaign = $('campaignCode').value;
	if (lastCampaign != "") {
		lastCampaignStatus = 1;
	}
	//toggleLevel(1);
	bindEvents();
});
function bindEvents() 
{
	categories = $('productColumn').getElements('div[id^=level]');
	for (var i = 0; i < categories.length; i++)
	{
		$(categories[i]).getElements('input').each(function(el) {
			el.addEvent('click', selectProduct);
			if (productID == 0 && el.checked) {
				productID = parseInt(el.value);
			}
		});
	}
	$('accessories').getElements('input').each(function(el) {
		el.addEvent('click', selectProduct);
	});
	
	$$('.funrunSelect').each(function(el) {
	el.addEvents({'change': selectProduct,
		'click':selectFunrunRadio});
		
	});
}
function selectFunrunRadio(event) 
{
	this.removeClass('disabled');
}
function orderProduct(e) {
	var gt = new Gettext("dinform");
	if (!df_firstSelectionDone && productID == 0) {
		e.stop();
		alert(gt.gettext("_DF_USERS_ERROR_SELECT_GOAL"));
	}
}
function modifyOrderResponse(response)
{
	if (response != null && response.ok == '1')
	{
		updateInvoiceHTML();
	}
}

function setOrder(ids, funrun)
{
	var req = new Request.JSON( {
		url :'./index.php?option=com_df_users&task=ajaxModifyOrder',
		method :'get',
		onComplete :modifyOrderResponse
	}).get( {
		'ids' :ids.join(','),
		'funrun' : funrun,
		'clear': 1,
		campaignCode: lastCampaign
	});
}

// credit: http://www.mcfedries.com/JavaScript/DaysBetween.asp
function days_between(date1, date2) {

    // The number of milliseconds in one day
    var ONE_DAY = 1000 * 60 * 60 * 24;

    // Convert both dates to milliseconds
    var date1_ms = date1.getTime();
    var date2_ms = date2.getTime();

    // Calculate the difference in milliseconds
    var difference_ms = Math.abs(date1_ms - date2_ms);
    
    // Convert back to days and return
    return Math.ceil(difference_ms/ONE_DAY);

}

function changeFunrun(event)
{
	updatePrice(event.target);
}

function updatePrice(select)
{
	var selected = select.options[select.selectedIndex].text;
	var id = select.options[select.selectedIndex].value;
	var rel = $(select.options[select.selectedIndex]).get('rel');
	
	var prices = rel.split(':');
	var discountPrice = prices[0];
	var fullPrice = prices[1];

	var html = discountPrice+',-';
	if (discountPrice != fullPrice) {
		html = '<del>'+fullPrice+'</del>'+html;
	}
	$(select.name+'price').set('html', html);
	$('selectedFunRun').set('value',id);
	
	
}
var productID = 0
var funrunID = 0;
function selectProduct(event)
{
	
	updateOrder();
}
function updateOrder()
{
	funrunID = 0;
	productID = 0;
	var a = new Array();
	var products = $('productColumn').getElements('input:checked');
	for (var i=0; i < products.length; i++)
	{
		if (products[i].get('rel') == 'accessory') continue;

		if (products[i].get('rel') == 'funrun') {
			funrunSelect = $(products[i].get('id')+'_select');
			funrunSelect.removeClass('disabled');
			funrunID = funrunSelect.options[funrunSelect.selectedIndex].value;
			updatePrice(funrunSelect);
		}
		productID = products[i].value;
		a.push(products[i].value);
	}
	
	if (a.length == 0) return;
	
	var accessories = $('accessories').getElements('input:checked');
	
	for (var i=0; i < accessories.length; i++)
	{
		a.push(accessories[i].value);
	}
	
	setOrder(a, funrunID);
}
function changeFunrun(event) {
	updateOrder();
}
function levelClick(event)
{
	if (this.selectedIndex == 0) return;
	var id = this.options[this.selectedIndex].value;
	selectedIndex = this.selectedIndex;
	
	if (!df_firstSelectionDone) {
		var morphObject = new Fx.Morph($('level_dropdown'), {
		    onComplete: function(){$('productContent').fade('in');} 
		});

		//we can also start our morph like we would start a tween
		//except we can now input multiple style properties
		morphObject.start({
		    top: df_initY,
		    left: df_initX
		});
		
		$('pageExplanation').fade('out');
		
		//df_firstSelectionDone = false;
	}
	// subtrack one to skip the first "click here to select" element
	toggleLevel(id);
}

function toggleLevel(levelid)
{
	/*for (var i=0; i< descriptions.length; i++)
	{*/
	$('productColumn').getElements('div[class~=products]').each(function (el) {
		el.removeClass('visible');
	});	
	$('descriptionColumn').getElements('div[class~=description]').each(function (el) {
		el.removeClass('visible');
	});	
	
	//descriptions[i].removeClass('visible');
	//	categories[i].removeClass('visible');
	//}
	
	$('level'+levelid).addClass('visible');
	$('description'+levelid).addClass('visible');
	
	// update funruns
	var funruns = $('level'+levelid).getElements('select[class~=funrunSelect]');
	console.log(funruns);
	for(var i=0;i<funruns.length;i++)
	{
		funruns[i].addClass('disabled');
	}
}


var lastCampaign = '';
var lastCampaignStatus = -1;
function campaignCodeResponse(json)
{
	var gt = new Gettext("dinform");
	if (json.status != null) {
		if (json.status == 0) {
			$('CampaignOK').removeClass('item-free');
			$('CampaignOK').addClass('item-taken');
			$('CampaignOK').set('text', gt.gettext('_DF_USERS_CAMPAIGN_CODE_ERROR'));
		} else if (json.status == '1') {
			$('CampaignOK').addClass('item-free');
			$('CampaignOK').removeClass('item-taken');
			$('CampaignOK').set('text', gt.gettext('_DF_USERS_CAMPAIGN_CODE_VALID'));
		} else {
			$('CampaignOK').removeClass('item-taken');
			$('CampaignOK').removeClass('item-free');
		}
		updateInvoiceHTML();
		updateProductListHTML();
		
		lastCampaignStatus = json.status;
	}
}

function checkCampaignCode()
{
	var code = this.get('value');

	if (code.length == 10) {
		if (code.length < 10 && lastCampaign.length == 10) {
			code = '';
		}
		
		if (code != lastCampaign) {
			lastCampaign = code;
			
			var req = new Request.JSON( {
				url :'./index.php?option=com_df_users&task=ajaxTestCampaignCode',
				method :'get',
				onComplete :campaignCodeResponse
			}).get( {
				'code' : lastCampaign
			});
			
		}
	} else {
		if (lastCampaignStatus == 1) {
			var req = new Request.JSON( {
				url :'./index.php?option=com_df_users&task=ajaxTestCampaignCode',
				method :'get',
				onComplete :campaignCodeResponse
			}).get( {
				'code' : ''
			});
			lastCampaign = '';
		}
		//if (lastCampaignStatus == 0) {
			$('CampaignOK').set('text', '');
			$('CampaignOK').removeClass('item-taken');
			$('CampaignOK').removeClass('item-free');
		//}
	}
}

function updateInvoice()
{
	checkCampaignCode();
}
function updateProductListHTML()
{
	if ($('productColumn') == null) return;
	
	var selectBox = $('df_users_level');
	var activeCategory = selectBox.options[selectBox.selectedIndex].value;
	var req = new Request.HTML( {
		url :'./index.php?option=com_df_users&task=ajaxProductListHTML',
		method :'get',
		onComplete :updateProductListHTMLResponse
	}).get({
		levelid: activeCategory
	});
}
function updateProductListHTMLResponse(html)
{
	if (html != null)
	{
		$('productColumn').set('text', '');
		//Inject the new DOM elements into the results div.
		$('productColumn').adopt(html);
		
		bindEvents();
	}
}
function updateInvoiceHTML()
{
	var req = new Request.HTML( {
		url :'./index.php?option=com_df_users&task=ajaxInvoiceHTML',
		method :'get',
		onComplete :updateInvoiceHTMLResponse
	}).get();
}

function updateInvoiceHTMLResponse(html)
{
	if (html != null)
	{
		$('productSummary').set('text', '');
		//Inject the new DOM elements into the results div.
		$('productSummary').adopt(html);

		df_firstSelectionDone = true;
		$('buyButton').addClass('ok');
	}
}