/*****************************************
    Validate form functions
    Included in: 
                /TradePoint/SendPwd
                /TradePoint/ValidateExistingCustomer
                /websys/Templates/BusinessApplications/Navision/Customer Card Extended
                /websys/Templates/TradePoint/Emails/CustomerRegistrationMail
                /websys/Templates/TradePoint/Emails/CustomerInvitationMail
                /websys/Templates/TradePoint/Emails/TipAFriend
                /websys/Templates/TradePoint/Emails/SalesInvitationMail
                /websys/Templates/TradePoint/Emails/OrdersToCommit
                /websys/Templates/TradePoint/Emails/ForumUpdated
                /websys/Templates/TradePoint/Emails/CustomerRoomCreationMail
                /websys/Templates/TradePoint/Emails/CustomerNewPasswordMail
                /websys/Templates/TradePoint/Emails/OrderConfirmationMail
                /websys/Templates/TradePoint/Order/Check Out/Send Order/Order Failed
                /websys/Templates/TradePoint/Contact Us
                /websys/Templates/TradePoint/Admin/AdminAccounts/CreateAccount
                /websys/Scriptlets/TradePointGeneralElements/TestEmailForm
                /websys/Templates/TradePoint/Self Service/OrderToProcess
                /websys/Templates/TradePoint/Self Service/Customer Card Limited
    
********************************************/

/*****************************************
    AM 2006-11-21 
    The test if the browser allows regexp did not use JavaScript Syntax
    Replaced correct regExp that did not work in firefox
********************************************/

