/**
* nForm scripts by nickers
* form generation & verification package
*
* Tomasz 'nickers' Wsul
* email: 2nickers@gmail.com
* phone: +48 500-256-419
*
* @access public
* @authors	nickers
* @package Sheep
* @email 2nickers@gmail.com
* @version nForm.js, v0.6 2006/02/02 20:13:28
* @copyright (C) 2006 nickers nForm is fully comercial software.
* @filename nForm.js
*/

var saveHTML;
saveHTML = new Array();

/**
* @access public
*
* @params	1
* @param	string	String to validation.
* @return	boolean	Valid email addres.
*
* check if string could be an email addres
**/
function emailCheck(email)
{
	if(/^[_a-z0-9.-]*[a-z0-9]@[_a-z0-9.-]*[a-z0-9][.]{1}[a-z]{2,4}$/.test(email.toLowerCase()))
		return true;
	return false;
}


/**
* @access public
*
* @params	1
* @param	string	Value of `name` or `id` of requested element .
* @return	object	Element or `null` if can't be find.
*
* Get element with given name as `id` or `name`.
**/
function getElem(name)
{
	if(document.frames	&& document.frames[name])	return document.frames[name];
	if(document.all   	&& document.all[name]) 		return document.all[name];
	if(document.layers 	&& document.layers[name]) 	return document.layers[name];
	if(document.getElementById	&& document.getElementById(name))	return document.getElementById(name);
	if(document.getElementByName	&& document.getElementByName(name))	return document.getElementByName(name);
	return null;
}


/**
* @access public
*
* @params	2
* @param	string	Value of `name` or `id` of requested element .
* @param	string	Name of property to get.
* @return	mixed		Value of property.
*
* Get value of parameter of element with given name.
*
* @see getElem()
**/
function getParam(name,param)
{
	var obj;
	var data;
	obj = getElem(name);
	if(obj==null) return '';
	data = '';
	eval('data = (obj.' + param + ');' );
	return data;
}


/**
* @access public
*
* @params	3
* @param	string	Value of `name` or `id` of requested element .
* @param	string	Name of property to get.
* @param	string	Value to set.
*
* Set value of parameter of element with given name.
*
* @see getElem()
* @see getParam()
**/
function setParam(name,param,value)
{
	var obj;
	var data;
	obj = getElem(name);
	if(obj==null) return '';
	eval('obj.' + param + ' = value;' );
}


/**
* @access public
*
* @params	1
* @param	string	Value of `name` or `id` of element to check.
* @return	boolean	`TRUE` if `value` of element with given name is valid email addres.
*
* Check if value of element with given name is valid email addres.
*
* @see getParam()
* @see emailCheck()
**/
function isEmail(name)
{
	var data;
	data = getParam(name,'value');
	return emailCheck(data);
}

/**
* @access public
*
* @params	1
* @param	string	Value of `name` or `id` of element to check.
* @return	boolean	`TRUE` if `value` of element with given name is valid email addres.
*
* Check if value of element with given name is valid email addres.
*
* @see getParam()
* @see emailCheck()
**/
function emailFormat(name,error,error_str)
{
	var data;
	data = emailCheck(getParam(name,'value'));
	if(data==true) setHTML(error,'');
	else setHTML(error,error_str);
	return data
}

/**
* @access public
*
* @params	1
* @param	string	`name` or `id` of `div` to hide.
*
* Hide `div` with given name.
*
* @see showDiv()
* @see rollDiv()
**/
function hideDiv(name)
{
	var obj;
	obj = getElem(name);
	if(obj==null) return;
	if(obj.visibility!=null) obj.visibility = "hidden";
	if(obj.style!=null && obj.style.visibility!=null) obj.style.visibility = "hidden";
}

/**
* @access public
*
* @params	1
* @param	string	`name` or `id` of `div` to show.
*
* Show `div` with given name.
*
* @see hideDiv()
* @see unrollDiv()
**/
function showDiv(name)
{
	var obj;
	obj = getElem(name);
	if(obj==null) return;
	if(obj.visibility!=null) obj.visibility = "visible";
	if(obj.style!=null && obj.style.visibility!=null) obj.style.visibility = "visible";
}

