//**************************************************************************************
var cancelValidate = false;
var showAlertError = false;
var alertLogo = null;
//**************************************************************************************
function closeErrorDiv(nextFocus)
{
	$('c9x3_error_message_id').hide();		
	setFocus(nextFocus);	
}
//**************************************************************************************
function goodDate(m, d, y)
{
	m = parseInt(m);
	d = parseInt(d);
	y = parseInt(y);
	
	if(m < 1 || m > 12)
		return false;
	else if(d < 1 || d > 31)
		return false;
	else if(y > 9999 || y < 1200)
		return false;
	else if(m == 2)
	{
		if( (y / 4) == Math.floor( y / 4)  )
			return (d <= 29);
		else
			return (d <= 28 );
		
		return false;
	}
	else if(d == 30)
	{
		switch(m)
		{
			case 1:
			case 3:
			case 4:
			case 5:
			case 6:
			case 7:
			case 8:
			case 9:
			case 10:
			case 11:
			case 12:
				return true;
			default:
				return false;
		}
	}
	else if(d == 31)
	{
		switch(m)
		{
			case 1:
			case 3:
			case 5:
			case 7:
			case 8:
			case 10:
			case 12:
				return true;
			default:
				return false;
		}
	}
	else
		return true;
}
//**************************************************************************************
function is_a_checkbox_checked(fld)
{
	var l = fld.length;
	
	if(l == undefined)
		return fld.checked;
	else
	{
		for(var i = 0; i < l; i++)
		{
			if(fld[i].checked)
				return true;
		}
	}

	return false;
}
//**************************************************************************************
function numeric(value)
{
	if(empty(value))
		return false;
		
	value = trim(value);
	
	value = replaceChar(value, "$");
	
	value = replaceChar(value, ",");		

	var valid = "0123456789";
	
	var period_count = 0;
	
	var start = 0;
	
	if(value.charAt(0) == "-")
		start = 1;
	
	var ch = "";
	
	for(var i = start; i < value.length; i++)
	{
		ch = value.charAt(i);
		
		if(ch == '.')
		{
			period_count++;
			
			if(period_count > 1)
				return false;
		}
		else if(valid.indexOf(ch) < 0)
			return false;
	}

	return true;	
}
//**************************************************************************************
function showErrorMessage(errorTitle, errorMessage, focusElement)
{
	errorTitle = realValue(errorTitle, 'Validation Error');
	
	errorMessage = realValue(errorMessage, 'Message');
	
	if(showAlertError)
	{
		errorMessage = errorMessage.replace("<p>", "");
		errorMessage = errorMessage.replace("</p>", "");		
		alert(errorMessage);
		return;	
	}
	
	focusElement = realValue(focusElement, '');
	
	var nextFocus = focusElement;
	
	if(nextFocus.id)
		nextFocus = '';
	
	var str = '';
	str += '<table width="350" height="150" border="1" cellpadding="5" cellspacing="0" bordercolor="#999999" bgcolor="#FFFFFF">';
	
	if(alertLogo != null)
	{
		str += '  <tr>';
		str += '    <td valign="top" align="center"><img src="' + alertLogo + '" border="0" /></td>';
		str += '  </tr>';
	}
	
	str += '  <tr>';
	str += '    <td valign="top" align="center">';
	str += '		<table width="100%" border="0" cellspacing="4" cellpadding="4">';
	str += '        <tr>';
	str += '          <td align="left" valign="middle" class="c9x3_error_message"><strong><font class="c9x3_error_message">' + errorTitle + '</font></strong></td>';
	str += '        </tr>';
	str += '        <tr height="50">';
	str += '          <td align="left" valign="middle" style="padding-left:20px"><font class="c9x3_error_message_font">' + errorMessage + '</font></td>';
	str += '        </tr>';
	str += '        <tr>';
	str += '          <td align="right" valign="middle" style="padding-right:10px"><font size="2"><a href="javascript:closeErrorDiv(\'' + nextFocus + '\');">Close</a></font></td>';
	str += '        </tr>';		
	str += '      </table>';    
	str += '      </td>';
	str += '  </tr>';
	str += '</table>';

	var em = $('c9x3_error_message_id');
	
	if(em.innerHTML != undefined)
		em.innerHTML = str;
	else if(em.innerText != undefined)
		em.innerText = str;
	else if(em.data != undefined)
		em.data = str;			
	else if(em.textContent != undefined)
		em.textContent = str;		
	else
	{
		alert("Invalid Message Div");
		return;
	}

	var offset = document.viewport.getHeight() / 4;
	
	var left = Math.floor( (document.viewport.getWidth() - em.getWidth()) / 2);

	var top = Math.floor( (document.viewport.getHeight() - em.getHeight()) / 2) - offset;

	top += document.viewport.getScrollOffsets().top;

	if(top < 10)
		top = 10;

	em.setStyle( { left: left + 'px', top: top + 'px' } );
	
	em.show();

	setFocus(focusElement);
}
//**************************************************************************************
function confirm2(message, callback)
{
	var confirmTitle = 'Confirm';
	
	if(!message)
	{
		alert("confirm2 requires message");
		return;
	}
	else if(!callback)
	{
		alert("confirm2 requires callback function");
		return;		
	}
	
	if(callback.indexOf(')') < 0)
		callback += '()';
	
	var str = '';
	str += '<table width="350" height="150" border="1" cellpadding="5" cellspacing="0" bordercolor="#999999" bgcolor="#FFFFFF">';
	
	if(alertLogo != null)
	{
		str += '  <tr>';
		str += '    <td valign="top" align="center"><img src="' + alertLogo + '" border="0" /></td>';
		str += '  </tr>';
	}
	
	str += '  <tr>';
	str += '    <td valign="top" align="center">';
	str += '		<table width="100%" border="0" cellspacing="4" cellpadding="4">';
	str += '        <tr>';
	str += '          <td align="left" valign="middle" class="c9x3_error_message"><strong><font class="c9x3_error_message">' + confirmTitle + '</font></strong></td>';
	str += '        </tr>';
	str += '        <tr height="50">';
	str += '          <td align="left" valign="middle" style="padding-left:20px"><font class="c9x3_error_message_font">' + message + '</font></td>';
	str += '        </tr>';
	str += '        <tr>';
	str += '          <td align="center" valign="middle" style="padding-right:10px"><font size="2"><a href="javascript:' + callback + ';">Ok</a> | <a href="javascript:closeErrorDiv();">Cancel</a></font></td>';
	str += '        </tr>';		
	str += '      </table>';    
	str += '      </td>';
	str += '  </tr>';
	str += '</table>';

	var em = $('c9x3_error_message_id');
	
	if(em.innerHTML != undefined)
		em.innerHTML = str;
	else if(em.innerText != undefined)
		em.innerText = str;
	else if(em.data != undefined)
		em.data = str;			
	else if(em.textContent != undefined)
		em.textContent = str;		
	else
	{
		alert("Invalid Message Div");
		return;
	}

	var offset = document.viewport.getHeight() / 4;
	
	var left = Math.floor( (document.viewport.getWidth() - em.getWidth()) / 2);

	var top = Math.floor( (document.viewport.getHeight() - em.getHeight()) / 2) - offset;

	top += document.viewport.getScrollOffsets().top;

	if(top < 10)
		top = 10;

	em.setStyle( { left: left + 'px', top: top + 'px' } );
	
	em.show();
}
//**************************************************************************************
function prompt2(message, callback, defaultValue)
{
	var confirmTitle = 'Enter Data';
	
	if(!message)
	{
		alert("prompt2 requires message");
		return;
	}
	else if(!callback)
	{
		alert("prompt2 requires callback function");
		return;		
	}

	defaultValue = realValue(defaultValue, '');

	var str = '';
	str += '<table width="350" height="150" border="1" cellpadding="5" cellspacing="0" bordercolor="#999999" bgcolor="#FFFFFF">';
	
	if(alertLogo != null)
	{
		str += '  <tr>';
		str += '    <td valign="top" align="center"><img src="' + alertLogo + '" border="0" /></td>';
		str += '  </tr>';
	}
	
	str += '  <tr>';
	str += '    <td valign="top" align="center">';
	str += '		<table width="100%" border="0" cellspacing="4" cellpadding="4">';
	str += '        <tr>';
	str += '          <td align="left" valign="middle" class="c9x3_error_message"><strong><font class="c9x3_error_message">' + confirmTitle + '</font></strong></td>';
	str += '        </tr>';
	str += '        <tr height="50">';
	str += '          <td align="left" valign="middle" style="padding-left:20px"><font class="c9x3_error_message_font">' + message + '</font></td>';
	str += '        </tr>';
	str += '        <tr height="50">';
	str += '          <td align="left" valign="middle" style="padding-left:20px"><form name="promptForm" onsubmit="' + callback + '(prompt2Data()); return false;"><input type="text" id="promptValue" value="' + defaultValue + '"></form></td>';
	str += '        </tr>';	
	str += '        <tr>';
	str += '          <td align="center" valign="middle" style="padding-right:10px"><font size="2"><a href="javascript:' + callback + '(prompt2Data());">Ok</a> | <a href="javascript:closeErrorDiv();">Cancel</a></font></td>';
	str += '        </tr>';		
	str += '      </table>';    
	str += '      </td>';
	str += '  </tr>';
	str += '</table>';

	var em = $('c9x3_error_message_id');
	
	if(em.innerHTML != undefined)
		em.innerHTML = str;
	else if(em.innerText != undefined)
		em.innerText = str;
	else if(em.data != undefined)
		em.data = str;			
	else if(em.textContent != undefined)
		em.textContent = str;		
	else
	{
		alert("Invalid Message Div");
		return;
	}

	var offset = document.viewport.getHeight() / 4;
	
	var left = Math.floor( (document.viewport.getWidth() - em.getWidth()) / 2);

	var top = Math.floor( (document.viewport.getHeight() - em.getHeight()) / 2) - offset;

	top += document.viewport.getScrollOffsets().top;

	if(top < 10)
		top = 10;

	em.setStyle( { left: left + 'px', top: top + 'px' } );
	
	em.show();
}
//**************************************************************************************
function prompt2Data()
{
	closeErrorDiv();
	
	var txt = document.promptForm.promptValue.value;
	
	if(txt == "" || txt.length < 1)
		return null;
	else
		return txt;
}
//**************************************************************************************




