/* Generic functions ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// */

//function S(query) {return $("div.ui-page-active "+query);}

function trim(s)
{
    return s.replace(/^\s+/, '').replace(/\s+$/, '');
}

function ltrim(s)
{
    return s.replace(/^\s+/, '');
}

function rtrim(s)
{
    return s.replace(/\s+$/, '');
}

function looksLikeMail(str) {
    var lastAtPos = str.lastIndexOf('@');
    var lastDotPos = str.lastIndexOf('.');
    return (lastAtPos < lastDotPos && lastAtPos > 0 && str.indexOf('@@') == -1 && lastDotPos > 2 && (str.length - lastDotPos) > 2);
}

/*
function enableA(aIndex)
{
	$("#"+aIndex).attr("href", $("#"+aIndex).attr("data-href"));
	$("#"+aIndex).attr("onclick", $("#"+aIndex).attr("data-onclick"));
	$("#"+aIndex).removeAttr('disable');
}

function disableA(aIndex)
{
	$("#"+aIndex).attr("data-href", $("#"+aIndex).attr("href"));
	$("#"+aIndex).attr("data-onclick", $("#"+aIndex).attr("onclick"));
	$("#"+aIndex).attr("href","#");
	$("#"+aIndex).attr("onclick","return");
	$("#"+aIndex).attr('disable',true);
}
*/

function onLoadDefault(isfile, phpself, referer)
{
	tracker(isfile, phpself, referer);
}

function onLoadParticipants(isfile, phpself, referer)
{
	tracker(isfile, phpself, referer);
	
	if( $("#listview-participants li").length == 0 )
	{
		//disableA("one-r");
		//$("#participants-button-next").addClass('ui-disabled');
		$("#p-participants-alert").show();
	}
	
	if( $("#listview-participants li").length > 0 )
	{
		//enableA("one-r");
		//$("#participants-button-next").removeClass('ui-disabled');
		$("#p-participants-alert").hide();
		
		serializedParticipants = '';
		for(i=0 ; i< $("#listview-participants li").length ; i++)
			serializedParticipants = serializedParticipants + cleanParticipant(  $("#listview-participants li:eq("+i+") a").html() ) + '\n';
		$("#hidden_participants").val(serializedParticipants);
		//alert( $("#hidden_participants").val() );
	}
}

function onLoadTransactions(isfile, phpself, referer)
{
	tracker(isfile, phpself, referer);
	
	if( $("#listview-transactions li").length == 0 )
	{
		//disableA("two-r");
		$("#p-transactions-alert").show();
	}
	
	if( $("#listview-transactions li").length > 0 )
	{
		//enableA("two-r");
		$("#p-transactions-alert").hide();
		
		serializedTransactions = '';
		for(i=0 ; i< $("#listview-transactions li").length ; i++)
			serializedTransactions = serializedTransactions + cleanTransaction(  $("#listview-transactions li:eq("+i+")").attr("title") ) + '\n';
		$("#hidden_transactions").val(serializedTransactions);
		//alert( $("#hidden_transactions").val() );
	}
}

function onLoadSettlements(isfile, phpself, referer)
{
	tracker(isfile, phpself, referer);
	
	if( $("#listview-settlements li").length > 0 )
	{
		//enableA("two-r");
		$("#p-settlements-alert").hide();
	}
}

/* Tracker /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  */

