function ChangeToUpperCaseString(sname){
	objectToCase = $(sname);
	ChangeToUpperCase(objectToCase);
}

function ChangeToUpperCase(sname) {
	
	var sFirstletter
	var sFirstPartOfString
	var sFirstPartOfStringIndex
	var sLastPartOfString
	var sSecondletter
	var sSecondPartOfStringIndex
	var sLookForMc = new RegExp ("^mc", "i")
	var sLookForMcInMiddleOfString = new RegExp ("mcd*", "i")
	var sLookForMac = new RegExp ("^mac", "i")
	var sLookForOApostorphe = new RegExp ("^o'", "i")
	var sLookForOApostorpheInMiddle = new RegExp ("o'*", "i")
	var sLookForOSpace = new RegExp ("^o/\b", "i")
	var sLookForHyphen = new RegExp ("[a-z]-[a-z]*", "i")
	var snewname = sname.name
	var snewvalue = sname.value
	var strnewvalue
	var strorigvalue
	var sLookForUSA = new RegExp ("^usa*", "i")
	var sLookForUSA2 = new RegExp ("^usa\b*", "i")
	var sLookForUSAInMiddle = new RegExp ("\.usa\b*", "i")
	var sLookForUSAInMiddleAndNoSpace = new RegExp ("\busa\$", "i")
	var sUSAFixed = "N"
	var lindex = 1
	
	strnewvalue = snewvalue.toUpperCase()
	//strorigvalue = $('hidoriginalvalue').value.toUpperCase()
	strorigvalue = document.getElementsByName("hidoriginalvalue").valueOf
		
	if (strnewvalue == strorigvalue) {
		return
	}
	else {
		
		snewvalue = snewvalue.toLowerCase()
		if (sLookForMc.test(snewvalue)) {

			if(CheckForLowerCaseOnFirstCharacter(snewvalue)== true) {
				
				sFirstletter = snewvalue.substring(0,1)
				sFirstletter = sFirstletter.toUpperCase()
				
				snewvalue = snewvalue.replace(snewvalue.substring(0,1), sFirstletter)
				if (snewvalue.substr(2,1) != " ") {
					sFirstletter = snewvalue.substr(2,1)
					sFirstletter = sFirstletter.toUpperCase()
					snewvalue = snewvalue.replace(snewvalue.substr(2,1), sFirstletter)
				}
				else {
					sFirstletter = snewvalue.substr(3,1)
					sFirstletter = sFirstletter.toUpperCase()
					snewvalue = snewvalue.replace(snewvalue.substr(3,1), sFirstletter)
				}
				
				for (lindex = 3; lindex < snewvalue.length; lindex++) {
					sFirstletter = snewvalue.substr(lindex, 1)
					sSecondletter = snewvalue.substr(lindex + 1, 1)
					
					if (sFirstletter == " ") {
						if (sSecondletter != "") {
					
							sSecondletter = sSecondletter.toUpperCase()
							sSecondletter = " " + sSecondletter
							sFirstPartOfString = snewvalue.substr(0, lindex)
							sSecondPartOfString = snewvalue.substr(lindex + 2)
							snewvalue = sFirstPartOfString.concat(sSecondletter,sSecondPartOfString)
							sname.value = snewvalue
					
						}
					}
					sname.value = snewvalue
				}
				
			}
			else {
				snewvalue = snewvalue.replace(/[" "]*/g,"") 
				sFirstletter = snewvalue.substring(0,1)
				sFirstletter = sFirstletter.toUpperCase()
				snewvalue = snewvalue.replace(snewvalue.substring(0,1), sFirstletter)
				sFirstletter = snewvalue.substr(2,1)
				sFirstletter = sFirstletter.toUpperCase()
				snewvalue = snewvalue.replace(snewvalue.substr(2,1), sFirstletter)
				sname.value = snewvalue
				return
			}
		}
		
		if (sLookForOApostorphe.test(snewvalue)) {
			
			if(CheckForLowerCaseOnFirstCharacter(snewvalue)== true) {
				
				sFirstletter = snewvalue.substring(0,1)
				sFirstletter = sFirstletter.toUpperCase()
				
				snewvalue = snewvalue.replace(snewvalue.substring(0,1), sFirstletter)
				if (snewvalue.substr(2,1) != " ") {
					sFirstletter = snewvalue.substr(2,1)
					sFirstletter = sFirstletter.toUpperCase()
					snewvalue = snewvalue.replace(snewvalue.substr(2,1), sFirstletter)
				}
				else {
					sFirstletter = snewvalue.substr(3,1)
					sFirstletter = sFirstletter.toUpperCase()
					snewvalue = snewvalue.replace(snewvalue.substr(3,1), sFirstletter)
				}
				
				for (lindex = 3; lindex < snewvalue.length; lindex++) {

					sFirstletter = snewvalue.substr(lindex, 1)
					sSecondletter = snewvalue.substr(lindex + 1, 1)

					if (sFirstletter == " ") {
						if (sSecondletter != "") {
					
							sSecondletter = sSecondletter.toUpperCase()
							sSecondletter = " " + sSecondletter
							sFirstPartOfString = snewvalue.substr(0, lindex)
							sSecondPartOfString = snewvalue.substr(lindex + 2)
							snewvalue = sFirstPartOfString.concat(sSecondletter,sSecondPartOfString)
							sname.value = snewvalue
					
						}
					}
					sname.value = snewvalue
					
					
				}
			}
			else {
				
				snewvalue = snewvalue.replace(/[" "]*/g,"") 
				sFirstletter = snewvalue.substring(0,1)
				sFirstletter = sFirstletter.toUpperCase()
				snewvalue = snewvalue.replace(snewvalue.substring(0,1), sFirstletter)
				sFirstletter = snewvalue.substr(2,1)
				sFirstletter = sFirstletter.toUpperCase()
				snewvalue = snewvalue.replace(snewvalue.substr(2,1), sFirstletter)
				sname.value = snewvalue
				
			}
		}
		
		if (CheckForLowerCaseOnFirstCharacter(snewvalue) == true) {

			sFirstletter = snewvalue.substring(0,1)
			sFirstletter = sFirstletter.toUpperCase()
			snewvalue = snewvalue.replace(snewvalue.substring(0,1), sFirstletter)
			sname.value = snewvalue
			$('hidoriginalvalue').value  = sname.value
			
			if (sLookForUSA2.test(snewvalue) == true) {
				sFirstPartOfString = snewvalue.substr(0, 3)
				sFirstPartOfString = sFirstPartOfString.toUpperCase()
				sSecondPartOfString = snewvalue.substr(3)
				snewvalue = sFirstPartOfString.concat(sSecondPartOfString)
				sname.value = snewvalue
				sUSAFixed = "Y"
				
			}
			
			if (sLookForUSA.test(snewvalue) == true && sUSAFixed == "N") {
				snewvalue = snewvalue.toUpperCase()
				sname.value = snewvalue
			}
			else {
				if (sLookForUSAInMiddle.test(snewvalue) == true || sLookForUSAInMiddleAndNoSpace.test(snewvalue) == true) {
					sFirstPartOfStringIndex = snewvalue.indexOf("usa")
					if (snewvalue.substr(sFirstPartOfStringIndex - 1, 1) == " " && (snewvalue.substr(sFirstPartOfStringIndex + 3, 1) == "" || snewvalue.substr(sFirstPartOfStringIndex + 3, 1) == " ")) {
						sFirstPartOfString = snewvalue.substr(0, sFirstPartOfStringIndex)
						sSecondletter = snewvalue.substr(sFirstPartOfStringIndex, 3)
						sSecondletter = sSecondletter.toUpperCase()
						sSecondPartOfString = snewvalue.substr(sFirstPartOfStringIndex + 3)
						snewvalue = sFirstPartOfString.concat(sSecondletter,sSecondPartOfString)
						sname.value = snewvalue
					}
				}	
				
			}

		}
		if (CheckForLowerCaseOnOtherFirstCharacters(snewvalue) == true) {
			for (lindex = 1; lindex < snewvalue.length; lindex++) {
				sFirstletter = snewvalue.substring(lindex, lindex + 1)
				sSecondletter = snewvalue.substring(lindex + 1, lindex + 2)

				if (sFirstletter == " ") {
					if (sSecondletter != "") {

						sSecondletter = sSecondletter.toUpperCase()
						sSecondletter = " " + sSecondletter
						sFirstPartOfString = snewvalue.substr(0, lindex)
						sSecondPartOfString = snewvalue.substr(lindex + 2)
						snewvalue = sFirstPartOfString.concat(sSecondletter,sSecondPartOfString)
						sname.value = snewvalue
					}
				}
			}
			if (sLookForMcInMiddleOfString.test(snewvalue) == true) {
				
				sFirstPartOfStringIndex = snewvalue.indexOf("Mcd")
				if (sFirstPartOfStringIndex > 0) {
					sFirstPartOfString = snewvalue.substr(0, sFirstPartOfStringIndex)
					sSecondletter = snewvalue.substr(sFirstPartOfStringIndex, 1)
					sSecondletter = sSecondletter.toUpperCase()
					sSecondPartOfString = snewvalue.substr(sFirstPartOfStringIndex + 1)
					snewvalue = sFirstPartOfString.concat(sSecondletter,sSecondPartOfString)
					sFirstPartOfString = snewvalue.substr(0, sFirstPartOfStringIndex + 2)
					sSecondletter = snewvalue.substr(sFirstPartOfStringIndex + 2, 1)
					sSecondletter = sSecondletter.toUpperCase()
					sSecondPartOfString = snewvalue.substr(sFirstPartOfStringIndex + 3)
					snewvalue = sFirstPartOfString.concat(sSecondletter,sSecondPartOfString)
					sname.value = snewvalue
				}
			}
			
			if (sLookForOApostorpheInMiddle.test(snewvalue) == true) {
					
					for (lindex = 2; lindex < snewvalue.length; lindex++) {
						sFirstletter = snewvalue.substr(lindex, 1)
						sSecondletter = snewvalue.substr(lindex + 1, 1)
						if (sFirstletter == "O" || sFirstletter == "o") {
							
							if (sSecondletter == "'") {
								sFirstPartOfString = snewvalue.substr(0, lindex + 2)
								sSecondletter = snewvalue.substr(lindex + 2, 1)
								sSecondletter = sSecondletter.toUpperCase()
								sSecondPartOfString = snewvalue.substr(lindex + 3)
								snewvalue = sFirstPartOfString.concat(sSecondletter,sSecondPartOfString)
								sname.value = snewvalue
							}
						}
					}
			}
			if (sLookForHyphen.test(snewvalue) == true) {
				sFirstPartOfStringIndex = snewvalue.indexOf("-")
				if (sFirstPartOfStringIndex > 0) {
					sFirstPartOfString = snewvalue.substr(0, sFirstPartOfStringIndex + 1)
					sSecondletter = snewvalue.substr(sFirstPartOfStringIndex + 1, 1)
					sSecondletter = sSecondletter.toUpperCase()
					sSecondPartOfString = snewvalue.substr(sFirstPartOfStringIndex + 2)
					snewvalue = sFirstPartOfString.concat(sSecondletter,sSecondPartOfString)
					sFirstPartOfString = snewvalue.substr(0, sFirstPartOfStringIndex + 2)
					sname.value = snewvalue
				}
			}
		}
	}
		
}

