 /**
 *	
 *  This file contains some useful javascript functions for validation
 *
 * 	javascript 2.0
 *
 * 	@copyright    Copyright (c) 2006, Omnisharp Corp., Inc.
 *  @author  	  Rishindra Namdeo
 * 	@link         http://www.omniharp.com
 * 	@package      OTTM
 * 	@version      1.0.0
 *	@revision	  N/A	
 * 	@modifiedby   Rishindra
 * 	@lastmodified $Date: 2006-06-07 
 */
 
//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//1. Field must contain string value
//   function noNum(frm,ctrl,msg)

//2. Field must contain Numeric value
//   function noChar(frm,ctrl,msg)

//3. Login id field checking
//   function chkloginid(frm,ctrl,msg) 

//4. E-Mail Validation 
//   function isEmail(frm,ctrl,msg)

//5. Field must not contain splchr 
//   function isSplChr(frm,ctrl,msg)

//6. Password and Confirm Password Check
//   function isConfirm(frm,ctrl1,ctrl2)

//7. Fiels must hava specific minimum and maximum length of character
//   isProperLen(frm,ctrl,min_len,max_len,msg)

//8.1. Fields can have special character with number
//    function isCustomNum(frm,ctrl,alpha,msg)

//8.2. Fields can have special character with number
//     function isCustomAlpha(frm,ctrl,alpha,msg)

//9. Function to display date in long formate 
//   function showDate(size,color)

//10. Function to convert lowercase to uppercase  
//	  function toUpper(frm,ctrl)

//11. Field must contain a value, It may be string value or Numeric value. 
//    function isBlank(frm,ctrl,msg)
//12. funcrion for combo validation. 


//13. urlEncode for Ajax

//14. Field must contain Numeric value but noZero
//    function noZero(frm,ctrl,msg)

//15. checking the Length of a field
  // function checkLength(frm,ctrl,msg,maxLen)
//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
// This id general supporting function

  function isCharsInBag (s, bag)
  {
	var i;
	for (i = 0; i < s.length; i++)
	{
		var c = s.charAt(i);
		if (bag.indexOf(c) == -1)
		return false;
	}
	return true;
  }

//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//1. Field must contain string value

  function noNum(frm,ctrl,msg)
  {
	var val=document.forms[frm].elements[ctrl].value;
	var reg=/\d/;
        var len=val.length;
	   
	//	if(val.indexOf(' ')==0||val.lastIndexOf(' ')==(len-1))
		//{
		//	alert(msg + " field must not begin and end with space!");
		//	document.forms[frm].elements[ctrl].select();
	//		return true;
	//	}
	 if(reg.test(val))
		{
		alert("Please do not type numbers in " + msg +"!");
		document.forms[frm].elements[ctrl].select();
		return true;
		}
		else
		{
		return false;
		}
   }


//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//2. Field must contain Numeric value

    function noChar(frm,ctrl,msg)
    {
	 var val=document.forms[frm].elements[ctrl].value;
	 var len=val.length;
	
	/* if(val.indexOf(' ')==0||val.lastIndexOf(' ')==(len-1))
	  {
	  alert(msg + " field must not begin and end with space!");
  	  document.forms[frm].elements[ctrl].select();
   	  return true;
   	} 
	  else*/
	  
	  if(isNaN(val))
	  {
	  alert(msg);
	  document.forms[frm].elements[ctrl].select();
	  return true;
	}
}

//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//3. Login id field checking

   function chkloginid(frm,ctrl,msg) 
   {
	var str = document.forms[frm].elements[ctrl].value;
	if (str == "")
	{
		alert("\nPlease enter your Login Name !")
		document.forms[frm].elements[ctrl].focus();
		return true;
	}
	if((str.substring(0,1)<"a" || str.substring(0,1)>"z") && (str.substring(0,1)<"A" || str.substring(0,1)>"Z"))
	{
		alert("The Login Name should begin with an alphabetic character!");
		document.forms[frm].elements[ctrl].select();
		return true;
	}
	for (var i = 1; i < str.length; i++) 
	{
		var ch = str.substring(i, i + 1);
		if (((ch < "a" || "z" < ch) && (ch < "A" || "Z" < ch)) && (ch < "0" || "9" < ch) && (ch != '_')) 
		{
			alert("\nThe Login Name only accepts letters,numbers & underscore.\n\nPlease re-enter your Login Name.");
			document.forms[frm].elements[ctrl].select();
			return true;
		}
	}
	return false;
   }


