﻿var mstrSeperatorCharComma = ",";
var mstrSeperatorCharPoint = ",";

function StringToInt( pstrValue )
{
    var arrMatch=new RegExp(/^([-]?)0*([0-9]+)$/).exec(pstrValue);
	
    if(arrMatch)
    {
        return(parseInt(arrMatch[1]+arrMatch[2]));
    } else {
        return(NaN);
    }
}

function validateDropDownList( pobjControl, pblnRequired )
{
    var lintCurrentvalue;
    
    if ( pblnRequired == true )
    {
        lintCurrentvalue = pobjControl.value;
        if ( lintCurrentvalue == -1 )
        {
            return false;
        }
        else
        {
            return true;
        }
    }
    else
    {
        return true;
    }
}

function validateTextLength( pobjControl, pintMinimumLength, pintMaximumLength )
{
    var lintCurrentLength;
    
    lintCurrentLength = pobjControl.value.length;
    
    if ( lintCurrentLength < pintMinimumLength )
    {
        return false;
    }
    
    if ( lintCurrentLength > pintMaximumLength )
    {
        return false;
    }
    
    return  true;
}

function validateTextAreaLength( pobjControl, pintMinimumLength, pintMaximumLength )
{
    if (pobjControl.value.length > pintMaximumLength)
    {
        // if too long...trim it!
        pobjControl.value = pobjControl.value.substring(0, pintMaximumLength);
    }
}

function validateInteger( pobjControl, pintMinimumvalue, pintMaximumvalue, pblnRequired )
{
    var lintCurrentvalue;
    
    lintCurrentvalue = pobjControl.value;
    
    var arrMatch = new RegExp(/^([-]?[0-9]+)$/).exec(lintCurrentvalue);
    
    if (!arrMatch)
    {
        return false;
    }
    
    if ( pintMinimumvalue != null)
    {
        if ( StringToInt(lintCurrentvalue) < pintMinimumvalue )
        {
            return false;
        }
    }
    
    if ( pintMaximumvalue != null)
    {
        if ( StringToInt(lintCurrentvalue) > pintMaximumvalue )
        {
            return false;
        }
    }
	
    return true; 
}

function validateDouble( pobjControl, pdblMinimumvalue, pdblMaximumvalue, pblnRequired )
{
    var lintCurrentvalue;
    
    lintCurrentvalue = pobjControl.value;
    
    // No use validating when empty and not required
    if (lintCurrentvalue == "" && !pblnRequired)
        return true;
    
    var arrMatch1=new RegExp(/^([-]?[0-9]+([.][0-9]+)?)$/).exec(lintCurrentvalue);
    var arrMatch2=new RegExp(/^([-]?[0-9]+([,][0-9]+)?)$/).exec(lintCurrentvalue);
    
    if ((!arrMatch1) && (!arrMatch2))
    {
        return false;
    }
        
    if (pdblMinimumvalue != null)
    {    
        if ( parseFloat( lintCurrentvalue )< pdblMinimumvalue )
        {
            return false;
        }  
    }
    
    if (pdblMaximumvalue != null)
    {
        if ( parseFloat( lintCurrentvalue ) > pdblMaximumvalue )
        {
            return false;
        }
    }
    return true;
}