function CheckForLowerCaseOnFirstCharacter(sPassedValue) {
	var sstringexpression = new RegExp("^[a-zA-Z]")

	if (sstringexpression.test(sPassedValue)) {
		return true
	}
	else {
		return false
	}
}

function CheckForLowerCaseOnOtherFirstCharacters(sPassedValue) {
	var sstringexpression = new RegExp("\\b[a-z]")
	
	if (sstringexpression.test(sPassedValue)) {
		return true
	}
	else {
		return false
	}
}

function GetOriginalValue(origvalue) {
	$('hidoriginalvalue').value = origvalue.value
}

var dFilterStep

function dFilterStrip (dFilterTemp, dFilterMask)
{
    dFilterMask = replace(dFilterMask,'#','');
    for (dFilterStep = 0; dFilterStep < dFilterMask.length++; dFilterStep++)
		{
		    dFilterTemp = replace(dFilterTemp,dFilterMask.substring(dFilterStep,dFilterStep+1),'');
		}
		return dFilterTemp;
}

function dFilterMax (dFilterMask)
{
 		dFilterTemp = dFilterMask;
    for (dFilterStep = 0; dFilterStep < (dFilterMask.length+1); dFilterStep++)
		{
		 		if (dFilterMask.charAt(dFilterStep)!='#')
				{
		        dFilterTemp = replace(dFilterTemp,dFilterMask.charAt(dFilterStep),'');
				}
		}
		return dFilterTemp.length;
}
     
