
var excludeChars = /<|>|\{|\}|\[|\]|\(|\)/;

String.prototype.trim = function() {

	var s = this.replace(/^\s+/, '');
	return s.replace(/\s+$/, '');
};

function onHoverLink(elem) {

	/* set up the focus and blur actions for the link */  
	$(elem).hover(
			function() {
				$(this).addClass('memb_hover');
			},
			function() {
				$(this).removeClass('memb_hover');
			}
	);
}

function onBlurLink(elem) { 
	
	$(elem).blur(
			function() {
				$(this).removeClass('memb_hover');
			}
	);
}

function showPopup() {

	$('#popup_content').fadeIn('fast');
	$('#window').fadeIn('fast');
}

function closePopup() {
	
	$('#popup_content').fadeOut('fast');
	$('#window').fadeOut('fast');
}

function bindOnClickPopup() {

	$('#help_row input[type="button"]').bind(
			'click',
			function() {
				showPopup();	
			});
}

function bindOnClosePopup() {

	$('#close').bind(
			'click',
			function() {
				closePopup();	
		}); 
}
/******************************************************************/

function getcValue(rowNum) {

	var rawCreditVal = new String($('#credit' + rowNum).fieldValue());
	rawCreditVal = rawCreditVal ? rawCreditVal.trim() : '';
	var creditVal = parseInt(rawCreditVal);

	return creditVal;
}

function getlValue(rowNum) {

	var returnValue = new String($('#lname' + rowNum).fieldValue());
	returnValue = returnValue ? returnValue.trim() : '';

	return returnValue;
}

function getfValue(rowNum) {

	var returnValue = new String($('#fname' + rowNum).fieldValue());
 	returnValue = returnValue ? returnValue.trim() : '';
 
	return returnValue;
}

function getNewTot() {

	var tmp = $('span#newtot').text();
	tmp = tmp ? tmp.trim() : '' ;
	return parseInt(tmp);
}

function getRunTot() {

	var tmp = $('span#runtot').text();
	tmp = tmp ? tmp.trim() : '' ;
	return parseInt(tmp);
}

function getInitBal(){

	var tmp = $('span#initbal').text();
	tmp = tmp ? tmp.trim() : '';
	return parseInt(tmp);
}

function isCValueInValid(cVal) {
	return (isNaN(cVal) == true || cVal <= 0);
}

function onClickAddRowButton(but, cnt) {

	/* check the fields for validity */
	var creditVal = getcValue(cnt-1);
	var errorMsg = '';

	if (isNaN(creditVal) == true) {
	
		if (creditVal) {
			errorMsg += 'The credit value: ' + rawCreditVal + ' is not a number.';
		} else {
			errorMsg += 'The credit value is empty.';
		}
	} else if (creditVal <=0) {
		errorMsg += 'The credit value ' + creditVal + ' must be greater than zero. ';
	}

	var fnameVal = getfValue(cnt-1);
	if (fnameVal && fnameVal.length == 0) {
		errorMsg += ' The first name field is empty. ';
	}

	var lnameVal = getlValue(cnt-1);
	if (lnameVal && lnameVal.length == 0) {
		errorMsg += ' The last name field is empty. ';
	}

		if (errorMsg.length > 0) {

			$('#msgsp').text(errorMsg);
		} else  {

		/* make the calculations for the credit fields */
		var newtot =  getNewTot(); /*parseInt($('span#newtot').text().trim());*/
		var runtot =  getRunTot(); /* parseInt($('span#runtot').text().trim());*/
		var initbal =  getInitBal(); /*parseInt($('span#initbal').text().trim());*/

		var newrunning = (runtot + creditVal);
		var newtot = initbal - newrunning;

		//('newtot = ' + newtot + ' init bal = ' + initbal + (newrunning > initbal));

		if (newrunning > initbal) {

			errorMsg = 'The credit total for new clients  - ' + newrunning  + 
					' - is greater that your credits of ' + initbal + '. You can save these clients now and then after purchasing more credits return and create more clients.';
			$('#msgsp').text(errorMsg);		
		} else {

			$('span#newtot').text(newtot);
			$('span#runtot').text(newrunning);


			$(but).parent().addClass("ecell");
			$(but).replaceWith("&nbsp;");

			var r = createClientInputRow();
			 $(".tbody").append(r);

 			/* set up the focus and blur actions*/  
			$('#create_clientfm :text').focus(
				function() {
					$(this).addClass('input_fields_focus');
				}
			);

			if (cnt == 0) {
				$("#fname" + cnt).focus();
			} else {
				$("#fname" + (cnt)).focus();
			}

			$('#create_clientfm input[type="text"]').blur(
				function() {
					$(this).removeClass('input_fields_focus');
				}
			);

         	$(".rcell input[type='button']").click(

        	 	function () {
            		onClickAddRowButton(this, cnt);
        		} // close function
     		); // close click (...
		} // close newtot >= initbal
		} // close errorMsg == 0
} // close function onClickAddRowButton


