/* Essential Javascript Function By Ganesh.G */

/*--------------------------------------------------------------------------------------*/
/*----------------------------OBJECT-Functions------------------------------------------*/
/*--------------------------------------------------------------------------------------*/

function isObject(obj) 
{
  return (typeof(obj)=='object');
}
/*--------------------------------------------------------------------------------------*/

function isFunction(obj) 
{
  return (typeof(obj)=='function');
}
/*--------------------------------------------------------------------------------------*/

function isString(obj) 
{
  return (typeof(obj)=='string');
}
/*--------------------------------------------------------------------------------------*/

function isNumeric(obj)
{
	var regexpression=new RegExp('^([1-9]{1}[0-9]{0,}(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|\.[0-9]{1,2})$');

	if(obj != '')
	{
		if(!obj.match(regexpression))
		{return false;}
		else
		{return true;}
	}
}
/*--------------------------------------------------------------------------------------*/

function isArray(obj){return(typeof(obj.length)=='undefined')?false:true;}
/*--------------------------------------------------------------------------------------*/

function isDate(dateStr) 
{
	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
	var matchArray = dateStr.match(datePat);

	if (matchArray == null) 
	{
		alert('Please enter date as either mm/dd/yyyy or mm-dd-yyyy.');
		return false;
	}

	month = matchArray[1]; // p@rse date into variables
	day = matchArray[3];
	year = matchArray[5];

	if (month < 1 || month > 12) 
	{ // check month range
		alert('Month must be between 1 and 12.');
		return false;
	}

	if (day < 1 || day > 31) 
	{
		alert('Day must be between 1 and 31.');
		return false;
	}

	if ((month==4 || month==6 || month==9 || month==11) && day==31) 
	{
		alert('Month '+month+' doesn`t have 31 days!')
		return false;
	}

	if (month == 2) 
	{ // check for february 29th
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day > 29 || (day==29 && !isleap)) 
		{
			alert('February ' + year + ' doesn`t have ' + day + ' days!');
			return false;
		}
	}
	
	return true; // date is valid
}
/*--------------------------------------------------------------------------------------*/

function isAlphaNumeric(obj)
{
	var regAlphaNumeric = /^[0-9a-zA-Z]+$/;
	
	try
	{
		if(!obj.match(regAlphaNumeric))
		{return false;}
		else
		{return true;}
	}
	catch (e)
	{alert(e);}
}
/*--------------------------------------------------------------------------------------*/

function isAlphaNumericWithSpace(obj)
{
	var regAlphaNumeric = /^[0-9a-zA-Z ]+$/;
	
	try
	{
		if(!obj.match(regAlphaNumeric))
		{return false;}
		else
		{return true;}
	}
	catch (e)
	{alert(e);}
}
/*--------------------------------------------------------------------------------------*/

function isEmail(obj)
{
	var regEmail = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	
	try
	{
		if(!obj.match(regEmail))
		{return false;}
		else
		{return true;}
	}
	catch (e)
	{alert(e);}
}
/*--------------------------------------------------------------------------------------*/

function isValidMobileNo(objMobileNo)
{	var rFlag = false;
	objMobileNo = trimAll(objMobileNo);
	if(objMobileNo!="")
	{
		var incomingString=objMobileNo;
		if(incomingString.length > 15 || incomingString.search(/[^0-9\-()+]/g) != -1 )
		{
			rFlag = false;
		}
		else
		{rFlag = true;}
	}
	return rFlag;
}

/*--------------------------------------------------------------------------------------*/
/*----------------------------STRING-Functions------------------------------------------*/
/*--------------------------------------------------------------------------------------*/

function trimAll(sString) 
{
	while (sString.substring(0,1) == ' ')
	{
		sString = sString.substring(1, sString.length);
	}
	while (sString.substring(sString.length-1, sString.length) == ' ')
	{
		sString = sString.substring(0,sString.length-1);
	}
	return sString;
}
/*--------------------------------------------------------------------------------------*/

function lTrim(stringToTrim) 
{
	return stringToTrim.replace(/^\s+/,'');
}
/*--------------------------------------------------------------------------------------*/

function rTrim(stringToTrim) 
{
	return stringToTrim.replace(/\s+$/,'');
}
/*--------------------------------------------------------------------------------------*/

function Left(oString, n)
{
	if (n <= 0)
	    return '';
	else if (n > String(oString).length)
	    return oString;
	else
	    return String(oString).substring(0,n);
}
/*--------------------------------------------------------------------------------------*/

function Right(oString, n)
{
    if (n <= 0)
       return '';
    else if (n > String(oString).length)
       return str;
    else {
       var iLen = String(oString).length;
       return String(oString).substring(iLen, iLen - n);
    }
}
/*--------------------------------------------------------------------------------------*/

