var debugTimer=0;  
var keepAlive=null;
var pagesbar=null;
var currentPage=null;  
var browserIE6=false;
var pagesBarPlace=0;
var pageBarWrapper=null;
var pageBarPosition=0;

jQuery(document).ready(function() {
	
	/*
	 * check the current loaded page, and filter the scripts accordingly
	 */
	manageActions();
	 
	/*
	 * behavior for debug panel
	 */
    jQuery("#buttonDebug").click(function(){
    	jQuery(this).toggleClass("buttonDebugMaximize");
    	jQuery(this).toggleClass("buttonDebugMinimize");
    	jQuery("#debugWrapper").toggleClass("debugBig");
    });
    
    
    /*
	 * keepAlive watch
	 */
    restartTimer(debugTimer,"keepAliveUpdate()",1000);
    
    // handle png transparency issues
    initMessages();
});
function initMessages()
{
	/*
	 * hide messages body onclick event
	 */
	jQuery("body").bind("click",(function(){
		messagesHide();
	}));
	jQuery(".message").live("click",function(){
		jQuery(this).fadeOut("fast");
	});
}

function restartTimer(timer,call,interval)
{
	if (timer!=null)
	{
		clearInterval(timer);
	}
	timer=setInterval(call,interval);
}
function messagesHide()
{
	jQuery(".message").fadeOut("fast");
}
function messagesShow(message)
{
	// restartTimer(debugTimer,"messagesHide()",5000);
	jQuery("body").unbind("click");
	var messageWrapper=jQuery(".messagesPlaceholder1, .messagesPlaceholder2");
	if (message!=null)
	{
		if (messageWrapper.length==0)
		{
			jQuery("body").append('<div class="messagesPlaceholder2"></div>');
			messageWrapper=jQuery(".messagesPlaceholder2");
		}
		messageWrapper.empty().append('<dl id="messages" class="message" style="display:none;"><dt>'+message+'</dt></dl>');
	}
	jQuery("#messages").fadeIn("fast",function(){initMessages();});
	
}
function disableSortable(selector)
{
	jQuery(selector).sortable('disable');
}
function enableSortable(selector)
{
	jQuery(selector).sortable('enable');
}
function disableSortableQuestionsAll()
{
	jQuery("[id*='questionList']").each(function(){
		disableSortable("#"+jQuery(this).attr('id'));
	});
}
function enableSortableQuestionsAll()
{
	jQuery("[id*='questionList']").each(function(){
		enableSortable("#"+jQuery(this).attr('id'));
	});
}
function autoResize(el,minimum)
{
	jQuery("body").append('<span id="tempElementFor_'+el.attr("id")+'" style="display:none;">'+el.val()+'</span>');
	var dummy=jQuery("#tempElementFor_"+el.attr("id"));
	var newWidth=dummy.width();
	dummy.remove();
	if (minimum)
	{
		el.width(newWidth>100?newWidth:100);
	}
	else
	{
		el.width(newWidth);
	}
}
function effectDelete(el)
{
	jQuery("#"+el).slideUp("normal",function(){jQuery(this).remove()});
}
function manageActions()
{
	/*
	 * Checks what page is currently loaded, and loads the necessary scripts
	 */
	readCurrentPage();
	if (currentPage!=null)
	{
		if (currentPage=="survey instance")
		{
			suppressKeyboard();
			suppressEnterKey();
		}
		if (currentPage=="creator")
		{
			suppressEnterKey();
		}
	   
	}
	 if (jQuery(".pageBarPlaceholder").length>0)
	    {
	    	pagesBarPlace=jQuery(".pageBarPlaceholder").offset().top;
			pageBarWrapper=jQuery("#pageBarWrapper");
			jQuery(window).scroll(function(){movePagesBar();});
	    }
}
function readCurrentPage()
{
	if (jQuery("#currentPage").length>0)
	{
		currentPage=jQuery("#currentPage").text();
	}
}
function movePagesBar()
{
	if (jQuery(window).scrollTop()<pagesBarPlace)
	{
		if (pageBarWrapper.hasClass("pagesBarWrapperFixed"))
		{
			pageBarWrapper.removeClass("pagesBarWrapperFixed");
		}
	}
	else
	{
		if (!pageBarWrapper.hasClass("pagesBarWrapperFixed")) 
		{
			pageBarWrapper.addClass("pagesBarWrapperFixed");
		}
	}
}
function debug(message,clean)
{
	if (clean)
	{
		jQuery("#debug").empty();
	}
	jQuery("#debug").append("<span>"+message+"</span><br/>").css({'display':'block'});
}
function keepAliveUpdate()
{
	var currentValue=parseInt(jQuery(".keepAliveStatus").html());
	jQuery(".keepAliveStatus").html(currentValue+1);
	var totalTime=parseInt(jQuery("#totalTime").html());
	jQuery("#totalTime").html(totalTime+1);
}