function getCaretPos(obj)
{
	bMozilla = (obj.selectionStart || obj.selectionStart == 0);
	nCaretPos = 1;
		
	if (bMozilla) //mozilla
	{
		nCaretPos = obj.selectionStart; 
	}
	else //ie
	{
		if (document.selection)
		{
			textRange = document.selection.createRange();
			textRange.moveStart('character', -obj.value.length);
			nCaretPos = textRange.text.length;
		}
   	}
	
	return nCaretPos;
}

function setCaretPos(obj, pos, key, dFilterMask)
{
   if ((key != 8) && (key != 35) && (key != 36) && (key != 37) && (key != 39)) {
     while ((dFilterMask.charAt(pos-1)!='#') && (dFilterMask.charAt(pos-1)!='&') && (dFilterMask.charAt(pos-1)!='*') && (pos < dFilterMask.length-1))
       pos++;
   }
     
   if (document.selection) { 
      textRange = document.selection.createRange();
      textRange.moveStart('character', -obj.value.length);
      textRange.moveStart('character', pos);
      textRange.moveEnd('character', -obj.value.length+pos);
      textRange.select();
   }
}

function isDigit(c)
{
  return c in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
}

function isAlphabet(c)
{
  return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')
}

function formatted(str, mask)
{
   if (str.length != mask.length)
      return false;
      
   var i = 0;
   var j = 0;
   var formatted = true;
   
   while (formatted && (j < str.length) && (i < mask.length))
   {
      if (str.charAt(j) != mask.charAt(i))
      {
         if ((mask.charAt(i)=='#') || (mask.charAt(i)=='&') || (mask.charAt(i)=='*'))
         {
            if (((mask.charAt(i)=='#') && isDigit(str.charAt(j))) ||
                ((mask.charAt(i)=='&') && (isDigit(str.charAt(j)) || isAlphabet(str.charAt(j)))) ||
                ((mask.charAt(i)=='*') && isAlphabet(str.charAt(j))))
            {
               i++;
               j++;
            }
            else
               formatted = false;
         }
         else
            formatted = false;
      }
      
      i++;
      j++;
   }
   
   return formatted;
}