function strReverse(oString)
{
	  var newString = ''; 
      var theString = new String(oString);
      var counter = theString.length; 

      for (counter  ;counter > 0 ;counter -- ) 
	  { 
         newString += theString.substring(counter-1, counter); 
      }

	  return newString;
}
/*--------------------------------------------------------------------------------------*/

function strToLowerCase(oString)
{
	var theString = new String(oString);

	return theString.toLowerCase()
}
/*--------------------------------------------------------------------------------------*/

function strToUpperCase(oString)
{
	var theString = new String(oString);

	return theString.toUpperCase()
}
/*--------------------------------------------------------------------------------------*/

function strToProperCase(oString)
{
  return oString.toLowerCase().replace(/^(.)|\s(.)/g,
          function($1) { return $1.toUpperCase(); });

}
/*--------------------------------------------------------------------------------------*/

function strFind(oString,oStringToFind)
{ 
	var newString = String(oString);
	var is_Found = newString.indexOf(oStringToFind);
	return is_Found;
}

/*--------------------------------------------------------------------------------------*/
/*----------------------------GENERAL-Functions-----------------------------------------*/
/*--------------------------------------------------------------------------------------*/

function isContentVulnerable(oString)
{
	var reg = /(<script|&lt;script|<\/script>|&lt;\/script&gt;|script>|script&gt;)/gi;
	if(oString.match(reg))
	{return true;}

	return false;
}
/*--------------------------------------------------------------------------------------*/

function nl2br(oString)
{
	if(typeof(oString)=='string') return oString.replace(/(\r\n)|(\n\r)|\r|\n/g,'<BR>');
    else return oString;
}
/*--------------------------------------------------------------------------------------*/

function br2nl(oString)
{
	var reg = /(<br\/>|<br>|<BR>|<BR\/>)/g;
	var newString = oString.replace(reg, '\n');
	return newString;
}
/*--------------------------------------------------------------------------------------*/

function getBrowserName()
{
	var browserName = trimAll(navigator.appName).toLowerCase();
	var browserAgent = trimAll(navigator.userAgent).toLowerCase(); 

	if(browserName == 'netscape')
	{ 
		if(strFind(browserAgent,'mozilla') != -1)
		{ return 'mozilla';}
		else
		{ return 'netscape';}
	}
	else if(browserName == 'microsoft internet explorer')
	{ return 'ie';}
	else if(strFind(browserAgent,'opera') != -1)
	{ return 'opera';}
	else
	{ return 'unknown';}
}
/*--------------------------------------------------------------------------------------*/

function showBrowserSupport()
{

	if(document.getElementById) 
	{	
		try
		{
		
			var browserName = getBrowserName();
			var oDiv = eval(document.getElementById('autoDivBrowser'));
			setShowDiv(oDiv);
			if (browserName == 'unknown')
			{
				oDiv.innerHTML = "<Font face='verdana' size='1' color='#FFFFFF'>Browser Not Supported!&nbsp;&nbsp;</Font><a href='#' onclick='javascript:setHideDiv();' Title='Close'><Font face='verdana' size='1' color='#FFFFFF'>X</Font></a>";
			}
			else
			{setHideDiv();}
		}
		catch(e)
		{
			//alert(e);
			alert("Create DIV tage like <DIV id='autoDivBrowser'></DIV> in your file!");
			return false;
		}
	}

	return true;
}
/*--------------------------------------------------------------------------------------*/

function setShowDiv(oDiv)
{
	oDiv.style.display='inline';
	oDiv.style.border='solid 1px';
	oDiv.style.left ='0px';
	oDiv.style.top ='0px';
	oDiv.style.width ='150px';
	oDiv.style.float = 'left';
	oDiv.style.position = 'absolute';
	oDiv.style.background = '#660033';
	oDiv.title ='Use IExplorer and Firefox for best view!';
}
/*--------------------------------------------------------------------------------------*/

function setHideDiv()
{
	var oDiv = eval(document.getElementById('autoDivBrowser'));
	oDiv.style.display='none';
	oDiv.style.left ='0px';
	oDiv.style.top ='0px';
	oDiv.style.width ='0px';
	oDiv.style.visibility = 'hidden';
}

/*--------------------------------------------------------------------------------------*/
/*----------------------------VALIDATION-Functions--------------------------------------*/
/*--------------------------------------------------------------------------------------*/

function validateVulnerableInAllText(frm)
{ //frm should refered as a form object

	var isNoTextBox = true;
	var isVulnerable = false;

	if(frm != null)
	{ 	
		var frmLength = frm.length;
		for (var i=0; i<frmLength; i++) 
		{
			if (frm.elements[i] && frm.elements[i].type == "text") 
			{
				isNoTextBox = false;

				if(isContentVulnerable(frm.elements[i].value))
				{
					isVulnerable = true;
					frm.elements[i].focus();
					break;
				} // end if
			}
		}
	}

	if(!isObject(frm))
	{
		alert("Invalid Form Object!");
		return false;
	}

	if(isNoTextBox)
	{
		//alert("No Text Boxes Found!");
		//return false;
	}

	if(isVulnerable)
	{
		alert("Avoid Script tags!");
		return false;
	}

	return true;
}
/*--------------------------------------------------------------------------------------*/

