/**
 * @author igonics.com
 */
(function($){
    $(document).ready(function(){
        /**
         * Ensure store pages are properly named
         */
        $('div[data-owner-type]').each(function(i,el){
            var $el = $(el),
                ownerType = $el.attr('data-owner-type') || '',
                friendlyName = ownerType.replaceAll('-',' ')
                                        .split(' ')
                                        .map(function(ownerTypePiece){
                                            return ownerTypePiece[0].toUpperCase()+ownerTypePiece.substr(1)
                                        })
                                        .join(' ');
        
            if(['service-provider','architect'].indexOf(ownerType) > -1 ){
                document.title=document.title.replace("Seller",friendlyName);
                $('.entry-header .entry-title').text(friendlyName)
                $el.find('.wkmp-box-head h2.about').text('About '+friendlyName)
                $el.find('a[href]:contains("View Collection") span').text('View Portfolio')
                $el.find('.wk_review_head h2').text('Reviews about '+friendlyName)
            }
        });

        /**
         * Handle Contact Form on Shop Page
         */
        $('.btn-contact-seller-form-send').click(function(evt){
            evt.preventDefault();
            var $btn = $(this),
                $statusElem = $('.contact-seller-form-seller-status'),
                defaultErrorMessage = "We were unable to complete this request at this time. Please try again.",
                reEnableButton = function(message,isError){
                    $btn.removeAttr('disable').text('Send')
                    if(message){
                        $statusElem.removeClass('d-none')
                                   .text(message)
                                   .removeClass('text-danger text-success')
                                   .addClass(isError ? 'text-danger' : 'text-success');
                        
                    }else{
                        $statusElem.addClass('d-none')
                    }
                },
                formData = $('.contact-seller-form').serialize().replaceAll('contact-seller-form-','').split('&').reduce(function(data,line){
                var pcs = line.split('=');
                if(pcs.length==2){
                    data[pcs[0].replaceAll('-','_')]=pcs[1]
                }
                return data;
            },{});
            formData.url = window.location.href;



            $btn.attr('disable','disable').text('Sending...')
            $.ajax({
                method:'POST',
                url: chnu.ajax_url,
                data : {action:'chnu_message_seller',data:formData},
                success:function(resp){
                    try{
                        resp = JSON.parse(resp)
                    }catch(e){}
                    console.log(resp)
                    
                    if(resp && resp.success){
                        reEnableButton(resp.message || "Your message was sent successfully.",false)
                    }else{
                        reEnableButton((resp || {}).message || defaultErrorMessage,true)
                    }
                    
                },
                error:function(err){
                    console.log(err)
                    reEnableButton(defaultErrorMessage,true)
                }
            })
            

            return false;
        })
        /**
         * Style Banners
         */
        $('.wk_profile_banner').each(function(i,el){
            var $originalBanner = $(el),
                backgroundImage = $originalBanner.css('backgroundImage'),
                $backgroundDiv = $('<div></div>').css({
                    backgroundImage : backgroundImage,
                    position : 'absolute',
                    backgroundSize : 'cover',
                    backgroundRepeat : 'no-repeat',
                    opacity : 0.1,
                    width: '100%',
                    height: $originalBanner.height(),
                    top:0,
                    left:0
                }),
                $clone = $originalBanner.clone();
            
            $originalBanner.append(
                $backgroundDiv
            )
            .append(
                $clone
            )
            
            .css({
                position:'relative',
                backgroundImage:'',
                borderRadius:'12px',
                marginBottom:'1em',
                overflow:'hidden',
                height : $originalBanner.height(),
                width : '100%'
            })
            .removeClass('wk_profile_banner')
            
        })

        /**
         * Recaptcha Wordpress User Frontend Fix
         */
        $('.wpuf-fields input[type=hidden][name=g-recaptcha-response]').each(function(i,el){
            var $inputRecaptcha = $(el),
                $btnSubmit = $inputRecaptcha.parents('form').find('.wpuf-submit-submit'),
                recaptchaCheckInterval = setInterval(function(){
                    $btnSubmit.attr('disable','disable');
                    if($inputRecaptcha.val().trim().length > 0){
                        $btnSubmit.removeAttr('disable');
                        clearInterval(recaptchaCheckInterval)
                    }
                },3500);

        })
        /**
         * Paid Membership Pro Billing Address Fields Always required
         */
        setInterval(function(){
            jQuery('#pmpro_billing_address_fields').each(function(i,el){
                $(el).show()
                     .find('input.pmpro_required').attr('required','required');
                
            })
            
        },3500)

        /**
         * WP Menu Cart - Url Fix
         */
        $('a.wpmenucart-contents').attr(
            'href',
            window.location.protocol+'//'+window.location.host+'/cart/'
        )
        /**
         * Custom User Agreements in Paid Membership Pro
         */

        function bindSignatureArea(sigResultElem) {
            window.requestAnimFrame = (function(callback) {
              return window.requestAnimationFrame ||
                window.webkitRequestAnimationFrame ||
                window.mozRequestAnimationFrame ||
                window.oRequestAnimationFrame ||
                window.msRequestAnimaitonFrame ||
                function(callback) {
                  window.setTimeout(callback, 1000 / 60);
                };
            })();
          
            var canvas = document.getElementById("sig-canvas");
            var ctx = canvas.getContext("2d");
            ctx.strokeStyle = "#222222";
            ctx.lineWidth = 4;
          
            var drawing = false;
            var mousePos = {
              x: 0,
              y: 0
            };
            var lastPos = mousePos;
          
            canvas.addEventListener("mousedown", function(e) {
              drawing = true;
              lastPos = getMousePos(canvas, e);
            }, false);
          
            canvas.addEventListener("mouseup", function(e) {
              drawing = false;
            }, false);
          
            canvas.addEventListener("mousemove", function(e) {
              mousePos = getMousePos(canvas, e);
            }, false);
          
            // Add touch event support for mobile
            canvas.addEventListener("touchstart", function(e) {
          
            }, false);
          
            canvas.addEventListener("touchmove", function(e) {
              var touch = e.touches[0];
              var me = new MouseEvent("mousemove", {
                clientX: touch.clientX,
                clientY: touch.clientY
              });
              canvas.dispatchEvent(me);
            }, false);
          
            canvas.addEventListener("touchstart", function(e) {
              mousePos = getTouchPos(canvas, e);
              var touch = e.touches[0];
              var me = new MouseEvent("mousedown", {
                clientX: touch.clientX,
                clientY: touch.clientY
              });
              canvas.dispatchEvent(me);
            }, false);
          
            canvas.addEventListener("touchend", function(e) {
              var me = new MouseEvent("mouseup", {});
              canvas.dispatchEvent(me);
            }, false);
          
            function getMousePos(canvasDom, mouseEvent) {
              var rect = canvasDom.getBoundingClientRect();
              return {
                x: mouseEvent.clientX - rect.left,
                y: mouseEvent.clientY - rect.top
              }
            }
          
            function getTouchPos(canvasDom, touchEvent) {
              var rect = canvasDom.getBoundingClientRect();
              return {
                x: touchEvent.touches[0].clientX - rect.left,
                y: touchEvent.touches[0].clientY - rect.top
              }
            }
          
            function renderCanvas() {
              if (drawing) {
                ctx.moveTo(lastPos.x, lastPos.y);
                ctx.lineTo(mousePos.x, mousePos.y);
                ctx.stroke();
                lastPos = mousePos;
              }
            }
          
            // Prevent scrolling when touching the canvas
            document.body.addEventListener("touchstart", function(e) {
              if (e.target == canvas) {
                e.preventDefault();
              }
            }, false);
            document.body.addEventListener("touchend", function(e) {
              if (e.target == canvas) {
                e.preventDefault();
              }
            }, false);
            document.body.addEventListener("touchmove", function(e) {
              if (e.target == canvas) {
                e.preventDefault();
              }
            }, false);
          
            (function drawLoop() {
              requestAnimFrame(drawLoop);
              renderCanvas();
            })();
          
            function clearCanvas() {
              canvas.width = canvas.width;
            }
          
            // Set up the UI
            var clearBtn = document.getElementById("sig-clearBtn");
            var submitBtn = document.getElementById("sig-submitBtn");
            clearBtn.addEventListener("click", function(e) {
                e.preventDefault();
                clearCanvas();
                if(sigResultElem){
                  sigResultElem.setAttribute("src", '');
                  sigResultElem.setAttribute("value",'');
                }
                submitBtn.innerText="Submit Signature"
                return false;
            }, false);
            submitBtn.addEventListener("click", function(e) {
                e.preventDefault();
                var dataUrl = canvas.toDataURL();
                if(sigResultElem){
                  sigResultElem.setAttribute("src", dataUrl);
                  sigResultElem.setAttribute("value", dataUrl);
                }
                submitBtn.innerText="Signature Added | Click to Change";
                return false;

            }, false);
          
          }
        
        if(window.location.href.indexOf('checkout-page') > -1){
            var $pmproForms = $('.pmpro_form');
            if($pmproForms.length > 0){
                window.chnUserAgreeements = {};
                //TODO: append agreement Modal
                //TODO: append signature Modal
            }
            $pmproForms.each(function(i,formEl){
                var $form = $(formEl),
                    membershipLevel = $form.find('input[name=level]').val();

                if(membershipLevel){

                    $.ajax({
                        method:'POST',
                        url: chnu.ajax_url,
                        data : {
                            action:'chnu_get_associated_membership_agreements_ajax',
                            data:{
                                level:membershipLevel
                            }
                        },
                        success:function(resp){
                            try{
                                resp = JSON.parse(resp)
                            }catch(e){}
                            console.log(resp)
                            
                            if(resp && resp.success){
                                if(resp.data && resp.data.length > 0){
                                    var content = '',
                                        agreementIds = [];
                                    for(var i=0;i<resp.data.length;i++){
                                        var agreement = resp.data[i];
                                        window.chnUserAgreeements[agreement.ID]=agreement;
                                        agreementIds.push(agreement.ID)
                                        content += '<p> &gt; <a target="_blank" href="'+agreement.url+'">[Required] Review '+agreement.title+'</a></p>';
                                    }
                                    content += '<input type="hidden" required="required" class="user_agreements_ids" name="user_agreements_ids" value="'+agreementIds.join("|")+'" />';
                                    content += '<input type="hidden" required="required" class="user_agreements_signature" name="user_agreements_signature" />';
                                    // Start Add Signature Container
                                    content += '<div class="container">';
                                    content += '    <div class="row">';
                                    content += '        <div class="col-md-12">';
                                    content += '             <canvas id="sig-canvas" width="620" height="160" style="border:1px dashed black">';
                                    content += '                 Please update your browser in order to sign and agree to these agreements online';
                                    content += '             </canvas>';
                                    content += '         </div>';
                                    content += '    </div>';
                                    content += '    <div class="row">';
                                    content += '        <div class="col-md-12">';
                                    content += '            <button class="btn btn-primary" id="sig-submitBtn">Submit Signature</button>';
                                    content += '            <button class="btn btn-default" id="sig-clearBtn">Clear Signature</button>';
                                    content += '        </div>';
                                    content += '    </div>';

                                    content += '</div>';
                                    // End Add Signature Container
                                
                                    $form.find('#pmpro_pricing_fields').after(content)
                                    setTimeout(function(){
                                        bindSignatureArea($form.find('input[name=user_agreements_signature]')[0])
                                    },3500)
                                }
                                
                            }else{
                                
                            }
                            
                        },
                        error:function(err){
                            console.log(err)
                            // reEnableButton(defaultErrorMessage,true)
                        }
                    })
                    //Retrieve membership level content
                        //create modal link to view content
                    // add required and hidden input for sign
                    // add button to trigger signing script
                }

            })
        }
    })
})(jQuery)