/******************************************************************/

function validateDate(dateStr) {

 	var monthPattern = "^(0[1-9])|(1[0-2])$";
	var yearPattern = "^(2[0-9]{3})|(199[0-9])$";
	var month30Pattern = "^(0[1-9])|([1-2][0-9])|(30)$";
	var month31Pattern = "^(0[1-9])|([1-2][0-9])|(3[0-1])$";
	var month28Pattern = "^(0[1-9])|([1-2][0-8])$";
	var months30Days  = ["04","05","06","09", "11"]; 
	var emptyArray = new Array();		 

	if (dateStr == null) {
		dateStr = "";
		//error = true;
		return emptyArray;
	}
  
	dateStr = dateStr.trim();
 
 	if (dateStr.length != 10) {
		return emptyArray;
	}

	var dateElem = dateStr.split("-");
 
 	if (dateElem.length != 3) {
		return emptyArray;
	}

	var day = dateElem[2];
	var month = dateElem[1];
	var year = dateElem[0];
 
	if (day.length != 2 || month.length != 2 || year.length != 4)	{
		return emptyArray;
	}

	var monthMatch =  month.match(monthPattern);
	var yearMatch = year.match(yearPattern);
	var dayMatch = null;
 
	if (monthMatch != null && yearMatch != null) {
 
 	if (month =='04' || month == '05' || month =='06' ||
			month == '09' || month == '11') {
 
	 		dayMatch = day.match(month30Pattern);
			if(dayMatch == null) {
				return emptyArray;
			}
		} else if (month != "02") {
 
			dayMatch = day.match(month30Pattern);
			if (dayMatch == null) {
				return emptyArray;
			}
		} else if (month == "02") {
 
			dayMatch = day.match(month28Pattern);
			if (dayMatch == null) {
				return emptyArray;
			}
		}
	} else {
		return emptyArray;
	}
	 return new Array(year, month, day);
}

function getDate(dateArray) {

	var dateObj = null;

	if (dateArray && dateArray.length ==3) {

		dateObj = new Date();
		dateObj.setFullYear(dateArray[0]);	
		dateObj.setMonth(dateArray[1] - 1);
		dateObj.setDate(dateArray[2]);
	}

	return dateObj;
}

function getFirstErrorMsg(dateEventArray, datePubArray){

	var errorMsgE = dateEventArray.length == 3 ? '' : ' event date ';
	var errorMsgP = datePubArray.length == 3 ? '' : ' available date ' ;
	var errorMsg = '';

	if (errorMsgE.length > 0 && errorMsgP.length > 0) {
		errorMsg = ' The ' + errorMsgE + ' and ' + errorMsgP +  ' are not properly formatted';
	} else if (errorMsgE.length > 0 && errorMsgP.length == 0) {
		errorMsg = ' The ' + errorMsgE + ' is not properly formatted';
	} else if (errorMsgP.length > 0 && errorMsgE.length == 0) {
		errorMsg = ' The ' + errorMsgP + ' is not properly formatted';
	} 

	return errorMsg;
}

