/**
  @author Questionmark
  Copyright QuestionMark Computing 2006 - 2009
  Build No		:  5.2.10.28
  qmResize.js used to auto resize UI look and feel depending on screen sizes
 */
 
bAutoResize = 0;//by default no auto resize. However, this value is overriden by setting's value via xsl
var bFontSuppressed = false;
var allowedScreenWidth_s1, allowedScreenWidth_s2;
var headerElementsTotalWidth, lastElementWidthHidden=0;

//headerElemetns lists all the elements that get measured in the header
var headerElements = new Array('#qm_Loger', '.qm_PROGRESS_BAR_CONTAINER', '#qmTimer' , '.qm_SELECT', '.qm_BLOCK_TEXT_PROGRESS', '#qm_Date', '#qmFontChange', '#qmContrastChange', '.qm_HELP');		      

//headerElementsToHide shows all of the elements that can be hidden, the most important being first (thus hidden last)
var headerElementsToHide = new Array( '#qm_Loger', '.qm_PROGRESS_BAR_CONTAINER', '.qm_BLOCK_TEXT_PROGRESS', '#qm_Date');

var screenWidth, screenHeight, prevScreenWidth=0, prevScreenHeight=0;
 $(function()
 {
 
 	$(document).ready(function(){
		//allowedScreenWidth_s1 = setAllowedScreenWidths();
		if(isDeliveryPage && isQxQPage && bAutoResize > 1) {
			setAllowedScreenWidths();
		}
		setScreenWidths();
 		autoResize();
 	});
 	
 	$(window).resize(function(){
		setScreenWidths();
		if((prevScreenWidth!=screenWidth) || (prevScreenHeight!=screenHeight)) { // A fix for TMS reloading in EM in IE
			autoResize();
		}
	});	
 });	


function setOriginalText()
{
		$('#qm_INT').val(txtIntro);
		$('#qm_PREV').val(txtPrev);
		$('#qm_NEXT').val(txtNext);			
		$('#qm_Nav').val(txtNav);	
}

function setScreenWidths()
{
	//alert($('body').outerWidth(true) + " " + $('body').outerHeight(true))
	screenWidth = $('body').outerWidth(true);
	screenHeight = $('body').outerHeight(true);	    
}

function  setAllowedScreenWidths()
{	
	allowedScreenWidth_s1 = ($('#qm_INTRO_btn').width() > $('#qm_PREV_btn').width() ? $('#qm_INTRO_btn').width(): $('#qm_PREV_btn').width()) + 
													$('#qm_NEXT_btn').width() + $('#qm_NAV_btn').width() + $('#qm_Quit').width() + $('#qm_Submit').width() + $('#qm_Continue').width() +  
													$('#qm_EndAssessment').width() + $('#qm_FLAG_IMAGE').width() + $('#qm_SAYG_ICON').width() + 80; // +80 to accomodate any paddings and margins outside the buttons
	allowedScreenWidth_s2 = allowedScreenWidth_s1 - $('#qm_NAV_btn').width(); // approx next stage width		
	
}

function autoResize()
{
	
	prevScreenWidth=screenWidth;
	prevScreenHeight=screenHeight;
	  
	var objFontStyleChange = document.getElementById("qmFontChange"); //$('#qmFontChange');	
		
	// shorten button texts as width is reduced
	if(isDeliveryPage && isQxQPage && bAutoResize > 1) {
    
		if (screenWidth < allowedScreenWidth_s1) {
			$('#qm_INT').val('<');
			$('#qm_PREV').val('<');
			$('#qm_NEXT').val('>');
			$('#qm_Nav').val(txtNav);
			
			if (screenWidth < allowedScreenWidth_s2) {
				$('#qm_Nav').val('^'); //further shorten navigator text if too small
			}
		}	else {//otherwise reinstate the original text back			
			setOriginalText();
		}
	}	
		
	//case 1: adj based on width
	if(bAutoResize > 1) 
	{
        if (screenWidth < 400) 
        {
            setCompactAssessmentList(1);
            setWidthStyleSheet('RZ_Width1');
        }
        else if (screenWidth < 650) 
        {
            setCompactAssessmentList(0);
            setWidthStyleSheet('RZ_Width2');
        }
        else if (screenWidth < 800) 
        {
            setCompactAssessmentList(0);
            setWidthStyleSheet('RZ_Width3');
        }
        else
        {
            setCompactAssessmentList(0);
            setWidthStyleSheet('none');
        }
  
		autoResizeHeaderElementsOnWidth();	
	}
	
	//Case 2: adjust based on height
	if(bAutoResize == 1 || bAutoResize == 3) {		
		
		if(screenHeight < 450 && objFontStyleChange != null)  {
			objFontStyleChange.style.display = "none";
			removeFontSize();               
		} else if(objFontStyleChange != null) {
			objFontStyleChange.style.display = "block";	//$('#qmFontChange').style.display = "block";  
      restoreFontSize(); 
		}	
		
		if (screenHeight < 350) {
			setHeightStyleSheet('RZ_Height1');
		} else if (screenHeight < 450 ) {
			setHeightStyleSheet('RZ_Height2');
		} else if (screenHeight > 725 ) {
			setHeightStyleSheet('RZ_Height3'); 
		} else 	{
			setHeightStyleSheet('none');
		}
	}
}
	

