$.fn.clearForm = function() {
  return this.each(function() {
    var type = this.type, tag = this.tagName.toLowerCase();
    if (tag == 'form')
      return $(':input',this).clearForm();
    if (type == 'text' || type == 'password' || tag == 'textarea')
      this.value = '';
    else if (type == 'checkbox' || type == 'radio')
      this.checked = false;
    else if (tag == 'select')
//      this.selectedIndex = -1;
      this.selectedIndex = 0;
  });
};


function ValidateURL(url) {
    var v = new RegExp();
    v.compile("^[A-Za-z]+://[A-Za-z0-9-_]+\\.[A-Za-z0-9-_%&\?\/.=]+$");

    if (!v.test(url)) {
        return false;
    }
	return true;
}


var zChar = new Array(' ', '(', ')', '-', '.');
var maxphonelength = 14;
var phonevalue1;
var phonevalue2;
var cursorposition;

function ParseForNumber1(object){
  phonevalue1 = ParseChar(object.value, zChar);
}

function ParseForNumber2(object){
  phonevalue2 = ParseChar(object.value, zChar);
}

function backspacerUP(object,e) {
  if(e){
    e = e
  } else {
    e = window.event
  }
  if(e.which){
    var keycode = e.which
  } else {
    var keycode = e.keyCode
  }

  ParseForNumber1(object)

  if(keycode >= 48){
    ValidatePhone(object)
  }
}

function backspacerDOWN(object,e) {
  if(e){
    e = e
  } else {
    e = window.event
  }
  if(e.which){
    var keycode = e.which
  } else {
    var keycode = e.keyCode
  }
  ParseForNumber2(object)
}

function GetCursorPosition(){

  var t1 = phonevalue1;
  var t2 = phonevalue2;
  var bool = false
  for (i=0; i<t1.length; i++)
  {
    if (t1.substring(i,1) != t2.substring(i,1)) {
      if(!bool) {
        cursorposition=i
        window.status=cursorposition
        bool=true
      }
    }
  }
}

function ValidatePhone(object){

  var p = phonevalue1

  p = p.replace(/[^\d]*/gi,"")

  if (p.length < 3) {
    object.value=p
  } else if(p.length==3){
    pp=p;
    d4=p.indexOf('(')
    d5=p.indexOf(')')
    if(d4==-1){
      pp="("+pp;
    }
    if(d5==-1){
      pp=pp+")";
    }
    object.value = pp;
  } else if(p.length>3 && p.length < 7){
    p ="(" + p;
    l30=p.length;
    p30=p.substring(0,4);
    p30=p30+") "

    p31=p.substring(4,l30);
    pp=p30+p31;

    object.value = pp;

  } else if(p.length >= 7){
    p ="(" + p;
    l30=p.length;
    p30=p.substring(0,4);
    p30=p30+") "

    p31=p.substring(4,l30);
    pp=p30+p31;

    l40 = pp.length;
    p40 = pp.substring(0,9);
    p40 = p40 + "-"

    p41 = pp.substring(9,l40);
    ppp = p40 + p41;

    object.value = ppp.substring(0, maxphonelength);
  }

  GetCursorPosition()

  if(cursorposition >= 0){
    if (cursorposition == 0) {
      cursorposition = 2
    } else if (cursorposition <= 2) {
      cursorposition = cursorposition + 1
    } else if (cursorposition <= 4) {
      cursorposition = cursorposition + 3
    } else if (cursorposition == 5) {
      cursorposition = cursorposition + 3
    } else if (cursorposition == 6) {
      cursorposition = cursorposition + 3
    } else if (cursorposition == 7) {
      cursorposition = cursorposition + 4
    } else if (cursorposition == 8) {
      cursorposition = cursorposition + 4
      e1=object.value.indexOf(')')
      e2=object.value.indexOf('-')
      if (e1>-1 && e2>-1){
        if (e2-e1 == 4) {
          cursorposition = cursorposition - 1
        }
      }
    } else if (cursorposition == 9) {
      cursorposition = cursorposition + 4
    } else if (cursorposition < 11) {
      cursorposition = cursorposition + 3
    } else if (cursorposition == 11) {
      cursorposition = cursorposition + 1
    } else if (cursorposition == 12) {
      cursorposition = cursorposition + 1
    } else if (cursorposition >= 13) {
      cursorposition = cursorposition
    }

    var txtRange = object.createTextRange();
    txtRange.moveStart( "character", cursorposition);
    txtRange.moveEnd( "character", cursorposition - object.value.length);
    txtRange.select();
  }

}

function ParseChar(sStr, sChar)
{

  if (sChar.length == null)
  {
    zChar = new Array(sChar);
  }
    else zChar = sChar;

  for (i=0; i<zChar.length; i++)
  {
    sNewStr = "";

    var iStart = 0;
    var iEnd = sStr.indexOf(sChar[i]);

    while (iEnd != -1)
    {
      sNewStr += sStr.substring(iStart, iEnd);
      iStart = iEnd + 1;
      iEnd = sStr.indexOf(sChar[i], iStart);
    }
    sNewStr += sStr.substring(sStr.lastIndexOf(sChar[i]) + 1, sStr.length);

    sStr = sNewStr;
  }

  return sNewStr;
}











// Declaring required variables
var digits = "0123456789";
// non-digit characters which are allowed in phone numbers
var phoneNumberDelimiters = "()- ";
// characters which are allowed in international phone numbers
// (a leading + is OK)
var validWorldPhoneChars = phoneNumberDelimiters + "+";
// Minimum no of digits in an international phone no.
var minDigitsInIPhoneNumber = 10;

