/*
############################################################
##
## 2007 (c) PiSolution GmbH
##
## File    : $Id: checkInput.js,v 1.1.1.1 2010/06/25 09:51:38 frank Exp $
## Version : $Revision: 1.1.1.1 $
##
## Purpose : Projekt - direktaufladen.de
##
## Created : 07/01/01
## Author  : frank pietzsch
##
## Update  : $Date: 2010/06/25 09:51:38 $
## Author  : $Author: frank $
## 
## Remarks : js for input check
##
## Log     : $Log: checkInput.js,v $
## Log     : Revision 1.1.1.1  2010/06/25 09:51:38  frank
## Log     : initial revision
## Log     :
##
############################################################
*/

/*
################################################################################
#
# check for empty input
#  parameters:
#    object of input element
#  returns:
#    0 / 1
#  remarks:
#    this method print yourself error message
#
################################################################################
*/

function isEmpty(object, minLength, maxLength, ignoreNull)
{
	var value = "";
	var type  = object.type;
	if (type == "text" || type == "textarea" ||
        type == "password" || type == "hidden")
	{
		value = object.value;
		type = "text";
	}
	else if (type == "file")
	{
		value = object.value;
		type = "file";
	}
	else if (type == "checkbox")
	{
		value = object.checked ? 1 : '';
		type  = "cb";
	}
	else
	{
		var idx = object.options.selectedIndex;
		if (idx < 0)
		{
			value = "";
		}
		else
		{
			value = object.options[idx].value;
		}
		type = "sb";
	}
	if (!value || value == '' ||
        (!ignoreNull && value == '0'))
	{
		if (type == "text")
		{
			alert("Bitte einen Wert eingeben !");
		}
		else if (type == "file")
		{
			alert("Bitte eine Datei auswählen !");
		}
		else if (type == "cb")
		{
			alert("Bitte klicken Sie einen Wert an !");
		}
		else
		{
			alert("Bitte einen Wert auswählen !");
		}
		object.focus();
		return 1;
	}
	if (minLength && value.length < minLength)
	{
		alert("Der Wert muss mindestens " + minLength + " Zeichen haben !");
		object.focus();
		return 1;
	}
	if (maxLength && value.length > maxLength)
	{
		alert("Der Eingabewert darf maximal " + maxLength + " Zeichen haben !");
		object.focus();
		return 1;
	}
	return 0;
}

/*
################################################################################
#
# check for pure numeric input
#  parameters:
#    object of input element
#  returns:
#    0 / 1
#  remarks:
#    this method print yourself error message
#
################################################################################
*/

function isNumber(object, downLimit, upLimit)
{
	var value = object.value;
	if (isNaN(value) == true)
	{
		alert("Der Wert ist keine Zahl !\n" +
              "Zur Trennung von Nachkommastellen einen Punkt verwenden" +
              "\n\nz.B.: 1.5");
		object.focus();
		return 0;
	}
	if ((upLimit || upLimit == 0) &&
         downLimit || downLimit == 0)
	{
		if (value < downLimit || value > upLimit)
		{
			alert("Der Wert liegt nicht im Wertebereich (" +
                  downLimit + "," + upLimit + ")!");
			object.focus();
			return 0;
		}
	}
	return 1;
}

/*
################################################################################
#
# check for decimal point
#  parameters:
#    object of input element
#  returns:
#    0 / 1
#  remarks:
#    this method print yourself error message
#
################################################################################
*/

function isDecimal(object)
{
	var vals = object.value.split('.');

	for (var i=0; i<vals.length; i++)
	{
		if (isNaN(vals[i]) == true)
		{
			alert("Wert ist nicht decimal !");
			object.focus();
			return 0;
		}
	}
	return 1;
}

/*
################################################################################
#
# check for correct email syntax
#  parameters:
#    object of input element
#  returns:
#    0 / 1
#  remarks:
#    this method print yourself error message
#
################################################################################
*/

function isEmail(object)
{
	var vals = object.value.split('@');
	if (vals.length != 2)
	{
		alert("e-mail Format Fehler");
		object.focus();
		return 0;
	}
	vals = object.value.split('.');
	if (vals.length < 2)
	{
		alert("e-mail Format Fehler");
		object.focus();
		return 0;
	}

	return 1;
}

