var defaultDisplay = "#largeDisplayer";
var defaultLoadImageSymbolPath = "images/loading.gif";
var defaultDisplayContainer = "#fullscreen";
var defaultShadow ="#blackscreen";
var defaultModification = new Object();
var intiatorItem = "";
defaultModification.img = new Object();
defaultModification.img.type = new Array("src", "preload", "unbind:click");
defaultModification.img.original = new Array("/regular/");
defaultModification.img.replacement = new Array("/large/");
var defaultLargeViewImageContainer = "#transitionImageLarge";
var defaultLargeViewTextDisplayer = ".discription";
var defaultNavigationPanel = "#listNavigation";
var defaultLargeViewImageWidth = 850;
var defaultLargeViewImageHeight = 610;
var defaultLargeViewMaxHeight = 660;
var defaultDuration = 300; /* note: this is used also in "functions.js", it depends wether it is changed or not */
var LargeViewImageArray = new Object();
var selectedImageSource = "";
var noflashsurpressingSystem = false;
var autoTransition = false;
var currentLargeType = "list";
var displayNumbers = false;
var updateVideoLaunch = false;
var currentIndex = -1;
var d = "/";
var lowIEBrowser;
function initDisplayer(displayerId, containerId, shadowId, autohideShadow){
	displayerId = checkId(displayerId);
	containerId = checkId(containerId);
	shadowId = checkId(shadowId);
	if(displayerId){
		defaultDisplay = displayerId;
	}
	if(containerId){
		defaultDisplayContainer = containerId;
	}
	if(shadowId){
		defaultShadow = shadowId;
	}
	if(autohideShadow == true || autohideShadow > 0){
		$(defaultShadow).click(function(){
			hide();
		});
	}
	//alert(defaultDisplay);
	if(navigator.platform.toLowerCase().indexOf("win") >= 0){
		noflashsurpressingSystem = true;
	}
}

function initVideoDisplay(linkcontainer){
	
}

function showListNavigation(){
	if(currentLargeType == "video"){
		
	}else{
		
	}
}

function show(type){ 
	//$(defaultShadow).show("slow");
	
	$(defaultDisplayContainer).css("display", "inherit");
	if(lowIEBrowser){
		$(defaultDisplayContainer).show();
	}
	if(autoTransition){
		stopAutoTransition();
	}
	if(!type){
		currentLargeType = "list";
	}else{
		currentLargeType = type;
	}
		
	if($(defaultShadow).attr("id") != null){
		if(noflashsurpressingSystem){
				//showhideElement(".transitionComponent div embed", ".transitionComponent div img");
		}
		$(defaultShadow).fadeTo(800, 0.85, function(){
			$(defaultDisplay).fadeIn(400);
			var children = $(defaultLargeViewImageContainer).children();
			if(lowIEBrowser){
				if($(defaultLargeViewImageContainer).children().length > 1){
					$(defaultDisplay + " " + defaultNavigationPanel).show();
				}else{
					$(defaultDisplay + " " + defaultNavigationPanel).hide();
				}
			}
			for(var i=0; i<children.length; i++){
				if(!checkLoadState(children[i])){
					centerElement(children[i]);
				}else{
					$(children[i]).hide();
				}
				$(children[i]).fadeTo(1, 1);
				if(i == currentIndex){
					$(children[i]).show();
				}else{
					$(children[i]).hide();
				}
			}
			
			$(defaultLargeViewImageContainer + " img").fadeTo(1,1);
			$(defaultLargeViewImageContainer + " img").show();		
		});
	}
}


function stopCurrentFadePropagation(container){
	var children = $(container).children(":visible");
}