//---- validations --------------------------------------------------------
function createValidateMessage(display, defaultMessage)
{
	if(!multiWord(display))
		return defaultMessage;
	else
		return display;	
}
//-------------------------------------------------------------------------
function multiWord(value)
{
	value = trim(value);

	var inword = false;

	var total = 0;

	for(var i = 0; i < value.length; i++)
	{
		if(value.charAt(i) == ' ')
		{
			if(inword)
			{
				inword = false;
				total++;

				if(total > 2)
					return true;
			}
		}
		else // not a space
			inword = true;
	}

	return false;
}
//-------------------------------------------------------------------------
function testAlpha(value)
{
	var good = true;
	
	var at = 0;

	value = value.toLowerCase();

	for(var i = 0; i < value.length; i++)
	{
		var ch = value.charAt(i);
		
		if(ch == '@')
		{
			at++;

			if(at > 1)
			{
				good = false;
				break;
			}
		}
		else if(".0123456789abcdefghijklmnopqrstuvwxyz_ ".indexOf(ch) < 0)
		{
			good = false;
			break;
		}
	}

	return good;
}
//-------------------------------------------------------------------------
function testEmail(value)
{
	var period_count = 0;
	var count = 0;
	var ch;

	for(var i = 0; i < value.length; i++)
	{
		ch = value.charAt(i);

		if(ch == '@')
			count++;
		else if(ch == '.')
			period_count++;
	}

	return (count == 1) && (period_count > 0);
}
//-------------------------------------------------------------------------
function testMinimum(value, minimum)
{
	var ln = trim(value).length;
	
	if(minimum < 1)
		return (ln > 0);
	else
		return (ln >= minimum);
}
//-------------------------------------------------------------------------
function testText(value)
{
	return testMinimum(value, 0);
}
//-------------------------------------------------------------------------
function testValidText(value)
{
	if(value.length < 100)
		return true;
		
	value = value.replace('\n', ' ');
	
	var arr = value.split(' ');
	
	for(var word in arr)
	{
		if(word.length > 100)
			return false;
	}

	return true;
}
//-------------------------------------------------------------------------
function ValidateResult(value)
{
	if(typeof(value) == 'string')
	{
		this.message = value;
		this.good = false;		
	}
	else
	{
		this.message = '';		
		this.good = value;
	}
}
//-------------------------------------------------------------------------
function c9x3_validate_combo(ctx)
{
	var fld = getElement(ctx.id, false);
	
	if(!fld) return new ValidateResult("Can't Load Field: " + ctx.id);

	if(fld.selectedIndex < 1)
	{
		if(ctx.skipIfEmpty)
			return new ValidateResult(true);
		else
			return new ValidateResult("Please select " + ctx.display);
	}
	else
		return new ValidateResult(true);	
}
//-------------------------------------------------------------------------
function c9x3_validate_checkbox(ctx)
{
	var fld = getElement(ctx.id, false);
	
	if(!fld) return new ValidateResult("Can't Load Field: " + ctx.id);

	if(!fld.checked)
	{
		if(ctx.skipIfEmpty)
			return new ValidateResult(true);
		else
			return new ValidateResult("Please select " + ctx.display);
	}
	else
		return new ValidateResult(true);	
}
//-------------------------------------------------------------------------
function c9x3_validate_combo(ctx)
{
	var fld = getElement(ctx.id, false);
	
	if(!fld) return new ValidateResult("Can't Load Field: " + ctx.id);

	if(fld.selectedIndex < 1)
	{
		if(ctx.skipIfEmpty)
			return new ValidateResult(true);
		else
			return new ValidateResult("Please select " + ctx.display);
	}
	else
		return new ValidateResult(true);	
}
//-------------------------------------------------------------------------
function c9x3_validate_confirm(ctx)
{
	var fld = getElement(ctx.id, false);
	
	var fld2 = getElement(ctx.id + '_confirm', false);
	
	if(!fld) return new ValidateResult("Can't Load Field: " + ctx.id);

	var value = fld.value;  
	
	var value2 = fld2.value;
	
//----------------
	if(!testText(value))
		return new ValidateResult("Please enter " + ctx.display);
//----------------
	else if(!testMinimum(value, ctx.minimum))
		return new ValidateResult(ctx.display + " must be at least " + ctx.minimum + " character(s)");
//----------------
	else if(!testAlpha(value))
		return new ValidateResult(ctx.display + " contains invalid characters ");
//----------------
	else if(!same(value, value2))
		return new ValidateResult(ctx.display + " and Confirm do not match");
//----------------
	else
		return new ValidateResult(true);	
}
//-------------------------------------------------------------------------
function c9x3_validate_date(ctx)
{
	var fld = getElement(ctx.id + "_month", false);
	var fld2 = getElement(ctx.id + "_day", false);
	var fld3 = getElement(ctx.id + "_year", false);	
	
	if(!fld) return new ValidateResult("Can't Load Field: " + ctx.id);

	if(ctx.skipIfEmpty)
	{
		if(fld.selectedIndex < 1)
		{
			if(fld2.selectedIndex < 1)
			{
				if(fld3.selectedIndex < 1)
				{
					return new ValidateResult(true);
				}
			}
		}
	}

	var m = fld.options[fld.selectedIndex].value;
	
	var d = fld2.options[fld2.selectedIndex].value;
	
	var y = fld3.options[fld3.selectedIndex].value;

	if(!goodDate(m, d, y))
		return new ValidateResult("Please enter a valid " + ctx.display);
	else
		return new ValidateResult(true);	
}
//-------------------------------------------------------------------------
function c9x3_validate_email(ctx)
{
	var fld = getElement(ctx.id, false);
	
	if(!fld) return new ValidateResult("Can't Load Field: " + ctx.id);

	var value = fld.value;

	if(ctx.skipIfEmpty)
	{
		if(empty(value))
			return new ValidateResult(true);
	}

	if(!testEmail(value))
		return new ValidateResult("Please enter a valid " + ctx.display);
	else
		return new ValidateResult(true);	
}
//-------------------------------------------------------------------------
function c9x3_validate_items(ctx)
{
	var fld = document.getElementsByName(ctx.id)
	
	if(!fld) return new ValidateResult("Can't Load Field: " + ctx.id);

	if(!is_a_checkbox_checked(fld))
		return new ValidateResult("Please select at least one " + ctx.display);
	else
		return new ValidateResult(true);	
}
//-------------------------------------------------------------------------
function c9x3_validate_number(ctx)
{
	var fld = getElement(ctx.id, false);
	
	if(!fld) return new ValidateResult("Can't Load Field: " + ctx.id);

   if(ctx.skipIfEmpty)
   {
	   if(empty(fld.value))
			return new ValidateResult(true);
   }

   var value = parseFloat(fld.value);

   if(empty(fld.value))
		return new ValidateResult("Please enter " + ctx.display);
   else if(!numeric(fld.value))
		return new ValidateResult(ctx.display + " must be a numeric value");
   else if(value == 0 && ctx.minimum == 0)
		return new ValidateResult(ctx.display + " must be greater than 0");
   else if(value < ctx.minimum)
		return new ValidateResult(ctx.display + " must be greater than " + ctx.minimum);
   else
	   return new ValidateResult(true);	
}
//-------------------------------------------------------------------------
function c9x3_validate_numeric(ctx)
{
	var fld = getElement(ctx.id, false);
	
	if(!fld) return new ValidateResult("Can't Load Field: " + ctx.id);

   if(ctx.skipIfEmpty)
   {
	   if(empty(fld.value))
			return new ValidateResult(true);
   }

   if(empty(fld.value))
		return new ValidateResult("Please enter " + ctx.display);
   else if(!numeric(fld.value))
		return new ValidateResult(ctx.display + " must be a numeric value");
   else if(!testMinimum(fld.value, ctx.minimum))
		return new ValidateResult(ctx.display + " must be at least " + ctx.minimum + " character(s)");
   else
	   return new ValidateResult(true);	
}
//-------------------------------------------------------------------------
function c9x3_validate_phone(ctx)
{
	var fld = getElement(ctx.id + "_one", false);
	
	var fld2 = getElement(ctx.id + "_two", false);
	
	var fld3 = getElement(ctx.id + "_three", false);	
	
	if(!fld) return new ValidateResult("Can't Load Field: " + ctx.id);

	var p1 = fld.value;

	var p2 = fld2.value;

	var p3 = fld3.value;

	if(ctx.skipIfEmpty)
	{
		if(empty(p1))
		{
			if(empty(p2))
			{
				if(empty(p3))
				{
					return new ValidateResult(true);
				}
			}
		}
	}

	if(p1.length < 3 || !numeric(p1) || parseInt(p1) < 100)
		return new ValidateResult("Please enter a valid " + ctx.display);
	else if(p2.length < 3 || !numeric(p2) || parseInt(p2) < 1)
		return new ValidateResult("Please enter a valid " + ctx.display);
	else if(p3.length < 4 || !numeric(p3))
		return new ValidateResult("Please enter a valid " + ctx.display);
	else
		return new ValidateResult(true);	
}
//-------------------------------------------------------------------------
function c9x3_validate_scheduler(ctx)
{
	var fld_interval = getElement(ctx.id + "_interval", false);	

	if(!fld_interval) return new ValidateResult("Can't Load Field: " + ctx.id);

	if(fld_interval.selectedIndex < 1)
		return new ValidateResult("Please select interval for " + ctx.id);

	var fld_sunday = getElement(ctx.id + "_sunday", false);	
	var fld_monday = getElement(ctx.id + "_monday", false);	
	var fld_tuesday = getElement(ctx.id + "_tuesday", false);	
	var fld_wednesday = getElement(ctx.id + "_wednesday", false);	
	var fld_thursday = getElement(ctx.id + "_thursday", false);	
	var fld_friday = getElement(ctx.id + "_friday", false);	
	var fld_saturday = getElement(ctx.id + "_saturday", false);		
	
	switch(fld_interval.selectedIndex)
	{
	   case 1:
	   case 2:
	   case 3:
	   case 4:
	   case 5:
	   case 6:
	   case 7:
	   {
			if(fld_sunday.checked || fld_monday.checked || fld_tuesday.checked || fld_wednesday.checked || fld_thursday.checked || fld_friday.checked || fld_saturday.checked)
				return new ValidateResult(true);
			else
				return new ValidateResult("Please select a weekday for " + ctx.display);
	   }
	   default:
	   {
			return new ValidateResult(true);   
	   }
	}
}
//-------------------------------------------------------------------------
function c9x3_validate_text(ctx)
{
	var fld = getElement(ctx.id, false);
	
	if(!fld) return new ValidateResult("Can't Load Field: " + ctx.id);

	var value = fld.value;

	if(ctx.skipIfEmpty)
	{
		if(empty(value))
			return new ValidateResult(true);
	}

	if(!testText(value))
		return new ValidateResult("Please enter " + ctx.display);
	else if(!testMinimum(value, ctx.minimum))
		return new ValidateResult(ctx.display + " must be at least " + ctx.minimum + " character(s)");
	else if(ctx.alpha && !testAlpha(value))
		return new ValidateResult(ctx.display + " contains invalid characters");
	else
		return new ValidateResult(true);
}
//-------------------------------------------------------------------------
function c9x3_validate_textarea(ctx)
{
	var value = '';
		
	if(typeof(tinyMCE) == 'object')
		value = tinyMCE.activeEditor.getContent({format : 'text'});
	else
	{
		var fld = getElement(ctx.id, false);
		
		if(!fld) 
			return new ValidateResult("Can't Load Field: " + ctx.id);
		else
			value = fld.value;
	}

	var emptyText = (value.length < 3);

	if(ctx.skipIfEmpty)
	{
		if(emptyText)
			return new ValidateResult(true);
	}

	if(emptyText)
		return new ValidateResult("Please enter " + ctx.display);
	else
		return new ValidateResult(true);
}
//-------------------------------------------------------------------------