/**
* @access public
*
* @params	2
* @param	string	`name` or `id` of `div` to hide.
* @param	string	Type of position('absolute','static','relative').
*
* Set position to `type` for element with given `name`.
*
* @see rollDiv()
* @see unrollDiv()
**/
function positionType(name,type)
{
	var obj;
	obj = getElem(name);
	if(obj==null) return;
	if(obj.style!=null && obj.style.position!=null) obj.style.position = type;
	if(obj.position!=null) obj.position = type;
}

/**
* @access public
*
* @params	1
* @param	string	`name` or `id` of `div` wich value should be saved.
*
* Save HTML code from inside of `div` with given name.
*
* @see loadInnerHTML()
**/
function saveInnerHTML(name)
{
	var data;
	var obj;
	obj = getElem(name);
	if(obj!=null)
	saveHTML[name] = obj.innerHTML;
}

/**
* @access public
*
* @params	1
* @param	string	`name` or `id` of `div` wich value should be loaded.
*
* Load previously saved HTML code of `div`
*
* @see saveInnerHTML()
**/
function loadInnerHTML(name)
{
	var data;
	var obj;
	obj = getElem(name);
	obj.innerHTML = saveHTML[name];
}

/**
* @access public
*
* @params	1
* @param	string	`name` or `id` of `div` wich value should be rolled.
*
* Hide absolutly div element.
*
* @see unrollDiv()
**/
function rollDiv(name)
{
	positionType(name,'absolute');
	hideDiv(name);
}

/**
* @access public
*
* @params	1
* @param	string	`name` or `id` of `div` wich value should be unrolled.
*
* Show rolled freviously div.
*
* @see rollDiv()
**/
function unrollDiv(name)
{
	positionType(name,'static');
	showDiv(name);
}

/**
* @access public
*
* @params	1
* @param	string	`name` or `id` of `div` wich value should be activated.
*
* Activate element with given name.
*
* @see disactivateElement()
**/
function activateElement(name)
{
	var obj;
	obj = getElem(name);
	if(obj==null) return;
	obj.disabled = false;
}

/**
* @access public
*
* @params	1
* @param	string	`name` or `id` of `div` wich value should be disactivated.
*
* Disactivate element with given name.
*
* @see activateElement()
**/
function disactivateElement(name)
{
	var obj;
	obj = getElem(name);
	if(obj==null) return;
	obj.disabled = true;
}

function isValidPhone(phone)
{
	var valid;
	var i;
	var j;
	var out;

	out = '';
	valid   = "0123456789+";

	for(i=0;i<phone.length;i++)
	for(j=0;j<valid.length;j++)
		if( valid.charAt(j) == phone.charAt(i)) {
			if(phone.charAt(i)!='+') out = out + phone.charAt(i);
			else out = out + '0';
		}
	phone = out;

	// musi miec od 9 do 15 cyfr
	if(/^[+]{0,1}[0-9]{0,6}[0-9]{9}$/.test(phone.toLowerCase())) return true;
	return false;
}

/**
* @access public
*
* @params	1
* @param	string	Phone number to check.
*
* Check if given string could be valid phone number in Poland!
*
* @see emailCheck()
**/
function phoneFormat(phone,error,error_str)
{
	var valid;
	var i;
	var j;
	var out;
	var nr;

	out = '';
	nr = getParam(phone,'value');

	valid   = "0123456789+";

	for(i=0;i<nr.length;i++)
	for(j=0;j<valid.length;j++)
		if( valid.charAt(j) == nr.charAt(i)) {
			if(nr.charAt(i)!='+') out = out + nr.charAt(i);
			else out = out + '0';
		}

	nr = out;


	if(isValidPhone(nr))
	{
		if(nr.length>9) nr = nr.substr(0,nr.length-9) + ' ' + nr.substr(nr.length-9,9);

		setParam(phone,'value',nr);
		setHTML(error,'');
		return true;
	}

	// jesli tu doszlo, to znaczy, ze jest blad
	setHTML(error,error_str);
	return false;
}



function setHTML(name,html)
{
	var obj;
	obj = getElem(name);
	if(obj && obj.innerHTML!=null) obj.innerHTML = html;
	if(html=='') rollDiv(name);
	else unrollDiv(name);
}

function getRadioVal(name,form)
{
	var obj;
	var i;

	obj = getElem(form);
	if(obj==null) return null;

	for(i=0;i<obj.length;i++)
		if(obj.elements[i].name==name && obj.elements[i].checked) return obj.elements[i].value;
}
