﻿/* ---------------------------------------------------------------------------- */
/* ---------------------------- VALIDATION ------------------------------------ */
/* ---------------------------------------------------------------------------- */

var bAllOk = true;
var objLastField = null;
var lastszdatatype = "";
var lastbisnullable = false;

  function ValidateLastFields()
  {  
    if(objLastField != null)
        ValidateFields(objLastField, lastszdatatype, lastbisnullable, true);
  }
  
  function ValidateEmptySection(arrayoffields, message)
  {
      var bok = true;
      var ctl;            
      for (var i = 1; i < arrayoffields.length; i++)
      {  
         ctl = document.getElementById(arrayoffields[i]);
         if (ctl)
         {
            
            bok = (bok && ctl.value.length > 0);
            if (!bok)
              ctl.style.borderColor = "#E2001A";
            else
              ctl.style.borderColor = "#333";
         }
      }
      if (!bok)
      {
        ctl = document.getElementById(arrayoffields[0]);
        ShowErrorMsg(ctl, message);
        return false;
      }      
  }
      
  function ValidateEqualFields(ctl, ctl1, message)
  {
     var ctl1 = document.getElementById(ctl1);
     if (ctl1)
     {
        if (ctl.value != ctl1.value)
        {     
           ctl.style.borderColor = "#E2001A";
           ctl1.style.borderColor = "#E2001A";
           ShowErrorMsg(ctl, message);
        }
        else
        {
           ctl.style.borderColor = "#333";
           ctl1.style.borderColor = "#333";
           HideErrorMsg();
        }
     }
  }  
    
  function ValidateFields(ctl, szdatatype, bisnullable, bDisplayTheError)
  { 
    var szrecheckdate = /^(?=\d)(?:(?!(?:(?:0?[5-9]|1[0-4])(?:\.|-|\/)10(?:\.|-|\/)(?:1582))|(?:(?:0?[3-9]|1[0-3])(?:\.|-|\/)0?9(?:\.|-|\/)(?:1752)))(31(?!(?:\.|-|\/)(?:0?[2469]|11))|30(?!(?:\.|-|\/)0?2)|(?:29(?:(?!(?:\.|-|\/)0?2(?:\.|-|\/))|(?=\D0?2\D(?:(?!000[04]|(?:(?:1[^0-6]|[2468][^048]|[3579][^26])00))(?:(?:(?:\d\d)(?:[02468][048]|[13579][26])(?!\x20BC))|(?:00(?:42|3[0369]|2[147]|1[258]|09)\x20BC))))))|2[0-8]|1\d|0?[1-9])([-.\/])(1[012]|(?:0?[1-9]))\2((?=(?:00(?:4[0-5]|[0-3]?\d)\x20BC)|(?:\d{4}(?:$|(?=\x20\d)\x20)))\d{4}(?:\x20BC)?)(?:$|(?=\x20\d)\x20))?((?:(?:0?[1-9]|1[012])(?::[0-5]\d){0,2}(?:\x20[aApP][mM]))|(?:[01]\d|2[0-3])(?::[0-5]\d){1,2})?$/;
    var szrecheckint = /^(\+|-)?\d+$/;
    var szrecchecknumber = /^((\d?)|(([-+]?\d+\.?\d*)|([-+]?\d*\.?\d+))|(([-+]?\d+\.?\d*\,\ ?)*([-+]?\d+\.?\d*))|(([-+]?\d*\.?\d+\,\ ?)*([-+]?\d*\.?\d+))|(([-+]?\d+\.?\d*\,\ ?)*([-+]?\d*\.?\d+))|(([-+]?\d*\.?\d+\,\ ?)*([-+]?\d+\.?\d*)))$/;    
    var szreccheckmail = /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})$/;
    var szreccheckpercent = /^(1[0]{2}|1[0]{2}[\.\,][0]{1,}|[0-9]{1,2}|[0-9]{1,2}[\.\,]\d+)$/;
    var bOK = false;
    var szerrmsg;
    var szvalue = ctl.value;
    lastszdatatype = szdatatype;
    lastbisnullable = bisnullable;

    if (szdatatype == 'System.String') {
      bOK = true;
    }

    if (szdatatype == 'System.Boolean') {
      bOK = true;      
    }
    
    if (szdatatype == 'Indeca.Percent') {     
      
      bOK = szreccheckpercent.test(szvalue);
      szerrmsg = "Ihre Eingabe <val>% darf nicht 100% übersteigen.";
    }    
    
    if (szdatatype == 'Indeca.Mail') {     
      
      bOK = szreccheckmail.test(szvalue);
      szerrmsg = ERR_MAIL;
    }
    
    if (szdatatype == 'System.DateTime') {
      bOK = szrecheckdate.test(szvalue)
      szerrmsg = ERR_DATE;      
    }
    
    if (szdatatype == 'System.DateTime.Volljaehrigkeit') {
        bOK = szrecheckdate.test(szvalue)
        szerrmsg = ERR_DATE;

        if (bOK == true)  {
            bOK = VolljaehrigkeitPruefen(szvalue)
            szerrmsg = ERR_VJK;
        }
    }
    
    if (szdatatype == 'System.Int16' || szdatatype == 'System.Int32' || szdatatype == 'System.Int64') {
      bOK = szrecheckint.test(szvalue)
      szerrmsg = ERR_INT;
    }

    if (szdatatype == 'System.Decimal' || szdatatype == 'System.Single' || szdatatype == 'System.Double') {
      bOK = szrecchecknumber.test(szvalue)
      szerrmsg = ERR_DBL;
    }

    if (szvalue.length > 0) 
    {
      if (bOK) 
      {
        if(bDisplayTheError) {
            ctl.style.borderColor = "#333";        
            HideErrorMsg();        
            }
        objLastField = null;
      } 
      else
      {
        if(bDisplayTheError)
        {
            ctl.style.borderColor = "#E2001A";
            ShowErrorMsg(ctl, szerrmsg);        
            objLastField = ctl;
        }
        bAllOk = false;
      }
    } 
    else
    {
      if (bisnullable)
      {          
        if(bDisplayTheError) {      
            ctl.style.borderColor = "#333";
            HideErrorMsg();        
            }
        objLastField = null;
      }
      else
      {
        if(bDisplayTheError)
        {
            ctl.style.borderColor = "#E2001A";
            ShowErrorMsg(ctl, MSG_PF);
            objLastField = ctl;
        }
        bAllOk = false;
      }
    }
    
  }
  
  
  function DescribeFields(addMessage, ctl, szdatatype, bisnullable)
  {  
    var szerrmsg = "";
    var szvalue = ctl.value;
    
    if (szdatatype == 'System.String') {
    }

    if (szdatatype == 'System.Boolean') {      
    }
    
    if (szdatatype == 'Indeca.Mail') {
      szerrmsg = DESC_MAIL;
    }
    
    if (szdatatype == 'Indeca.Percent') {
      szerrmsg = "Bitte einen Prozentwert zwischen 0 und 100% eingeben<br>(z.B. 50%, 50,00% oder 50.00%).<br />"
    }    
    
    if (szdatatype == 'System.DateTime') {
      szerrmsg = DESC_DATE;
    }
        
    if (szdatatype == 'System.Int16' || szdatatype == 'System.Int32' || szdatatype == 'System.Int64') {
      szerrmsg = DESC_INT;
    }

    if (szdatatype == 'System.Decimal' || szdatatype == 'System.Single' || szdatatype == 'System.Double') {
      szerrmsg = DESC_DBL;
    }

    if(addMessage + szerrmsg != "")
    {
      if (bisnullable)
      {          
        ShowDescMsg(ctl, addMessage + szerrmsg);
      }
      else
      {
        ShowDescMsg(ctl, addMessage + szerrmsg + DESC_PF);
      }
  }
    
  }  

  function ProductMaxValueCheck(ctl, ctl_id)
  {
    var ctlmin = document.getElementById('_artmin_' + ctl_id);
    var min = parseInt(ctlmin.value);

    var ctlmax = document.getElementById('_artmax_' + ctl_id);
    var max = parseInt(ctlmax.value);
    
    var err = false;
    
    if(max!=0)
        MaxValueCheck(ctl, min, max);
  }
  function MaxValueCheck(ctl, min, max)
  {
    var err = false;
    if(max!=0)
    {
        if (parseInt(ctl.value) > max)
        {
            err=true;
            ctl.value = max;
            ctl.focus();
            ShowErrorMsg(ctl, "Bitte beachten Sie die Maximale Menge: " + max);                
        }
        else if (parseInt(ctl.value) < min)
        {
            err=true;
            ctl.value = min;
            ctl.focus();
            ShowDescMsg(ctl, "Eingabefehler. Bei dieser Ware handelt es sich um Schneidware. Bitte mindestens " + min + "m bestellen.");                
        }    
    }
    if(!err)
        HideErrorMsg();
  }
  function ValidateKeyPress(firedevent, type, control)
  {
  HideDescMsg();
  try{
   var code = alertkey(firedevent);
    switch (type)   
    {
        case "System.Int16":
        case "System.Int32":
        case "System.Int64":       
            if ((code > 47 && code < 58) || (code > 95 && code < 106) || code == 46 || code == 16 || code == 37 || code ==39 || code == 8 || code == 189 || code == 9)
            { }
            else
               window.event.returnValue = false;           

            break;
        case "System.Decimal":
        case "System.Single":
        case "System.Double":
        case "Indeca.Percent":
            if ( (code > 47 && code < 58) || (code > 95 && code < 106) || code == 46 || code == 16 || code == 37 || code ==39 || code == 110 || code == 190 || code == 188 || code == 189 || code == 8 || code == 9)
            { }
            else
               window.event.returnValue = false;           

            break;
        case "System.DateTime":
            if (!( (code > 47 && code < 58) || (code > 95 && code < 106) || code ==32 || code == 46 || code == 16 || code == 37 || code ==39 || code == 110 || code == 190 || code == 8 || code == 9))
               window.event.returnValue = false;
            else
            {           
               if (code == 190 && control.value.length == 1)
               {
                  control.value = "0"+control.value;
                  window.event.returnValue = false;              
               }
               if (code == 190 && control.value.length == 4)
               {
                  part1 = control.value.substr(0, 3);
                  part2 = control.value.substr(3);
                  control.value = part1 + "0" + part2;
                  window.event.returnValue = false;
               }
               if (code == 190 && ( control.value.length == 2 || control.value.length == 5))
                  window.event.returnValue = false;
               if ((code == 32 || code == 9) && control.value.length == 8)
               {
                  part1 = control.value.substr(0, 6);                                          
                  part2 = control.value.substr(6);
                  control.value = part1 + "20" + part2;
                  if (code == 32)
                     window.event.returnValue = false;
               }
               if ((control.value.length == 2 || control.value.length == 5) && code != 8)
                  control.value += ".";
               if (control.value.length == 10 && code != 8 && code != 9)
                  window.event.returnValue = false;
               //if ((control.value.length == 13 || control.value.length == 16) && code != 8 && code != 190)
               //   control.value += ":";           
            }
            break;
        case "System.String":
            //alert(code);
            if ((code != 8)&&(code != 9)&&(code != 16)&&(code != 192)&&(code != 222)&&(code != 186)&&(code != 37)&&(code != 38)&&(code != 39)&&(code != 40)&&(code != 219)&&(code != 189)&&(code != 190))
            {
                var testregex = /[^a-zA-Z \-ß\d]/g;  // NICHT Wort (a-zA-Z) und NICHT Whitespace (Leerzeichen) sowie nicht -
                if (testregex.test(String.fromCharCode(code))==true && code!=96)
                {
                    window.event.returnValue = false;
                }
            }
            break;
        default:               
        break;
    }         
    }
    catch(err){  }      
    //window.event.returnValue  = window.event.returnValue         
  }      
  