/*
################################################################################
#
# check function for two equal input values
#  parameters:
#    two input objects
#  returns:
#    0 / 1
#  remarks:
#    this method print yourself error message
#
################################################################################
*/

function isEqual(object1, object2)
{
	var value1 = object1.value;
	var value2 = object2.value;

	if (value1 != value2)
	{
		alert("Eingaben müssen identisch sein !");
		object1.focus();
		return 0;
	}
	return 1;
}

/*
################################################################################
#
# check function for two input values, where the first is larger than the second
#  parameters:
#    two input objects
#  returns:
#    1 / 0
#  remarks:
#    this method print the own error message
#
################################################################################
*/

function isLarger(object1, object2)
{
	var value1 = object1.value;
	var value2 = object2.value;

	var type  = object1.type;
	if (type == "text" || type == "textarea" ||
        type == "password" || type == "hidden")
	{
		value1 = object1.value;
		value2 = object2.value;
		type = "text";
	}
	else
	{
		var idx1 = object1.options.selectedIndex;
		value1 = object1.options[idx1].text;
		var idx2 = object2.options.selectedIndex;
		value2 = object2.options[idx2].text;
		type = "sb";
	}
	if (value1 <= value2)
	{
		if (type == "text")
		{
			alert("Bitte einen größeren Wert eingeben !");
			object1.focus();
		}
		else
		{
			alert("Bitte einen größeren Wert auswählen !");
			object1.focus();
		}
		return 0;
	}
	return 1;
}

/*
################################################################################
#
# check for valid ip syntax
#  parameters:
#    object of input element
#  returns:
#   0 / 1
#  remarks:
#    this method print yourself error message
#
################################################################################
*/

function isIp(object)
{
	var vals = object.value.split('.');
	if (vals.length != 4)
	{
		alert("IP-Adressen Format Fehler");
		object.focus();
		return 0;
	}
	for (var i=0; i<vals.length; i++)
	{
		if (isNaN(vals[i]) == true)
		{
			alert("IP-Adressen Wert ist nicht numerisch !");
			object.focus();
			return 0;
		}
		vals[i] = vals[i] == '' ? '0' : vals[i];
		if (vals[i] > 255)
		{
			alert("IP-Adressen Format Fehler");
			object.focus();
			return 0;
		}
	}
	object.value = vals[0] + '.' +
                   vals[1] + '.' +
                   vals[2] + '.' +
                   vals[3];

	return 1;
}

/*
################################################################################
#
# check for correct url syntax
#  parameters:
#    object of input element
#  returns:
#    0 / 1
#  remarks:
#    expected syntax: [a-Z].[a-Z].[a-Z]
#    without: http://
#
################################################################################
*/

function isUrl(object)
{
	var vals = object.value.split('/');
	if (vals.length > 1)
	{
		alert("Url Format Fehler");
		object.focus();
		return 0;
	}
	vals = object.value.split(':');
	if (vals.length > 1)
	{
		alert("Url Format Fehler");
		object.focus();
		return 0;
	}
	var vals = object.value.split('.');
	if (vals.length < 3)
	{
		alert("Url Format Fehler");
		object.focus();
		return 0;
	}
	return 1;
}

/*
################################################################################
#
# check for correct date format
#  parameters:
#    object of input element
#    optional: delimiter value (default: '.')
#    optional: language value (default: 'de')
#  returns:
#    0 / 1
#  remarks:
#    expected syntax: [1-31][del][1-12][del][1-9999]
#
################################################################################
*/

