var ALPHABETPATTERN = 'abcdefghijklmnopqrstuvwxyz';
var NUMBERPATTERN = '01234567890';
var UNDERSCORE = '_';
var ATTHERATE = '@';
var SPACE = ' ';
var DASH = '-';
var HASH = '#';
var DOT = '.';
var COMMA = ',';
var COLON = ':';
var SEMICOLON = ';';
var SINGLEQUOTE = "'";
var FORWARDSLASH = '/';
var BACKWARDSLASH = "\\";
var ROUNDBRACES = '()';
var CURLYBRACES = '{}';
var SQUAREBRACES = '[]';
var AMPERSAND = '&';
var ASTERICK = '*';
var PERCENTAGE = '%';
var PLUS = '+';
var BACKQUOTE = "`";
var DOLLAR = "$";
var HURL  = "http://";
var TAB   = "\t";
var CARRETURN = "\r";
var NEWLINE = "\n";
var SPECIAL = "—";
var QUESTION = "?";
var EXCLAM = "!"; 
var REGISTER = "®";
var COPYRIGHT = "©";
var MORE = "|";
var TILT = "~"; 
var EQUAL = "=";
var HOOK = "^";
var TRADE = "™";

var ALLPATTERNS = ALPHABETPATTERN + NUMBERPATTERN + UNDERSCORE + ATTHERATE + SPACE + DASH + HASH + 
		  DOT + COMMA + COLON + SEMICOLON + SINGLEQUOTE + FORWARDSLASH + BACKWARDSLASH + 
	 	  ROUNDBRACES + CURLYBRACES + SQUAREBRACES + AMPERSAND + ASTERICK + PERCENTAGE + TILT+ DOLLAR+ TAB+
		  CARRETURN + NEWLINE + SPECIAL + QUESTION + EXCLAM + REGISTER + COPYRIGHT + BACKQUOTE + MORE + PLUS +
		  EQUAL + HOOK+ TRADE; 
		
var SPECIALCHARS = UNDERSCORE + ATTHERATE + DASH + HASH + DOT + COMMA + COLON + SEMICOLON + SINGLEQUOTE + 
	           FORWARDSLASH + BACKWARDSLASH + ROUNDBRACES + CURLYBRACES + SQUAREBRACES + AMPERSAND + ASTERICK + 
	           PERCENTAGE + TILT+ DOLLAR+ TAB + CARRETURN + NEWLINE + SPECIAL + QUESTION + EXCLAM + REGISTER +
	           COPYRIGHT + BACKQUOTE + MORE + PLUS + EQUAL + HOOK + TRADE;

var ReqdPatternForPassword = ALPHABETPATTERN+NUMBERPATTERN+SPECIALCHARS;

var ALPHANUMERIC = ALPHABETPATTERN + NUMBERPATTERN;
		
var ERRORMESSAGE;
var DATEERRORMESSAGE;

//------------------------------------------------------------------------------------------------------
// The function Initializes the Error String
function InitErrStr()
{
	ERRORMESSAGE = "The following errors occured:\n"+"-----------------------------------------------";

}
//------------------------------------------------------------------------------------------------------
// The function Initializes the Date Error String
function InitDateErrStr()
{
	DATEERRORMESSAGE = "Date Difference(s):\n"+"-----------------------------------------------";
}
//------------------------------------------------------------------------------------------------------
// The function Appendes the Messege sent to it to Error String
function CatchErrStr(Err)
{
	ERRORMESSAGE = ERRORMESSAGE+"\n"+Err;
}
//------------------------------------------------------------------------------------------------------
// The function Appendes the Messege sent to it to Error String
function CatchDateErrStr(Err)
{
	DATEERRORMESSAGE = DATEERRORMESSAGE+"\n"+Err;
}
//------------------------------------------------------------------------------------------------------
// The function Prints the Error Message
function PrintErrStr()
{
	alert(ERRORMESSAGE);	
}
//------------------------------------------------------------------------------------------------------
// The function Prints the Error Message
function PrintDateErrStr()
{
	alert(DATEERRORMESSAGE);	
}
//------------------------------------------------------------------------------------------------------
function PrintBothErrStr(NormErr,DateErr)
{
	if ( ( NormErr == false ) && ( DateErr == false ) )
	{
		alert(ERRORMESSAGE+"\n\n"+DATEERRORMESSAGE);
	}
	else if ( ( NormErr == false ) && ( DateErr == true ) )
	{
		alert(ERRORMESSAGE);
	}
	else if ( ( NormErr == true ) && ( DateErr == false ) )
	{
		alert(DATEERRORMESSAGE);
	}
}