function autoResizeHeaderElementsOnWidth()
{
  //We want to work out width of total elements in the header,
	//so we can effectively hide them as windows is resized
	headerElementsTotalWidth = getWidthOfHeaderElements();
	

	//alert(screenWidth + ' - ' + headerElementsTotalWidth);  
	//getting smaller, hide elements
	if(screenWidth < headerElementsTotalWidth )
	{
			hideWidthElement();
			
	}
	//more space to show new elements
	else if(screenWidth > (headerElementsTotalWidth + lastElementWidthHidden ))
 	{    
  	showWidthElement();
	}
	
	//check if we have changed hidden/shown anything and run again to check 
	//(if we start with small size might need to hide more than one element)
	if(getWidthOfHeaderElements() != headerElementsTotalWidth)
	{
	   autoResizeHeaderElementsOnWidth();
	} 

}


//calls functions in qmResize.js checks if it has been included before calling them
function setCompactAssessmentList(showCompactList) {


  if (typeof (qmListIncluded) == "undefined" || singleAssessmentTabOn != 1)
  {
  	//do nothing, qmResize.js has not been included/processed yet.
  }
  else
  {
	if(showCompactList == 1)
	{
		hideAllButFirstTab();
	}                                                          
	else
	{
		showAllTabs(); 
	}
  }
  
}

function getWidthOfHeaderElements()
{
	//initialized with 120 as that is size of padding at maximum font size.
	var width = 120;

	//work out current width of all visible header elements
	for ( var i=0, len=headerElements.length; i<len; ++i )
	{
	  if($(headerElements[i]).css('display') != "none"  )
		{
			width = width + $(headerElements[i]).width();
		}
	}
	
	return width;
} 


//Hides the next element in the order of the array to be hidden  (right to left)
function hideWidthElement()
{
	for (var i=headerElementsToHide.length-1; i>=0; --i )
	{
     if($(headerElementsToHide[i]).length)
     {
  		if($(headerElementsToHide[i]).css('display') != "none" )
  		{
  			//40 used to take into account the padding
  			lastElementWidthHidden =  $(headerElementsToHide[i]).width() +40;  
  			$(headerElementsToHide[i]).hide();
  			
  			//alert(lastElementWidthHidden + headerElementsToHide[i]);
  			break;
  		}
		}
	}
}

//Shows the next element in the order of the array (left to right)
function showWidthElement()
{
	processNextElementForWidth = false;
  for ( var i=0, len=headerElementsToHide.length; i<len; ++i )
	{
	  if($(headerElementsToHide[i]).length)
    {
  		if(processNextElementForWidth)
  		{
  			//40 used to take into account the padding
  		  lastElementWidthHidden =  $(headerElementsToHide[i]).width() +40; 
  		  processNextElementForWidth = false;
  			break;
  		} 
  	  if($(headerElementsToHide[i]).css('display') == "none")
  		{
  			   $(headerElementsToHide[i]).show();
  			   processNextElementForWidth =  true;
  		}
 		}
	}
	 
}


function setHeightStyleSheet(title)
{
	var i, cacheiFrameObj;
	for (i = 0; (cacheiFrameObj = document.getElementsByTagName("link")[i]); i++) {
		if (cacheiFrameObj.getAttribute("name").toLowerCase()=="resizeheight" && cacheiFrameObj.getAttribute("title")) {
			cacheiFrameObj.disabled = true;
			if (cacheiFrameObj.getAttribute("title") == title) {
				cacheiFrameObj.disabled = false;
			}
		}
	}
}

function setWidthStyleSheet(title)
{
	var i, cacheiFrameObj;
	for (i = 0; (cacheiFrameObj = document.getElementsByTagName("link")[i]); i++) {
		if (cacheiFrameObj.getAttribute("name").toLowerCase()=="resizewidth" && cacheiFrameObj.getAttribute("title")) {
			//alert(cacheiFrameObj.getAttribute("title"));
			cacheiFrameObj.disabled = true;
			if (cacheiFrameObj.getAttribute("title") == title) {
				cacheiFrameObj.disabled = false;
			}
		}
	}
}


function removeFontSize()
{ 
	var objFontStyleChange = document.getElementById("qmFontChange"); //$('#qmFontChange');	
  if(objFontStyleChange != null && bFontSuppressed == false)
  {
    bFontSuppressed = true;
    //create cookie for existing font style so we can switch back
    var existingFontStyle = 'none';      
    var storedFontStyle = getCookie("qmFontStyle");
  	if (storedFontStyle != null) {
  	    existingFontStyle = storedFontStyle;
  	}
    var expireDate = new Date();
    var expstring= expireDate.setDate(expireDate.getDate()+parseInt(20));
    document.cookie = "qmPrevFontStyle="+existingFontStyle+"; expires="+expireDate.toGMTString()+"; path=/";
    
    //finally set font style to default
    setFontStyle('none');
  }
}

function restoreFontSize()
{
  var objFontStyleChange = document.getElementById("qmFontChange"); //$('#qmFontChange');	
  if(objFontStyleChange != null && bFontSuppressed == true)
  {
    bFontSuppressed = false;
  	var existingFontStyle = 'none';
  
     // Use previous font style if stored
  	var storedFontStyle = getCookie("qmPrevFontStyle");
  	if (storedFontStyle != null) {
          existingFontStyle = storedFontStyle;
  	}
  	
  	//set font style back to previous
  	setFontStyle(existingFontStyle);
  }	
    
}