function dFilter(key, textbox, dFilterMask){
	pos = getCaretPos(textbox);
	
	if (textbox.mask != null) {
		dFilterMask = textbox.mask;
	}
	else {
		dFilterMask = '';
	}
	
	if (dFilterMask.length == 0 || dFilterMask == 'NULL') {
		return true;
	}
	
	if (key == 9) {
		return true;
	}
	
	// This takes care of if user highlighted one character and changed it, which makes textbox.value remains valid format, we don't need to do anything
	if (formatted(textbox.value, dFilterMask)) 
		return false;
	
	dFilterNum = dFilterStrip(textbox.value, dFilterMask);
	
	// This code block mimic character replace instead of insert
	// Without this, masks with mixed of #&* won't work. ie (###) ###-&**&
	if ((key != 8) && (key != 35) && (key != 36) && (key != 37) && (key != 39)) {
		
		oldStr = dFilterStrip(textbox.value.substring(0, pos), dFilterMask);
		dFilterNum = oldStr + dFilterNum.substring(oldStr.length + 1);
	}
	
	var dFilterFinal = '';
	var original = pos;
	
	var i = 0;
	var j = 0;
	var invalid = false;
	
	while ((j < dFilterNum.length) && (i < dFilterMask.length)) {
		if ((dFilterMask.charAt(i) == '#') || (dFilterMask.charAt(i) == '&') || (dFilterMask.charAt(i) == '*')) {
			if ((dFilterMask.charAt(i) == '#') && isDigit(dFilterNum.charAt(j))) 
				dFilterFinal = dFilterFinal + dFilterNum.charAt(j);
			else 
				if ((dFilterMask.charAt(i) == '&') && (isDigit(dFilterNum.charAt(j)) || isAlphabet(dFilterNum.charAt(j)))) 
					dFilterFinal = dFilterFinal + dFilterNum.charAt(j);
				else 
					if ((dFilterMask.charAt(i) == '*') && isAlphabet(dFilterNum.charAt(j))) 
						dFilterFinal = dFilterFinal + dFilterNum.charAt(j);
					else {
						invalid = true;
						j = dFilterNum.length;
					}
			
			j++;
		}
		else 
			dFilterFinal = dFilterFinal + dFilterMask.charAt(i);
		
		i++;
	}
	
	if (invalid) {
		textbox.value = textbox.value.substring(0, pos - 1) + textbox.value.substring(pos);
		pos--;
	}
	else
	{
		textbox.value = dFilterFinal;
	}
	
	setCaretPos(textbox, pos, key, dFilterMask)
	
    return false;
}