function FindObject( ObjectName,DocumentPath )
{
	var ParentIndex,i,ReqdObject;
	if( !DocumentPath )
	{
		DocumentPath = document;
	}
	if( ( ParentIndex = ObjectName.indexOf("?") ) > 0 && parent.frames.length )
	{
		DocumentPath = parent.frames[ObjectName.substring(ParentIndex + 1)].document;
		ObjectName = ObjectName.substring(0,ParentIndex);
	}
	if( !( ReqdObject = DocumentPath[ObjectName] ) && DocumentPath.all)
	{
		ReqdObject = DocumentPath.all[ObjectName];
	}
	for ( i = 0 ; !ReqdObject && i < DocumentPath.forms.length ; i++ )
	{
		ReqdObject = DocumentPath.forms[i][ObjectName];
	}
  	for( i = 0; !ReqdObject && DocumentPath.layers && i < DocumentPath.layers.length ; i++ )
  	{
  		ReqdObject = FindObject( ObjectName,DocumentPath.layers[i].document);
  	}
  	return ReqdObject;
}


function TrimWhiteSpaces(StringVar, ReqdPatternForFirst, ReqdPatternForOther)
{
	VarObject = FindObject(StringVar);
	StringVar = VarObject.value.toLowerCase();
	var indexFound = RequiredPatternForFirst.indexOf(StringVar.charAt(0));
	if ( indexFound > 0 )
	{
		StringVar = StringVar.substr(indexFound,StringVar.length);
	}
	indexFound = RequiredPatternForOthers.lastindexOf(StringVar.charAt(StringVar.length - 1 ));
	if ( indexFound > 0 )
	{
		StringVar = StringVar.substr(0,indexFound);
	}
	VarObject.value = StringVar;
	return true;
}


function ValidateField(StringVar, FieldNameStr, ReqdPatternForFirst, ReqdPatternForOther, Reqd, MinLen, MaxLen)
{
	
	VarObject = FindObject(StringVar);
	StringVar = VarObject.value.toLowerCase();
	
	var ResultToSend = false;
	if ( ( Reqd == 'R' ) && ( StringVar.length == 0 ))
	{
		if ( StringVar.length == 0 )
		{		
		CatchErrStr(FieldNameStr + ": Must be Entered" );		
		ResultToSend = false;		
		}
	}
	
	else if ( StringVar.length > 0 )
	{
		if ( ( StringVar.length < MinLen ) || ( StringVar.length > MaxLen ) )
		{
			CatchErrStr(FieldNameStr + ": Max." + MaxLen + " Characters are Allowed.");
			ResultToSend = false;
		}
		else
		{
			var InvalidChars = '';
			for ( var i = 0 ; i < StringVar.length ; i++ )
			{
				var indexFound = -1;
				if ( i == 0 )
				{
					indexFound = ReqdPatternForFirst.indexOf(StringVar.charAt(i));
					if ( indexFound < 0 )
					{
						InvalidChars = InvalidChars + StringVar.charAt(i);
						ResultToSend = false;
					}
				}
				else
				{
					indexFound = ReqdPatternForOther.indexOf(StringVar.charAt(i));
					if ( indexFound < 0 )
					{
						InvalidChars = InvalidChars + StringVar.charAt(i);
					}	ResultToSend = false;
				}
			}
			if ( InvalidChars.length > 0 )
			{
				if ( InvalidChars.length > 20 )
				{ 
					CatchErrStr(FieldNameStr + ": Too Many Invalid Characters!" );
				}
				else if ( InvalidChars.length == 1 )
				{
					CatchErrStr(FieldNameStr + ": Character " + InvalidChars.charAt(0) + " is Invalid" );
				}
				else
				{
					var CharErrorString = "";
					for( var j = 0 ; j < InvalidChars.length ; j++ )
					{
						if ( j == 0 )
						{
							CharErrorString = InvalidChars.charAt(j);
						}
						else if ( j == ( InvalidChars.length - 1 ) )
						{
							CharErrorString = CharErrorString + ' and ' + InvalidChars.charAt(j);
						}
						else
						{
							CharErrorString = CharErrorString + ', ' + InvalidChars.charAt(j);
						}
					}
					CatchErrStr(FieldNameStr + ": Characters " + CharErrorString + " are Invalid" );
				}				
				ResultToSend = false;
			}
			else
			{
				ResultToSend = true;
			}
		}
	}
	else
	{
		ResultToSend = true;
	}
	return ResultToSend;
}


