 /**
 *	
 *  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)
  
//16. md5(str)

//17.  Date formate    dateFormat()

// 18 Copy texts to clipboard

//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
// 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].value='';
		 document.forms[frm].elements[ctrl].focus();
		document.forms[frm].elements[ctrl].select();
		
		return true;
	}
	
	
	
	
	if(	!isCharsInBag(str,'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@._-+') || 
		!isCharsInBag(str.substr(0,1),'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_'))
		{
			alert("\nThe Login Name only accepts letters,numbers and (._-+@) .\nPlease re-enter your Login Name.");
		    document.forms[frm].elements[ctrl].value='';
			 document.forms[frm].elements[ctrl].focus();
			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;  
  }  
/////////////////////////////////////////////////////////////////////////////////////////////////////////////


function md5 (str) {
    var xl;
    var rotateLeft = function (lValue, iShiftBits) {
        return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));
    };

    var addUnsigned = function (lX,lY) {
        var lX4,lY4,lX8,lY8,lResult;
        lX8 = (lX & 0x80000000);
        lY8 = (lY & 0x80000000);
        lX4 = (lX & 0x40000000);
        lY4 = (lY & 0x40000000);
        lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);
        if (lX4 & lY4) {
            return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
        }
        if (lX4 | lY4) {
            if (lResult & 0x40000000) {
                return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
            } else {
                return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
            }
        } else {
            return (lResult ^ lX8 ^ lY8);
        }
    };

    var _F = function (x,y,z) { return (x & y) | ((~x) & z); };
    var _G = function (x,y,z) { return (x & z) | (y & (~z)); };
    var _H = function (x,y,z) { return (x ^ y ^ z); };
    var _I = function (x,y,z) { return (y ^ (x | (~z))); };

    var _FF = function (a,b,c,d,x,s,ac) {
        a = addUnsigned(a, addUnsigned(addUnsigned(_F(b, c, d), x), ac));
        return addUnsigned(rotateLeft(a, s), b);
    };

    var _GG = function (a,b,c,d,x,s,ac) {
        a = addUnsigned(a, addUnsigned(addUnsigned(_G(b, c, d), x), ac));
        return addUnsigned(rotateLeft(a, s), b);
    };

    var _HH = function (a,b,c,d,x,s,ac) {
        a = addUnsigned(a, addUnsigned(addUnsigned(_H(b, c, d), x), ac));
        return addUnsigned(rotateLeft(a, s), b);
    };

    var _II = function (a,b,c,d,x,s,ac) {
        a = addUnsigned(a, addUnsigned(addUnsigned(_I(b, c, d), x), ac));
        return addUnsigned(rotateLeft(a, s), b);
    };

    var convertToWordArray = function (str) {
        var lWordCount;
        var lMessageLength = str.length;
        var lNumberOfWords_temp1=lMessageLength + 8;
        var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
        var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
        var lWordArray=new Array(lNumberOfWords-1);
        var lBytePosition = 0;
        var lByteCount = 0;
        while ( lByteCount < lMessageLength ) {
            lWordCount = (lByteCount-(lByteCount % 4))/4;
            lBytePosition = (lByteCount % 4)*8;
            lWordArray[lWordCount] = (lWordArray[lWordCount] | (str.charCodeAt(lByteCount)<<lBytePosition));
            lByteCount++;
        }
        lWordCount = (lByteCount-(lByteCount % 4))/4;
        lBytePosition = (lByteCount % 4)*8;
        lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80<<lBytePosition);
        lWordArray[lNumberOfWords-2] = lMessageLength<<3;
        lWordArray[lNumberOfWords-1] = lMessageLength>>>29;
        return lWordArray;
    };

    var wordToHex = function (lValue) {
        var wordToHexValue="",wordToHexValue_temp="",lByte,lCount;
        for (lCount = 0;lCount<=3;lCount++) {
            lByte = (lValue>>>(lCount*8)) & 255;
            wordToHexValue_temp = "0" + lByte.toString(16);
            wordToHexValue = wordToHexValue + wordToHexValue_temp.substr(wordToHexValue_temp.length-2,2);
        }
        return wordToHexValue;
    };

    var x=[],
        k,AA,BB,CC,DD,a,b,c,d,
        S11=7, S12=12, S13=17, S14=22,
        S21=5, S22=9 , S23=14, S24=20,
        S31=4, S32=11, S33=16, S34=23,
        S41=6, S42=10, S43=15, S44=21;

    str = this.utf8_encode(str);
    x = convertToWordArray(str);
    a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;
    
    xl = x.length;
    for (k=0;k<xl;k+=16) {
        AA=a; BB=b; CC=c; DD=d;
        a=_FF(a,b,c,d,x[k+0], S11,0xD76AA478);
        d=_FF(d,a,b,c,x[k+1], S12,0xE8C7B756);
        c=_FF(c,d,a,b,x[k+2], S13,0x242070DB);
        b=_FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);
        a=_FF(a,b,c,d,x[k+4], S11,0xF57C0FAF);
        d=_FF(d,a,b,c,x[k+5], S12,0x4787C62A);
        c=_FF(c,d,a,b,x[k+6], S13,0xA8304613);
        b=_FF(b,c,d,a,x[k+7], S14,0xFD469501);
        a=_FF(a,b,c,d,x[k+8], S11,0x698098D8);
        d=_FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);
        c=_FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1);
        b=_FF(b,c,d,a,x[k+11],S14,0x895CD7BE);
        a=_FF(a,b,c,d,x[k+12],S11,0x6B901122);
        d=_FF(d,a,b,c,x[k+13],S12,0xFD987193);
        c=_FF(c,d,a,b,x[k+14],S13,0xA679438E);
        b=_FF(b,c,d,a,x[k+15],S14,0x49B40821);
        a=_GG(a,b,c,d,x[k+1], S21,0xF61E2562);
        d=_GG(d,a,b,c,x[k+6], S22,0xC040B340);
        c=_GG(c,d,a,b,x[k+11],S23,0x265E5A51);
        b=_GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);
        a=_GG(a,b,c,d,x[k+5], S21,0xD62F105D);
        d=_GG(d,a,b,c,x[k+10],S22,0x2441453);
        c=_GG(c,d,a,b,x[k+15],S23,0xD8A1E681);
        b=_GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);
        a=_GG(a,b,c,d,x[k+9], S21,0x21E1CDE6);
        d=_GG(d,a,b,c,x[k+14],S22,0xC33707D6);
        c=_GG(c,d,a,b,x[k+3], S23,0xF4D50D87);
        b=_GG(b,c,d,a,x[k+8], S24,0x455A14ED);
        a=_GG(a,b,c,d,x[k+13],S21,0xA9E3E905);
        d=_GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);
        c=_GG(c,d,a,b,x[k+7], S23,0x676F02D9);
        b=_GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);
        a=_HH(a,b,c,d,x[k+5], S31,0xFFFA3942);
        d=_HH(d,a,b,c,x[k+8], S32,0x8771F681);
        c=_HH(c,d,a,b,x[k+11],S33,0x6D9D6122);
        b=_HH(b,c,d,a,x[k+14],S34,0xFDE5380C);
        a=_HH(a,b,c,d,x[k+1], S31,0xA4BEEA44);
        d=_HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);
        c=_HH(c,d,a,b,x[k+7], S33,0xF6BB4B60);
        b=_HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);
        a=_HH(a,b,c,d,x[k+13],S31,0x289B7EC6);
        d=_HH(d,a,b,c,x[k+0], S32,0xEAA127FA);
        c=_HH(c,d,a,b,x[k+3], S33,0xD4EF3085);
        b=_HH(b,c,d,a,x[k+6], S34,0x4881D05);
        a=_HH(a,b,c,d,x[k+9], S31,0xD9D4D039);
        d=_HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);
        c=_HH(c,d,a,b,x[k+15],S33,0x1FA27CF8);
        b=_HH(b,c,d,a,x[k+2], S34,0xC4AC5665);
        a=_II(a,b,c,d,x[k+0], S41,0xF4292244);
        d=_II(d,a,b,c,x[k+7], S42,0x432AFF97);
        c=_II(c,d,a,b,x[k+14],S43,0xAB9423A7);
        b=_II(b,c,d,a,x[k+5], S44,0xFC93A039);
        a=_II(a,b,c,d,x[k+12],S41,0x655B59C3);
        d=_II(d,a,b,c,x[k+3], S42,0x8F0CCC92);
        c=_II(c,d,a,b,x[k+10],S43,0xFFEFF47D);
        b=_II(b,c,d,a,x[k+1], S44,0x85845DD1);
        a=_II(a,b,c,d,x[k+8], S41,0x6FA87E4F);
        d=_II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);
        c=_II(c,d,a,b,x[k+6], S43,0xA3014314);
        b=_II(b,c,d,a,x[k+13],S44,0x4E0811A1);
        a=_II(a,b,c,d,x[k+4], S41,0xF7537E82);
        d=_II(d,a,b,c,x[k+11],S42,0xBD3AF235);
        c=_II(c,d,a,b,x[k+2], S43,0x2AD7D2BB);
        b=_II(b,c,d,a,x[k+9], S44,0xEB86D391);
        a=addUnsigned(a,AA);
        b=addUnsigned(b,BB);
        c=addUnsigned(c,CC);
        d=addUnsigned(d,DD);
    }

    var temp = wordToHex(a)+wordToHex(b)+wordToHex(c)+wordToHex(d);

    return temp.toLowerCase();
}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////

function utf8_encode ( argString ) {

    var string = (argString+''); // .replace(/\r\n/g, "\n").replace(/\r/g, "\n");

    var utftext = "";
    var start, end;
    var stringl = 0;

    start = end = 0;
    stringl = string.length;
    for (var n = 0; n < stringl; n++) {
        var c1 = string.charCodeAt(n);
        var enc = null;

        if (c1 < 128) {
            end++;
        } else if (c1 > 127 && c1 < 2048) {
            enc = String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128);
        } else {
            enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128);
        }
        if (enc !== null) {
            if (end > start) {
                utftext += string.substring(start, end);
            }
            utftext += enc;
            start = end = n+1;
        }
    }

    if (end > start) {
        utftext += string.substring(start, string.length);
    }

    return utftext;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////

var dateFormat = function () {
	var	token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
		timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
		timezoneClip = /[^-+\dA-Z]/g,
		pad = function (val, len) {
			val = String(val);
			len = len || 2;
			while (val.length < len) val = "0" + val;
			return val;
		};

	// Regexes and supporting functions are cached through closure
	return function (date, mask, utc) {
		var dF = dateFormat;

		// You can't provide utc if you skip other args (use the "UTC:" mask prefix)
		if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) {
			mask = date;
			date = undefined;
		}

		// Passing date through Date applies Date.parse, if necessary
		date = date ? new Date(date) : new Date;
		if (isNaN(date)) throw SyntaxError("invalid date");

		mask = String(dF.masks[mask] || mask || dF.masks["default"]);

		// Allow setting the utc argument via the mask
		if (mask.slice(0, 4) == "UTC:") {
			mask = mask.slice(4);
			utc = true;
		}

		var	_ = utc ? "getUTC" : "get",
			d = date[_ + "Date"](),
			D = date[_ + "Day"](),
			m = date[_ + "Month"](),
			y = date[_ + "FullYear"](),
			H = date[_ + "Hours"](),
			M = date[_ + "Minutes"](),
			s = date[_ + "Seconds"](),
			L = date[_ + "Milliseconds"](),
			o = utc ? 0 : date.getTimezoneOffset(),
			flags = {
				d:    d,
				dd:   pad(d),
				ddd:  dF.i18n.dayNames[D],
				dddd: dF.i18n.dayNames[D + 7],
				m:    m + 1,
				mm:   pad(m + 1),
				mmm:  dF.i18n.monthNames[m],
				mmmm: dF.i18n.monthNames[m + 12],
				yy:   String(y).slice(2),
				yyyy: y,
				h:    H % 12 || 12,
				hh:   pad(H % 12 || 12),
				H:    H,
				HH:   pad(H),
				M:    M,
				MM:   pad(M),
				s:    s,
				ss:   pad(s),
				l:    pad(L, 3),
				L:    pad(L > 99 ? Math.round(L / 10) : L),
				t:    H < 12 ? "a"  : "p",
				tt:   H < 12 ? "am" : "pm",
				T:    H < 12 ? "A"  : "P",
				TT:   H < 12 ? "AM" : "PM",
				Z:    utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
				o:    (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
				S:    ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
			};

		return mask.replace(token, function ($0) {
			return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
		});
	};
}();

// Some common format strings
dateFormat.masks = {
	"default":      "ddd mmm dd yyyy HH:MM:ss",
	shortDate:      "m/d/yy",
	mediumDate:     "mmm d, yyyy",
	longDate:       "mmmm d, yyyy",
	fullDate:       "dddd, mmmm d, yyyy",
	shortTime:      "h:MM TT",
	mediumTime:     "h:MM:ss TT",
	longTime:       "h:MM:ss TT Z",
	isoDate:        "yyyy-mm-dd",
	isoTime:        "HH:MM:ss",
	isoDateTime:    "yyyy-mm-dd'T'HH:MM:ss",
	isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
};

// Internationalization strings
dateFormat.i18n = {
	dayNames: [
		"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
		"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
	],
	monthNames: [
		"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
		"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
	]
};

// For convenience...
Date.prototype.format = function (mask, utc) {
	return dateFormat(this, mask, utc);
};

//////////////////////////////////////////////////////////////////////////////////////////////////////

 function number_format (number, decimals, dec_point, thousands_sep) {
    number = (number + '').replace(/[^0-9+\-Ee.]/g, '');
    var n = !isFinite(+number) ? 0 : +number,
        prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
        sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
        dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
        s = '',
        toFixedFix = function (n, prec) {
            var k = Math.pow(10, prec);
            return '' + Math.round(n * k) / k;
        };
    // Fix for IE parseFloat(0.55).toFixed(0) = 0;
    s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
    if (s[0].length > 3) {
        s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
    }
    if ((s[1] || '').length < prec) {
        s[1] = s[1] || '';
        s[1] += new Array(prec - s[1].length + 1).join('0');
    }
    return s.join(dec);
}

// use it like : document.getElementById("txt_total_amt").value = number_format(document.getElementById("txt_total_amt").value,2,'.',',');

 /////////////Unique Array///////////////////////////////////////////////////////////////
 
function unique(arrayName){
 		  var newArray=new Array();
		  label:for(var i=0; i<arrayName.length;i++ )
		  {  
		  for(var j=0; j<newArray.length;j++ )
		  {
		  if(newArray[j]==arrayName[i]) 
		  continue label;
		  }
		  newArray[newArray.length] = arrayName[i];
		  }
		  return newArray;
  }
 ////////////////////////////////////////////////////////////////////////////
  
   /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function copyToClipboard(txt) {
 	    if(window.clipboardData) {
		  window.clipboardData.clearData();
		   window.clipboardData.setData("Text", txt);
		}else if(navigator.userAgent.indexOf("Opera") != -1) {
		 window.location = txt;
		 }else if(window.netscape) {
				  try {
				      netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
				 } catch (e) {
				    //alert("You need set 'signed.applets.codebase_principal_support=true'at about:config");
				    return false;
				 }
					var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
					 if (!clip)
					 return;
					 var trans =
					 Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
					 if (!trans)
					 return;
					 trans.addDataFlavor('text/unicode');
					 var str = new Object();
					 var len = new Object();
					 var str =Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
					 var copytext = txt;
					 str.data = copytext;
					 trans.setTransferData("text/unicode",str,copytext.length*2);
					 var clipid = Components.interfaces.nsIClipboard;
					 if (!clip)
					 return false;
					 clip.setData(trans,null,clipid.kGlobalClipboard);
		 }
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

function getBrowserName(){
var browserName = "";
 			var ua = navigator.userAgent.toLowerCase();
			if ( ua.indexOf( "opera" ) != -1 ) {
			browserName = "opera";
			} else if ( ua.indexOf( "msie" ) != -1 ) {
			browserName = "msie";
			} else if ( ua.indexOf( "safari" ) != -1 ) {
			browserName = "safari";
			} else if ( ua.indexOf( "mozilla" ) != -1 ) {
			if ( ua.indexOf( "firefox" ) != -1 ) {
			browserName = "firefox";
			} else {
			browserName = "mozilla";
			}
			}

return browserName;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
