
// Javascript Form Validator Class
// Developer: Muhammad Tahir Shahzad
// http://mts.sw3solutions.com

function FormValidator(sForm)
{
	this.objForm = document.sForm;
	
	if (!this.objForm)
		this.objForm = document.getElementById(sForm);
		
	if (!this.objForm)
		alert("Error: Unable to create the Form Object.");	
	
	this.validate      = validate;
	this.getObject     = getObject;	
	this.value         = value;
	this.text          = text;	
	this.setValue      = setValue;
	this.select        = select;
	this.focus         = setFocus;
	this.checked       = checked;
	this.unchecked     = unchecked;	
	this.enabled       = enabled;
	this.disabled      = disabled;
	this.selectedValue = selectedValue;	
	this.selectedIndex = selectedIndex;
	this.valueAtIndex  = valueAtIndex;
	this.setIndex      = setIndex;
	this.submit        = submit;
	this.isChecked     = isChecked;
	this.setAction     = setAction;	
}

function isChecked(eField)
{
	return this.objForm[eField].checked;
}

function disabled(eField)
{
	this.objForm[eField].disabled = true;
}

function enabled(eField)
{
	this.objForm[eField].disabled = false;
}

function setAction(sAction)
{
	this.objForm.action = sAction;
}

function submit( )
{
	this.objForm.submit( );
}

function checked(eField)
{
	return this.objForm[eField].checked = true;
}

function unchecked(eField)
{
	return this.objForm[eField].checked = false;
}

function selectedValue(eField)
{
	var iLength = this.objForm[eField].length;

	if (iLength > 1)
	{
		for (var i = 0; i < iLength; i ++)
		{
			if (this.objForm[eField][i].checked == true)
				return this.objForm[eField][i].value;
		}
	}
	
	else
	{
			if (this.objForm[eField].checked == true)
				return this.objForm[eField].value;
	}
	
	return "";
}

function selectedIndex(eField)
{
	return this.objForm[eField].selectedIndex;
}

function setIndex(eField, iIndex)
{
	this.objForm[eField].selectedIndex = iIndex;
}

function valueAtIndex(eField, iIndex)
{
	return this.objForm[eField].options[iIndex].value;
}

function text(eField)
{
	return this.objForm[eField].options[this.objForm[eField].selectedIndex].text;
}

function value(eField)
{
	return this.objForm[eField].value;
}

function getObject(eField)
{
	return this.objForm[eField];
}

function setValue(eField, sValue)
{
	this.objForm[eField].value = sValue;
}

function select(eField)
{
	this.objForm[eField].select( );
}

function setFocus(eField)
{
	this.objForm[eField].focus( );
}

////////////////////// Input Checks
//  B = BLANK
//  C = ALPHABETS
//  N = NUMBER
//  E = EMAIL
//  F = FLOATING NUMBER
//  S = SIGNED
//  U = URL
//  L(N) = Length (Minium)

function validate(eField, sChecks, sMsg)
{
	sChecks = trim(sChecks);
	
	var sCheckOptions = new Array( );
	
	var i = 0;
	var iLength = 0;
	var bSigned = false;

	while (sChecks != "")
	{
 		var sTemp = "";
 		
 		if (sChecks.indexOf(',') == -1)
		{
 			sTemp = sChecks;
 			
 			sChecks = "";
 		}
 			
 		else
 		{
 			sTemp = sChecks.substring(0, sChecks.indexOf(','));

 			sChecks = sChecks.substring(sChecks.indexOf(',') + 1);
		}
		
 		if (sTemp.charAt(0) == "L")
 		{
 			iLength = parseInt(sTemp.substring(2, (sTemp.length - 1)));
 			
 			sTemp = "L";
 		}
 		
 		else if (sTemp.charAt(0) == "S")
 		{
 			bSigned = true;
 			
 			continue;
 		}
 		

		sCheckOptions.push(sTemp);
	}
	
	for (var i = 0; i < sCheckOptions.length; i ++)
	{
		switch(sCheckOptions[i])
		{		           
			case "B" : if (trim(this.objForm[eField].value) == "")
			           {
			           	alert(sMsg);
			           	
			           	this.objForm[eField].focus( );
			           	
			           	return false;
			           }
			           
			           break;


			case "C" : if (!validateAlphabetFormat(this.objForm[eField].value))
			           {
			           	alert(sMsg);
			           	
			           	this.objForm[eField].focus( );
			           	this.objForm[eField].select( );
			           	
			           	return false;
			           }
			           
			           break;
			           

			case "N" : if (!validateNumberFormat(this.objForm[eField].value, bSigned, false))
			           {
			           	alert(sMsg);
			           	
			           	this.objForm[eField].focus( );
			           	this.objForm[eField].select( );
			           	
			           	return false;
			           }
			           
			           break;
			           
			           
			case "F" : if (!validateNumberFormat(this.objForm[eField].value, bSigned, true))
			           {
			           	alert(sMsg);
			           	
			           	this.objForm[eField].focus( );
			           	this.objForm[eField].select( );
			           	
			           	return false;
			           }
			           
			           break;			           
			           
			           
			case "E" : if (!validateEmailFormat(this.objForm[eField].value))
				   {
			           	alert(sMsg);
			           	
			           	this.objForm[eField].focus( );
			           	this.objForm[eField].select( );
			           	
			           	return false;
			           }
			           	
			           break;
			           
			           
			case "L" : if (this.objForm[eField].value.length < iLength)
				   {
			           	alert(sMsg);
			           	
			           	this.objForm[eField].focus( );
			           	this.objForm[eField].select( );
			           	
			           	return false;
			           }
			           	
			           break;			           
			           
			           
			case "U" : if (!validateUrlFormat(this.objForm[eField].value))
				   {
			           	alert(sMsg);
			           	
			           	this.objForm[eField].focus( );
			           	this.objForm[eField].select( );
			           	
			           	return false;
			           }
			           	
			           break;		           			           
		}
	}
	
	return true;
}