// Uses functions of Calendar.js
function validateDateTime( pobjControl, pdteMinimumvalue, pdteMaximumvalue, pblnRequired )
{
    var lstrFieldValue = pobjControl.value.replace(/"/gi,'');
    var df = pobjControl.df;    
    
    // default value
    if (df == null)
        df = "dd-m-yyyy";

    // empty ?
    if (lstrFieldValue != "")
    {    
        var theDate = getDateFromString(lstrFieldValue,df);
        if (theDate != null)
        {
               var minDate = pdteMinimumvalue;
               var maxDate = pdteMaximumvalue;
                             
               if (minDate != null)
                  minDate = getDateFromString(minDate,df);    
                  
               if (maxDate != null)
                  maxDate = getDateFromString(maxDate,df);
                  
               if (minDate != null)
               {
                  // below minimum ?
                  if (compareDates(theDate, minDate) == 1)
                     return false;
               }
                              
               if (maxDate != null)
               {
                  // above maximum ?
                  if (compareDates(theDate, maxDate) == -1)
                     return false;
                
               }               
               return true;
         } 
         else
            return false;
                
    }
    else
        return !pblnRequired;
    
}

function validateDocument( pobjControl, pstrExtensions, pblnRequired )
{
    var lstrFileName = pobjControl.value.replace(/"/gi,'');
    
    <!-- pobjControl.uploadOK = false; //-->
    
    if ( lstrFileName == "" )
    {
        if ( pblnRequired == true )
        {
            return false;
        }
        else
        {
            <!-- pobjControl.uploadOK = true; //-->
            return true;
        }
    }
    else
    {
        if (pstrExtensions != '')
        {
            return validateExtension( pobjControl, lstrFileName, pstrExtensions );                        
        }
        else
        {
            <!-- pobjControl.uploadOK = true; //-->
            return true;
        }
    }
    
    return true;
}



function validateEmailAddress( pobjControl, pblnRequired )
{
    var lstrFieldValue = pobjControl.value.replace(/"/gi,'');
    var lobjRegExp = new RegExp(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/);
    
    if ( ( pblnRequired == false ) && ( lstrFieldValue == "" ) )
    {
        return true;
    }
    
    if (!lobjRegExp.test(lstrFieldValue))
    {
        return false;
    }

    return true;
}



function validateHyperlink( pobjControl, pblnRequired )
{
    var lstrFieldValue = pobjControl.value.replace(/"/gi,'');
    var lobjRegExp = new RegExp(/^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&amp;%\$#_]*)?$/);
    
    if ( ( pblnRequired == false ) && ( lstrFieldValue == "" ) )
    {
        return true;
    }
    
    if (!lobjRegExp.test(lstrFieldValue))
    {
        return false;
    }

    return true;
}

function validateExtension( pobjControl, pstrFileName, pstrExtensions )
{
    var lobjRegExp = new RegExp(/.\.(jpe?g||gif)$/);
    var lobjAgent = navigator.userAgent.toLowerCase();
    var lblnOpera = (lobjAgent.indexOf("opera") != -1);
    
    if ( lblnOpera )
    {
        var lstrExtension = pstrFileName.substring(pstrFileName.lastIndexOf('.')+1, pstrFileName.length);
        var larrExtension = pstrExtensions.split(',');
        var lblnExtensionChecked = false;
        
        for (var lintCounter = 0; lintCounter < larrExtension.length; lintCounter++)
        {
            if (larrExtension[lintCounter].toLowerCase() == lstrExtension.toLowerCase())
            {
                lblnExtensionChecked = true;
                break;
            }
        }
        
        if (lblnExtensionChecked == false)
        {
            <!-- pobjControl.uploadOK = false; //-->
            return false;
        }
    }
    else
    {
        if (!lobjRegExp.test(pstrFileName))
        {
            <!-- pobjControl.uploadOK = false; //-->
            return false;
        }
    }
    
    <!-- pobjControl.uploadOK = true; //-->
    return true;
}

function Trim(pstrValue)
{
    while (pstrValue.substring(0,1) == ' ')
    {
        pstrValue = pstrValue.substring(1, pstrValue.length);
    }
    
    while (pstrValue.substring(pstrValue.length-1, pstrValue.length) == ' ')
    {
        pstrValue = pstrValue.substring(0,pstrValue.length-1);
    }
    
    return pstrValue;
}

function isInteger(pstrValue, pblnAllowNegative)
{
    if ("0123456789".indexOf(String.fromCharCode(event.keyCode)) >= 0)
    {
	    event.returnValue = true;
    }
    else
    {
	    if (pblnAllowNegative && String.fromCharCode(event.keyCode) == "-")
	    {
		    event.returnValue = (pstrValue.indexOf("-") == -1)				
	    }
	    else
	    {
		    event.returnValue = false;
	    }
    }
}		
function isFloat(pstrValue, pblnAllowNegative)
{
	var lblnDecimalExists;
	var lstrCharacter;
	var lintCounter
	var lstrSeparatorComma = mstrSeperatorCharComma;
	var lstrSeparatorPoint = mstrSeperatorCharPoint;
	
	lblnDecimalExists = false;
	 
	for (var lintCounter=0;lintCounter<pstrValue.length;lintCounter++)
	{
		lstrCharacter = pstrValue.substr(lintCounter,1);
		
		if ((lstrCharacter == lstrSeparatorComma) || (lstrCharacter == lstrSeparatorPoint))
		{
			lblnDecimalExists = true;	
			break;		
		}
	}	
		
	lstrCharacter =	String.fromCharCode(event.keyCode);
		
	if ("0123456789.,".indexOf(lstrCharacter) >= 0)
	{				
		if (lblnDecimalExists == true ){
			if (",.".indexOf(lstrCharacter) >= 0) {			
				event.returnValue = false;
			} else {
				event.returnValue = true;	
			}
			
		} else {
			// replace keys
			if(lstrCharacter == "," && lstrSeparatorComma == ".")
				event.keyCode = lstrSeparatorComma.charCodeAt(0);
			else if (lstrCharacter == "." && lstrSeparatorComma == ",")
				event.keyCode = lstrSeparatorComma.charCodeAt(0);
				
			event.returnValue = true;
		}
	}
	else
	{
		if (pblnAllowNegative && String.fromCharCode(event.keyCode) == "-")
		{
			event.returnValue = (pstrValue.indexOf("-") == -1)				
		}
		else
			event.returnValue = false;	
	}
}

function isDate(pobjControl, pstrValue)
{
	var lstrCharacter =	String.fromCharCode(event.keyCode);
    
    if ("0123456789-/".indexOf(lstrCharacter) >= 0)
    {				
	    // replace keys based on date format
	    var df = pobjControl.df;
	    
	    // when df is null assume old format: "-"
	    if (df == null) 
	        df = "-";

        // check date format for seperator char
        if (lstrCharacter == "/")
        {
            if (df.indexOf(lstrCharacter) == -1)
               event.keyCode = "-".charCodeAt(0);
        }
        else if (lstrCharacter == "-")
        {
            if (df.indexOf(lstrCharacter) == -1)
               event.keyCode = "/".charCodeAt(0);            
        }
         
	       
			
	    event.returnValue = true;
    }
    else
    {
	    if (lstrCharacter == "=")
	    {
		    var oDate = new Date();	
		    pobjControl.value = Pad(oDate.getDate(),"0",2) + "-" + Pad(oDate.getMonth()+1,"0",2) + "-" + oDate.getFullYear();
			
		    event.returnValue = false;	
	    }	
	    else
		    event.returnValue = false;	
    }
}

function IsValidTextLength(pobjControl, pintMinimumLength, pintMaximumLength)
{
    var lstrKey = String.fromCharCode(event.keyCode).toLowerCase();
    var lintCurrentLength;
    
    if (event.ctrlKey && lstrKey == 'v')
    {
        event.returnValue = false;    
    }
    else
    {
        lintCurrentLength = pobjControl.value.length;
        
        if ( lintCurrentLength > pintMaximumLength )
        {
            pobjControl.value = pobjControl.value.substring(0, pintMaximumLength);
            event.returnValue = false;
        }
        else
        {
            event.returnValue = true;
        }
    }
}

function Pad(pstrValue, pstrCharacterPad, pintLength)
{
	var lstrReturnValue;
	var lstrStringLength;

	for (var lintCounter = 0; lintCounter < pintLength; lintCounter++)
	{
		lstrReturnValue += pstrCharacterPad;
	}	
	
	lstrReturnValue += pstrValue;
	
	lstrStringLength = lstrReturnValue.length;
	
	return lstrReturnValue.substr(lstrStringLength-pintLength,pintLength);
}

function getSelectionStart(o) {
	if (o.createTextRange) {
		var r = document.selection.createRange().duplicate()
		r.moveEnd('character', o.value.length)
		if (r.text == '') return o.value.length
		return o.value.lastIndexOf(r.text)
	} else return o.selectionStart
}

function getSelectionEnd(o) {
	if (o.createTextRange) {
		var r = document.selection.createRange().duplicate()
		r.moveStart('character', -o.value.length)
		return r.text.length
	} else return o.selectionEnd
}

function compareDates (date1, date2) {
   var date1, date2;
   var month1, month2;
   var year1, year2;

    
   month1 = date1.getDate();
   date1 =  date1.getMonth();
   year1 =  date1.getFullYear();

   month2 = date2.getDate();
   date2 =  date2.getMonth();
   year2 =  date2.getFullYear();
   
   if (year1 > year2) return 1;
   else if (year1 < year2) return -1;
   else if (month1 > month2) return 1;
   else if (month1 < month2) return -1;
   else if (date1 > date2) return 1;
   else if (date1 < date2) return -1;
   else return 0;
} 


function AutoCompleteDropDownList( pobjDropDownList, pblnCaseSensitive )
{
    var undefined;
    
    if (pobjDropDownList.keypressBuffer == undefined)
    {
        pobjDropDownList.keypressBuffer = '';
    }
    
    var lstrKey = String.fromCharCode(window.event.keyCode);
    
    pobjDropDownList.keypressBuffer += lstrKey;
    
    if (!pblnCaseSensitive)
    {
        pobjDropDownList.keypressBuffer = pobjDropDownList.keypressBuffer.toLowerCase();
    }
    
    var lintOptionsLength = pobjDropDownList.options.length;
    
    for (var lintCounter=0; lintCounter < lintOptionsLength; lintCounter++)
    {
        var lstrOptionText = pobjDropDownList.options[lintCounter].text;
        
        if (!pblnCaseSensitive)
        {
            lstrOptionText = lstrOptionText.toLowerCase();
        }
        
        if (lstrOptionText.indexOf(pobjDropDownList.keypressBuffer,0) == 0)
        {
            pobjDropDownList.selectedIndex = lintCounter;
            return false;
        }
    }
    
    pobjDropDownList.keypressBuffer = lstrKey;
    return true;
}