function hide(type){
	$(defaultDisplayContainer).fadeOut(350, function(){
		if(lowIEBrowser){
			$(defaultDisplayContainer).hide();
		}
	});
	
	if(currentLargeType != "video"){
		updateLaunch();
	}else{
		if(updateVideoLaunch){
			this[updateVideoLaunch]();
		}
	}
	
	$(defaultDisplay).fadeOut(250, function(){
		$(defaultLargeViewImageContainer).children().detach();
		if(noflashsurpressingSystem){
			//showhideElement(".transitionComponent div img", ".transitionComponent div embed");
		}
		if(autoTransition){
			startAutoTransition();
		}
		if(defaultNavigationPanel){
			if($(defaultDisplay + " " + defaultNavigationPanel).index() >= 0){
				$(defaultDisplay + " " + defaultNavigationPanel).show();
			}
		}
	});
	
	currentIndex = -1;
	$(defaultShadow).fadeOut(260);
}

function updateLaunch(delimitor, relHierarchIndex){
	
	// old variables: text, delimitor, textId, relHierarchIndex
	if(!delimitor){
		delimitor = d;
	}
	
	if(!relHierarchIndex){
		relHierarchIndex = 2;
	}
	
	if(currentIndex < 0){
		currentIndex = 0;
	}
	$(intiatorItem).children().css("display", "none");
	$($(intiatorItem).children()[currentIndex]).show();
	transitionNotes[0].selection = currentIndex;
	if(displayNumbers){
		if(!textId){
			textId = ".numbers ol";
		}
		getParent($(intiatorItem), relHierarchIndex).find(textId).html(text);
	}else{
		updateText($(intiatorItem).children()[currentIndex]);
	}
}

function showhideElement(hideElement, showElement){
	$(hideElement).hide();
	$(showElement).show();
}

function checkId(ident){
	if(ident.length > 0){
		var is = ident;
		if(ident.indexOf("#")  == 0){
			is = ident.substr(1, ident.length);
		}
		
		if(document.getElementById(is)){
			is = "#" + is;
			return is;
		}
	}
	return false;
}

function initViewLarge(element, supplycontainer, displayerSelect, relHierarchIndex){
		$(element).click(function(){
			var supply;
			
			if(!supplycontainer){
				supply = this;
			}else{
				
				if(supplycontainer == "parent"){
					supply = getParent(this, 1);
				}else{
					supply = $(supplycontainer);
				}
			}
			
			if(relHierarchIndex == null){
				if($(defaultLargeViewImageContainer).children() > 1){
					hideAllChildren(defaultLargeViewImageContainer, 1);
				}
				fillDisplayer(supply);
				show();
			}else{
				fillDisplayer(supply, getParent(supply, relHierarchIndex).find(displayerSelect).html());
				show();
			}
			intiatorItem = supply;
		});
}

function addContent(container, target, addDescription){
	$(container).append("<div></div>\n");
	$(container + " div").last().append(target);
	if(addDescription){
		if($(target).attr("alt")){
			$(container + " div").last().append("<p>" + $(target).attr("alt") + "</p>");
		}
	}
	$(target).fadeTo(1,1);
	$(target).show();
	return($(container + " div").last());
}


