CoreForms = {
	
	replaceDateSelectsWithCalendar: function(label, container, minDate, maxDate, defaultDate) { // each pair of selects replaced (dd and mm/yy) needs a unique container		
		$("." + container + " select, " + "." + container + " label").hide();
		var dateToShow = "";
		$("." + container + " select option:selected").each(function() {
			if (!$(this).val()) {
				dateToShow = 'DD/MM/YYYY';
			} else if ($(this).val().length < 3) {
				dateToShow = $(this).val() + "/";	
			} else {
				dateToShow += $(this).val().substring(0,2) + "/20";
				dateToShow += $(this).val().substring(2,4);
			}
		});	

		
		$("." + container + " p").after('<label for="' + container + 'CalendarInput" class="hide">' + label + '</label><input type="text" maxlength="10" value="' + dateToShow + '" id="' + container + 'CalendarInput" name="' + container + 'CalendarInput" class="hiValParent1" />');

		$("#" + container + "CalendarInput").blur(function() {
			if($(this).val() === "") {
				$(this).val(dateToShow);
			}
		});
		
		$("#" + container + "CalendarInput").datepicker({
				dateFormat : 'dd/mm/yy',
				changeMonth : false,
				changeYear : false,
				mandatory : true,
				defaultDate: defaultDate,
				minDate: minDate, 
				maxDate: maxDate
				//onSelect: function() { this.focus(); }
			});
	},

	setDateSelects: function(container) {
			var fullDate = $("#"+container+"CalendarInput").val().split('/');
			if(fullDate[0].length == 1) fullDate[0] = '0'+fullDate[0]; // pad if necessary
			if(fullDate[1].length == 1) fullDate[1] = '0'+fullDate[1]; // pad if necessary
			fullDate = fullDate.join('');
			var dayToSet = fullDate.substr(0,2);
			var monthAndYearToSet = fullDate.substr(2,2) + fullDate.substr(6, 2); // ideally we'd use -2 for the last substr, but IE doesn't support it. Therefore, this will fail in 2100.
			$("."+container+" select option").attr("selected", false);
			$("."+container+" select option[value='"+dayToSet+"']").attr("selected",true);
			$("."+container+" select option[value='"+monthAndYearToSet+"']").attr("selected",true);
	},
	
	enableCheckAndUncheckAllSiblings: function(containerLiClass) {
		var inputContainer;
		var noOfSiblings = $(containerLiClass).siblings().length;
		
		// finds the parent UL once a checkbox has been clicked 
		function getParentUl(clickedElement){
			inputContainer = $(clickedElement);
			do {
				inputContainer = inputContainer.parent();
			} while (inputContainer.parent('ul').length == 0)
			inputContainer = inputContainer.parent();
		}
		
		// Functionality for Check all/Remove all
		$(containerLiClass + ' input').each(function() {
			$(this).click(function () {
				if(!inputContainer){
					getParentUl(this);
				}
				$(inputContainer).find(':checkbox').attr('checked', this.checked);
			});
		});
		// Functionality to check if Check all/Remove all is incorrect
		$(containerLiClass).siblings().find('input').each(function() {
			$(this).click(function () {
				if(!inputContainer){
					getParentUl(this);
				}
				var nonetickedArray = new Array();
				for(i=1;i<noOfSiblings+1;i++) {
					nonetickedArray[i-1] = $(inputContainer).find('li:eq(' + i + ') :checkbox').attr('checked');
				}
				var nonetickedArrayLength = nonetickedArray.length;
				var nonetickedCount = 0;

				for(var t=0;t<nonetickedArrayLength;t++){
					if(nonetickedArray[t]==true){
						nonetickedCount++;
					}
				}
				if(nonetickedCount==nonetickedArrayLength){
					$(containerLiClass + ' input').attr('checked',true);
				} else {
					$(containerLiClass + ' input').attr('checked',false);
				}
			});
		});
	},

	setupClearThisLine: function(callback) {
		$('.clear').replaceWith('<li class="clear"><a class="clearline" href="#">Clear</a></li>');
		
		$('.clear').click(function() {
			var playline = $(this).parent().parent();
			playline.find('input:text').val('');
			playline.find('input:checkbox:checked').attr('checked', false);
			playline.find('input:radio:checked').attr('checked', false);
			playline.removeClass('error');
			playline.find('ol, li').removeClass('error');
			
			// for hotpicks
			if($(this).parent().hasClass('hp_numline')) {
				$(this).parent().find('input').attr('disabled', 'disabled');
			}
			
			if(typeof(callback) == 'function') {
				callback(playline);
			}
			
			playline.find('input').valid();
			
			return false;
		});
	},
	
	setupClearAllLines: function(container) {
		$('.clearlines').replaceWith('<li class="clearlines"><a href="#">Clear all lines</a></li>');
		
		$('.clearlines').click(function() {
			$("#"+ container +" input:text").val('');
			$("#"+ container +" input:checkbox").attr('checked', false);
			$("#"+ container +" input:radio").attr('checked', false);
			$("#"+ container +" li input").valid();

			// for hotpicks
			$("#"+ container +" .hp_numline input").attr('disabled', 'disabled');
						
			return false;
		});
	},
	
	setupTotalContainer: function(container, value) {
		$(container).find('.playnow').after('<div class="total"><dl><dt>Total<\/dt><dd>&nbsp;&pound;<span id="totalAmount">'+value+'<\/span><\/dd><\/dl><\/div>');
	},
	
	setupLuckyDipLink: function(container, name) {
		$(container).find('.luckydip').replaceWith('<li class="luckydip"><a class="luckydiplink" href="#"><img src="/player/g/playslip/'+name+'_lucky_dip.png" alt="Lucky Dip" width="67" height="23" class="luckydipimg" /></a></li>');
	},
	
	fullBoards: function(element, numBoards, boardSize) {
		var board = new Array();
		var fullBoards = 0;
		var checkresults = false;
		for(var i = 0; i < numBoards; i++) {
			board[i] = 0;
		}
		$(element).parents('form').find('input[name^="drawGameBoards"], input[type="text"][name^="ticket"]').each(function() {
			if($(this).val() != '') {
				if($(this).parents('.c160').length) {
					checkresults = true;
					board[$(this).attr('id').substr(3, 1)]++;
				} else {
					board[$(this).attr('id').substr(2, 1)]++;
				}
			}
		});
		for(i in board) {
			if(board[i] == boardSize || board[i] > 0 && checkresults) fullBoards++;
		}
		return fullBoards;
	}
};