/*****************************************
    AM 2007-02-23 
    Added type number
********************************************/
/*
    note that the showWait param is only used at the checkout process and involves some hardcoded 
    stuff. If you wisht to make use of this functionality you will need to modify the code somewhat.
*/    
    
    function clientScriptFormValidation( current_form, defaultMessage, showWait, waitMsg )
    {
        var message = (defaultMessage) ? defaultMessage :'';
        var error_texts  = new Array();
        var errCnt = 0;
        var focusOn = null;
        
        var form_elements = current_form.elements;
        var len = form_elements.length;
        for( var i = 0; i < len; i++ )
        {
            var elm = form_elements[i];
            if( elm.name == "required" )
            {
                var inputName = String( elm.value );
                var input_el = form_elements[ inputName ];
                
                if( input_el )
                {
                    var isOk =  checkRequiredElement( input_el, inputName, form_elements );
                    
                    if( !isOk )
                    {
                        var textEl = form_elements[ 'required_'+inputName+'_text' ];
                        
                        try
                        {
                            if( !focusOn )
                            {
                                focusOn = input_el;
                            }
                        }
                        catch(err)
                        {
                            //Focus on a hidden element throws a exception
                        }
                        
                        errCnt++;
                        
                        if( textEl )
                            error_texts[ error_texts.length ] = unescape( textEl.value );
                    }
                }
                
                
            }
            else if ( elm.name == "required_condition" )
            {
                var conditionName = String( elm.value );
                var conditionEl = document.getElementById( conditionName );
                if( conditionEl.checked )
                {
                    
                    var input_els = document.getElementsByName( "required_"+conditionName );
                    
                    if( input_els )
                    {
                        var con_len = input_els.length;
                        for( var ci = 0; ci < con_len; ci++ )
                        {
                            var inputName = String( input_els[ ci ].value );
                            var input_el = form_elements[ inputName ];
                            if( input_el )
                            {
                                var isOk = checkRequiredElement( input_el, inputName, form_elements );
                                
                                if( !isOk )
                                {
                                    var textEl = form_elements[ 'required_'+inputName+'_text' ];
                                    
                                    try
                                    {
                                        if( !focusOn )
                                        {
                                            focusOn = input_el;
                                        }
                                    }
                                    catch(err)
                                    {
                                        //Focus on a hidden element throws a exception
                                    }
                                    
                                    errCnt++;
                                    
                                    if( textEl )
                                        error_texts[ error_texts.length ] = unescape( textEl.value );
                                }
                            }//if el
                        }// for conditional elements
                    }//if conditional elements
                }//if conditon checked
            }
            if( elm.name == "validation" )
            {
                var inputName = String( elm.value );
                var input_el = form_elements[ inputName ];
                
                if( input_el )
                {
                    var isOk =  validateElement( input_el, inputName, form_elements );
                    
                    if( !isOk )
                    {
                        // get the error text
                        var textEl = form_elements[ 'validation_'+inputName+'_text'  ];
                        
                        try
                        {
                            if( !focusOn )
                            {
                                focusOn = input_el;
                            }
                        }
                        catch(err)
                        {
                            //Focus on a hidden element throws a exception
                        }
                        
                        errCnt++;
                        
                        if( textEl )
                            error_texts[ error_texts.length ] = unescape( textEl.value );
                    }
                }
                
                
            } 
        }//for
        
        if( errCnt > 0 )
        {
            try
            {
                focusOn.focus();

            }
            catch(err)
            {
            }
            
            alert( message + '\n\n' + error_texts.join('\n') );
            return false;
        }
        else
        {
            if( showWait )
            {
                elm = current_form.submit_btn;
                if( elm )
                    pleaseWaitSubmiting( current_form, elm, waitMsg );
                
                //always return false because the pleaseWait manage the submitting
        
                return false;
            }
            else
            {
                return true;
            }
        }
    }
    
    //helper checks one inputelement
    function checkRequiredElement( input_el, inputName, form_elements )
    {
        var isOk = true;
        var input_value = '';
        
        var tagName = String( input_el.tagName ).toUpperCase();
        var type = input_el.type;
        
        if( !type && input_el.length )
        {
            if( input_el.length > 0 )
                type = input_el[ 0 ].type;
        }
        
        type =  String( type ).toUpperCase();
        
        
        if( tagName == 'SELECT' )
        {
            input_value = input_el.options[ input_el.selectedIndex ].value;
        }
        else if( type == 'RADIO' || type == 'CHECKBOX' )
        {
            return ( isChecked( inputName ) );
        }
        else 
        {
            input_value = input_el.value;
        }
        
        if( trim( input_value ) == '' )
        {
            isOk = false;
        }
        else
        {
            var typeOfElement = form_elements[ 'required_'+inputName+'_type' ];
            
            if( typeOfElement )
            {
                if( typeOfElement.value == 'email' )
                {
                    if( !validateEmail( input_value ) )
                    {
                        isOk = false;
                    }
                }
                else if( typeOfElement.value == 'number' )
                {
                    if( isNaN( input_value ) || input_value == "" || input_value == null )
                    {
                        isOk = false;
                    }
                }
            }
            
            var typeOfElement = form_elements[ 'required_'+inputName+'_compare' ];
            
            if( typeOfElement )
            {
                var compareTo = form_elements[ typeOfElement.value ];
                
                var compareTo_value = '';
        
                if( compareTo.tagName == 'SELECT' )
                {
                    compareTo_value = compareTo.options[ compareTo.selectedIndex ].value;
                }
                else 
                {
                    compareTo_value = compareTo.value;
                }
                
                if( compareTo_value != input_value )
                {
                     isOk = false;
                }
            }
            
        }
        return isOk;
    }
    
    // validates a specific element
    function validateElement( input_el, inputName, form_elements )
    {
        var isOk = true;
        var input_value = '';
        
        var tagName = String( input_el.tagName ).toUpperCase();
        var type = input_el.type;
        
        // get all validations to perform
        var valTypes = document.getElementsByName("validation_"+inputName+"_type");
        
        for(var v=0; v<valTypes.length; v++)
        {
            var valType = valTypes[v];
            
            switch(String(valType.value).toLowerCase())
            {
                case "notempty":            // not implemented
                    break;
                case "date":            // not implemented
                    break;
                case "numeric":
                    if( isNaN( input_value ) || input_value == "" || input_value == null )
                    {
                        isOk = false;
                    }
                    break;
                case "email":            // not implemented
                    break;
                case "limit":
                    // get the character limit
                    var limit = Number(valType.getAttribute("limit"));
                    
                    if(limit>0)
                    {
                        try
                        {
                            var content = String(input_el.value);
                            if(content.length > limit)
                            {
                                isOk = false;
                            }
                        }
                        catch(e)
                        {
                        }
                    }
            }
        }
        return isOk;
    }
    

    function trim( str )
    {
        var temp = new String( str );
        // blanks in the begining
        try
        {
            var restart = /^\s*/;
            temp = temp.replace(restart, '');
        }
        catch(e){}
        
        return temp;
    }
    
