/**
 * @author alexey
 */
//class tab-to-next-by-max-len - make tab to next element when input filled for maxlength chars
//going to next input if in current already maxlength come
var initf = function(){
	$$('form.active_form').each(function(form){
		$A(form.getElements()).each(function(el){
			setupElement(el);
		});
	});
}

function setupElement(el){
	if(el.hasClassName('tab-to-next-by-max-len') && typeof el.maxLength != 'undefined')
		el.observe('keyup', autoTabKeyUp);
	if(el.hasClassName('select-all-by-focus'))
		el.observe('focus', selectAll);
	if(el.hasClassName('clear-by-focus'))
		new ClearByFocus( el );
}


function selectAll( e ){
	var target = Event.element( e );
	target.select();
}

function autoTabKeyUp(e){
	var target = Event.element( e );
	var nel;
	if (target.value.length == $(target).readAttribute('maxLength') && String.fromCharCode(e.keyCode).match(/[\w]/)) 
		for(var i = 0; i < target.form.elements.length && (nel = searchNextElement(target)); i++) {
			try {
				nel.focus();
				break;
			}
			catch(e){
				target = nel;
			}
		}
}

function searchNextElement(el){
	var elements = $A($(el.form).getElements());	
	if(typeof el.tabIndex != 'undefined')
	{
		var curIndex = el.tabIndex;
		var arrIndex = -1;
		for (var i = 0; i < elements.length; i++)
		{
			if (typeof elements[i].tabIndex != 'undefined' && elements[i].tabIndex > curIndex) {
				if(arrIndex < 0 || elements[arrIndex].tabIndex > elements[i].tabIndex)
					arrIndex = i;
				if ((elements[i].tabIndex - curIndex) == 1)
					break;
			}
		}
		if(arrIndex > 0)
			return $(elements[arrIndex]);
	}

	var curIndex = elements.indexOf(el);

	if( curIndex < (elements.size()-1) )
		return $(elements[curIndex + 1]);
		else return null;
}



ClearByFocus = Class.create();
ClearByFocus.prototype = {
	initialize: function( el ){
		el = $( el );
		if( ! el )
			return;

			var onfocus = function(event){
				var el = Event.element(event);
				el.setAttribute( 'defaultValue', el.value );
				el.clear();
			};
			var onblur = function(event){
				var el = Event.element(event);

				if (el.value == '') {
					el.value = el.readAttribute('defaultValue');
				}
			};
			$(el).observe('focus', onfocus );
			$(el).observe('blur', onblur );
	}
}

if(window.addEventListener){ // Mozilla, Netscape, Firefox
	window.addEventListener('load', initf, false);
} else { // IE
	window.attachEvent('onload', initf);
}

// see number_format() in PHP doc
function number_format(number, decimals, dec_point, thousands_sep){
  var exponent = "";
  var numberstr = number.toString ();
  var eindex = numberstr.indexOf ("e");
 var i, z;
  if(eindex > -1){
    exponent = numberstr.substring (eindex);
    number = parseFloat (numberstr.substring (0, eindex));
  }
  
  if(decimals != null){
    var temp = Math.pow (10, decimals);
    number = Math.round (number * temp) / temp;
  }
  var sign = number < 0 ? "-" : "";
  var integer = (number > 0 ? 
      Math.floor (number) : Math.abs (Math.ceil (number))).toString ();
  
  var fractional = number.toString ().substring (integer.length + sign.length);
  dec_point = dec_point != null ? dec_point : ".";
  fractional = decimals != null && decimals > 0 || fractional.length > 1 ? (dec_point + fractional.substring (1)) : "";
  if(decimals != null && decimals > 0){
    for(i = fractional.length - 1, z = decimals; i < z; ++i)
      fractional += "0";
  }
  
  thousands_sep = (thousands_sep != dec_point || fractional.length == 0) ? 
                  thousands_sep : null;
  if(thousands_sep != null && thousands_sep != ""){
  for (i = integer.length - 3; i > 0; i -= 3)
   integer = integer.substring (0 , i) + thousands_sep + integer.substring (i);
  }
  return sign + integer + fractional + exponent;
}