function replace(fullString,text,by) {
// Replaces text with by in string
    var strLength = fullString.length, txtLength = text.length;
    if ((strLength == 0) || (txtLength == 0)) return fullString;

    var i = fullString.indexOf(text);
    if ((!i) && (text != fullString.substring(0,txtLength))) return fullString;
    if (i == -1) return fullString;

    var newstr = fullString.substring(0,i) + by;

    if (i+txtLength < strLength)
        newstr += replace(fullString.substring(i+txtLength,strLength),text,by);

    return newstr;
}

function setMask(inputField, mask, updateValue)
{
	if (mask != null && mask.length > 0 && mask != 'NULL')
	{
		$(inputField).mask = mask;
	}
	else
	{
		$(inputField).mask = '';
	}

	if (updateValue)
	{
		$(inputField).value = '';
	}
	
}

function include_only_numeric(key, textbox)
{
	var dFilterNum = textbox.value;
//	alert(key);	
	if (key == 9 || key == 35 || key == 36 || key == 37 || key == 39 || key == 46 || key == 97 || key == 100 || key == 102 || key == 103)
	{
		return true;
	}
	else if (key==8&&dFilterNum.length!=0)
	{
		return true;
	}
	else if ( ((key>47&&key<58)||(key>95&&key<106)) )
	{
		if (key>95&&key<106)
		{
			key = key - 48;
		}
		return true
	}
	else if ((key == 109 || key == 189) && dFilterNum.length == 0)
	{	
		return true;
	}
	else if ((key == 110 || key == 190) && dFilterNum.indexOf('.') == -1)
	{	
		return true;
	}
		
	return false;
}

function include_only_integer(key, textbox)
{
	{
	var dFilterNum = textbox.value;
	
	if (key == 8 ||key == 9 || key == 35 || key == 36 || key == 37 || key == 39 || key == 46 || key == 97 || key == 100 || key == 102 || key == 103)
	{
		return true;
	}
	else if ( ((key>47&&key<58)||(key>95&&key<106)) )
	{
		if (key>95&&key<106)
		{
			key = key - 48;
		}
       	return true;		
	}
	else if ((key == 109 || key == 189) && dFilterNum.length == 0)
	{	
		return true;
	}
	
	return false;
}

}

function check_numeric_value(textbox)
{
	if (textbox.value.length > 0)
	{
		if ((textbox.value + 0) == 0)
		{
			textbox.value = "0";
		}
		
		if (textbox.value == "-")
		{
			textbox.value = "";
		}
		
		if (textbox.value == ".")
		{
			textbox.value = "";
		}
		
		textbox.value = (1 * textbox.value);
	}
	
	return true;
	
}