/**
 * Класс предоставляющий набор вспомогательных ф-ций
 * @base EventDispatcher
 * @author Denis Panaskin <goliathdp@gmail.com>
 */
function Tools()
{
	this.listener = new Array();
}// end Tools

Tools.prototype = new EventDispatcher();

/**
 * Экземпляр Tools класса
 * @type Tools
 * @private
 */
Tools.instance = null;

/**
 * Получаем доступ к экземпляру класса
 * @return Tools
 */
Tools.getInstance = function()
{
	if(Tools.instance == null)
		Tools.instance = new Tools();
	return Tools.instance;
}// end getInstance


/**
 * Тест на проверку заполнения полей форм. Возвращает true если 
 * все поля заполненны корректоно
 * @param ссылка на форму
 * @return Bookean
 */
Tools.prototype.isFieldsSuccess = function(form)
{
	if(form.elements==null || form.elements.length==0)// Если форма пустая
	{
		throw "Festi Tools.js: Not a single element is found in a form \""+form.name+"\"";
		return false;
	}
	
	var isSuccess = true;
	
	for(i=0; i<form.elements.length; i++)
	{
		var type = form.elements[i].type;

		if(type != "radio" && type != "button" &&  type != "submit" && type!="checkbox")
		{
			if(form.elements[i].name==null)
				continue;
				
			if(form.elements[i].getAttribute("fieldTest")!=null)
			{
				switch(form.elements[i].getAttribute("fieldTest"))
				{
					case "isEmpty":
						if(this.isFieldEmpty(form.elements[i]))
						{
							var event = new Object();
							event.name = form.elements[i].name;
							this.dispatchEvent(Event.EMPTY, event);
							isSuccess = false;
						}
						break;
				}
				
			}
		}
	}
	
	if(isSuccess)
		return true;
	
	var event = new Object();
	event.name = form.name;
	this.dispatchEvent(Event.NOT_SUCCESS, event);
	return false;
}// end isFieldsSuccess

/**
 * Проверка на пустоту поля. Возвращает true если поле пустое
 * @param field поле формы
 * @return Boolean
 */
Tools.prototype.isFieldEmpty = function(field)
{
	if(field.value.length==0)
		return true;
	return false;
}

/**
* Получаем ширину видимой области экрана.
* @see #getClientHeight
* @return Integer
*/
Tools.getClientWidth = function()
{
	return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientWidth:document.body.clientWidth;
}// end getClientWidth

/**
* Возвращает высоту видимой области.
* @see #getClientWidth
* @return Integer
*/
Tools.getClientHeight = function()
{
  return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientHeight:document.body.clientHeight;
}// end getClientHeight

/**
 * Получаем абсолютную позицию елемента, с учетом вложоности.
 * @param String objId Идентификатор елемента
 */
Tools.getObjectPosition = function(objId) 
{
	var obj = document.getElementById(objId);
    var offsetLeft = 0;
    var offsetTop = 0;
	
	/** Обходим дерево родительских елементов */
	while(obj) 
	{
      offsetLeft += obj.offsetLeft;
      offsetTop += obj.offsetTop;
      obj = obj.offsetParent;
    }// end while

	return {'top':offsetTop, 'left':offsetLeft};
}// end getPos
	
	
	
	
	