// copyright Camart Ltd 2009

// jquery counter plugin
(function($){
  $.fn.wordCounter = function(options){    
    options = $.extend({
      counter: '#counter',
      countDirection: 'down',
      strictMax: false,
      safeClass: 'safe',
      overClass: 'over',
      thousandSeparator: ','
    }, options);
    
    var countable = this;  
    
    var countCheck = function(){           
      var count;
      
      /* Calculates count for either words or characters */
      count = options.maxCount - countable.val().split(/[\s]+/).length;
      if (countable.val() === ''){ count += 1; }
      
      /* If strictMax set restrict further characters */
      if (options.strictMax && count <= 0){
        var content = countable.val();
        countable.val(content.split(/[\s]+/).slice(0, options.maxCount).join(' '));
        count = 0;
      }
      
      /* Set CSS class rules */
      if (!$(options.counter).hasClass(options.safeClass) && !$(options.counter).hasClass(options.overClass)){
        if (count < 0){ $(options.counter).addClass(options.overClass); }
        else { $(options.counter).addClass(options.safeClass); }
      }
      else if (count < 0 && $(options.counter).hasClass(options.safeClass)){
        $(options.counter).removeClass(options.safeClass).addClass(options.overClass);
      }
      else if (count >= 0 && $(options.counter).hasClass(options.overClass)){
        $(options.counter).removeClass(options.overClass).addClass(options.safeClass);
      }
      
      /* If countDirect is 'up' then reverse the count */
      if (options.countDirection === 'up'){
        count = count - (count*2) + options.maxCount;
      }
      
      /* Add thousandSeparator for those massive counts */
      if (options.thousandSeparator){
        count = count.toString();
        for (var i = count.length-3; i > 0; i -= 3){
          count = count.substr(0,i) + options.thousandSeparator + count.substr(i);
        }
      }
      $(options.counter).text(count);
    };
    
    countCheck();
    countable.keyup(countCheck);
    
  };
 
})(jQuery);

// this function will be called if a group question table has been rendered
// trID : id of group question table
// rows : number of default children rows to be visible or in use
function showRows(trID,rows){
  var tab= $('#'+trID+' table:first-child');
  if (tab.length) {               

    // do we need to add the rollout row?
    if (!window.camart_citadel_rowadded || !window.camart_citadel_rowadded[trID]){
      var cellcount=$('tr:first-child td',tab).size();
      tab.append("<tr><td colspan="+cellcount+"><input type='button' name='appendRow' value='Add another'></td></tr>");            
      if (!window.camart_citadel_rowadded) window.camart_citadel_rowadded=new Array();
      window.camart_citadel_rowadded[trID]=true;
    } 
    var but=$('tr:last-child td:first-child input[name=appendRow]',tab);
    var com="'showRows("+'"'+trID+'",'+(rows+1)+");'";        
    but.unbind('click');  // stop IE event Propagation!
    but.click(function(){
      showRows(trID,rows+1);
    });
    // at this point we should always have a table with an extra rollout row
    
    if (rows==0){  // special case where all rows start invisible
      $('tr',tab).css('display','none');
      $('tr:last-child',tab).css('display',''); 
    }else{
      var totalrows=$('tr',tab).size();
      if ((totalrows-1)<=rows){  // max rows reached
        $('tr',tab).css('display','');
        $('tr:last-child',tab).css('display','none');
      }else{    
        $('tr:lt('+rows+')',tab).css('display','');
        $('tr:gt('+(rows-1)+')',tab).css('display','none');
        $('tr:last-child',tab).css('display','');
      }
    }
  }
}

function modifiedAnswer(qid,ins,qrindex){
  $('#'+qid+'_unanswered span').append(' - attempted');
  ins.unbind('click');
  questionRollout(qrindex);
}

// this will add a 'header' row to each question, and rollout selected or invalid
function questionRollout(curPos){
  var qtr= $('#questions > tbody > tr');

  if (!window.camart_citadel_rolloutsadded){ 
    var qcounter=1;
    $.each(qtr,function(intLinkIndex,objLink){
      var q=$(this);
      var qrindex=(intLinkIndex*2);
      // | :text | :radio | :checkbox
      var ins=$(':input',q);
      ins.bind('click',function(){modifiedAnswer(q.attr('id'),ins,(qrindex+2));});
      q.before("<tr><td id='"+q.attr('id')+"_unanswered' colspan=2><input type='button' value='View' onclick='questionRollout("+qrindex+");'><span>Question "+qcounter+"</span></td></tr>");               
      qcounter++;
    });        
    window.camart_citadel_rolloutsadded=true;
    qtr= $('#questions > tbody > tr');
  }
 
  $.each(qtr,function(intLinkIndex,objLink){
    var qh=$(this);
    if ((intLinkIndex%2)==0){
      var q=qtr.eq(intLinkIndex+1);      
      if ($('.inputError',q).length){
        q.css('display','');
      }else{      
        if (intLinkIndex!=curPos){
          q.css('display','none');  
        }else{
          q.css('display','');
          //q.fadeIn('slow');
        }      
      
      }     
    }
  });  
  
}

function addDatepicker(selector){
  if (!$(selector).length) alert("cannot find element "+selector+" to add date picker");
  else if (!window.camart_citadel_datepopup || !window.camart_citadel_datepopup[selector]){
    // have to add datepicker when document ready for IE
    if (!window.camart_citadel_datepopup) window.camart_citadel_datepopup=new Array();
    window.camart_citadel_datepopup.push(selector);
  }
}

function addWordCounter(selector){
  if (!$(selector).length) alert("cannot find element "+selector+" to add word counter");
  else if (!window.camart_citadel_wordcounter || !window.camart_citadel_wordcounter[selector]){
    // have to add when document ready for IE
    if (!window.camart_citadel_wordcounter) window.camart_citadel_wordcounter=new Array();
    window.camart_citadel_wordcounter.push(selector);
  }  
}


$(document).ready(function(){

  if (window.camart_citadel_datepopup){
    var thisYear=new Date().getFullYear();
    var startYear=1900;
    for(var i in window.camart_citadel_datepopup){
      var selector=window.camart_citadel_datepopup[i];      
      var e=$(selector);
      e.datepicker({
             dateFormat: 'dd/mm/yy',
             showOn: 'focus',
             buttonText: 'Choose Date',
             changeMonth: true,
             changeYear: true,
             yearRange: startYear+':'+thisYear
             });    
    }
  }
  
  if (window.camart_citadel_wordcounter){
    for(var i in window.camart_citadel_wordcounter){
      var selector=window.camart_citadel_wordcounter[i];
      var qrow=$(selector);
      var displayid=qrow.attr('id')+'_wordcounter';
      counterDisplayRow=qrow.after("<tr><td colspan=2>approx word count: <span id='"+displayid+"'> </span></td></tr>");
      var q=$(":input",selector);
      q.wordCounter({
        counter: '#'+displayid,
        strictMax: false,
        maxCount: 100,
        countDirection: 'up'
        });      
         
    }
  } 
    
});

function popupToPrint(selector){
  var element=$(selector);
  if (element.length==0) alert('Sorry, element '+selector+' cannot be found');
  var win=window.open('');
  win.document.write(element.html());
  win.document.write('<script type="text/javascript">setTimeout("window.print();",200);</script>');
  win.document.close();
  win.focus();
}