function CheckEmail(StringVar, FieldNameStr, Reqd)
{
	var VarObject = FindObject(StringVar);
	var StringVarValue = VarObject.value;
	var ResultToSend = false;
	AtPos = StringVarValue.indexOf('@');
	var EmailBeforeAt = "";
	var EmailAfterAt = "";
	if ( ( StringVarValue.length == 0 ) && ( Reqd == 'R' ) )
	{
		CatchErrStr(FieldNameStr + ": Must be Entered" );
		return ResultToSend;
	}
	else if ( StringVarValue.length > 0 )
	{
		if ( AtPos < 0 )
		{
			CatchErrStr( FieldNameStr + ": is Invalid" );
			return ResultToSend;
		}
		else
		{
			if ( AtPos != StringVarValue.lastIndexOf('@') )
			{
				CatchErrStr( FieldNameStr + ": is Invalid" );
				return ResultToSend;
			}
			else
			{
				EmailBeforeAt  = StringVarValue.substring ( 0 , AtPos );
				EmailAfterAt  = StringVarValue.substring( AtPos , StringVarValue.length );
				DotPos = EmailAfterAt.lastIndexOf('.');
				if ( DotPos < 0 )
				{
					CatchErrStr( FieldNameStr + ": is Invalid" );
					return ResultToSend;
				}
				else
				{
					if ( DotPos == EmailAfterAt.length - 1 )
					{
						CatchErrStr( FieldNameStr + ": is Invalid" );
						return ResultToSend;
					}
					else
					{	
						ResultToSend = ValidateField(StringVar, FieldNameStr, ALPHABETPATTERN+NUMBERPATTERN, ALPHABETPATTERN+NUMBERPATTERN+UNDERSCORE+ATTHERATE+DOT+DASH, 'R', 5, 40);
						if (!ResultToSend)
						{
							return ResultToSend;
						}
						else
						{
							ResultToSend = true;
							if ( StringVarValue.indexOf('@.') > -1 )
							{
								CatchErrStr( FieldNameStr + ": is Invalid" );
								ResultToSend = false;
							}
							if ( StringVarValue.indexOf('.@') > -1 )
							{
								if ( ResultToSend == false )
								{
									CatchErrStr( ": is Invalid" );
								}
								else
								{
									CatchErrStr( FieldNameStr + ": is Invalid" );
									ResultToSend = false;
								}
							}
							if ( StringVarValue.indexOf('@-') > -1 )
							{
								if ( ResultToSend == false )
								{
									CatchErrStr( ": is Invalid" );
								}
								else
								{
									CatchErrStr( FieldNameStr + ": is Invalid" );
									ResultToSend = false;
								}
							}
							if ( StringVarValue.indexOf('-@') > -1 )
							{
								if ( ResultToSend == false )
								{
									CatchErrStr( ": is Invalid" );
								}
								else
								{
									CatchErrStr( FieldNameStr + ": is Invalid" );
									ResultToSend = false;
								}
							}
							if ( StringVarValue.indexOf('@_') > -1 )
							{
								if ( ResultToSend == false )
								{
									CatchErrStr( ": is Invalid" );
								}
								else
								{
									CatchErrStr( FieldNameStr + ": is Invalid" );
									ResultToSend = false;
								}
							}

							if ( StringVarValue.indexOf('.-') > -1 )
							{
								if ( ResultToSend == false )
								{
									CatchErrStr( ": is Invalid" );
								}
								else
								{
									CatchErrStr( FieldNameStr + ": is Invalid" );
									ResultToSend = false;
								}
							}
							if ( StringVarValue.indexOf('-.') > -1 )
							{
								if ( ResultToSend == false )
								{
									CatchErrStr( ": is Invalid" );
								}
								else
								{
									CatchErrStr( FieldNameStr + ": is Invalid" );
									ResultToSend = false;
								}
							}
							if ( StringVarValue.indexOf('._') > -1 )
							{
								if ( ResultToSend == false )
								{
									CatchErrStr( ": is Invalid" );
								}
								else
								{
									CatchErrStr( FieldNameStr + ": is Invalid" );
									ResultToSend = false;
								}
							}
							if ( StringVarValue.indexOf('_.') > -1 )
							{
								if ( ResultToSend == false )
								{
									CatchErrStr( ": is Invalid" );
								}
								else
								{
									CatchErrStr( FieldNameStr + ": is Invalid" );
									ResultToSend = false;
								}
							}
							if ( StringVarValue.indexOf('-_') > -1 )
							{
								if ( ResultToSend == false )
								{
									CatchErrStr( ": is Invalid" );
								}
								else
								{
									CatchErrStr( FieldNameStr + ": is Invalid" );
								}
								ResultToSend = ResultToSend & false;
							}
							if ( StringVarValue.indexOf('_-') > -1 )
							{
								if ( ResultToSend == false )
								{
									CatchErrStr( ": is Invalid" );
								}
								else
								{
									CatchErrStr( FieldNameStr + ": is Invalid" );
									ResultToSend = false;
								}
							}
							if ( StringVarValue.indexOf('..') > -1 )
							{
								if ( ResultToSend == false )
								{
									CatchErrStr( ": is Invalid" );
								}
								else
								{
									CatchErrStr( FieldNameStr + ": is Invalid" );
									ResultToSend = false;
								}
							}
							if ( StringVarValue.indexOf('__') > -1 )
							{
								if ( ResultToSend == false )
								{
									CatchErrStr( ": is Invalid" );
								}
								else
								{
									CatchErrStr( FieldNameStr + ": is Invalid" );
									ResultToSend = false;
								}
							}
							if ( StringVarValue.indexOf('--') > -1 )
							{
								if ( ResultToSend == false )
								{
									CatchErrStr( ": is Invalid" );
								}
								else
								{
									CatchErrStr( FieldNameStr + ": is Invalid" );
									ResultToSend = false;
								}
							}
							return ResultToSend;
						}
					}
				}
			}
		}
	}
	else
	{
		return true;
	}
}