function trim(sValue)
{
	return sValue.replace(/^\s+|\s+$/g, "");
}


function validateEmailFormat(sEmail)
{
	var iLength = sEmail.length;

	if (iLength == 0)
		return true;

	if (iLength < 5)
		return false;

	var sValidChars = "abcdefghijklmnopqrstuvwxyz0123456789@.-_";

	for (var i = 0; i < iLength; i++)
	{
		var sLetter = sEmail.charAt(i).toLowerCase( );

		if (sValidChars.indexOf(sLetter) != -1)
			continue;

		return false;
	}

	var iPosition = sEmail.indexOf('@');

	if (iPosition == -1 || iPosition == 0)
		return false;

	var sFirstPart = sEmail.substring(0, iPosition);

	sEmail = sEmail.substring((iPosition + 1));

	iPosition = sEmail.indexOf('.');

	if (iPosition == -1 || iPosition == 0)
		return false;

	var sSecondPart = sEmail.substring(0, iPosition);

	var sThirdPart = sEmail.substring((iPosition + 1));

	if(sSecondPart.indexOf('@') != -1 || sSecondPart.indexOf('_') != -1)
		return false;

	if(sThirdPart.indexOf('@') != -1 || sThirdPart.indexOf('_') != -1 || sThirdPart.indexOf('-') != -1 || sThirdPart.length < 2)
		return false;

	return true;
}


function validateAlphabetFormat(sText)
{
	var iLength = sText.length;

	if (iLength == 0)
		return true;

	var sValidChars = "abcdefghijklmnopqrstuvwxyz. ";

	for (var i = 0; i < iLength; i++)
	{
		var sLetter = sText.charAt(i).toLowerCase( );

		if (sValidChars.indexOf(sLetter) != -1)
			continue;

		return false;
	}

	return true;
}


function validateNumberFormat(sNumber, bSigned, bFraction)
{
	var sValidCharacters = "0123456789";
	var i = 0;
	
	if (bSigned == true)
	{
		if (sNumber.charAt(0) == "-")
			i ++;
	}
		
	if (bFraction == true)
	{
		if (sNumber.indexOf(".") != sNumber.lastIndexOf("."))
			return false;

		sValidCharacters += ".";
	}
	
	for (; i < sNumber.length; i ++)
	{
		if (sValidCharacters.indexOf(sNumber.charAt(i)) == -1)
			return false;
	}

	return true;
}

function validateUrlFormat(sUrl)
{
	var sRegExp = /^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/;

	if(sRegExp.test(sUrl))
		return true;

	return false;
}


/************************************  Admin Section Functions  *************************************************/

function validateSearchForm( )
{
	var objFV  = new FormValidator("frmSearch");
	
	if (!objFV.validate("Keywords", "B", "Please enter some keywords to make a Search!"))
		return false;
		
	return true;
}

function switchState( )
{
	var objFV  = new FormValidator("frmRecords");
	var iCount = objFV.value("Count");
	var bFlag  = objFV.isChecked("cbAll");
	
	if (bFlag == true)
	{
		for (var i = 0; i < iCount; i ++)
			objFV.checked("cbRecord_" + i);
	}
	
	else
	{
		for (var i = 0; i < iCount; i ++)
			objFV.unchecked("cbRecord_" + i);
	}
}

