var $jQ = jQuery;

var formOptions = {
    success:       formCallback,  // post-submit callback
    beforeSubmit:  beforeSubmit,
    //url:       '/let-property',   // override for form's 'action' attribute
    dataType:  'json'             // 'xml', 'script', or 'json' (expected server response type)
};

$jQ(document).ready(function() {
    bindEvents();
});

var lpSliderOptions = {
    speed: 400,
    callback: null
}

function bindEvents() {
    // ajaxify forms
    //set up error handling for the forms
    $jQ.each(
        $jQ('.let_property_container form')
        .not('#let_property_property_form')
        .not('#let_property_images_form')
        .not('#let_property_pdp_payment_form'), function() {
            $jQ(this).ajaxForm($jQ.extend({}, formOptions, {
                error: $jQ.proxy(formError, this)
        }));
    });

    // to stop the multiple events
    $jQ('#let_property_property_form').unbind('submit');
    // this seems to be adding up to multiple events each time its run
    $jQ('#let_property_property_form').submit(tinyMCESubmit);
    $jQ('#let_property_images_form').ajaxForm({
        target: '#fileIframe',
        iframe:true,
        beforeSubmit: beforeSubmit,
        success: formCallback,
        dataType:  'json',
        //added error handler
        error: $jQ.proxy(formError, $jQ('#let_property_images_form'))
    });
    // hide/show hear about us field
    bindHearAboutUs();
    // add textarea for file upload
    if ($jQ('#let_property_images_form').length && !$jQ('#fileIframe').length)
        $jQ('#let_property_images_form').append('<iframe style="display:none" src="" name="fileIframe" id="fileIframe"></iframe>');

    // preview link
    $jQ("#let_property_preview_link").colorbox({iframe:true, innerWidth:525, innerHeight:444});
   // $jQ('#let_property_preview_link').colorbox({iframe:true, innerWidth:525, innerHeight:444});

}

function tinyMCESubmit() {
    tinyMCE.triggerSave();
    $jQ(this).ajaxSubmit($jQ.extend({}, formOptions, {
        error: $jQ.proxy(formError, this)
    }));
    return false;
}

function beforeSubmit(formData, jqForm, options) {
    switch(jqForm.attr('id')) {
    case 'let_property_property_form':
        //this is used to remove the mce editor so a new one can be loaded later
//        if (tinyMCE.getInstanceById('mce_editor'))
//            tinyMCE.execCommand('mceRemoveControl', false, 'mce_editor');
        break;
    }

    // add step and ajax flags
    var step = (jqForm.parent().attr('id').substring(5));
    formData[formData.length] = { "name": "submittedStep", "value": step };
    if (jqForm.find('input[name="ajax"]').length)
        jqForm.find('input[name="ajax"]').val('1');
    formData[formData.length] = { "name": "ajax", "value": 1 };

    // disable everything in the form
    if ( ! options.iframe) {
      // dont do this for iframes
      jqForm.find('input, select, textarea, button').attr('disabled', 'disabled');
    }

    // change parent status
    jqForm.parents('.let_property_container').children('.let_property_header').addClass('let_property_header_ajax_active');
}

function doScroll(selector) {
    var target = $jQ(selector).parents('.let_property_container').first().find('.let_property_header').first();
    var targetOffset = target.offset().top;
    $jQ('html, body').animate({scrollTop: targetOffset},'slow');
}

function formError(XMLHttpRequest, textStatus, errorThrown) {
    if ($jQ(this).length) {
        
        $jQ(this).find('input, select, textarea, button').removeAttr('disabled');
        $jQ(this).find('input[name="ajax"]').remove();
        $jQ(this).get(0).submit();

    }
}