function CheckUserID (StringVar, FieldNameStr){
	var UserIDObject = FindObject(StringVar);
	var ResultToSend = true;
	if ( ( UserIDObject.value.indexOf('@') > -1 ) || ( UserIDObject.value.indexOf('.') > -1 ) )
	{
		ResultToSend = CheckEmail(StringVar, FieldNameStr, 'R');
	}
	else
	{
		ResultToSend = ValidateField(StringVar, FieldNameStr, ALPHABETPATTERN, ALPHABETPATTERN+NUMBERPATTERN+UNDERSCORE, 'R', 4, 10);
	}
	return ResultToSend;
}


function matchPassword(Pass, ConfirmPass){
	var obj 	= FindObject(Pass);
	var UPass 	= obj.value;
	obj 		= FindObject(ConfirmPass);
	var ConfirmUPass= obj.value;
	if (UPass != ConfirmUPass ){
		CatchErrStr( "Password & Confirm Password Must be Same" );
		return false;
	}
	else{
		return true;
	}
}

function matchEmail(Pass, ConfirmPass){
	var obj 	= FindObject(Pass);
	var UPass 	= obj.value;
	obj 		= FindObject(ConfirmPass);
	var ConfirmUPass= obj.value;
	if (UPass != ConfirmUPass ){
		CatchErrStr( "Email" + ":" + "\n" + "- Emails not matched" );
		return false;
	}
	else{
		return true;
	}
}

function CheckLogin()
{
	InitErrStr();
	var result	= true;
	result	= result & ValidateField('login_uid','User Name',ALPHANUMERIC,ALPHANUMERIC,'R',1,25);
	result	= result & ValidateField('login_pwd','Password',ALPHANUMERIC,ALPHANUMERIC,'R',1,20);

	if(result==false)
	{
		PrintErrStr();
		return false;
	}
}










