String.prototype.format = function(){
    var pattern = /\{\d+\}/g;
    var args = arguments;
    return this.replace(pattern, function(capture){ return args[capture.match(/\d+/)]; });
};

function getElementsByClassName(c,p,t,f){
  var r = [], re, e, i;
  re = new RegExp("(^|\\s)"+c+"(\\s|$)");
  e = getElementsByTagName(t,p); 
  for (i = 0; i < e.length; ++i) {
    if (re.test(e[i].className)) {
      r[r.length] = e[i];
      if (f) f(e[i]);
    }
  }
  return r;
}

function getElementById(e){
  if(typeof(e)=='string') {
    if(document.getElementById) e=document.getElementById(e);
    else if(document.all) e=document.all[e];
    else e=null;
  }
  return e;
}


/*
 * Returns an array with elements having a specific tag name.
 */
function getElementsByTagName(t, p){
    var list = null;
    t = t || '*';
    p = getElementById(p) || document;
    if (typeof(p.getElementsByTagName) != 'undefined') { // DOM1
      list = p.getElementsByTagName(t);
      if (t=='*' && (!list || !list.length)) list = p.all; // IE5 '*' bug
    }
    else { // IE4 object model
      if (t=='*') list = p.all;
      else if (p.all && p.all.tags) list = p.all.tags(t);
    }
    return list || [];

}

/*
 * This method fires a submit (if a input submit is present)in case the user pressed the 
 * Enter Key while focus in with an input field.
 */
function submitOnEnter (evt){
    if (evt && evt.keyCode == 13){
	var inputs = getElementsByTagName('input');
	var submit;
	for (var i = 0; i <= inputs.length; i+=1){
	    if (inputs[i].id.indexOf('submit') > -1){
		submit = inputs[i];
		submit.click();
	    }
	}
    } else{
	return true;
    }
}

function textCounter(fieldId,cntFieldId,maxLimit,remainderTxt) {
    var span = getElementById(cntFieldId);
    var field = getElementById(fieldId);
    if(span && field){
    	/*if (field.value.startsWith('00'))
    		field.value = field.value.substring(2);
    	else if (field.value.startsWith('+'))
    		field.value = field.value.substring(1);*/

    	span.innerHTML = remainderTxt.format(byteLen(field.value), maxLimit);
    }
}

function byteLen(str) {
	var ASCII=/[\x0a\x0d\x1b\x20-\x5a\x5f\x61-\x7a\xa1\xa3-\xa5\xa7\xbf\xc4-\xc7\xc9\xd1\xd6\xd8\xdc\xdf\xe0\xe4-\xe6\xe8-\xe9\xec\xf1-\xf2\xf6\xf8-\xf9\xfc]/gi;
	var NON_ASCII=/[^\x0a\x0d\x1b\x20-\x5a\x5f\x61-\x7a\xa1\xa3-\xa5\xa7\xbf\xc4-\xc7\xc9\xd1\xd6\xd8\xdc\xdf\xe0\xe4-\xe6\xe8-\xe9\xec\xf1-\xf2\xf6\xf8-\xf9\xfc]/gi;
	
	return str.replace(ASCII, "").length * 2 + str.replace(NON_ASCII, "").length;
}