function formCallback(data, textStatus, XMLHttpRequest) {

    var currentSelector = '#step_' + data.currentStep;
    var submittedSelector = '#step_' + data.submittedStep;
    var activeSelector = '#step_' + data.activeStep;


    if (data.pdpLandlord && ! $jQ('#your_choices_container').hasClass('hide')) {
        $jQ('#your_choices_container').addClass('hide')
    } else if ( ! data.pdpLandlord && $jQ('#your_choices_container').hasClass('hide')) {
        $jQ('#your_choices_container').removeClass('hide')
    }

    // check to replace logged in box

    if (data.loggedIn && $jQ(data.loggedIn).get(0)) {
        var loggedInId = $jQ(data.loggedIn).get(0).id;

        //check if no instances exist
        if ($jQ('#' + loggedInId).length == 0) {
            // replace logged in
            $jQ('#loginSidebarContainer').replaceWith($jQ(data.loggedIn).get(0));
        }

        if ($jQ('#loginContainer').length){
            $jQ('#loginContainer').hide();
        }
    }

    // replace or add form
    var added = '';
    $jQ.each(data.formHtml, function(k, v) {
        if ($jQ('#step_' + k).length) {
            //check for tiny mce
            if ($jQ('#step_' + k + ' #mce_editor').length
              && tinyMCE.getInstanceById('mce_editor')) {
                tinyMCE.execCommand('mceRemoveControl', false, 'mce_editor');
            }

            $jQ('#step_' + k).html(v);
        } else {
            added = k;
            $jQ('#header_' + k).replaceWith(v);
        }

        $jQ('#header_' + k).removeClass('let_property_header_ajax_active');
    });

    //slide out completed step
    if ((data.submittedStep != data.activeStep)
      && (data.submittedStep != data.currentStep)
      && $E(submittedSelector)) {
        //$jQ(submittedSelector).slideUp(lpSliderOptions.speed, lpSliderOptions.callback);
        $jQ(submittedSelector).hide();

        changeArrowStatus($E('a.let_property_arrow_toggle', $E(submittedSelector).getParent()), 'hide');
        
        //$E(submittedSelector).slider.hide();
    }

    makeToggleLinks();
    bindEvents();
    loadToolTips();


    // slide out user flash if it exists
    if ($('let_property_flash')){
        $('let_property_flash').remove();
    }
   
    if (data.scroll) {
        var scrollSelector = data.activeStep ? activeSelector : currentSelector;
        //doScroll(scrollSelector);

        changeArrowStatus($E('a.let_property_arrow_toggle', $E(scrollSelector).getParent()), 'show');
        $jQ(scrollSelector).slideDown(lpSliderOptions.speed, function() {

            if (lpSliderOptions.callback) {
                lpSliderOptions.callback();
            }

            doScroll(scrollSelector);
            $jQ(scrollSelector + ' input, ' + scrollSelector + ' select, ' + scrollSelector + ' textarea')
            .first().focus();

        });
        //$jQ(scrollSelector).get(0).slider.slideIn();

        // give focus to the first form element in the scrolled section

    }

    if (!tinyMCE.getInstanceById('mce_editor') && $('mce_editor')) {
        //tinyMCE.idCounter=0
        loadTinyMce();
        // stop tinymce hogging focus
        $jQ('input').first().focus();
    }
}

function loadToolTips() {
    (function($){

/*        $.each($('.toolTipTrigger'), function() {

            if ($(this).data('toolTipSet')) {
                return;
            }

            var toolTip = $(this).tooltip({
                position: 'bottom right',
                effect: 'fade',
                oneInstance: false,
                offset: [-18, 0],
                opacity: 0.85,
                api: true,
                events: {
                    tooltip: "mouseover"
                }
            });

            $(this)
                .data('toolTipSet', true)
                .prev('input, select, textarea')
                .focus(function() {
                    toolTip.show();
                })
                .blur(function() {
                    toolTip.hide();
                });

        });*/


        var el = $('.toolTipTrigger')
            .tooltip({
                position: 'bottom right',
                effect: 'fade',
                oneInstance: false,
                offset: [-18, 0],
                opacity: 0.85
            });
//        if (el.length) {
//
//
//            el
//            .prevAll('input, select, textarea')
//            .focus(function() {
//                $(this)
//                    .nextAll('.toolTipTrigger')
//                    .trigger('mouseover')
//            })
//            .blur(function() {
//                $(this)
//                    .nextAll('.toolTipTrigger')
//                    .trigger('mouseout');
//            });
//
//            // case for checkboxs/radios inside labels
//
//            el
//            .prevAll('label')
//            .children('input')
//            .focus(function() {
//                $(this)
//                    .parent()
//                    .nextAll('.toolTipTrigger')
//                    .trigger('mouseover')
//            })
//            .blur(function() {
//                $(this)
//                    .parent()
//                    .nextAll('.toolTipTrigger')
//                    .trigger('mouseout');
//            });
//
//        }
    })(jQuery);
}