function fillDisplayer(target, displaydetails, modification, delimitor){
	if(!modification){
		modification = defaultModification;
	}
	
	var targetHTML = $(target).children().clone();
	var result = "";
	if(!delimitor){
		delimitor = d;
	}
	var index = 1;
	if(displaydetails){
		index = displaydetails.substr(0, displaydetails.indexOf(delimitor)) - 1;
	}else{
		index = $(target).children(":visible").last().index();
	}
	
	for(var i=0; i< targetHTML.length; i++){
		var change = modification[targetHTML[i].nodeName.toLowerCase()];
		var prelaod = false;
		if(change){
			if(!change.type || !change.original || !change.replacement){
				break;
			}
			for(var j=0; j< change.type.length; j++){
				if(!targetHTML[i][change.type[j]]){
					if(change.type[j] == "preload"){
						preload = true;
					}
					if(change.type[j].indexOf("unbind") >= 0){
						$(targetHTML[i]).unbind(change.type[j].replace("unbind:", ""));
					}
				}else{
					var origin = targetHTML[i][change.type[j]];
					targetHTML[i][change.type[j]] = targetHTML[i][change.type[j]].replace(change.original, change.replacement);
				}
			}
			//alert($(defaultLargeViewImageContainer + " div").last().html());
			var containment = addContent(defaultLargeViewImageContainer, targetHTML[i], true);
			//alert($(targetHTML[i]).attr("style"));
			if(preload){
				 if(targetHTML[i].nodeName.toLowerCase() == "img"){
					 	 if(i == index){
						 	selectedImageSource = targetHTML[i].src;
						 }
						 preloadLargeImage(targetHTML[i].src, containment);
						 if(LargeViewImageArray[targetHTML[i].src] && LargeViewImageArray[targetHTML[i].src].state == "loading"){
							 loadingBackground(containment, true);
						 }else{
							 loadingBackground(containment);
						 }
				 }
			}
			
		}else{
			$(defaultLargeViewImageContainer).append(targetHTML[i]);
		}
	}
	
	currentIndex = index;
	if(displayNumbers){
		var displaytext = (index + 1) + delimitor + $(defaultLargeViewImageContainer).children().length;
		$(defaultDisplay + " " + defaultLargeViewTextDisplayer).html(displaytext);
	}else{
		setDiscriptionPosition(index);
	}
	if($(defaultDisplay + " " + defaultNavigationPanel).index() >= 0){
		if( $(defaultLargeViewImageContainer).children().length > 1){
			$(defaultDisplay + " " + defaultNavigationPanel).show();
		}else{
			$(defaultDisplay + " " + defaultNavigationPanel).hide();
		}
	}
	//alert("display filling done");
}

function addNavigation(navigationContainer, targetItem, upButton, downButton, transitionFunction, textDisplayer, duration){
	if($(defaultDisplay + " " + navigationContainer).index() >= 0){
		defaultNavigationPanel = navigationContainer;
	}
	if(textDisplayer && $(defaultDisplay + " " + textDisplayer).index() >= 0){
		defaultLargeViewTextDisplayer = textDisplayer
	}
	if(!duration){
		duration = defaultDuration;
	}
	/* current Progress */
	setDisplayTransitionOnButton(upButton, 1, targetItem, defaultLargeViewTextDisplayer, duration,2, null, largeImagePreloaded);
	setDisplayTransitionOnButton(downButton, -1, targetItem, defaultLargeViewTextDisplayer, duration,2,null, largeImagePreloaded);
}

function setDiscriptionPosition(index){
	if(!index){
		index = currentIndex;
		if(currentIndex < 0){
			return;
		}
	}
	if($(defaultDisplay + " " + defaultLargeViewTextDisplayer).index() > 0 && $(defaultLargeViewImageContainer).children()[index].alt.length > 0)
	{
			$(defaultDisplay + " " + defaultLargeViewTextDisplayer).hide();
			$(defaultDisplay + " " + defaultLargeViewTextDisplayer).html($(defaultLargeViewImageContainer).children()[index].alt);
			var imgheight = parseInt($(defaultLargeViewImageContainer).children()[index].height);
			if(imgheight > 0){
				if(imgheight > defaultLargeViewImageHeight){
						imgheight = defaultLargeViewImageHeight;
				}
				var topmargin = (parseInt($($(defaultLargeViewImageContainer).children()[index]).css("margin-top")));// > 0){
				//	imgheight += parseInt($(defaultLargeViewImageContainer).children()[index].css("margin-top"));
				imgheight += topmargin;
				//}
				$(defaultDisplay + " " + defaultLargeViewTextDisplayer).css("top", imgheight + 15);
				$(defaultDisplay + " " + defaultLargeViewTextDisplayer).show();
			}
	}
}