/* ---------------------------------------------------------------------------- */
/* ---------------------------- KEYPRESS -------------------------------------- */
/* ---------------------------------------------------------------------------- */

  function alertkey(e) {
    if( !e ) {
      if( window.event ) {
       //Internet Explorer
        return window.event;
      } else {
        return;
      }
    }
    
    if( typeof( e.keyCode ) == 'number'  ) {
      //DOM
        return e.keyCode;
    } else if( typeof( e.which ) == 'number' ) {
      //NS 4 compatible
        return e.which;
    } else if( typeof( e.charCode ) == 'number'  ) {
      //also NS 6+, Mozilla 0.9+
        return e.charCode;
    } else {
      //total failure, we have no way of obtaining the key code
      return null;
    }
    
  }
  
function ValidateAllFields(_arrObjects, _btnID)
{   
    bAllOk = true;
    for(var i = 0; i < _arrObjects.length; i++)
    {
        ValidateFields(document.getElementById(_arrObjects[i][0]), _arrObjects[i][1], _arrObjects[i][2], false);
    }
    if(bAllOk)
    {   
        if(document.getElementById(_btnID))
        {
            document.getElementById(_btnID).disabled = false;
            document.getElementById(_btnID).cursor = "hand";
        }
    }
    else
    {
        if(document.getElementById(_btnID))
        {
            document.getElementById(_btnID).disabled = true;
            document.getElementById(_btnID).cursor = "";
        }
    }

    setTimeout(function(){ValidateAllFields(_arrObjects, _btnID);},300);
}

