/*****************************************
    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
    
********************************************/
/*
	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
            } 
        }//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;
                    }
                }
            }
            
            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;
    }
    

    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)
    {
        // are regular expressions supported?
        var supported = 0;
        if( window.RegExp )
        {
            var tempStr = "a";
            var tempReg = new RegExp( tempStr );
            if (tempReg.test( tempStr ) )
                supported = 1;
        }
        if( !supported ) 
            return (str.indexOf(".") > 2) && (str.indexOf("@") > 0);
    
        var r1 = /(@.*@)|(\.\.)|(@\.)|(^\.)/g;
        var r2 = /^.+\@(\[?)[a-z0-9\-\.]+\.([a-z]{2,3}|[0-9]{1,3})(\]?)$/gi;
            
        return (!r1.test(str) && r2.test(str));
    }

    
/*****************************************
    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();
		}
	}