function compareDates(dateEventArray, datePubArray){

	var dateEventObj = getDate(dateEventArray);
	var datePubObj = getDate(datePubArray);

	var todayObj = new Date();

	var errorMsg = datePubObj < dateEventObj ? ' The available date must be after the event date ' : '';
	if (errorMsg.length == 0) {
		errorMsg = todayObj > dateEventObj ? ' The event date cannot be in the past ' : ''; 
	}

	return errorMsg;
}

function validateUpdateEventData(eparams, rowData) {

	/* first, handle the date fields */
	var dateEvent = eparams['date_event'];
	var rowDateEvent = rowData['date_event'];
	var datePub = eparams['date_pub'];
	var rowDateEvent = rowData['date_pub'];
	
	var dateEl = new Array();
	var dateEventArray = validateDate(dateEvent);
	var datePubArray = validateDate(datePub);
	var errorMsg = getFirstErrorMsg(dateEventArray, datePubArray);

	/* second handle the text fields */
	var gname = new String(eparams['gname'] ? eparams['gname'] : '' );
	var status = new String(eparams['group_status'] ? eparams['group_status'] : '');
	var notes = new String(eparams['notes'] ? eparams['notes'] : '');
	gname = gname.trim();
	status = status.trim();
	notes = notes.trim();

	var lindx = gname.search(excludeChars);
	var sindx = status.search(excludeChars);
	var nindx = notes.search(excludeChars);

	if (gname.length == 0 || status.length == 0 ||
			lindx >= 0 || sindx >= 0 || nindx >=0 ) {
		errorMsg += " One or more of the required fields is empty or has the following characters: []{}<>";
	}
	
	if (errorMsg.length > 0) {
		return[false, errorMsg];

	} else {

		errorMsg = compareDates(dateEventArray, datePubArray);
		if (errorMsg.length > 0) {
			return[false, errorMsg];
		} else {
			return [true, ""];
		}
	}
}

function validateUpdateClientData(eparams) {

	var lname = new String(eparams['lname'] ? eparams['lname'] :  '');
	var fname = new String(eparams['fname'] ? eparams['fname'] : '' );
	
	lname = lname.trim();
	fname = fname.trim();

	var findx = fname.search(excludeChars);
	var lindx = lname.search(excludeChars);
	
	return lname.length > 0 && fname.length > 0 && findx <0 && lindx <0;
}

/*****************************************************************/

function showEventTable() {

	$('#event_table_wrapper').removeClass('hidden');
	$('#event_table_wrapper').addClass('visible');
}

function hideEventTable() {

	$('#event_table_wrapper').removeClass('visible');
	$('#event_table_wrapper').addClass('hidden');
}

function removeEventTable(){
	
	$('#event_table_wrapper div').remove();
	$('#event_table_wrapper').append(" <table id='events_table' class='scroll' cellpadding='0' cellspacing='0'> </table> <div id='events_table_pager' class='scroll' style='text-align: center'></div> "
		);	
}

function showClientTable() {

	$('#client_table_wrapper').removeClass('hidden');
	$('#client_table_wrapper').addClass('visible');
}

function hideClientTable() {

    $('#client_table_wrapper').removeClass('visible');
    $('#client_table_wrapper').addClass('hidden');
}

function hideEventDetailForm() {

	$('#event_detail').removeClass('visible');
	$('#event_detail').addClass('hidden');
}

function showEventDetailForm() {

	$('#event_detail').removeClass('hidden');
	$('#event_detail').addClass('visible');
}

function hideClientDetailForm() {

	$('#client_detail').removeClass('visible');
	$('#client_detail').addClass('hidden');
}

function showClientDetailForm() {

	$('#client_detail').removeClass('hidden');
	$('#client_detail').addClass('visible');
}

function removeClientTable() {
	$('#client_table_wrapper div').remove();
	$('#client_table_wrapper').append(" <table id='client_table' class='scroll' cellpadding='0' cellspacing='0'></table>  <div id='client_table_pager' class='scroll' style='text-align:center'></div> "
		);
}






