﻿
/* GENERAL UTILITIES */

var Utility =
{
	addEventHandler: function(target, eventName, handler)
	{
		if (target.addEventListener) 
		{
			target.addEventListener(eventName, handler, false);
		}
		else
		if (target.attachEvent)
		{
			target.attachEvent("on" + eventName, handler);
		}
	}
};

/* COMMON PAGE TOOLS */

var Page =
{
	_fontSize: 1.0,
	print: function(url)
	{
		window.open("/Pages/PrintPage.aspx?Page=" + escape(url), "_blank");
	},
	email: function(url)
	{
		window.location = '/Pages/EmailPage.aspx?Page=' + escape(url);
	},
	increaseFontSize: function()
	{
		if (this._fontSize < 2)
		{
			this._fontSize *= 1.2;
		}
		
		var fontAccessibilityContents = document.getElementsByTagName("DIV");

		for (var i = 0 ; i < fontAccessibilityContents.length ; i ++)
		{
			if (fontAccessibilityContents[i].className.indexOf("font_resizable") != -1)
			{
				fontAccessibilityContents[i].style.fontSize = this._fontSize + "em";
			}
		}
	},
	decreaseFontSize: function()
	{
		this._fontSize /= 1.2;
		if (this._fontSize < 1)
		{
			this._fontSize = 1;
		}
		
		var fontAccessibilityContents = document.getElementsByTagName("DIV");

		for (var i = 0 ; i < fontAccessibilityContents.length ; i ++)
		{
			if (fontAccessibilityContents[i].className.indexOf("font_resizable") != -1)
			{
				fontAccessibilityContents[i].style.fontSize = this._fontSize + "em";
			}
		}
	},
	setFontSize: function(fontSize)
	{
		var fontAccessibilityContents = document.getElementsByTagName("DIV");

		for (var i = 0 ; i < fontAccessibilityContents.length ; i ++)
		{
			if (fontAccessibilityContents[i].className.indexOf("font_accessibility_content") != -1)
			{
				fontAccessibilityContents[i].style.fontSize = fontSize;
			}
		}
	}
};

/* QUICK LINKS */

var QuickLinks =
{
	select: function(ele)
	{
		if (ele=="hosp")
		{
			document.getElementById(ele).style.display="block";
			document.getElementById("cent").style.display="none";
			document.getElementById("poly").style.display="none";
		} 
		else if (ele=="cent")
		{
			document.getElementById(ele).style.display="block";
			document.getElementById("hosp").style.display="none";
			document.getElementById("poly").style.display="none";
		} 
		else if (ele=="poly")
		{
			document.getElementById(ele).style.display="block";
			document.getElementById("cent").style.display="none";
			document.getElementById("hosp").style.display="none";
		}
	}
};


/* IMAGE MANUPULATION */

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

/* FORM VALIDATION */

