/*********************************************************/
/* Check form                                            */
/*********************************************************/

function so_formSetRequirements(obj, descr, req, check)
{
	obj = findObj(obj);
	
	// set properties
	if (obj)
	{
		obj.validateReq = req;
		obj.validateCheck = check;
		obj.validateDescr = descr;
	}
}

function so_formUpdate(obj)
{
	if (obj.validateCheck || obj.validateReq)
	{
		err = false;
		val = trim(obj.value);
		
		if ((val == '' || val == '-' || val == 'http://') && obj.validateReq == true)
			err = true;
		
		if (obj.validateCheck && err == '' && val != '')
		{
			if (obj.validateCheck == 'url' && val.substr(0,7) != 'http://' && val.substr(0,8) != 'https://')
				err = true;
				
			if (obj.validateCheck == 'email' && (val.indexOf('@') < 1 || val.indexOf('@') == (val.length - 1)))
				err = true;
			
			if (obj.validateCheck == 'score' && ((isNaN(val) && val.toLowerCase() != 'x' && val.toLowerCase() != 'm') || parseInt(val) < 0 || parseInt(val) > 10))
				err = true;
	
			if (obj.validateCheck == 'number*' && (isNaN(val) && val != '*' || parseInt(val) < 0))
				err = true;
	
			if (obj.validateCheck.substr(0,7) == 'number+')
			{	
				if (obj.validateCheck.length > 7)
					min = obj.validateCheck.substr(7,obj.validateCheck.length - 7);
				else
					min = 0;
				
				if (min == 0 && val == '-') val = 0;
				
				if (isNaN(val) || parseInt(val) < parseInt(min))
					err = true;
			}
			
			if (obj.validateCheck.substr(0,8) == 'compare:')
			{
				compare = obj.validateCheck.substr(8,obj.validateCheck.length - 8);
				compareobj = findObj(compare);
				
				if (val != trim(compareobj.value))
					err = true;
			}

					if (obj.validateCheck == 'unique')
			{
				needle = obj.value.toLowerCase();
				haystack = obj.validateUnique.toLowerCase();
				
				if (haystack.indexOf('|' + needle + '|') > -1)
					err = true;
			} 
		}
		
		if (err)
			obj.className='error';
		else
			obj.className='flat';
		
		return (err);
	}
}


function so_formCheck(f)
{
	var noerrors 	= true;
	var first	 	= false;
	var fields		= new Array();

	for (var i = 0; i < f.elements.length; i++)
	{
		if (f.elements[i].validateCheck || f.elements[i].validateReq)
		{
			err = so_formUpdate(obj = f.elements[i]);
			
			if (err)
			{
				if (first == false) first = i;
				
				fields.push(f.elements[i].validateDescr);
				noerrors = false;
			}
		}
	}
	
	if (noerrors == false)
	{
		alert ('The following fields contain errors:' +
			   '\n\n- ' + fields.join('\n- ') + '\n\n' +
			   'Before you can continue you need \n to correct these errors.\n');
		
		f.elements[first].select();
		f.elements[first].focus();
	}
	
	return (noerrors);
}

function formCheck(f, pre)
{
	var noerrors 	= true;
	var first	 	= false;
	var fields		= new Array();

	for (var i = 0; i < f.elements.length; i++)
	{
		if (f.elements[i].validateCheck || f.elements[i].validateReq)
		{
			err = so_formUpdate(obj = f.elements[i]);
			
			var sibl = obj.name;
			sibl = sibl.substring(0, 1);

			if (err && pre == sibl && pre)
			{
				if (first == false) first = i;
				
				fields.push(f.elements[i].validateDescr);
				noerrors = false;
			}
		}
	}
	
	if (noerrors == false)
	{
		alert ('The following fields contain errors:' +
			   '\n\n- ' + fields.join('\n- '));
		
//		f.elements[first].select();
//		f.elements[first].focus();
	}
	
	return (noerrors);
}

function ltrim(str)
{
   var whitespace = new String(" \t\n\r");
   var s = new String(str);
   if (whitespace.indexOf(s.charAt(0)) != -1)
   {
      var j=0, i = s.length;
      while (j < i && whitespace.indexOf(s.charAt(j)) != -1)
         j++;
      s = s.substring(j, i);
   }
   return s;
}

function rtrim(str)
{
   var whitespace = new String(" \t\n\r");
   var s = new String(str);
   if (whitespace.indexOf(s.charAt(s.length-1)) != -1)
   {
      var i = s.length - 1;
      while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)
         i--;
      s = s.substring(0, i+1);
   }
   return s;
}

function trim(str)
{
   return rtrim(ltrim(str));
}

function submitform(pressbutton)
{
	document.adminForm.task.value = pressbutton;
	try
	{
		if (document.adminForm.onsubmit())
			document.adminForm.submit();
		
	} catch(e)
	{
		document.adminForm.submit();
	}
}

function submitform_wc(pressbutton)
{
	document.adminForm.task.value = pressbutton;
	document.adminForm.submit();
}

function checkAll(n, fldName)
{
	if (!fldName)
	{
		fldName = 'cb';
	}
	var f = document.adminForm;
	var c = f.toggle.checked;
	var n2 = 0;
	for (i = 0; i < n; i++)
	{
		cb = eval( 'f.' + fldName + '' + i );
		if (cb)
		{
			cb.checked = c;
			n2++;
		}
	}
	if (c)
	{
		document.adminForm.boxchecked.value = n2;
	} else
	{
		document.adminForm.boxchecked.value = 0;
	}
}

function isChecked(isitchecked)
{
	if (isitchecked == true)
	{
		document.adminForm.boxchecked.value++;
	}
	else
	{
		document.adminForm.boxchecked.value--;
	}
}

function saveorder(n)
{
	var f = document.adminForm;
	f.toggle.checked = true;
	checkAll(n);
	submitform('saveorder');
}

function savecount(n, t)
{
	var f = document.adminForm;
	f.toggle.checked = true;
	checkAll(n);
	submitform(t);
}

function changeDynaList(listname, source, key, orig_key, orig_val, first, firstText, firstValue)
{
	var list = eval('document.adminForm.' + listname);

	// empty the list
	for (i in list.options.length)
	{
		list.options[i] = null;
	}
	i = 0;
	if (first)
	{
		opt = new Option();
		opt.value = firstValue;
		opt.text = firstText;
		list.options[i++] = opt;
	}
	for (x in source)
	{
		if (source[x][0] == key)
		{
			opt = new Option();
			opt.value = source[x][1];
			opt.text = source[x][2];

			if ((orig_key == key && orig_val == opt.value) || i == 0)
			{
				opt.selected = true;
			}
			list.options[i++] = opt;
		}
	}
	list.length = i;
}