function tracker(isfile, phpself, referer)
{
	// isfile, phpself, referer, scd, spd, sw, sh
	var req = null; 

	if (window.XMLHttpRequest)
	{
		req = new XMLHttpRequest();
		if (req.overrideMimeType) 
			req.overrideMimeType('text/xml');
	} 
	else if (window.ActiveXObject) 
	{
		try {
			req = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e)
		{
			try {
				req = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
       	}

	req.onreadystatechange = function(){};
	req.open("GET", "/tracker.php?isfile=" + isfile + "&phpself=" + phpself + "&referer=" + referer + "&scd=" + screen.colorDepth + "&spd=" + screen.pixelDepth + "&sw=" + screen.width + "&sh=" + screen.height + "" , true);
	req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
	req.send(null);
}

/* Participants /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  */

function keyPressParticipant(event)
{
	if(event && event.which == 13 )
	{
		event.preventDefault();
		addParticipantString();
	}
}

function findParticipant(participantName, isCaseSensitive)
{
	var cleanedParticipant = cleanParticipant( participantName );
	var testParticipant = "";

	for(i=0 ; i< $("#listview-participants li").length ; i++)
	{
		testParticipant = cleanParticipant(  $("#listview-participants li:eq("+i+") a").html() );
		//alert( cleanedParticipant + " == " + testParticipant );

		if( isCaseSensitive != 0 && testParticipant == cleanedParticipant )
			return i;
		else if( isCaseSensitive == 0 && testParticipant.toLowerCase() == cleanedParticipant.toLowerCase() )
			return i;
	}
	return -1;
}

function cleanParticipant(text)
{
	//alert('cleanParticipant ['+text+']');
	
	retour = text.toString();
	retour = retour.replace(/^\s+/, '').replace(/\s+$/, '');
	retour = retour.replace(/[/*+<>\\^¨'"~&#{}()|`@°=,;:!?./§ù*%µ$£¤]/g,"");
	retour = retour.replace(/ /g,"_");
	return retour;
}

function removeParticipant(itemIndex, itemName)
{
	var itemIndexParticipant = '#participant_' + itemIndex;
	//var itemIndexFrom = '#from_' + itemIndex;
	//var itemIndexTo = '#to_' + itemIndex;
	//var itemIndexToLabel = '#to_label_' + itemIndex;

	$(itemIndexParticipant).remove();
	//$(itemIndexFrom).remove();
	//$(itemIndexTo).remove();
	//$(itemIndexToLabel).remove();

	$("#listview-participants").listview("refresh");

	if( $("#listview-participants li").length == 0 )
	{
		//disableA("one-r");
		//$("#participants-button-next").addClass('ui-disabled');
		$("#p-participants-alert").show();
	}
	
	if( $("#listview-participants li").length > 0 )
	{
		//enableA("one-r");
		//$("#participants-button-next").removeClass('ui-disabled');
		$("#p-participants-alert").hide();
		
		serializedParticipants = '';
		for(i=0 ; i< $("#listview-participants li").length ; i++)
			serializedParticipants = serializedParticipants + cleanParticipant(  $("#listview-participants li:eq("+i+") a").html() ) + '\n';
		$("#hidden_participants").val(serializedParticipants);
		//alert( $("#hidden_participants").val() );
	}
}

function addParticipantString()
{
	//var participantInput  = document.getElementById('participants_menu_input');
	//var participantsList = document.getElementById('participants_list_ul');

	var textParticipantValue = $("#text-participant").val();
	//alert(textParticipantValue);

	participantName = cleanParticipant(textParticipantValue);
	//alert(participantName);

	if( participantName == "") alert("Saisissez un nom !");
	else if( findParticipant(participantName, 0) != -1) alert( participantName + ' est déjà dans la liste !');
	else
	{
		var m = 0;
		var i = 0;
		for(i=0 ; i< $("#listview-participants li").length ; i++)
			m = Math.max(m, $("#listview-participants li:eq("+i+")").attr("id").substr(12));

		m = m+1;

		var newLiHtml = '<li data-icon="delete" id="participant_'+m+'"> <a onclick="removeParticipant(\''+m+'\',\''+participantName+'\')">'+participantName+'</a> </li>';
		var $newLi = $(newLiHtml);
		//alert(newLiHtml);

		var newOptionHtml = '<option value="'+participantName+'" id="from_'+m+'">'+participantName+'</option>';
		var $newOption = $(newOptionHtml);

		var newCheckboxLabelHtml = '<input type="checkbox" name="to" id="to_'+m+'" value="'+participantName+'" class="custom" onclick="checkParticipantTransaction();" /><label id="to_label_'+m+'" for="to_'+m+'">'+participantName+'</label>';
		var $newCheckboxLabel = $(newCheckboxLabelHtml);

		$("#listview-participants").append($newLi).listview("refresh");
		//$("#select-from").append($newOption);
		//$("#checkbox-to").append($newCheckboxLabel);

		//$("to_"+m+"").checkboxradio("refresh");
		//$("two").page();
		//$("to_label_"+m+"").page();
	}

	$("#text-participant").val("");

	if( $("#listview-participants li").length > 0 )
	{
		//enableA("one-r");
		//$("#participants-button-next").removeClass('ui-disabled');
		$("#p-participants-alert").hide();
		
		serializedParticipants = '';
		for(i=0 ; i< $("#listview-participants li").length ; i++)
			serializedParticipants = serializedParticipants + cleanParticipant(  $("#listview-participants li:eq("+i+") a").html() ) + '\n';
		$("#hidden_participants").val(serializedParticipants);
		//alert( $("#hidden_participants").val() );
	}
}

function nextParticipant()
{	
	if( $("#listview-participants li").length == 0 )
		alert("Ajoutez au moins un participant avant de passer aux transactions... et au moins deux pour que ce soit utile ;)");
	else
		document.form_participants.submit();
}

/* Transaction /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// */

function keyPressTransaction(event)
{
	if(event && event.which == 13)
	{
		event.preventDefault();
		addTransaction();
	}
}

function cleanCurrency(text)
{
	//alert('cleanCurrency ['+text+']');
	
	retour = text.toString();
	retour = retour.replace(/[/*+<>\\^¨"~&#{}()|`@°=,;:!?./§ù*%µ$£¤]/g,"");
	retour = retour.toUpperCase();
	return retour;
}

function cleanDescription(text)
{
	//alert('cleanDescription ['+text+']');
	
	retour = text.toString();
	retour = retour.replace(/[/*+<>\\^¨"~&#{}()|`@°=,;:!?./§ù*%µ$£¤]/g,"");
	return retour;
}

function cleanTransaction(text)
{
	//alert('cleanTransaction ['+text+']');
	
	retour = text.toString();
	//retour = retour.replace(/[/*+<>\\^¨"~&#{}()|`@°=,;:!?./§ù*%µ$£¤]/g,"");
	//retour = retour.toUpperCase();
	return retour;
}

function removeTransaction(itemIndex, itemName)
{
	var itemIndexTransaction = '#transaction_' + itemIndex;

	$(itemIndexTransaction).remove();

	$("#listview-transactions").listview("refresh");

	if( $("#listview-transactions li").length == 0 )
	{
		//disableA("two-r");
		$("#p-transactions-alert").show();
	}
	
	if( $("#listview-transactions li").length > 0 )
	{
		//enableA("two-r");
		$("#p-transactions-alert").hide();
		
		serializedTransactions = '';
		for(i=0 ; i< $("#listview-transactions li").length ; i++)
			serializedTransactions = serializedTransactions + cleanTransaction(  $("#listview-transactions li:eq("+i+")").attr("title") ) + '\n';
		$("#hidden_transactions").val(serializedTransactions);
		//alert( $("#hidden_transactions").val() );
	}
}

function checkAllParticipantsTransaction()
{
	if( $("#to_0").attr('checked') == undefined  )
	{
		$(":checkbox").each(function() {
			if( $(this).attr("id") != "to_0" )
			{
				//alert( $(this).attr("id") );
				if( $(this).attr("id") != 0 ) $(this).attr("checked",false).checkboxradio("refresh");
			}
		});
	}
	else
	{
		$(":checkbox").each(function() {
			if( $(this).attr("id") != "to_0" )
			{
				//alert( $(this).attr("id") );
				$(this).attr("checked",true).checkboxradio("refresh");
			}
		});
	}
}

function checkParticipantTransaction()
{
	var allChecked = true;

	$(":checkbox").each(function() {
		// If at least one checkbox is not checked, we uncheck the All checkbox
		if( $(this).attr("id") != "to_0" && this.checked == false )
		{
			 $("#to_0").attr("checked",false).checkboxradio("refresh");
			allChecked = false;
		}
	});

	if( allChecked == true ) $("#to_0").attr("checked",true).checkboxradio("refresh");
}

function addTransaction()
{
	var transactionFrom = $("#select-from option:selected").val();
	var transactionTo = '';
	var transactionToHuman = '';
	var transactionAmount = $("#text-amount").val();
	transactionAmount = transactionAmount.replace(/,/g,".");
	var transactionCurrency = $("#select-currency option:selected").val();
	var transactionDescription = $("#text-description").val();

	//alert(transactionFrom + '---' + transactionAmount +'---'+ transactionCurrency +'---'+ transactionDescription);

	// check who has paid (must be not empty)
	if( transactionFrom == "" )
	{
		alert("Veuillez indiquer la personne qui a payé.");
	}
	// check that there is a non null amount
	else if( transactionAmount == "" || isNaN(parseFloat(transactionAmount)) || parseFloat(transactionAmount) == 0 )
	{
		alert("Entrez un montant non nul pour le paiement.");
	}
	// check that a currency is selected
	else if( transactionCurrency == "" )
	{
		alert("Choisissez une devise pour le paiement.");
	}
	// check that there is a description for the transaction
	else if( transactionDescription == "" )
	{
		alert("Entrez une description pour le paiement.");
	}
	// otherwise we are good to go
	else
	{
		transactionAmount = parseFloat(transactionAmount);
		transactionCurrency = cleanCurrency(transactionCurrency);
		transactionDescription = cleanDescription(transactionDescription);
		transactionFrom = cleanParticipant(transactionFrom);
		transactionTo = '';

		// Loop to add all transactionTo names separated by a space
		if( $("#to_0").attr("checked") )
		{
			transactionTo = "*";
		}
		else
		{
			$(":checkbox").each(function() {
				if( $(this).attr("id") != "to_0" )
				{
					if( $(this).attr("checked") ) transactionTo = transactionTo + cleanParticipant( $(this).val() ) + ' ';
				}
			});
		}

		transactionTo = trim(transactionTo);

		if( transactionTo == "*" )
			transactionToHuman = "Tous";
		else
			transactionToHuman = transactionTo;

		var m = 0;
		var i = 0;
		for(i=0 ; i< $("#listview-transactions li").length ; i++)
			m = Math.max(m, $("#listview-transactions li:eq("+i+")").attr("id").substr(12));

		m = m+1;
 
		var newLiHtml = '<li data-icon="delete" id="transaction_'+m+'" title="'+transactionFrom+'\t'+transactionTo+'\t'+transactionAmount+'\t'+transactionCurrency+'\t// '+transactionDescription+'"> <a onclick="removeTransaction(\''+m+'\',\''+transactionDescription+'\');"><h3>'+transactionAmount+' '+transactionCurrency+' - '+transactionDescription+'</h3> <p>de '+transactionFrom+' à '+transactionToHuman+'</p> </a> </li>';
		var $newLi = $(newLiHtml);

		$("#listview-transactions").append($newLi).listview("refresh");

		if( $("#listview-transactions li").length > 0 )
		{
			//enableA("two-r");
			$("#p-transactions-alert").hide();
			
			serializedTransactions = '';
			for(i=0 ; i< $("#listview-transactions li").length ; i++)
				serializedTransactions = serializedTransactions + cleanTransaction(  $("#listview-transactions li:eq("+i+")").attr("title") ) + '\n';
			$("#hidden_transactions").val(serializedTransactions);
			//alert( $("#hidden_transactions").val() );
		}
	}
}

/* Settlements /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// */

function submitSettlements()
{
	var textTitleValue = $("#text-title").val();
	var textEmailValue = $("#text-email").val();
	
	if( textTitleValue == "" )
	{
		alert("Entrez un titre valide pour le fichier de remboursements !");
	}
	else if( !looksLikeMail(textEmailValue) )
	{
		alert("Entrez un email valide pour le fichier de remboursements !");
	}
	else
	{
		document.form_settlements.submit();
	}
}