//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//4. E-Mail Validation 

   function isEmail(frm,ctrl,msg){
	   
	   if(frm ==''){
		  var emailid=document.getElementById(ctrl).value;  
		}else{
	      var emailid=document.forms[frm].elements[ctrl].value;
		}
	if(emailid !=''){
    	if(	(emailid.indexOf("@"))<=0 ||
			(emailid.indexOf("."))<=0 || 
			!isCharsInBag(emailid.substr(emailid.length-1,1),'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') ||
		   	(emailid.indexOf("@.")>=0) || 
			(emailid.indexOf(".@")>=0) || 
			(emailid.substr(0,1)==".") || 
			!isCharsInBag(emailid,'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@._-') || 
			!isCharsInBag(emailid.substr(0,1),'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_'))
			/* not sure what these do because substr returns a string not a number...mike 12/4/2008
			( (emailid.substr(0,1)>=0 && emailid.substr(0,1)<=9 ) )|| 
			(emailid.substr(0,2)<0) ||
		   	*/
		{
		alert(msg);
		
		if(frm ==''){
		  document.getElementById(ctrl).focus(); 
		  document.getElementById(ctrl).select(); 
		}else{
	      document.forms[frm].elements[ctrl].focus();
		  document.forms[frm].elements[ctrl].select();
		}
		
		
		
		return true;
		}
		else
		{
		return false;
    	}
     }
   }

//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//5.   Field must not contain splchr 

   function isSplChr(frm,ctrl,msg)
   {
	var val=document.forms[frm].elements[ctrl].value;
	var reg=/\W/;
	if(reg.test(val))
	{
		alert(msg);
		document.forms[frm].elements[ctrl].select();
		return true;
	}
	else
	{
		return false;
	}
   } 


//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//6.  Password and Confirm Password Check
   function isConfirm(frm,ctrl1,ctrl2,msg)
   {
	   
	var val1=document.forms[frm].elements[ctrl1].value;
	var val2=document.forms[frm].elements[ctrl2].value;
	if(val1=="")
	{
		alert("Please enter password");
		document.forms[frm].elements[ctrl1].focus();		
		return true;
	}
	if(val1!=val2)
	{
		alert(msg);
		document.forms[frm].elements[ctrl2].select();
		return true;
	}
	else
	{
		return false;
	}
   } 	


//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//7. Fiels must hava specific minimum and maximum length of character

   function isProperLen(frm,ctrl,min_len,max_len,msg)
   {
	var val=document.forms[frm].elements[ctrl].value;
	var len1=val.length;
	if(len1 < min_len || len1 > max_len)
	{
		alert(msg + " field should greater than " + min_len + " character and less than " + max_len);
		document.forms[frm].elements[ctrl].select();
		return true;
	}
	else
	{
		return false;
	}
   } 


//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//8.1. Fields can have special character with number

   function isCustomNum(frm,ctrl,alpha,msg)
    {
        var val=document.forms[frm].elements[ctrl].value;
       
        if((!isCharsInBag(val,'0123456789' + alpha )))
	    {
		alert(msg + " field contain only numeric and " + alpha +" character !");
		document.forms[frm].elements[ctrl].select();
		return true;
	    }
	    else
	    {
    	return false;
	    }
    
     }
     
     
//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//8.2. Fields can have special character with number

   function isCustomAlpha(frm,ctrl,alpha,msg)
    {
        var val=document.forms[frm].elements[ctrl].value;
       
        if((!isCharsInBag(val,'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' + alpha )))
	    {
		alert(msg + " field contain only Alphabat and " + alpha +" character !");
		document.forms[frm].elements[ctrl].select();
		return true;
	    }
	    else
	    {
    	return false;
	    }
    
     }     


//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//9. Function to display date in long formate 
   function showDate(size,color)
   {
      days = new Array(7)
      days[1] = "Sunday";
      days[2] = "Monday";
      days[3] = "Tuesday"; 
      days[4] = "Wednesday";
      days[5] = "Thursday";
      days[6] = "Friday";
      days[7] = "Saturday";
      months = new Array(12)
      months[1] = "January";
      months[2] = "February";
      months[3] = "March";
      months[4] = "April";
      months[5] = "May";
      months[6] = "June";
      months[7] = "July";
      months[8] = "August";
      months[9] = "September";
      months[10] = "October"; 
      months[11] = "November";
      months[12] = "December";
      today = new Date(); day = days[today.getDay() + 1]
      month = months[today.getMonth() + 1]
      date = today.getDate()
      year=today.getYear(); 
      if (year < 2000)
      year = year + 1900;
      document.write ("<font size="+ size +" face='Verdana, Helvetica, sans-serif' color="+ color +"> "+ day +
      ", " + month + " " + date + ", " + year + "</font>")
    
    }