/*****************************************
    Validate emails
    used from: /websys/Templates/TradePoint/Emails/TipAFriend
                /websys/Templates/TradePoint/Order/Check Out/Send Order/Order Failed
                /websys/Templates/TradePoint/Emails/OrderConfirmationMail
                /websys/Templates/TradePoint/Emails/CustomerNewPasswordMail
                
                
                
********************************************/
    
    function checkTestMail( error_msg )
    {
        if( !validateEmail( String( document.theTestForm.sendToMail.value ) ) )
        {
            alert( error_msg );
            document.theTestForm.sendToMail.focus();
            return false;
        }
        else
        {
            return true;
        }
    }
    
    function alertTestMailResult( msg )
    {
        alert( msg );
        history.go( -1 );
    }
    
    function validateEmail( str )
    {
        var theStr = new String( str );
        // are regular expressions supported?
        var supported = false;
        if( window.RegExp )
        {
            var tempStr = "a";
            var tempReg = /a/i;
            if( tempReg.test( tempStr ) )
                supported = true;
        }
        if( !supported ) 
        {
            if ( (theStr.indexOf(".") > 2) && (theStr.indexOf("@") > 0) )
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        
        //var r1 = /(@.*@)|(\.\.)|(@\.)|(^\.)/g;
        //var r2 = /^.+\@(\[?)[a-z0-9\-\.]+\.([a-z]{2,3}|[0-9]{1,3})(\]?)$/gi;
        var rEmail = /^(([\s\S]{0})|(([^\@])+\@(\[?)[a-z0-9\_\-\.]+\.([a-z\_]{2,3}|[0-9]{1,3})(\]?)))$/i;
        
        if( rEmail.test( theStr ) )
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    
/*****************************************
    isChecked
    
********************************************/
    function isChecked( elementsName )
    {
        var oki = false;
        var elementColl = document.getElementsByName( elementsName );
        
        if( elementColl )
        {
            var count = elementColl.length
            for( var i = 0; i < count && !oki; i++ )
            {
                var el = elementColl[i];
                if( el )
                {
                    oki = el.checked;
                }
            }//for
        }
        return oki;
    }

/********************************************************
    checkIsValid
*********************************************************/
    function checkIsValid(el, msg)
    {
        if(!el) return;
        if(el.value=='') return;
        if(!(validateEmail(el.value)))
        {
            alert(msg);
            el.focus();
        }
    }
/********************************************************
    revocSelectIndex
    CR - 2008-07-15  - set the Dropdown index to our value 
*********************************************************/	
	function revocSelectIndex(el,toThisValue)
    {
         var optionVal=''; 
         if(el)
         {
            var count = el.options.length;
            el.options[ el.selectedIndex ].selected = false;
			if(el.options[ el.selectedIndex].value==toThisValue)
				return true;
            for(var i=0;i<count;i++)
            {
                optionVal=el.options[i].value;
                if(optionVal==toThisValue)
                {
                    
                    el.options[i].selected = true;
                    break;
                }
            }       
         }
         
    }
/*****************************************************************************
	callFormValidation
*****************************************************************************/
	function callFormValidation(current_formName, defaultMessage, showWait, waitMsg)
	{
		var current_form = document.getElementById(current_formName);
		if (clientScriptFormValidation( current_form, defaultMessage, showWait, waitMsg ))
		{
			current_form.submit();	
		}
	}
	