/* ---------------------------------------------------------------------------- */
/* ---------------------------- ERRORMSG -------------------------------------- */
/* ---------------------------------------------------------------------------- */
function ShowErrorMsg(ctl, szerror)
  {
    if(document.getElementById("_DESCRIBE").style.visibility = 'visible')
        document.getElementById("_DESCRIBE").style.visibility = 'hidden';
  
    var errorbox = document.getElementById("_ERROR");
    var pos = getPosition(ctl);
    var szerrmsg = "";
    var szvalue = "<b>" + ctl.value + "</b>";
    
    szerrmsg = szerror.replace(/<val>/g, szvalue);
    
    window.document.getElementById("_ERRORMSG").innerHTML = szerrmsg;
    
    errorbox.style.left = pos.x + "px";
    errorbox.style.top = (pos.y+20) + "px";
      
    errorbox.style.visibility = "visible";
  }

  function HideErrorMsg()
  {
    var errorbox = window.document.getElementById("_ERROR");
    errorbox.style.visibility = "hidden";
    //if(bAllOk)
    //{
    //    if(document.getElementById("ctl_submit"))
    //        document.getElementById("ctl_submit").style.visibility = 'visible';
    //}
  }

/* ---------------------------------------------------------------------------- */
/* ---------------------------- DESCMSG -------------------------------------- */
/* ---------------------------------------------------------------------------- */
function ShowDescMsg(ctl, szerror)
{
    if(document.getElementById("_ERROR").style.visibility = 'hidden')
    {
        var errorbox = window.document.getElementById("_DESCRIBE");
        var pos = getPosition(ctl);
        var szerrmsg = "";
        var szvalue = "<b>" + ctl.value + "</b>";
        
        szerrmsg = szerror.replace(/<val>/g, szvalue);
        
        window.document.getElementById("_DESCRIBEMSG").innerHTML = szerrmsg;
        
        errorbox.style.left = pos.x + "px";
        errorbox.style.top = (pos.y+20) + "px";
        errorbox.style.visibility = "visible";
    }
}