function Validator( form )
{
	this.form = form;
	this.validate = function( parameters )
	{
		var name = parameters.name;
		var field = this.form.elements[ parameters.field != undefined ? parameters.field : name ];
		var mandatory = parameters.mandatory != undefined  && parameters.mandatory;
		var syntax = parameters.syntax != undefined ? parameters.syntax : "none";		
		var max = parameters.max != undefined ? parameters.max : -1;

		if ( field.type == "text" || field.type == "password" || field.type == "textarea" )
		{
			field.value = this._trim( field.value );
			try
			{
				if ( mandatory && field.value == "" )
				{
					var message = "Please enter a value for " + name;					
					throw new Error( message );
				}
				if ( max != -1 && field.value.length > max )
				{
					var message = "Please enter no more than " + max + " number of characters for " + name;				
					throw new Error( message );
				}
				if ( syntax == "date" && !this._isValidDate( field.value ) )
				{
					var message = "Please enter a valid date for " + name;
					throw new Error( message );
				}
				if ( syntax == "number" && !this._isValidNumber( field.value ) )
				{
					var message = "Please enter a valid number for " + name;
					throw new Error( message );
				}
				if ( syntax == "phonenumber" && !this._isValidPhoneNumber( field.value ) )
				{
					var message = "Please enter a valid number for " + name;
					throw new Error( message );
				}
				if ( syntax == "percent" && !this._isValidPercentage( field.value ) )
				{
					var message = "Please enter a valid percentage for " + name;
					throw new Error( message );
				}
				if ( syntax == "email" && !this._isValidEmail( field.value ) )
				{
					var message = "Please enter a valid email address for " + name;
					throw new Error( message );
				}
			}
			catch ( e )
			{
				if ( parameters.beforeAlert != undefined )
				{
					eval( parameters.beforeAlert );
				}			
				alert( e.message );
				field.focus();
				throw e;
			}
		}
		else
		if ( field.type == "select-one" )
		{
			try
			{
				if ( mandatory && field.options[ field.selectedIndex ].value == "" )
				{
					var message = "Please select a value for " + name;					
					throw new Error( message );
				}
			}
			catch ( e )
			{
				if ( parameters.beforeAlert != undefined )
				{
					eval( parameters.beforeAlert );
				}			
				alert( e.message );
				field.focus();
				throw e;
			}
		}
		else
		if ( field.type == "hidden" )
		{
			// not checking involved for this project
		}
		else if ( field.length > 0 ) // array
		{
			if ( field[0].type == "radio" || field[0].type == "checkbox" ) // either radio/checkbox
			{
				try
				{
					if (mandatory)
					{
						var hasValue = false;
						for (var i = 0 ; i < field.length ; i ++)
						{
							if ( field[i].checked )
							{
								hasValue = true;
								break;
							}
						}
						if (!hasValue)
						{
							var message = "Please select a value for " + name;					
							throw new Error( message );
						}
					}
				}
				catch ( e )
				{
					if ( parameters.beforeAlert != undefined )
					{
						eval( parameters.beforeAlert );
					}			
					alert( e.message );
					field[0].focus();
					throw e;
				}
			}			
		}
		else
		{
			var message = "Unresolved field type: " + field.type
			alert( message );
			throw new Error( message );
		}
	}
	this._trim = function( s )
	{
		while ( s.charAt( 0 ) == " " )
		{
			s = s.replace( s. charAt( 0 ),"" );
		}

		while ( s.charAt( s.length - 1 ) == " " )
		{
			s = s.substring( 0, s.length - 1 );
		}
		return s;
	}
	this._isValidDate = function( s )
	{
		if ( s == "" )
		{
			return true;
		}
		var parts = s.split( "/" );
		if ( parts.length != 3 )
		{
			return false;
		}
		for ( var i = 0 ; i < parts.length ; i ++ )
		{
			if ( parts[ i ].charAt( 0 ) == "0" )
			{
				parts[ i ] = parts[ i ].substring( 1 );
			}
		}
		var year = parseInt( parts[ 2 ] );
		if (year < 100)
		{
			year += year > 50 ? 1900 : 2000;
		}
		var month = parseInt( parts[ 1 ] ) - 1;
		var day = parseInt( parts[ 0 ] );		
		var date = new Date( year, month, day );		
		return date.getFullYear() == year && date.getMonth() == month && date.getDate() == day;
	}
	this._isValidNumber = function( s )
	{
		for ( var i = 0 ; i < s.length ; i ++ )
		{
			if ( "0123456789".indexOf( s.charAt( i ) ) == -1 )
			{
				return false;
			}
		}
		return true;
	}
	this._isValidPercentage = function( s )
	{
		if ( s == "" ) return true;
		if ( !this._isValidNumber( s ) ) return false;
		var percent = parseInt( s );
		if ( percent < 0 || percent > 100 ) return false;
		return true;
	}
	this._isValidEmail = function( s )
	{
		if ( s == "" ) return true;
		return /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(s);
	}
	this._isValidPhoneNumber = function( s )
	{
		for ( var i = 0 ; i < s.length ; i ++ )
		{
			if ( "0123456789 ()+-#".indexOf( s.charAt( i ) ) == -1 )
			{
				return false;
			}
		}
		return true;
	}
}

/* INITIALIZATION SCRIPT */

Utility.addEventHandler(window, "load", function() 
{	
	/* to make the variable font size works for IE browser */
	var divs = document.getElementsByTagName("DIV");
	for (var i = 0 ; i < divs.length ; i ++)
	{
		var div = divs[i];
		if (div.className == "ms-WPBody")
		{
			div.className = "";
		}
	}
} );

/* Quick Links */

function menu(ele)
{
	if (ele=="hosp")
	{
		document.getElementById(ele).style.display="block";
		document.getElementById("cent").style.display="none";
		document.getElementById("poly").style.display="none";
	} else if (ele=="cent")
	{
		document.getElementById(ele).style.display="block";
		document.getElementById("hosp").style.display="none";
		document.getElementById("poly").style.display="none";
	} else if (ele=="poly")
	{
		document.getElementById(ele).style.display="block";
		document.getElementById("cent").style.display="none";
		document.getElementById("hosp").style.display="none";
	}
}

/* RADEDITOR INITIALIZATION SCRIPT FOR STYLING */

function OnClientLoad(editor, args)  
{
	editor.get_contentArea().className = "radeditor";
}