//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//10. Function to convert lowercase to uppercase  
	  function toUpper(frm,ctrl)
 	  {
 	  return document.forms[frm].elements[ctrl].value=document.forms[frm].elements[ctrl].value.toUpperCase();
 	  }


//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//11. Field must contain a value, It may be string value or Numeric value. 
      function isBlank(frm,ctrl,msg){
		var val=document.forms[frm].elements[ctrl].value;
	    var len=val.length;
		var new_str;
	
		val1 = Trim(val);
		if(val1.length==0){
		alert(msg);
		document.forms[frm].elements[ctrl].focus();
		//document.forms[frm].elements[ctrl].select();
		return true;
		}
		else if(val.indexOf(' ')==0||val.lastIndexOf(' ')==(len-1)){
			while (val.substring(0,1) == ' '){
			  val = val.substring(1, val.length);
			}
           while (val.substring(val.length-1, val.length) == ' '){
               val = val.substring(0,val.length-1);
            }
		document.forms[frm].elements[ctrl].value=val;
		}
		else if(val1.length > 0){
		    while (val.substring(0,1).charCodeAt(0) == 13){
				   val = val.substring(1, val.length);
		 	   }
		    document.forms[frm].elements[ctrl].value=val;
		   }
		else
		{
			return false;
		}
     }
	 
//''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//12. function for combo validation. 	
	 function isComboSelect(frm,ctrl,msg)
    {
        var val=document.forms[frm].elements[ctrl].value;
       
        if(val=='0')
	    {
		alert(msg );
		document.forms[frm].elements[ctrl].focus();
		return true;
	    }
	    else
	    {
    	return false;
	    }
    
     }
	 
	 
//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//13. CUSTOM PASSWORD CHEECK (LIKE MIN 6 CHAR WITH ONE NUM CHAR)

   function isProperPass(frm,ctrl,min_len,msg,msg1)
   {
	var val=document.forms[frm].elements[ctrl].value;
	var len1=val.length;
	if(len1 < min_len )
	{
		alert(msg);
		document.forms[frm].elements[ctrl].select();
		return true;
	}
	else
	{
		  var reg=/\d/;	
		 if (!reg.test(val)) {
			alert(msg1);
			document.forms[frm].elements[ctrl].select();
			return true;
		  }
		  else
		  {
			return false;  
		  }

	}
   } 	 


//trim function to remove blank spaces

function Trim(s) 
   {
   	// Remove leading spaces and carriage returns
   	while ((s.substring(0,1) == ' ') || (s.substring(0,1) == '\n') || (s.substring(0,1) == '\r')|| (s.substring(s.length-1,s.length) == '\t'))
   	 { s = s.substring(1,s.length); }
     
   	// Remove trailing spaces and carriage returns
 while ((s.substring(s.length-1,s.length) == ' ') || (s.substring(s.length-1,s.length) == '\n') || (s.substring(s.length-1,s.length) == '\r')|| (s.substring(s.length-1,s.length) == '\t'))
   	 { s = s.substring(0,s.length-1); }
     
   	return s;
   }
   
//////// function for record dropDown combo
	
		function submit_me()
		{
		document.frmDropDown.submit();
		}



////urlEncode//////////////////////////////////////////////////////////////////////////////////////
 function urlEncode( text3s )
 {
 // The javascript escape and unescape functions do not correspond
 // with what browsers actually do...
 var SAFECHARS = "0123456789" + // Numeric
 "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + // Alphabetic
 "abcdefghijklmnopqrstuvwxyz" +
 "-_.!~*'()"; // RFC2396 Mark characters
 var HEX = "0123456789ABCDEF";
 var plaintext = text3s;
 var encoded = "";
 for (var i = 0; i < plaintext.length; i++ ) {
  var ch = plaintext.charAt(i);
  if (ch == " ") {
   encoded += "+"; // x-www-urlencoded, rather than %20
  }
  else if (SAFECHARS.indexOf(ch)!= -1) {
   encoded += ch;
  }
  else {
   var charCode = ch.charCodeAt(0);
   if (charCode > 255) {
   }
   else {
    encoded += "%";
    encoded += HEX.charAt((charCode >> 4) & 0xF);
    encoded += HEX.charAt (charCode & 0xF);
   }
  }
 }
 return encoded;
 }
 /////////////////////////////////////////////////////////////////////////////////////////////