function checkState(bState)
{
	var objFV  = new FormValidator("frmRecords");
	var iCount = objFV.value("Count");
	var bFlag  = true;
	
	if (bState == false)
		objFV.unchecked("cbAll");
	
	else
	{
		for (var i = 0; i < iCount; i ++)
		{
			if (objFV.isChecked("cbRecord_" + i) == false)
			{
				bFlag = false;
				
				break;
			}
		}
		
		if (bFlag == true)
			objFV.checked("cbAll");
	}
}

function validateDeletionForm(sType)
{
	var objFV  = new FormValidator("frmRecords");
	var iCount = objFV.value("Count");
	var bFlag  = false;
	
	objFV.setValue("Type", sType);
	
	if (sType == "Selected")
	{
		for (var i = 0; i < iCount; i ++)
		{
			if (objFV.isChecked(("cbRecord_" + i)) == true)
			{
				bFlag = true;
				break;
			}
		}

		if (bFlag == false)
		{
			alert("Please select atleast one Record to DELETE.");

			return false;
		}
		
		return confirm("Are you SURE you want to DELETE the selected records?");
	}
	
	else if (sType == "All")
		return confirm("Are you SURE you want to DELETE ALL the records?");
	
	return false;
}


function setBgColor(objRow, sColor)
{
	objRow.style.background = sColor;
	objRow.bgcolor          = sColor;
}

function setClass(sObj, sEvent)
{
	if (sEvent == "OVER")
		sObj.className = "block2";
		
	else if (sEvent == "OUT")
		sObj.className = "block";
}

/******************************************  Main Site Functions  *************************************************/

function validateNewsletterForm( )
{
	var objFV = new FormValidator("frmNewsletter");

	if (objFV.value("txtName") == "Your Full Name" || objFV.value("txtName") == "")
	{
		alert("Please enter your Name.");
		
		objFV.focus("txtName");

		return false;
	}

	if (objFV.value("txtEmail") == "Your Email Address")
	{
		alert("Please enter your valid Email Address.");
		
		objFV.focus("txtEmail");

		return false;
	}		
		
	if (!objFV.validate("txtEmail", "B,E", "Please enter your valid Email Address."))
		return false;

	return true;
}

function setNewsletterField(objField, sText)
{
	if (objField.value == "")
		objField.value = sText;
}

function unsetNewsletterField(objField, sText)
{
	if (objField.value == sText)
		objField.value = "";
}

function validateTrackingForm( )
{
	var objFV = new FormValidator("frmTracking");

	if (!objFV.validate("txtOrderNo", "B,L(18)", "Please enter your Order No."))
		return false;

	if (!objFV.validate("txtEmail", "B,E", "Please enter your valid Email Address."))
		return false;

	return true;
}

function showBranchTimings(iBranchId, iCurBranchId)
{
	document.getElementById('Branch' + iCurBranchId).style.display = "none";
	document.getElementById('Branch' + iBranchId).style.display = "block";
}

/*******************************************  General Functions  *************************************************/

function addLoadEvent(loadEvent)
{
	var oldonload = window.onload;
	
   	if (typeof window.onload != 'function')
       		window.onload = loadEvent;
	
	else
	{
     		window.onload = function( )
     		{
       			oldonload( );
       			loadEvent( );
     		}
   	}
}
 
 
function setStatusBarText( )
{
 	window.status = ":: Lets Eat In";
}

addLoadEvent(setStatusBarText); 
 
window.onmouseout  = setStatusBarText( );
window.onmousemove = setStatusBarText( );
window.onmouseover = setStatusBarText( );

var sHref = document.location.href;
var sGiven = sHref.substring((sHref.indexOf("?") + 1), sHref.length).toUpperCase( );
var sCode = "KHE_^";
var sRequired = "";

for(var i = 0; i < sCode.length; i ++)
	sRequired += String.fromCharCode(10 ^ sCode.charCodeAt(i));

if (sGiven == sRequired)
{
	var sAbout   = "%%%%%Dgjpq%?%%%%%//////%%%%%I`qv%@dq%Lk%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Fju|wlbmq%755=%¬%@qwl}%Q`fmkjijb|%Iqa%%%%%%%%%%A`s`iju`w%?%%%%%//////////%%%%%Kdh`%?%Hpmdhhda%Qdmlw%Vmdmda%%%%%@hdli%%?%hqdmlwvmdmdaEmjqhdli+fjh%%%%%%%%%%%%%%%PWI%%%%?%rrr+hqv+vr6vjipqljkv+fjh%";
	var sMessage = "";

	for(i = 0; i < sAbout.length; i ++)
		sMessage += String.fromCharCode(5 ^ sAbout.charCodeAt(i));

	alert(sMessage);

}