function switchHidden(id)
{
	var el=jQuery("#"+id);
	if (el.hasClass('hidden'))
	{
		el.removeClass('hidden');
	}
	else
	{
		el.addClass('hidden');
	}
}
function markSelected(el)
{
	if (el.hasClass("selected"))
	{
		el.removeClass("selected");
	}
	else
	{
		el.addClass("selected");
	}
}


var textInputFocused=null;
function suppressKeyboard()
{
	// function to possibly override keypress except on textareas
	// get element that got clicked
    trapfunction = function(event)
    {
		if (textInputFocused==null)
		{
		    var keynum;
	       
	        if (window.event) // eg. IE
	        {
	            keynum = window.event.keyCode;
	        }
	        else if (event.which) // eg. Firefox
	        {
	            keynum = event.which;
	        }
	 
	        if (keynum == 8 || keynum == 32) // backspace has code 8, space
												// has code 32
	        {
	            return false;
	            // nullifies the backspace
	        }
		}
        return true;
    }
   
	document.onkeydown = trapfunction; // IE, Firefox, Safari
    document.onkeypress = trapfunction; // only Opera needs the backspace
										// nullifying in onkeypress
   
}
var dontTrapEnter=false;
function suppressEnterKey()
{
	// function to possibly override keypress except on textareas
	// get element that got clicked
	
	trapenter = function(event)
    {
	    var keynum;
       
	    if (!dontTrapEnter)
	    {
	        if (window.event) // eg. IE
	        {
	            keynum = window.event.keyCode;
	        }
	        else if (event.which) // eg. Firefox
	        {
	            keynum = event.which;
	        }
	 
	        if (keynum == 13)
	        {
	            return false;
	            // nullifies the backspace
	        }
	    }
        return true;
    };
   
	document.onkeydown = trapenter; // IE, Firefox, Safari
    document.onkeypress = trapenter; // only Opera needs the backspace
										// nullifying in onkeypress
   
}
function isFormatFloat(val)
{
	if (val!="")
	{
		var patt=/^[-+]?[0-9]*(\.?[0-9]+$)+/; 
// var patt=/^[-+]?[0-9]+\.{1}([0-9]+)$|^\.{1}[0-9]+$/; //wrong : allows .99,
// ..99, 9..9
		return patt.test(val);
	}
	return true;
}
function isNumberKey(evt)
{
	var charCode = (evt.which) ? evt.which : event.keyCode;
	if (charCode > 31 && (charCode < 37 || charCode > 57) && (charCode < 96 || charCode > 110) && charCode!=144 && charCode!=190 && charCode!=189
					&& charCode!=27 && charCode!=33 )  // ignore numbers,
														// +,-,.)
	{
			return false;
	}
	return true;
}
function isWriteKey(keyCode)
{
	// true if the keyCode represents a button that writes something
	if (keyCode==8) return true; // backspace
	if (keyCode==32) return true; // space
	if ((keyCode>=46)&&(keyCode<=90)) return true;
	if (keyCode>=186) return true;
	return false;
}

function scrollToAnchor(tag)
{
//	var tagEl=document.getElementById(tag);
//	if (tagEl)
//	{
//		Scroller.end(tagEl);
//		clearInterval(Scroller.interval);
//		var scrollPosition=Scroller.gy(tagEl)-50;
// 		Scroller.interval=setInterval('Scroller.scroll('+scrollPosition+')',6);
//	}
	jQuery('html, body').animate({
		scrollTop: jQuery("#"+tag).offset().top-30
		}, 1000);
}


function inplaceAreaSwitch(parent,switchTo, adjustAxes)
{
	if (switchTo=="view")
	{
		jQuery("#"+parent+" .inplaceAreaEdit").addClass("hidden");
		jQuery("#"+parent+" .inplaceAreaView").removeClass("hidden");
	}
	else
	{
		var target=jQuery("#"+parent+" .inplaceAreaEdit");
		var wrapper=jQuery("#"+parent).parent();
		var targetWidth=wrapper.width();
		var targetHeight=wrapper.height();
		if (targetHeight<24)
		{
			targetHeight=24;
		}
		if (targetWidth<50)
		{
			targetWidth=50;
		}
		if (adjustAxes=="xy")
		{
// target.width(targetWidth).height(targetHeight);
		}
		if (adjustAxes=="x")
		{
			target.width(targetWidth);
		}
		if (adjustAxes=="y")
		{
			
		}
		target.removeClass("hidden");
		
		jQuery("#"+parent+" .inplaceAreaView").addClass("hidden");
	}
}