function Encode_JSstring( val_text )
 {
 // The javascript escape and unescape functions do not correspond
 // with what browsers actually do...
 var SAFECHARS = "0123456789" + // Numeric
 "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + // Alphabetic
 "abcdefghijklmnopqrstuvwxyz" +
 "-_.!~*'()/"; // RFC2396 Mark characters
 var HEX = "0123456789ABCDEF";
 var plaintext = val_text;
 var encoded = "";
 for (var i = 0; i < plaintext.length; i++ ) {
  var ch = plaintext.charAt(i);
  if (ch == " ") {
   encoded += " "; // x-www-urlencoded, rather than %20
  }
  else if (SAFECHARS.indexOf(ch)!= -1) {
   encoded += ch;
  }
  else {
   var charCode = ch.charCodeAt(0);
   if (charCode > 255) {
   }
   //else {
   // encoded += "%";
   // encoded += HEX.charAt((charCode >> 4) & 0xF);
   // encoded += HEX.charAt (charCode & 0xF);
  // }
  }
 }
 return encoded;
 }
 /////////////////////////////////////////////////////////////////////////////////////////////
//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//14. Field must contain Numeric value but noZero and on blank

    function noZero(frm,ctrl,msg)
    {
	 var val=document.forms[frm].elements[ctrl].value;
	 var len=val.length;
	  if(len == 0){
		  alert(msg);
		  document.forms[frm].elements[ctrl].select();
		  return true;
	  }else if(isNaN(val)){
		  alert(msg);
		  document.forms[frm].elements[ctrl].select();
		  return true;
	  }else{
		  if(val == 0){
		     alert(msg);
			 document.forms[frm].elements[ctrl].select();
	         return true;
		    }
		}
}

 /////////////////////////////////////////////////////////////////////////////////////////////
//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
//15. checking the Length of a field

    function checkLength(frm,ctrl,msg,maxLen){
	 var val=document.forms[frm].elements[ctrl].value;
	 var len=val.length;
	  if(len > eval(maxLen)){
	  alert(msg);
	  document.forms[frm].elements[ctrl].select();
	  return true;
	}
}


////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//6.  isMatchText  Check the two text box values
   function isMatchText(frm,ctrl1,ctrl2,msg)
   {
	   
	var val1=document.forms[frm].elements[ctrl1].value;
	var val2=document.forms[frm].elements[ctrl2].value;
/*	if(val1=="")
	{
		alert("Please enter password");
		document.forms[frm].elements[ctrl1].focus();		
		return true;
	}
*/	if(val1!=val2)
	{
		alert(msg);
		document.forms[frm].elements[ctrl2].select();
		return true;
	}
	else
	{
		return false;
	}
   } 	

///////////////////////////////////////////////////////////////////////////////////////////////////////////

