
$(document).ready(function() {
  
  
  //==========================================
  // Form hilighting
  //==========================================
  $("input, select").focus( function() {
    var div = $(this).parents("li");
    div.addClass("selected");
  });
  $("input, select").blur( function() {
    var div = $(this).parents("li");
    div.removeClass("selected");
  });
  
  
  
  $("#flash .messages").show().fadeOut(5000);
  $("#flash .errors").show().fadeOut(5000);
  
  
  
  /* ================================= */
  /* = Venture Specific /ventures/id = */
  /* ================================= */
  
  $("#show_description_textarea").click( function() {
    $("#description_form").slideToggle('slow');
    $("#description_form").css("display", "block");
    $("#venture_description").focus();
  });
  
  $("#venture_description").change(function() {
    var form = $("#description_form form");
    var url = form.attr("action") + ".json";
    $(form).ajaxSubmit(postOptions(url));
    return false;
  });
  $("#description_form form").submit(function() {
    $("#description_form").slideToggle('slow');
    $("#show_description_textarea .update").html($("#venture_description").val());
    var form = $("#description_form form");
    var url = form.attr("action") + ".json";
    $(form).ajaxSubmit(postOptions(url));
    return false;
  });


  
  //==========================================
  // Form Scoring
  //==========================================
  $("#analysis_summary").input_validation();
  $("input.score, textarea.score").input_validation();
  $("input.score, textarea.score, .score select").scorable();
  
  
  $("#analysis_summary").change(function() {
    var form = $($(this).parents("form").get(0));
    // var form = $(this).parent().parent().parent();
    var url = form.attr("action") + ".json";
    $(form).ajaxSubmit(postOptions(url));
    return false;
  });

 
 $('a[rel*=facebox]').facebox();
  
  
 $("a.submit_report").click(function() {
   var form = $($(this).parents("form").get(0));
   var url = form.attr("action") + ".json";
   $(form).ajaxSubmit(SubmitReportOptions(url));
 });

 // All Links now go through our processing link method, to help ensure no data is lost while saving
 $("a").each( function() {
   var obj = $(this);
   
   if (obj.hasEvent('click') || obj.attr('onclick') || obj.attr('href') == '#')
    return;
    
   obj.click(function() {
      var tmp = $(this);
      tmp.find('img').attr('src', '/images/icons/loading.gif');
      tmp.find('label').html('Processing');
      PageChangeCheck(tmp.attr('href'));
      return false;
    });
   
 });
 
 
 
 $('form.multi_form').submit(function() {
    var forms = $(this).parents('#score_slide').find("form");

    var idx = forms.index(this);
    if (idx == forms.length - 1)
    {
      idx = 0;
    } else {
      idx++;
    }
    $(forms[idx]).find('input:visible,select:visible,textarea:visible').eq(0).focus();
    return false;
  });
  
  $('#score_slide.slide_1').css('display', 'block');
 $('#slides').cycle({ 
     fx:     'scrollLeftRight',
     easing: 'easeout', 
     timeout: 0,
     pager: "#paginator",
     prev: "#nav_left a",
     next: "a.next_element, #nav_right a",
     submitNext: "form.element_form",
     nowrap: 1,
     pagerAnchorBuilder: function(i, el) {
       var result = SlideComplete(i);
       var szClass = "";
       
       if (result == true)
        szClass = "success";
       else if (result == false)
        szClass = "error";
        
       return '<a id="'+i+'" class="'+szClass+'" href="#">'+i+'</a>';
     },
     delay:  -2000,

     before: function(currSlideElement, nextSlideElement, options, forwardFlag) {
       cur_slide = Number(($(currSlideElement).attr('class') || "_0").split('_')[1]) - 1;
       target_slide = Number(($(nextSlideElement).attr('class') || "_0").split('_')[1]) - 1;
       $('#box.progress #pb_' + cur_slide).hide();
       $('#box.progress #pb_' + target_slide).show();
     },
     after: function(currSlideElement, nextSlideElement, options, forwardFlag) {
       $('input:visible,select:visible,textarea:visible', this).eq(0).focus();
     }
 });

 
});



var SCORES_PENDING_SAVE = 0;

function PageChangeCheck(url)
{
  if (SCORES_PENDING_SAVE > 0)
  {
    setTimeout(function() { PageChangeCheck(url); }, 500);
    return false;    
  }
  else
  {
    window.location = url;
    return false;
  }

}