function isDate(object, delimiter, language)
{

	var deli = delimiter ? delimiter : '.';
	var lang = language ? language : 'de';

	//
	// check date format
	//

	var vals = object.value.split(deli);
	if (vals.length != 3)
	{
		alert("Datum: falsches Format (TT.MM.JJJJ) !");
		object.focus();
		return 0;
	}

	//
	// check digit type
	//

	for (var i=0; i<vals.length; i++)
	{
		if (isNaN(vals[i]) == true)
		{
			alert("Datum: falsche Syntax (TT.MM.JJJJ) !");
			object.focus();
			return 0;
		}
	}

	//
	// set day, month and year
	//

	var help_d = 0;
	var help_m = 0;
	var help_y = 0;
	var days   = 0;

	if (lang == 'de')
	{
		help_d = vals[0];
		help_m = vals[1];
		help_y = vals[2];
	}
	else
	{
		//
		// other languages are possible
		//

		help_d = vals[0];
		help_m = vals[1];
		help_y = vals[2];
	}

	//
	// calculate the max days of
	// actual month
	//

	if (help_m == 4 || help_m == 6 ||
        help_m == 9 || help_m == 11)
	{
		days = 30;
	}
	else if (help_m == 1 || help_m == 3 ||
             help_m == 5 || help_m == 7 ||
             help_m == 8 || help_m == 10 ||
             help_m == 12)
	{
		days = 31;
	}
	else if (help_m == 2 && help_y%4 == 0 &&
             help_y%100 != 0 || help_y%400 == 0)
	{
		days = 29;
	}
	else if (help_m == 2 && help_y%4 != 0 ||
             help_y%100 == 0 && help_y%400 != 0)
	{
		days = 28;
	}

	//
	// check valid ranges
	//

	if (help_d < 1 || help_d > days ||
        help_m < 1 || help_m > 12 ||
        help_y < 1900 || help_y > 9999)
	{
		alert("Datum: nicht gültig (TT.MM.JJJJ) !");
		object.focus();
		return 0;
	}

	return 1;
}

/*
################################################################################
#
# check for correct time format
#  parameters:
#    object of input element
#    optional: delimiter value (default: ':')
#  returns:
#    0 / 1
#  remarks:
#    expected syntax: HH:MM:SSSS
#
################################################################################
*/

function isTime(object, delimiter)
{

	var deli = delimiter ? delimiter : ':';
	var secs = 0;

	//
	// check time format
	//

	var vals = object.value.split(deli);
	if (vals.length < 2 || vals.length > 3)
	{
		alert("Zeit: falsches Format (SS:MM[:sek]) !");
		object.focus();
		return 0;
	}

	//
	// check digit type
	//

	for (var i=0; i<vals.length; i++)
	{
		if (isNaN(vals[i]) == true)
		{
			alert("Zeit: falsche Syntax (SS:MM[:sek]) !");
			object.focus();
			return 0;
		}
	}

	if (vals.length == 3)
	{
		secs = vals[2];
	}

	//
	// check valid ranges
	//

	if (vals[0] < 0 || vals[0] > 23 ||
        vals[1] < 0 || vals[1] > 59 ||
        secs < 0 || secs > 9999)
	{
		alert("Zeit: nicht gültig (SS:MM[:sek]) !");
		object.focus();
		return 0;
	}

	return 1;
}

/*
################################################################################
#
# check for correct phone number
#  parameters:
#    object of input element
#  returns:
#    0 / 1
#  remarks:
#    expected syntax: 01710123456
#
################################################################################
*/

function isPhoneNumber(object)
{
	if(! object.value.match(/^0\d{10,11}\s*$/))
	{
		alert("Format Fehler:\n\nBitte geben Sie Ihre Telefon Nummer wie folgt ein!\n01710123456 [Beispiel Nummer]");
		object.focus();
		return false;
	}
	return true;
}

/*
################################################################################
#
# helper function for selection box
# set value as selected, if exist
#  parameters:
#    selection box object, value to find
#  returns:
#    0 / 1
#
################################################################################
*/

function setSelectionValue(object, value)
{
	var count = object.length;
	for (var i=0; i < count; i++)
	{
		if (object.options[i].value == value)
		{
			object.options[i].selected = true;
			return 1;
		}
	}
	return 0;
}

function select_value(sb_name, fd_name, ask)
{
	var form = document.forms[0];

	var sb_object = form[sb_name];
	var fd_object = form[fd_name];

	if (sb_object && fd_object)
	{
		var index = sb_object.options.selectedIndex;
		if (sb_object.options[index].value != '' &&
            sb_object.options[index].value != fd_object.value)
		{
			if (fd_object.value != '' && ask &&
                !confirm("Wollen Sie den Wert überschreiben ?"))
			{
				return false;
			}
			fd_object.value = sb_object.options[index].value;
			fd_object.focus();
		}
	}

	return false;
}