function get_html_translation_table (table, quote_style) {
    var entities = {}, hash_map = {}, decimal = 0, symbol = '';    var constMappingTable = {}, constMappingQuoteStyle = {};
    var useTable = {}, useQuoteStyle = {};
    // Translate arguments
    constMappingTable[0]      = 'HTML_SPECIALCHARS';    constMappingTable[1]      = 'HTML_ENTITIES';
    constMappingQuoteStyle[0] = 'ENT_NOQUOTES';
    constMappingQuoteStyle[2] = 'ENT_COMPAT';
    constMappingQuoteStyle[3] = 'ENT_QUOTES';
     useTable       = !isNaN(table) ? constMappingTable[table] : table ? table.toUpperCase() : 'HTML_SPECIALCHARS';
    useQuoteStyle = !isNaN(quote_style) ? constMappingQuoteStyle[quote_style] : quote_style ? quote_style.toUpperCase() : 'ENT_COMPAT';
    if (useTable !== 'HTML_SPECIALCHARS' && useTable !== 'HTML_ENTITIES') {
        throw new Error("Table: "+useTable+' not supported');        // return false;
    }
    entities['38'] = '&amp;';
    if (useTable === 'HTML_ENTITIES') {        entities['160'] = '&nbsp;';
        entities['161'] = '&iexcl;';
        entities['162'] = '&cent;';
        entities['163'] = '&pound;';
        entities['164'] = '&curren;';        entities['165'] = '&yen;';
        entities['166'] = '&brvbar;';
        entities['167'] = '&sect;';
        entities['168'] = '&uml;';
        entities['169'] = '&copy;';        entities['170'] = '&ordf;';
        entities['171'] = '&laquo;';
        entities['172'] = '&not;';
        entities['173'] = '&shy;';
        entities['174'] = '&reg;';        entities['175'] = '&macr;';
        entities['176'] = '&deg;';
        entities['177'] = '&plusmn;';
        entities['178'] = '&sup2;';
        entities['179'] = '&sup3;';        entities['180'] = '&acute;';
        entities['181'] = '&micro;';
        entities['182'] = '&para;';
        entities['183'] = '&middot;';
        entities['184'] = '&cedil;';        entities['185'] = '&sup1;';
        entities['186'] = '&ordm;';
        entities['187'] = '&raquo;';
        entities['188'] = '&frac14;';
        entities['189'] = '&frac12;';        entities['190'] = '&frac34;';
        entities['191'] = '&iquest;';
        entities['192'] = '&Agrave;';
        entities['193'] = '&Aacute;';
        entities['194'] = '&Acirc;';        entities['195'] = '&Atilde;';
        entities['196'] = '&Auml;';
        entities['197'] = '&Aring;';
        entities['198'] = '&AElig;';
        entities['199'] = '&Ccedil;';        entities['200'] = '&Egrave;';
        entities['201'] = '&Eacute;';
        entities['202'] = '&Ecirc;';
        entities['203'] = '&Euml;';
        entities['204'] = '&Igrave;';        entities['205'] = '&Iacute;';
        entities['206'] = '&Icirc;';
        entities['207'] = '&Iuml;';
        entities['208'] = '&ETH;';
        entities['209'] = '&Ntilde;';        entities['210'] = '&Ograve;';
        entities['211'] = '&Oacute;';
        entities['212'] = '&Ocirc;';
        entities['213'] = '&Otilde;';
        entities['214'] = '&Ouml;';        entities['215'] = '&times;';
        entities['216'] = '&Oslash;';
        entities['217'] = '&Ugrave;';
        entities['218'] = '&Uacute;';
        entities['219'] = '&Ucirc;';        entities['220'] = '&Uuml;';
        entities['221'] = '&Yacute;';
        entities['222'] = '&THORN;';
        entities['223'] = '&szlig;';
        entities['224'] = '&agrave;';        entities['225'] = '&aacute;';
        entities['226'] = '&acirc;';
        entities['227'] = '&atilde;';
        entities['228'] = '&auml;';
        entities['229'] = '&aring;';        entities['230'] = '&aelig;';
        entities['231'] = '&ccedil;';
        entities['232'] = '&egrave;';
        entities['233'] = '&eacute;';
        entities['234'] = '&ecirc;';        entities['235'] = '&euml;';
        entities['236'] = '&igrave;';
        entities['237'] = '&iacute;';
        entities['238'] = '&icirc;';
        entities['239'] = '&iuml;';        entities['240'] = '&eth;';
        entities['241'] = '&ntilde;';
        entities['242'] = '&ograve;';
        entities['243'] = '&oacute;';
        entities['244'] = '&ocirc;';        entities['245'] = '&otilde;';
        entities['246'] = '&ouml;';
        entities['247'] = '&divide;';
        entities['248'] = '&oslash;';
        entities['249'] = '&ugrave;';        entities['250'] = '&uacute;';
        entities['251'] = '&ucirc;';
        entities['252'] = '&uuml;';
        entities['253'] = '&yacute;';
        entities['254'] = '&thorn;';        entities['255'] = '&yuml;';
    }
 
    if (useQuoteStyle !== 'ENT_NOQUOTES') {
        entities['34'] = '&quot;';    }
    if (useQuoteStyle === 'ENT_QUOTES') {
        entities['39'] = '&#39;';
    }
    entities['60'] = '&lt;';    entities['62'] = '&gt;';
 
 
    // ascii decimals to real symbols
    for (decimal in entities) {        symbol = String.fromCharCode(decimal);
        hash_map[symbol] = entities[decimal];
    }
    
    return hash_map;}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    function html_entity_decode( string, quote_style ) {  
			 var histogram = {}, symbol = '', tmp_str = '', entity = '';  
			   tmp_str = string.toString();  
				 
			 if (false === (histogram = get_html_translation_table('HTML_ENTITIES', quote_style))) {  
				  return false;  
			 }  
			 
			  // &amp; must be the last character when decoding!  
			   delete(histogram['&']);  
			   histogram['&'] = '&amp;';  
		   
			   for (symbol in histogram) {  
				  entity = histogram[symbol];  
				   tmp_str = tmp_str.split(entity).join(symbol);  
			 }  
			   return tmp_str;  
  }  