function centerElement(element, force){
	var parent = $(element).parent();
	
	if(parent){
		var elementHeight = parseInt($(element).height())
		if(elementHeight > 0){
			if($(parent).attr("id") == $(defaultLargeViewImageContainer).attr("id")){
				if(elementHeight < defaultLargeViewMaxHeight){
					var topSpace = parseInt((defaultLargeViewMaxHeight - elementHeight)/2);
					//alert(topSpace);
					$(element).css("margin-top", topSpace);
				}
			}
			//alert($(element).attr("id") + " - " + $(parent).attr("id"));
		}
			}
}

function preloadLargeImage(source, loadDisplayReference){
	if(!source){
		return;
	}
	if(!LargeViewImageArray[source]){
		LargeViewImageArray[source] = new Object();
		LargeViewImageArray[source].state = "loading";
		var img = new Image();
    	$(img).load(function () {
	            	LargeViewImageArray[source].state = "done";
					if(loadDisplayReference){
						
						var realimage = $(loadDisplayReference + " img[src*='"+ source +"']");
						//if($(realimage).parent()){
						centerElement(realimage);
						$(this).show();
						$(realimage).show();
						//$(realimage).hide();
						//}
						//if(source == selectedImageSource){
						loadingBackground(loadDisplayReference, false);
						$(realimage).fadeIn(400);
					//	}
					}else{
						//$(this).hide();
						if($(this).parent() == $(defaultLargeViewImageContainer)){
							centerElement(this);
						}
						$(this).fadeIn();
					}
					
     	}).error(function () {
			LargeViewImageArray[source].state = "error";
     	}).attr('src', source);
		LargeViewImageArray[source].image = img;
	}
}

function largeImagePreloaded(image){
	if(image.src){
		selectedImageSource = image.src;
		return checkLoadState(image);
	}
}

function checkLoadState(image){
	if(image.nodeName.toLowerCase() != "img"){
		return false;
	}
	var loadContainer = defaultLargeViewImageContainer;
	
	var estate = LargeViewImageArray[image.src].state;
		if(estate == "done"){
			loadingBackground(loadContainer);
			centerElement(image);
		}else if(estate == "error"){
			loadingBackground(loadContainer);
			return "error";
		}else{
			loadingBackground(loadContainer, true);
			return "loading";
		}
}

function loadingBackground(itemId, value){
	if(value == true){
		//alert("... " + $("#imageLoad").css("background"));
		$(itemId).css("background", "url(" + defaultLoadImageSymbolPath +") no-repeat center");
	}else if(!value || value == false){
		$(itemId).css("background", "none");
	}else{
		$(itemId).css("background", value);
	}
}

function setDisplayTransitionOnButton(buttonId, count, containerId, displayerSelect, duration, relHierarchIndex, delimitor, precall){
	 $(buttonId).click(function(){
		 var container = getParent(this, relHierarchIndex).find(containerId);
		 var displayer = getParent(this, relHierarchIndex).find(displayerSelect);
		 var size = $(container).children().length;
		 var text = $(displayer).html();
		 if(size){
			if(!delimitor){
				delimitor = d;
			}
			var index;
			if(displayNumbers){
				index = text.substr(0, text.indexOf(delimitor)) - 1;
			}else{
				index = parseInt($(container).children(":visible").last().index());
			}
			var nextindex = checkupIndex($(container).children(), index, count);
			var changeImage;
			if(precall){
				changeImage = precall($(container).children()[nextindex]);
			}
			//alert(container + " " + $(container).children().length);
			var currentImage = $(container).children()[index];
			$(currentImage).fadeOut(duration);
			if(!changeImage){
				$($(container).children()[nextindex]).fadeIn(duration);
			}else{
				if(changeImage == "error"){
				}
				if(changeImage == "loading"){
				}
			}
			currentIndex = nextindex;
			centerElement($(container).children()[currentIndex]);
			$(displayer).fadeOut(duration/2, function(){
				if(displayNumbers){
					$(displayer).html((nextindex + 1) + delimitor + $(container).children().length);
				}else{
					setDiscriptionPosition(nextindex);
				}
				$(displayer).fadeIn(duration/2);
			});
		 }
	 });
}