function SlideComplete(idx)
{
  var jqSlide = $('.slide_' + idx);
  var szClass = "";
  
  if (jqSlide.length == 1)
  {
    var jqSlideForms = jqSlide.find('form');
    var bValid = true;
    for (var si=0; si<jqSlideForms.length; si++)
    {
      var jqFormStatus = $(jqSlideForms.get(si)).find('#element_status');
      if (jqFormStatus.val() == "incomplete")
        return false;
    }
    return true;
  }
  return null;
}


  function sleep(delay)
  {
    var start = new Date().getTime();
    while (new Date().getTime() < start + delay);
  }


  function updateFloaters()
  { 
    $(".floater").each( function() {
      
      var yScroll = 0;

      if ($.browser.msie || $.browser.safari)
        yScroll = document.body.scrollTop;
      else
        yScroll = document.documentElement.scrollTop;
        
      yScroll += 10;
      
      var yPos = yScroll;
      if (yScroll < Number($(this).attr("start_y")))
        yPos = Number($(this).attr("start_y"));

      var yTarget = Number($(this).attr("target_y"));

      if (yTarget != yPos)
      { 
        $(this).attr("target_y", yPos);    
        $(this).animate({top: yPos}, 150, 'linear');
      }
    });
    

    setTimeout("updateFloaters()", 50);
  }

  jQuery.fn.floating = function()
  {
    $(this).each( function() {
      $(".floater").css('position', 'absolute');
      $(".floater").attr("start_y", this.offsetTop);    
    });
    
    updateFloaters();
  }
  
  
  
  
  jQuery.fn.scorable = function() {
    $(this).change( function()
    {
      var form = $($(this).parents("form").get(0));      
      var url = form.attr("action") + ".json";
      $(form).ajaxSubmit(postOptions(url));
      return false;
    })
  }
                 
 
  function SubmitReportOptions(url)
  {
      var options = {
    /*      target:        '#progress',   // target element(s) to be updated with server response */
          beforeSubmit: preSubmit_Report,
          success:      showResponse_Report,
          error:        errorCallback_Report,
          // other available options: 
          url:       url         // override for form's 'action' attribute 
          //type:      type        // 'get' or 'post', override for form's 'method' attribute 
          // dataType:  'json',        // 'xml', 'script', or 'json' (expected server response type) 
          //clearForm: true        // clear all form fields after successful submit 
          //resetForm: true        // reset the form after successful submit 

          // $.ajax options can be used here too, for example: 
          //timeout:   3000  
          
      };
      return options;
  }
 
 
  function preSubmit_Report()
  {
    $(".score_messages .messages").show().html('PROCESSING');

    $(".report_submit").hide();
  }
  
  function errorCallback_Report(response, statusText) {
    json = eval("(" + (response.responseText || response)  + ")");
    
    $(".score_messages .messages").html("").hide();
    $(".score_messages .errors").show().fadeOut(4000).html('ERROR');
    $("#flash .errors").show().html(json.errors.join('<br/>'));
  }
 
  function showResponse_Report(response, statusText) {
    $("#step1").show("slide", { direction: "down" }, 1000);
    setTimeout(function() {
      $("#step1").effect('highlight', {color: '#164613'}, 1000);
      $("#step1 img").attr('src', "/images/icons/tick.png");
      $("#step2").show("slide", { direction: "down" }, 1000);
    }, 1500);
    setTimeout(function() {
      $("#step2").effect('highlight', {color: '#164613'}, 1000);
      $("#step2 img").attr('src', "/images/icons/tick.png");
      $("#step3").show("slide", { direction: "down" }, 1000);
    }, 3000);
    setTimeout(function() {
      $("#step3").effect('highlight', {color: '#164613'}, 1000);
      $("#step3 img").attr('src', "/images/icons/tick.png");
      
      $("#step4").show("slide", { direction: "left" }, 1000);
      $("#step5").show("slide", { direction: "down" }, 1000);
      
      $("#step4 img").click(function(){
        $("#step5").effect('highlight', {color: '#164613'}, 1000);
      });
      $("#flash .messages").fadeIn(1000).html('Process complete. This Venture 360 Report has been to sent to North for review & certification. You will be contacted shortly. Cheers.');
      $(".score_messages .messages").fadeOut(2000).html('COMPLETE');
    }, 5000);
  }
 
 
 
  function postOptions(url) {
      var options = { 

    /*      target:        '#progress',   // target element(s) to be updated with server response */
          beforeSubmit:  prePostScore,  // pre-submit callback 
          success:       showResponse,  // post-submit callback 
          error: errorCallback,
          // other available options: 
          url:       url         // override for form's 'action' attribute 
          //type:      type        // 'get' or 'post', override for form's 'method' attribute 
          // dataType:  'json',        // 'xml', 'script', or 'json' (expected server response type) 
          //clearForm: true        // clear all form fields after successful submit 
          //resetForm: true        // reset the form after successful submit 

          // $.ajax options can be used here too, for example: 
          //timeout:   3000  
          
      };
      return options;
  }
  
 
  function prePostScore() {
    SCORES_PENDING_SAVE++;
  }
 
  function errorCallback(response, statusText) {
    SCORES_PENDING_SAVE--;
    // json = eval("(" + (response.responseText || response)  + ")");
    // console.info(response.responseText);
    // console.info(statusText);
    // console.info(json);    

    // result="";
    // for (var i=json.length-1; i>=0; --i)
    // {
    //   if (result.length > 0)
    //     result += '<br/>'
    //   result += json[i][1];
    // }
    
    $(".score_messages .errors").show().fadeOut(2000).html('ERROR');
    
    // $(".errors").html("<div class='error'>"+result+"</div>");
    // $(".error").effect('highlight', {color: 'red'});                    
  }
  
  function showResponse(responseText, statusText) {
    SCORES_PENDING_SAVE--;
    
    json = eval("(" + (responseText)  + ")");

    var answered = $("#box.progress .count").html();
    var number = parseInt(answered);
    var new_answered = number + 1;

    if (json.new_record == true || json.new_record == 'true') {
      $("#box.progress .count").html(new_answered);
    };                                               

    $(".score_messages .errors").html("");
    $(".score_messages .messages").show().fadeOut(1000).html('SAVED');


    $("#score_form_" + json.question_id + " #element_status").val(json.status);
    
    
    // Update Slide Selector Status
    if (json.slide == null)
    {
      $('#paginator #' + json.i).removeClass('error').addClass('success');
    }
    else
    {
      var result = SlideComplete(json.slide);
      
      if (result == true)
        $('#paginator #' + json.slide).removeClass('error').addClass('success');
      else
        $('#paginator #' + json.slide).removeClass('succes').addClass('error');
    }
    
    // Update Real-time Graph
    var src = $(".realtime a img").attr('src');
    if (src)
    {
      if (src.indexOf('?') != -1)
        src = src.substr(0, src.indexOf('?'));
      var now = new Date();
      $(".graph a img").attr('src', src + "?" + now.getTime());
    }
  }
  