function HideDescMsg()
{
    var errorbox = window.document.getElementById("_DESCRIBE");
    errorbox.style.visibility = "hidden";
}  


  function ValidateInput(ctl, color)
  { 
    var szerrmsg;
    var szvalue = ctl.value;
    var bOK = false;
    if (szvalue.indexOf(';')>-1)
    {
        bOK = false;
        szerrmsg = ERR_SEMICOLON;
        ShowErrorMsg(ctl, szerrmsg);
        bAllOk = false;
        if (color)
           ctl.style.borderColor = color;
    }
    else
    {
        bOK = true;
        if (color)
           ctl.style.borderColor = "";
        HideErrorMsg(ctl);
    }
  }  


/**
 *	Prüfung auf eines Geburtsdatum auf Volljährigkeit (18 Jahre)
 */ 
function VolljaehrigkeitPruefen(pruef_dat)	{

	var dateItems = pruef_dat.split(".");
	geb_tag = dateItems[0];
	geb_monat = dateItems[1];
	geb_jahr = dateItems[2];

	//geb_tag		= document.getElementById('geb_tag').value;		// Eingegebener Tag aus input-Feld
	//geb_monat	= document.getElementById('geb_monat').value;	// Eingegebener Monat aus input-Feld
	//geb_jahr	= document.getElementById('geb_jahr').value;	// Eingegebenes Jahr aus input-Feld

	var Erg1 		= geb_tag.match(/\d{1,2}/);		// Tag muss mind. 1 Stelle haben
	var Erg2 		= geb_monat.match(/\d{1,2}/);	// Monat muss mind. 1 Stelle haben
	var Erg3 		= geb_jahr.match(/\d{2,4}/);	// Jahr muss mind. 2 Stellen haben
	
	var ret	= false;
	
	if((Erg1 != null) && (Erg2 != null) && (Erg3 != null))	{					

		var objNow 	= new Date();					// Date Objekt erzeugen
		var day		= objNow.getDate();				// aktueller Tag aus Date-Objekt
		var month	= objNow.getMonth();			// aktueller Monat aus Date-Objekt
		var year	= objNow.getFullYear();			// aktuelles Jahr aus Date-Objekt
		
		month		+= 1;							// Monat + 1, da Monat bei 0 angefangen wir zu zählen

		//if(geb_jahr < 1900)	{	geb_jahr	= parseInt(geb_jahr) + 1900;	}
		//if(year 	< 1900)	{	year 		+= 1900;	}
		//Math.floor(Endzeit - Zeit);
		//var dateDIFF = (new Date(geb_jahr, geb_monat, geb_tag) - objNow);
		
		
		//var gebDatumParsed = new Date(parseInt(geb_jahr), parseInt(geb_monat.replace("0","")), parseInt(geb_tag.replace("0","")));
		
		//alert(gebDatumParsed + " " + gebDatumParsed.getDay() + " " + gebDatumParsed.getMonth() + " " + gebDatumParsed.getFullYear() );
		
		//alert(Math.floor(gebDatumParsed - objNow));
						
				
		var t_diff	= day	- parseInt(geb_tag);	// Tag heute - Geburtstag
		if(t_diff < 0)	{	month	-= 1;	}		// Wenn Tag heute negativ ist, Monat - 1
		
		var m_diff	= month	- parseInt(geb_monat);	// Monat - Geburtsmonat
		if(m_diff < 0)	{	year 	-= 1;	}		// Wenn Monat negativ ist, Jahr - 1
		
		var j_diff	= year	- geb_jahr;				// Jahr - Geburtsjahr

		if(j_diff < 18)	{		// Ist Differenz zwischen Jahr und Geburtsjahr kleiner 18 ist er noch nicht Volljährig
				ret			= false; 
		}	else	{
				ret			= true; 
				 
		}
	}
	return ret;
}
/************************************************************************************/

function getPosition(element)
{
    var elem=element,tagname="",x=0,y=0;
    y = elem.offsetHeight;
    x = 20;

    while ((typeof(elem)=="object")&&(typeof(elem.tagName)!="undefined"))
    {
      y+=elem.offsetTop;
      x+=elem.offsetLeft;
      tagname=elem.tagName.toUpperCase();

      if ((tagname=="HTML") || (tagname=="BODY"))
      {
        elem=0;
        } 

      if (typeof(elem)=="object")
        if (typeof(elem.offsetParent)=="object")
          elem=elem.offsetParent;
    }
    position=new Object();
    position.x=x;
    position.y=y;

    if (element.offsetWidth && element.offsetHeight) {
        position.width = element.offsetWidth;
        position.height = element.offsetHeight;
    }
    else if (element.style && element.style.pixelWidth && element.style.pixelHeight) {
        position.width = elem.style.pixelWidth;
        position.height = elem.style.pixelHeight;
    }

    return position;
}
