/*==================================================
 * Custom Code
 *==================================================
 */

function reset()
{
	if(Exhibit.hasFilter)
	{
		exhibit.getComponent("panel")._selectView(0);
		document.getElementById("exInstructions").style.display = "block";
		
		Exhibit.hasFilter = false;
	}
	
	//document.getElementById("resetFilters").style.color = "#666666";
			
	var collection = window.exhibit.getDefaultCollection();
	collection._items = window.database.getAllItems();
	collection.clearAllRestrictions();
}

function removeSectionHeaders()
{
	//document.getElementById("resetFilters").style.color = "#3366CC";
	
	var collection = window.exhibit.getDefaultCollection();

		collection._items = window.database.getSubjects("Bolognese Painting", "type");
}

function enlarge(id)
{
	//SimileAjax.History.addLengthyAction(reset,enlarge, "reset");
	
	// exhibit.getComponent("hiddenFacet").applyRestrictions({selection:[id], selectMissing: false});

	if(Exhibit.hasFilter)
	{
		//document.getElementById("resetFilters").style.color = "#666666";
		
		exhibit.getComponent("panel")._selectView(0);
		
		Exhibit.hasFilter = false;
		
		var collection = window.exhibit.getDefaultCollection();
	
		collection._items = window.database.getAllItems();
		
		collection.clearAllRestrictions();
		
		collection._onRootItemsChanged();
	}
	else
	{
		//document.getElementById("resetFilters").style.color = "#3366CC";
		
		//document.getElementById("exInstructions").style.display = "none";
		//document.getElementById("controlsDiv").style.visibility = "hidden";
		
		exhibit.getComponent("panel")._selectView(1);
		
		Exhibit.hasFilter = true;
		
		var collection = window.exhibit.getDefaultCollection();

		collection._items = window.database.getSubjects(id, "label");
	
		collection._onRootItemsChanged();
	}
	
	/*
	
	// override the reconstruct
	Exhibit.ViewPanel._reconstruct = function () {
		var view = this;
	    var collection = this._uiContext.getCollection();
	    var database = this._uiContext.getDatabase();
		
	    var currentSet = collection.getRestrictedItems();
	    this._dom.bodyDiv.innerHTML = "";
	    currentSet.visit(function (id) {
			var itemLensDiv = document.createElement("div");
	        var itemLens = view._uiContext.getLensRegistry().createLens(itemID, itemLensDiv, view._uiContext);
	        view._dom.bodyDiv.appendChild(itemLensDiv);
		});
	
		Exhibit.ViewPanel._reconstruct();
	}
	
	// add to history
	SimileAjax.History.addLengthyAction(

        calledFn,

        oppositeFn,

        "Label Text"

    );
	
	// hide interface elements
	// document.getElementById("classes-layer").style.visibility = "hidden";
	// document.body.scrollTop = 0;
	
	*/
}


/*==================================================
 * Simile Overrides
 *==================================================
 */

Exhibit.OrderedViewFrame.prototype.reconstruct=function()
{
	var K=this;
	var C=this._uiContext.getCollection();
	var H=this._uiContext.getDatabase();
	var D=C.countAllItems();
	var I=C.countRestrictedItems();
	var E=false;
	
	if(I>0)
	{
		var F=C.getRestrictedItems();
		
		E=this._internalReconstruct(F);
		
		var J=[];
		
		var G=function(L,N)
		{
			var O=H.getProperty(L.property);
			
			//alert(O.getPluralLabel());
			/*
			for(q in 0)
			{
				alert(q+" : "+O[q])
			}
			*/
			
			var M=O!=null?(L.forward?O.getPluralLabel():O.getReversePluralLabel()):(L.forward?L.property:"reverse of "+L.property);
			
			J.push(
				Exhibit.UI.makeActionLink(
					M,
					function(Q,P,R)
					{
						K._openSortPopup(Q,N);
					}
				)
			);
		};
		
		var A=this._getOrders();
		
		for(var B=0; B<A.length; B++)
		{
			G(A[B],B);
		}
		
		if(this._settings.showHeader&&this._settings.showControls)
		{
			this._headerDom.setOrders(J);
			this._headerDom.enableThenByAction(J.length<this._getPossibleOrders().length);
		}
	}
	
	if(this._settings.showHeader&&this._settings.showControls)
	{
		this._headerDom.groupOptionWidget.setChecked(this._settings.grouped);
	}
	
	if(this._settings.showFooter)
	{
		this._footerDom.setCounts(I,this._settings.abbreviatedCount,this._settings.showAll,!(E&&this._grouped));
	}
};