// browser identification code
var browserIE6=isIE6();
function loadSpecialStyle()
{
	if(browserIE6)
	{
		addStyleSheet("alternateIE6");
		// initPNGhandling();
	}
}
function isIE6()
{
	if(jQuery.browser.msie)
	{
		if(jQuery.browser.version=="6.0")
		{ 
			return true;
		}
	}
	return false;
}
function isIE7()
{
	return false;
}
function addStyleSheet(title)
{
	 // jQuery('head').append('<link rel="stylesheet"
		// href="/goQuestion/stylesheet/'+sheet+'" type="text/css" />');
	 var i, a, main;
	  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
	    if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
	      a.disabled = true;
	      if(a.getAttribute("title") == title) a.disabled = false;
	    }
	  }
}
function initPNGhandling()
{
	if (browserIE6)
    {
		// DD_belatedPNG.fix('.titleBack1L, .titleBack1L_End');
		 jQuery("[class^='siAnswerRadio']").each(function(){
			 if (DD_belatedPNG!=null)
			 {
				 DD_belatedPNG.fix('.'+jQuery(this).attr('class'));
			 }
		 });
    }
}

function traverse(data,i)
{
	if( typeof data == "object" ) {
		
        jQuery.each(data, function(k,v) {
        	traverse(v,i);
        });
        jQuery("body").append("<br/>");
    }
    else {
        jQuery("body").append("'"+data+"'; ");
    }
}
// Return a helper with preserved width of cells fo jquery UI sortable
var fixHelper = function(e, ui) {
	ui.children().each(function() {
		jQuery(this).width(jQuery(this).width());
	});
	return ui;
};
var persistedElements=null;
var persistedContainer=null;
var persistedPattern=null;
function focusElement()
{
	var newElements=null;
	if ((persistedElements!=null) && (persistedElements.length>0))
	{
		newElements=jQuery("#"+persistedContainer).find(persistedPattern);
		if (newElements.length>0)
		{
			var found;
			newElements.each(function(i,val){
				var el=jQuery(this);
				found=false;
				persistedElements.each(function(j,val2){
					var el2=jQuery(this);
					if (el.attr('id')==el2.attr('id'))
					{
						found=true;
					}
					
				});
				if (!found)
				{
					var inputs=el.find(".switchEditorText");
					if (inputs.length>0)
					{
						inputs.focus();
					}
					else
					{
						el.find('input').focus().select();
					}
				}
			});
		}
	}
	persistedElements=null;
	persistedContainer=null;
	persistedPattern=null;
}
function markAddNew(container,pattern)
{
	if (pattern!=null)
	{
		persistedContainer=container;
		persistedPattern=pattern;
		persistedElements=jQuery("#"+container).find(pattern);
	}
}
function switchRequired(el)
{
	var id=el.attr("id");
	id=id.substring(id.lastIndexOf("_")+1,id.length);
	var value="false";
	if (el.hasClass("qRequiredOff"))
	{
		el.removeClass("qRequiredOff").addClass("qRequiredOn");
		value="true";
	}
	else
	{
		el.removeClass("qRequiredOn").addClass("qRequiredOff");
		
	}
	sync("required",id,value);
}
function sync(type,id,element)
{
	var value="";
	if (type!="required")
	{
		value=element.val();
	}
	else
	{
		value=element;
	}
	Seam.Component.getInstance("surveyCreatorAction").sync(type,id,value,syncCallback);
}
function syncCallback(result)
{
	// alert("sync returned "+result);
}
var switchExtrasQueue=new Array();
function switchExtras(source,entityId)
{
	switchExtrasQueue.push(source);
	var newExtra;
	var el=source.parents('.answerBox').find('.directEditorSingleline');
	if (source.attr('name')=="0")
	{
		newExtra=1;
		autoResize(el,false);
	}
	else 
	{
		newExtra=0;
		autoResize(el,true);
	}
		
	Seam.Component.getInstance("surveyCreatorAction").switchExtras(entityId,newExtra,switchExtrasCallback);
}
function switchExtrasCallback(result)
{
	// alert(result);
	if (switchExtrasQueue.length>0)
	{
		var el=switchExtrasQueue.pop();
		if (result==true)
		{
			if (el.attr('name')=='0')
			{
				el.parents('.answerBox').find(".optionsWrapper").before('<span class="answerOtherInputWrapper left"><input type="text" class="answerOtherInput" value="'+answerDummyText+'"/></span>');
				el.attr('name','1').attr('title',extrasRemove);
				
			}
			else
			{
				el.parents('.answerBox').find(".answerOtherInputWrapper").remove();
				el.attr('name','0').attr('title',extrasAdd);
			}
		}
	}
}

function setCaretToEnd (e) {
    var control = $((e.target ? e.target : e.srcElement).id);
    if (control.createTextRange) {
        var range = control.createTextRange();
        range.collapse(false);
        range.select();
    }
    else if (control.setSelectionRange) {
        control.focus();
        var length = control.value.length;
        control.setSelectionRange(length, length);
    }
    control.selectionStart = control.selectionEnd = control.value.length;
} 
function showHelp(el)
{
	el.find("p").css({"display":"inline"});
}
function hideHelp(el)
{
	el.find("p").css({"display":"none"});
}