function autoValidate(frm)
{	
	// M   = Mandatory	
	// M-A = Mandatory AlphaNumeric
	// M-AS = Mandatory AlphaNumeric With Space
	// M-N = Mandatory Numeric
	// M-E = Mandatory Email
	// M-W = Mandatory Website
	// M-D = Mandatory Date
	// M-M = Mandatory Mobile Number

	// N   = Not Mandatory
	// N-A = Not Mandatory AlphaNumeric
	// N-AS = Not Mandatory AlphaNumeric With Space
	// N-N = Not Mandaroty Numeric
	// N-E = Not Mandatory Email
	// N-W = Not Mandatory Website
	// N-D = Not Mandatory Date
	// N-M = Not Mandatory Mobile Number

	var aMsg = "";
	var eMsg = "";
	var trimedValue = "";
	var validValue = "";
	var errOccur = false;
	
	if(document.getElementById("imgProgress"))
	{document.getElementById("imgProgress").style.visibility='visible';}

	frm = document.getElementById(frm);

	if(!validateVulnerableInAllText(frm))
	{return false;}
	else
	{
		var frmLength = frm.length;
		for (var i=0; i<frmLength; i++) 
		{
			if(frm.elements[i])
			{	

				if(frm.elements[i].getAttribute("emsg"))
				{eMsg=trimAll(frm.elements[i].getAttribute("emsg"));}

				trimedValue = trimAll(frm.elements[i].value);

				if(frm.elements[i].getAttribute("validate"))
				{validValue = frm.elements[i].getAttribute("validate");}

				if (frm.elements[i].type == 'select-one')
				{
					if(validValue == 'M' && trimedValue == '0')
					{aMsg = (eMsg==''?'Select Value from dropdown!':eMsg); errOccur = true;}

					if(errOccur){frm.elements[i].focus(); break;}
				}

				if (frm.elements[i].type == 'file')
				{	
					if(validValue == 'M' && trimedValue == '')
					{aMsg = (eMsg==''?'Browse file to upload!':eMsg); errOccur = true;}

					if(errOccur){frm.elements[i].focus(); break;}
				}

				if (frm.elements[i].type == 'text' || frm.elements[i].type == 'textarea' || frm.elements[i].type == 'password') 
				{	
					/*---------Text Fields Validation-----------*/
					if(validValue == 'M' && trimedValue == '')
					{	
						aMsg = (eMsg==''?'Enter Value!':eMsg); errOccur = true; 
					}
					else if(validValue == 'M-A' || (validValue == 'N-A' && trimedValue != ''))
					{	
						if(!isAlphaNumeric(trimedValue))
						{ aMsg = (eMsg==''?'Enter Valid AlphaNumeric!':eMsg); errOccur = true; }
					}
					else if(validValue == 'M-AS' || (validValue == 'N-AS' && trimedValue != ''))
					{	
						if(!isAlphaNumericWithSpace(trimedValue))
						{ aMsg = (eMsg==''?'AlphaNumeric and Space only allowed!':eMsg); errOccur = true; }
					}
					else if(validValue == 'M-N' || (validValue == 'N-N' && trimedValue != ''))
					{	
						if(!isNumeric(trimedValue))
						{ aMsg = (eMsg==''?'Enter Valid Number!':eMsg); errOccur = true; }
					}
					else if(validValue == 'M-E' || (validValue == 'N-E' && trimedValue != ''))
					{	
						if(!isEmail(trimedValue))
						{ aMsg = (eMsg==''?'Enter Valid e-Mail!':eMsg); errOccur = true; }
					}
					else if(validValue == 'M-D' || (validValue == 'N-D' && trimedValue != ''))
					{	
						if(!isDate(trimedValue))
						{ errOccur = true; }
					}
					else if(validValue == 'M-M' || (validValue == 'N-M' && trimedValue != ''))
					{	
						if(!isValidMobileNo(trimedValue))
						{ aMsg = (eMsg==''?'Enter valid mobile number!':eMsg); errOccur = true; }
					}

					if(errOccur){frm.elements[i].focus(); break;}

				}//Get text boxes - if

			}//Check form element
		}
	}

	if(errOccur)
	{	if(trimAll(aMsg)!=''){alert(aMsg);}
		if(document.getElementById("imgProgress"))
		{document.getElementById("imgProgress").style.visibility='hidden';}
		return false;
	}

	return true;
}

/*--------------------------------------------------------------------------------------*/
function GoToLocation(x) {
    document.location = x;
    return true;
}

function getConfirmation() {
    return confirm("Are you sure?");
}