Exhibit.OrderedViewFrame.prototype._internalReconstruct=function(H)
{
	var L=this;
	var D=this._settings;
	var K=this._uiContext.getDatabase();
	var E=this._getOrders();
	var B=0;
	var I=false;
	var F=function(M)
	{
		if((I&&D.grouped)||D.showAll||B<D.abbreviatedCount)
		{
			L.onNewItem(M,B++);
		}
	};
	
	var J=function(N,O,M)
	{
		if((I&&D.grouped)||D.showAll||B<D.abbreviatedCount)
		{
			L.onNewGroup(N,O,M);
		}
	};

	var A=function(R,P){
	var M=E[P];
	var U=M.forward?K.getObjectsUnion(R,M.property):K.getSubjectsUnion(R,M.property);
	var O="text";

	if(M.forward)
	{
		var T=K.getProperty(M.property);
		O=T!=null?T.getValueType():"text";
	}
	else
	{
		O="item";
	}

	var V=(O=="item"||O=="text") ? C(R,P,U,O) : G(R,P,U,O);
	var Q=false;
	for(var N=0; N<V.length; N++)
	{
		if(V[N].items.size()>1)
		{
			Q=true;
		}
	}

	if(Q)
	{
		I=true;
	}

	for(var N=0; N<V.length; N++)
	{
		var S=V[N];
		
		if(S.items.size()>0)
		{
			if(Q&&D.grouped)
			{
				J(S.display,O,P);
			}
	
			R.removeSet(S.items);
			
			if(S.items.size()>1&&P<E.length-1)
			{
				A(S.items,P+1);
			}
			else
			{
				S.items.visit(F);
			}
		}
	}
/*
	if(R.size()>0)
	{
		if(Q&&D.grouped)
		{
			J(Exhibit.l10n.missingSortKey,O,P);
		}
		
		if(R.size()>1&&P<E.length-1)
		{
			A(R,P+1);
		}
		else
		{
			R.visit(F);
		}
	}
*/
};

var C=function(Q,P,T,O){var U=[];
var R;
var V;
var M=E[P];

if(O=="item")
{
	T.visit(
		function(X)
		{
			var W = K.getObject(X,"label");
			//alert(W);
			W = W!=null ? W : X;
			U.push({itemID:X,display:W});
		}
	);

	R=function(X,W)
	{
		var Y=X.display.localeCompare(W.display);
		return Y!=0 ? Y : X.itemID.localeCompare(W.itemID);
	};
	
	V=M.forward ? function(W){return K.getSubjects(W.itemID,M.property,null,Q);} : function(W){return K.getObjects(W.itemID,M.property,null,Q);};

}
else
{
	T.visit(function(W){U.push({display:W});});
	R=function(X,W){return X.display.localeCompare(W.display);
};

V=M.forward ? function(W){return K.getSubjects(W.display,M.property,null,Q);} : function(W){return K.getObjects(W.display,M.property,null,Q);};
}

U.sort(function(X,W){return(M.ascending?1:-1)*R(X,W);});
for(var N=0; N<U.length; N++)
{
	var S=U[N];
	S.items=V(S);
	if(!D.showDuplicates){Q.removeSet(S.items);
}
}return U;
};
var G=function(R,P,V,O){var W=[];
var Q={};
var M=E[P];
var S;

if(O=="number")
{
S=function(X)
{
if(typeof X=="number")
{
return X;
}
else
{
try
{
return parseFloat(X);
}
catch(Y)
{
return null;
}
}
};
}
else
{
S=function(X)
{
if(X instanceof Date){
return X.getTime();
}
else
{
try
{
return SimileAjax.DateTime.parseIso8601DateTime(X.toString()).getTime();
}
catch(Y)
{
return null;
}
}
};
}
V.visit(function(Z){var Y=S(Z);
if(Y!=null){var X=Q[Y];
if(!X)
{
X={sortkey:Y,display:Z,values:[],items:new Exhibit.Set()
};
Q[Y]=X;
W.push(X);
}
X.values.push(Z);
}
});
W.sort(function(Y,X){return(M.ascending?1:-1)*(Y.sortkey-X.sortkey);});
for(var N=0;N<W.length;N++)
{
var U=W[N];
var V=U.values;

for(var T=0; T<V.length; T++)
{
if(M.forward){K.getSubjects(V[T],M.property,U.items,R);
}
else
{
K.getObjects(V[T],M.property,U.items,R);
}
}
if(!D.showDuplicates){R.removeSet(U.items);
}
}
return W;
};
A(H,0);
return I;
};

