var bg 				= {type:"background", id:'background_layer', ele:'bg_layer_', swf:false, ready:false, visible:null};
var content 		= {type:"content", id:'content_layer_wrap', ele:'cont_layer_', swf:false, ready:false, visible:null};
var layerAppend 	= 'wrap_';

function onBackgroundLayerEmbeddedResponse(e)
{
	if(e.success)
	{
		debug(layerDebug, "bg swf layer loaded");
		bg.swf = getFlashObject(bg.id);
	}
}

function onContentLayerEmbeddedResponse(e)
{
	if(e.success)
	{
		debug(layerDebug, "content swf layer loaded");
		content.swf = getFlashObject(content.id);
	}
}

function onSWFDisplayLayerReady(type)
{
	debug(layerDebug, "onSWFDisplayLayer ready:"+type);
	var obj 	= false;
	var data 	= false;
	if(type=='background')
	{
		bg.ready 		= true;
		obj 			= bg;
		data 			= pageData.current.backgrounds.background;
	}
	else
	{
		content.ready 	= true;
		obj 			= content;
		data			= pageData.current.backgrounds.content;
	}
	if(obj && data && obj.visible != null)
	{
		processSWFLayer(obj, obj.swf, data);
	}
}

function processLayers()
{
	if(bg.swf)
	{
		processSWFLayer(bg, bg.swf, pageData.current.backgrounds.background);
	}
	else if(pageData.current.backgrounds != undefined)
	{
		processLayer(bg.id, bg.ele, pageData.current.backgrounds.background);
	}
	
	if(content.swf)
	{
		processSWFLayer(content, content.swf, pageData.current.backgrounds.content);
	}
	else if(pageData.current.backgrounds != undefined)
	{
		processLayer(content.id, content.ele, pageData.current.backgrounds.content);
	}
}

function processSWFLayer(obj, swf, data)
{
	var visiblity = false;
	if(data.length > 0)
	{
		visiblity = true;
	}
	if(obj.ready)
	{
		if(data.length > 0)
		{
			debug(layerDebug, obj.type+" show layers");
			swf.showGraphics(data);
		}
		else
		{
			debug(layerDebug, obj.type+" hide layers");
			swf.hideGraphics();
		}
	}
	else
	{
		debug(layerDebug, obj.type+" not ready");
		obj.visible = visiblity;
	}
}

function processLayer(id, layerEleId, layerArr)
{
	var ele = $('#'+id);
	if(ele.find('.lwarp div').size() == 0)
	{
		var unwrapped = ele.find('div');
		if(unwrapped.size() > 0)
		{
			unwrapped.each(
				function ()
				{
					var eid = $(this).attr('id');
					if($(this).parent().attr('id') != layerAppend+eid)
					{
						$(this).wrap('<div class="lwarp" id="'+layerAppend+eid+'" />');
					}
				}
			);
		}
	}
	
	if(ele.size() > 0)
	{
		if(layerArr.length > 0)
		{
			//fade in will be elements to fade in
			var toFadeIn = [];
			
			//not to fade out, are elements that wont need to be faded out
			var notToFadeOut = [];
			for(i=0; i < layerArr.length; i++)
			{
				//laye json object
				var layerObj = layerArr[i];
				
				//html layer ele
				var layerEleIdStr = layerAppend+layerEleId+layerObj['id'];
				var layer = ele.find('#'+layerEleIdStr);
				if(layer.size() == 0)
				{
					//if the layer doesnt exists
					//add to html, and fadeIn array
					ele.append('<div class="lwarp" id="'+layerEleIdStr+'"><div id="'+layerEleId+layerObj['id']+'"></div></div>');
					ele.find('#'+layerEleIdStr).css('opacity', 0);
					toFadeIn.push('#'+layerEleIdStr);
					notToFadeOut.push('#'+layerEleIdStr);
				}
				else if(layer.size() > 0)
				{
					//add to fadeIn array
					notToFadeOut.push('#'+layerEleIdStr);
					if(layer.css('opacity') == 0)
					{
						toFadeIn.push('#'+layerEleIdStr);
					}
				}
			}
			
			//crossfade
			crossFadeLayers(ele, toFadeIn, notToFadeOut);
			//var fadeOut = toFadeLayers(ele, notToFadeOut, false, function(){toFadeLayers(ele, toFadeIn, true);});
			//if(!fadeOut){toFadeLayers(ele, toFadeIn, true);}
		}
		else
		{
			ele.find('.lwarp').animate({"opacity":0}, 100, 'linear');
		}
	}
}

function crossFadeLayers(ele, fadeIn, fadeOut)
{
	//trace("crossfading layers")
	fadeInElements = ele.find(fadeIn.join(', '));
	if(fadeInElements.size() > 0)
	{
		fadeInElements.css('opacity', 0).show().animate({"opacity":1}, 500, 'linear');
	}
	
	fadeOutElements = ele.find('.lwarp').not(fadeOut.join(', '));
	if(fadeOutElements.size() > 0)
	{
		fadeOutElements.animate({"opacity":0}, 500, 'linear');
	}
}

function toFadeLayers(ele, toFade, visible, func)
{
	if(toFade.length > 0)
	{
		var toFadeEle = false;
		var tweenObject = {"opacity":0};
		if(!visible)
		{
			toFadeEle = ele.find('.lwarp').not(toFade.join(', '));
		}
		else
		{
			tweenObject = {"opacity":1};
			toFadeEle = ele.find(toFade.join(', '));
		}
		if(toFadeEle && toFadeEle.size() > 0)
		{
			var visibleStr = "out";
			if(visible)
			{
				visibleStr = "in";
			}
			debug(layerDebug, "fade "+visibleStr+" "+toFadeEle.size()+" element(s)");
	
			if(func != null)
			{
				debug(layerDebug, "passed callback function");
				toFadeEle.animate(tweenObject, 500, 'linear', func);
			}
			else
			{
				toFadeEle.animate(tweenObject, 500, 'linear');
			}
			return true;
		}
	}
	return false;
}

function getFlashObject(movieName)
{
  if (window.document[movieName]) 
  {
      return window.document[movieName];
  }
  if (navigator.appName.indexOf("Microsoft Internet")==-1)
  {
    if (document.embeds && document.embeds[movieName])
      return document.embeds[movieName]; 
  }
  else // if (navigator.appName.indexOf("Microsoft Internet")!=-1)
  {
    return document.getElementById(movieName);
  }
}