function isInteger(s)
{   var i;
    for (i = 0; i < s.length; i++)
    {
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}
function trim(s)
{   var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not a whitespace, append to returnString.
    for (i = 0; i < s.length; i++)
    {
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (c != " ") returnString += c;
    }
    return returnString;
}
function stripCharsInBag(s, bag)
{   var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++)
    {
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function checkInternationalPhone(strPhone){
	var bracket=3;
	strPhone=trim(strPhone);
	if(strPhone.indexOf("+") > 1) {
		return false;
	}
	if(strPhone.indexOf("-") != -1)bracket=bracket+1;
	if(strPhone.indexOf("(") != -1 && strPhone.indexOf("(") > bracket) {
		return false;
	}
	var brchr = strPhone.indexOf("(");

	if(strPhone.indexOf("(") != -1 && strPhone.charAt(brchr+4) != ")") {
		return false;
	}
	if(strPhone.indexOf("(") == -1 && strPhone.indexOf(")") != -1) {
		return false;
	}

	s=stripCharsInBag(strPhone,validWorldPhoneChars);
	return (isInteger(s) && s.length >= minDigitsInIPhoneNumber);
}









function isZip(s)
{
     // Check for correct zip code
     reZip = new RegExp(/(^\d{5}$)|(^\d{5}-\d{4}$)/);

//	 alert(s+":"+reZip.test(s));

	if (!reZip.test(s))
		return true;
	else
		return false;
}



function isEmail(s) {

     // Check for correct email address
	reEmail = new RegExp(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/);

//	alert(s+":"+reEmail.test(s));

	if (!reEmail.test(s))
		return true;
	else
		return false;
}





function explode( delimiter, string ) {

    var emptyArray = { 0: '' };

    if ( arguments.length != 2
        || typeof arguments[0] == 'undefined'
        || typeof arguments[1] == 'undefined' )
		{
			return null;
		}

    if ( delimiter === ''
        || delimiter === false
        || delimiter === null )
		{
			return false;
		}

    if ( typeof delimiter == 'function'
        || typeof delimiter == 'object'
        || typeof string == 'function'
        || typeof string == 'object' )
		{
			return emptyArray;
		}

    if ( delimiter === true )
		{
			delimiter = '1';
		}

		return string.toString().split(delimiter.toString());
}




function filterInput(filterType, e){
    var keyCode;
 	var keynum;
	var keychar;
	var numcheck;
	var ctrl = (document.all) ? event.ctrlKey : e.modifiers & Event.CONTROL_MASK;
	var shift = (document.all) ? event.shiftKey : e.modifiers & Event.CONTROL_MASK;


    if (window.event) // IE
    {
		keyCode = e.keyCode;
    }
    else if (e.which) // Netscape/Firefox/Opera
    {
		keyCode = e.which;
    }

	if (keyCode == 27) // Eescape
	{
		return true;
	}

	if (keyCode == 32) // Space
	{
		return false;
	}

	if (e.ctrlKey && (keyCode == 67 || keyCode == 86)) //CTRL+V (Paste) CTRL+C (Copy)
	{
		return true;
	}

	if (e.shiftKey) // Shift
	{
		return false;
	}

	if (keyCode == 13) // Enter
	{
		return false;
	}

	if (ctrl && (keyCode == 86)) // CTRL+V (Paste)
	{
		return false;
	}
	else if (ctrl && (keyCode == 67)) // CTRL+C (Copy)
	{
		return false;
	}

	if (keyCode == 8) // BackSpace
	{
		return true;
	}

	if (keyCode == 9) // Tab
	{
		return false;
	}

	if (keyCode == 11) // Home
	{
		return false;
	}

	if (keyCode == 13) // Enter
	{
		return false;
	}

	if (keyCode >= 0 && keyCode <= 47) // ---------
	{
		return false;
	}

	if (keyCode >= 58 && keyCode <= 64) // ---------
	{
		return false;
	}


	if (keyCode >= 91) // ---------
	{
		return false;
	}

    // If the Key Pressed is a CTRL key like Esc, Enter etc - allow
    if((keyCode == null) || (keyCode == 0) || (keyCode == 8) || (keyCode == 9) || (keyCode == 13) || (keyCode == 27) )return true;

	switch(filterType) {
		case 0:
			  key = String.fromCharCode(keyCode);
			  return /([A-Za-z])/.test(key);
		break;

		case 1:
			  key = String.fromCharCode(keyCode);
			  return /\d/.test(key);
		break;

		case 2:
			  key = String.fromCharCode(keyCode);
			  return /\w/.test(key);
		break;
	}
}


		function ValidateEmail(value)
		{
				var strMail = value
				var regMail =  /^\w+([-.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
				if (regMail.test(strMail))
				{
					return true;
				}
				else
				{
					return false;

				}

		}
		function isZip(s)
		{
			 var RegExp = /^\d{5}([\-]\d{4})?$/;
			 if (!RegExp.test(s)) {
				  return false;
			 }
		return true;
		}



function isFileExtInRange (filePath, range) {
	var extArr = range.split(" ");
	for (var i=0; i<extArr.length; i++) {
		var actualLastIndex = filePath.toLowerCase().lastIndexOf(extArr[i]);
		var assertedLastIndex = filePath.length - extArr[i].length;
		/* **************** For Test **************************
		alert("File path:" + filePath + "\n"
		+ "extArr[" + i + "]:" + extArr[i] + "\n"
		+ "actualLastIndex:" + actualLastIndex + "\n"
		+ "assertedLastIndex:" + assertedLastIndex);
		********************************************* */
		if (actualLastIndex == assertedLastIndex) return true;
}
return false;
}