Exhibit.OrderedViewFrame.headerTemplate="<div id='collectionSummaryDiv' style='display: none;'></div><div class='exhibit-collectionView-header-sortControls' style='display: none;' id='controlsDiv'>%0<span class='exhibit-collectionView-header-groupControl'><a id='groupOption' class='exhibit-action'></a></span></div>";



/*
Exhibit.TileView.prototype._reconstruct=function()
{
	var A=this;
	var B={div:this._dom.bodyDiv,contents:null,groupDoms:[],groupCounts:[]};
	
	var C=function(D)
	{
		for(var E=D; E<B.groupDoms.length; E++)
		{
			B.groupDoms[E].countSpan.innerHTML=B.groupCounts[E];
		}
	
		B.groupDoms=B.groupDoms.slice(0,D);
		B.groupCounts=B.groupCounts.slice(0,D);
		
		if(D>0)
		{
			//alert("1: "+B.groupDoms[D-1].contentDiv);
			B.div=B.groupDoms[D-1].contentDiv;
		}
		else
		{
			//alert("2: "+A._dom.bodyDiv.getAttribute("id"));
			B.div=A._dom.bodyDiv;
		}
		
		B.contents=null;
	};

	this._orderedViewFrame.onNewGroup=function(D,G,E)
	{
		C(E);
		var F=Exhibit.TileView.constructGroup(E,D);
		B.div.appendChild(F.elmt);
		B.div=F.contentDiv;
		B.groupDoms.push(F);
		B.groupCounts.push(0);
	};
	
	this._orderedViewFrame.onNewItem=function(H,D)
	{
		if(B.contents==null)
		{
			B.contents=Exhibit.TileView.constructList();
			B.div.appendChild(B.contents);
		}
	
		for(var E=0; E<B.groupCounts.length; E++)
		{
			B.groupCounts[E]++;
		}
	
		var G=document.createElement("li");
		var F=A._uiContext.getLensRegistry().createLens(H,G,A._uiContext);
		B.contents.appendChild(G);
	};
	
	this._div.style.display="none";
	this._dom.bodyDiv.innerHTML="";
	this._orderedViewFrame.reconstruct();

	C(0);

	this._div.style.display="block";
};
*/

Exhibit.TextSearchFacet.prototype.setText=function(A)
{
	if(A!=null)
	{
		A=A.trim();
		this._dom.input.value=A;
		A=A.length>0?A:null;
	}
	else
	{
		this._dom.input.value="";
	}
	
	if(A!=this._text)
	{
		removeSectionHeaders();
		this._text=A;
		this._notifyCollection();
	}
};


Exhibit.OrderedViewFrame.createHeaderDom=function(D,G,F,C,E,A)
{
	var I=Exhibit.OrderedViewFrame.l10n;
	var H=String.substitute(Exhibit.OrderedViewFrame.headerTemplate,[I.sortingControlsTemplate]);
	var B=SimileAjax.DOM.createDOMFromString(G,H,{});
	
	G.className="exhibit-collectionView-header";
	
	if(F)
	{
		B.collectionSummaryDiv.style.display="block";
		B.collectionSummaryWidget=Exhibit.CollectionSummaryWidget.create({},B.collectionSummaryDiv,D);
	}
	
	if(C)
	{
		B.controlsDiv.style.display="block";
		B.groupOptionWidget=Exhibit.OptionWidget.create({label:I.groupedAsSortedOptionLabel,onToggle:A},B.groupOption,D);
		SimileAjax.WindowManager.registerEvent(B.thenSortByAction,"click",E);
		B.enableThenByAction=function(J)
		{		
			Exhibit.UI.enableActionLink(B.thenSortByAction,J);
		};

		B.setOrders=function(L)
		{
			B.ordersSpan.innerHTML="";
			var J=Exhibit.Formatter.createListDelimiter(B.ordersSpan,L.length,D);
			
			for(var K=0;K<L.length;K++)
			{
				J();
				B.ordersSpan.appendChild(L[K]);
			}
			J();
		};
	}

	B.dispose=function()
	{
		//if("collectionSummaryWidget" in B)
		//{
		//	B.collectionSummaryWidget.dispose();
		//	B.collectionSummaryWidget=null;
		//}
		B.groupOptionWidget.dispose();
		B.groupOptionWidget=null;
	};
	return B;
};

Exhibit.CollectionSummaryWidget.create=function(D,C,A)
{
	//var B=new Exhibit.CollectionSummaryWidget(C,Exhibit.UIContext.create(D,A));
	//B._initializeUI();
	//return B;
};

Exhibit.CollectionSummaryWidget.createFromDOM=function(D,C,A)
{
	//var B=new Exhibit.CollectionSummaryWidget(C!=null?C:D,Exhibit.UIContext.createFromDOM(D,A));
	//B._initializeUI();
	//return B;
};


//---

Exhibit.ListFacet.prototype._constructBody=function(A){var B=this;
var G=this._dom.valuesContainer;
G.style.display="none";
var Z=this._settings.facetLabel;
var F=Exhibit.FacetUtilities[this._settings.scroll?"constructFacetItem":"constructFlowingFacetItem"];
var D=this._valueSet.size()>0||this._selectMissing;
var E=function(K){var H=function(M,L,N){B._filter(K.value,K.actionLabel,false);
SimileAjax.DOM.cancelEvent(L);
return false;
};
var J=function(M,L,N){removeSectionHeaders(); B._filter(K.value,K.actionLabel,!(L.ctrlKey||L.metaKey));
SimileAjax.DOM.cancelEvent(L);
return false;
};
var I=F(Z,K.selectionLabel,K.count,(B._colorCoder!=null)?B._colorCoder.translate(K.value):null,K.selected,D,H,J,B._uiContext);
G.appendChild(I);
};
for(var C=0;
C<A.length;
C++){E(A[C]);
}G.style.display="block";
this._dom.setSelectionCount(this._valueSet.size()+(this._selectMissing?1:0));
};


Exhibit.FacetUtilities.constructFlowingFacetItem = function(
	myFacet,
    label, 
    count, 
    color,
    selected, 
    facetHasSelection,
    onSelect,
    onSelectOnly,
    uiContext
) {

    //if (Exhibit.params.safe) {
    //	label = Exhibit.Formatter.encodeAngleBrackets(label);
    //}
    
    var dom = SimileAjax.DOM.createDOMFromString(
        "div",
        (   "<div class='exhibit-flowingFacet-value-checkbox'>" +
                SimileAjax.Graphics.createTranslucentImageHTML(
                    Exhibit.urlPrefix + 
                    (selected ? "images/red-check.png" : "images/no-check.png")) +
            "</div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"
        ) +
        "<a class='exhibit-flowingFacet-value-link' href='javascript:{}' id='inner'></a>" +
        " " +
        "<span class='exhibit-flowingFacet-value-count'>(" + (myFacet == "Theme" && !facetHasSelection ? count-1 : count) + ")</span>"
    );
    
    //alert(">"+this._settings.facetLabel);
    
    dom.elmt.className = selected ? "exhibit-flowingFacet-value exhibit-flowingFacet-value-selected" : "exhibit-flowingFacet-value";
    
    if (typeof label == "string") {
    	dom.elmt.title = label;
        dom.inner.appendChild(stringToDOM(label));
        //dom.inner.appendChild(document.createTextNode(label));
        //if (color != null) {
        //    dom.inner.style.color = color;
        //}
    } else {
       	dom.inner.appendChild(label);
        //if (color != null) {
        //    label.style.color = color;
        //}
    }
    
    SimileAjax.WindowManager.registerEvent(dom.elmt, "click", onSelectOnly, SimileAjax.WindowManager.getBaseLayer());
    
    if(facetHasSelection) 
    {
        SimileAjax.WindowManager.registerEvent(dom.elmt.firstChild, "click", onSelect, SimileAjax.WindowManager.getBaseLayer());
    }
    
    return dom.elmt;
};
