/** ********************************************
 * Author: ken
 * Filter widget view
 ***********************************************/

YHDom = YAHOO.util.Dom;

function FilterView() {
	TSWIDGET.EVENTS.createEvent("evtShowTCCWidget");	
	TSWIDGET.EVENTS.createEvent("evtClickFilterItemLink");	
	this.authorAutoComplete = null;	
	this.autoCompleteTarget = null; //4925
} 


/** 
* Initialize
* This call is used typically to register for events post-construction 
*/
FilterView.prototype.init = function() {
	this.initProductType();
	this.initCategory();
	this.initFileFormat();
	this.initPrice();
	this.initRating();
	this.initDatePublished();
	this.initProductId();
	this.initAuthor();
	this.initSelectedFilter();
	this.initTrackEvent();
	this.initLink();
}
///////////////////////////////////// TrackEvent ///////////////////////////////////
FilterView.prototype.initTrackEvent=function(){
/*clear*/	
	var removes = $("div#selectedFilterContent > div.selectedFilter > div.titleRight");
	var removesProductType = $("div#selectedFilterContent > div.selectedProductType > div.item > ul > li > div > div.titleRight");
	YAHOO.util.Event.on(removes, "click", this.trackEvent,["Search_Filter_ProductTypes","Search_Filter_ProductTypes:clear","clear"], this);
	YAHOO.util.Event.on(removesProductType, "click", this.trackEvent,["Search_Filter_ProductTypes","Search_Filter_ProductTypes:clear","clear"], this);
	
/*porduct type category*/
	var ProductTypes = $("div#FilterWrapper > div.Filter > div.filterPanel > div.content > ul.productTypeItem > li > a");
	var Categorys = $("div#FilterWrapper > div.Filter > div.filterPanel > div.content > ul.categoryTypeItem > li > a");
	var clear = $("div.selectedFilterPanel > div.right");
	var removesCategorys = $("div#selFilterCategory >  div.itemCategory > div.titleRight");
	
	YAHOO.util.Event.on(ProductTypes, "click", this.trackEvent,["Search_Filter_ProductTypes","Search_Filter_ProductTypes:select_media_type","inner"], this);
	YAHOO.util.Event.on(Categorys, "click", this.trackEvent,["Search_Filter_Category","Search_Filter_ProductTypes:select_category","inner"], this);
	
	YAHOO.util.Event.on(clear, "click", this.trackEvent,["Search_Selected_Filters","Search_Selected_Filters:clear_all"], this);
	
	YAHOO.util.Event.on("btnShowMoreType", "click", this.trackEvent,["Search_Filter_ProductTypes","Search_Filter_ProductTypes:see_all","show"], this); 
	YAHOO.util.Event.on("btnShowMoreTypeBox", "click", this.trackEvent,["Search_Filter_ProductTypes","Search_Filter_ProductTypes:see_all","showbox"], this);
	YAHOO.util.Event.on("btnShowMoreCategory", "click", this.trackEvent,["Search_Filter_Category","Search_Filter_ProductTypes:see_all","show"], this);
	YAHOO.util.Event.on("btnShowMoreCategoryBox", "click", this.trackEvent,["Search_Filter_Category","Search_Filter_ProductTypes:see_all","showbox"], this);
	
	YAHOO.util.Event.on(removesCategorys, "click", this.trackEvent,["Search_Filter_ProductTypes","Search_Filter_ProductTypes:clear_category","clear"], this);
	
/*Compatibility*/
	var Compatibilitys = $("div#FilterWrapper > div.Filter > div.filterPanel > div.Compatibility > ul > li > div.application > a");
	
	YAHOO.util.Event.on(Compatibilitys, "click", this.trackEvent,["Search_Filter_Compatibility","Search_Filter_Compatibility:select_application","inner"], this);
	
	YAHOO.util.Event.on("btnShowMoreFormat", "click", this.trackEvent,["Search_Filter_Compatibility","Search_Filter_Compatibility:see_all","showapp"],this);
	YAHOO.util.Event.on("btnShowMoreFormatBox", "click",this.trackEvent,["Search_Filter_Compatibility","Search_Filter_Compatibility:see_all","showappbox"],this);
	
/*Prices*/
	var Prices = $("div#FilterWrapper > div.Filter > div#PriceContainer > div.content > ul#priceItemContainer > li > a");
	
	YAHOO.util.Event.on(Prices, "click", this.trackEvent,["Search_Filter_Price","Search_Filter_Price:select_range","inner"], this);
	
	YAHOO.util.Event.on("actPriceFooter", "click", this.trackEvent,["Search_Filter_Price","Search_Filter_Price:set_custom"],this);
	
/*Rating*/
	var Ratings = $("ul#ulRating > li > a.unFilterLink");
	var unRatings = $("ul#ulRating > li > a.unRattingLink");
	YAHOO.util.Event.on(Ratings, "click", this.trackEvent,["Search_Filter_Rating","Search_Filter_Rating:select_range","id"], this);
	
	YAHOO.util.Event.on(unRatings, "click", this.trackEvent,["Search_Filter_Rating","Search_Filter_Rating:select_range","id"],this);

/*Tier-SquidLevel*/
	var tiers = $("ul#ulTier > li > a.unFilterLink");
	YAHOO.util.Event.on(tiers, "click", this.trackEvent,["Search_Filter_Tier","Search_Filter_Tier:select_Tier","id"], this);
	
/*Artists*/
	var Artists = $("div#TopVendors > ul#ulVendors > li > a");
	YAHOO.util.Event.on(Artists, "click", this.trackEvent,["Search_Filter_Artists","Search_Filter_Artists:select_artist","inner"], this);
	var Findartist = $("div#actAuthorFooter > div > div.linkcontainer > a");
	YAHOO.util.Event.on(Findartist, "click", this.trackEvent,["Search_Filter_Artists","Search_Filter_Artists:find_specific_artist"], this);
	
}
FilterView.prototype.trackEvent=function(evt,args){
	var label=null;
	var category=args[0];
	var action=args[1];
	switch(args[2]){
		case "id":
			data = evt.target?evt.target : evt.srcElement;
			if(data.className!="unFilterLink")
				data=data.parentNode;
			label=data.id;
		break;
		case "inner":
			label = evt.target?evt.target.innerHTML : evt.srcElement.innerHTML;
		break;
		case "show"	:
			data = evt.target?evt.target.innerHTML : evt.srcElement.innerHTML;
			action=data.toLowerCase().substring(5,10)=="fewer"?category+":show_more":category+":show_fewer";
		break;
		case "showapp"	:
			data = evt.target?evt.target.innerHTML : evt.srcElement.innerHTML;
			action=data.toLowerCase().substring(5,10)=="fewer"?category+":show_more_apps":category+":show_fewer_apps";
		break;
		case "showbox"	:
			data = evt.target?evt.target.className : evt.srcElement.className;
			action=data=="subBox"?category+":show_more":category+":show_fewer";
		break;
		case "showappbox"	:
			data = evt.target?evt.target.className : evt.srcElement.className;
			action=data=="subBox"?category+":show_more_apps":category+":show_fewer_apps";
		break;
		case "clear":
			var currentParams=FilterController.instance.model.m_obFilterParams;
			var target = evt.target?evt.target : evt.srcElement;
			var type = target.id.split(",");
			category="Search_Selected_Filters";
			switch(type[0]){
				case "LockClearProducttype":
					action=category+":clear_product_type";
					label=YHDom.getPreviousSibling(target).innerHTML;
				break;
				case "LockClearCategory":
					action=category+":clear_product_type";
					label=YHDom.getPreviousSibling(target).innerHTML;
				break;
				case "LockClearCompatibility":
					action=category+":clear_compatibility";
					label=YHDom.getFirstChild(YHDom.getFirstChild(YHDom.getFirstChild(YHDom.getNextSibling(target)))).innerHTML;
				break;
				case "LockClearPrice":
					action=category+":clear_price";
					label=currentParams["min_price"]+","+currentParams["max_price"];
				break;
				case "LockClearRating":
					action=category+":clear_rating";
					label=currentParams["rating"]+","+currentParams["rating_count"];
				break;
				case "LockClearArtists":
					action=category+":clear_artist";
					label=currentParams["include_artist"];
				break;
				case "LockClearDaterange":
					action=category+":clear_date";
					label=currentParams["date_published_after"]+","+currentParams["date_published_before"];
				break;
				case "LockClearProductid":
					action=category+":clear_productid";
					label=currentParams["product_ids"];
				break;
			}
		break;
		case "price":
			YAHOO.util.Event.preventDefault(evt);
			var root = get("priceItemEditorPanel");
			var priceMin = get("priceMin");
			var priceMax = get("priceMax");
			var items = YHDom.getElementsBy(function(){if(priceMin.value!=""||priceMax.value!="")return true;else {$("#minPriceTilte").addClass("warning");$("#maxPriceTilte").addClass("warning");return false}}, "input", root,null);
			var label =priceMin.value+","+priceMax.value;
		break;
		default:
		break;
	}
	this.recordEvent(category,action,label);
}
FilterView.prototype.recordEvent=function(category,action,label){
	Analytics.prototype.recordEvent(category,action,label);	
}

////////////////////////////////////////// Selected Filter ///////////////////////////////////
FilterView.prototype.initSelectedFilter = function(){
	var clear = $("div.selectedFilterPanel > div.right > div.clearFilter");
	YAHOO.util.Event.on(clear, "click", this.clearAllFilter, null, this);
	var help = $("div.selectedFilterPanel > div.right > div.help");
	YAHOO.util.Event.on(help, "click", this.getFilterHelp, null, this);
	var removes = $("div#selectedFilterContent > div.selectedFilter > div.titleRight");
	var removesCategorys = $("div#selFilterCategory >  div.itemCategory > div.titleRight");
	var removesProductType = $("div#selectedFilterContent > div.selectedProductType > div.item > ul > li > div > div.titleRight");
	YAHOO.util.Event.on(removes, "click", this.removeFilter, null, this);
	YAHOO.util.Event.on(removesProductType, "click", this.removeFilter, null, this);
	YAHOO.util.Event.on(removesCategorys, "click", this.removeFilter, null, this);
	var showAll = YAHOO.util.Dom.getElementsByClassName("showAll","span","FilterWrapper");
	var showFewer = YAHOO.util.Dom.getElementsByClassName("showFewer","span","FilterWrapper"); 
	YAHOO.util.Event.on(showAll, "click", this.showAllHandler, null, this);
	YAHOO.util.Event.on(showFewer, "click", this.showFewerHandler, null, this);
	
	YAHOO.util.Event.on("btnRestoreFilters", "click", this.restoreFilters, null, this);
}
FilterView.prototype.showAllHandler = function(evt){
	var target = evt.target ? evt.target : evt.srcElement;
	var parentItem = YHDom.getAncestorByClassName(target,"short");
	if(target.className.substring(0,7)!="showAll")return;
	display(parentItem,false);
	display(YHDom.getNextSibling(parentItem),true);
	if(YHDom.getAncestorByClassName(parentItem,"selectedFilter")){
		var label=YHDom.getPreviousSibling(YHDom.getAncestorByClassName(parentItem,"format")).innerHTML;
		this.recordEvent("Search_Selected_Filters","Search_Selected_Filters:show_more_formats",label);
		return;
	}
	var label=YHDom.getFirstChild(YHDom.getPreviousSibling(YHDom.getAncestorByClassName(parentItem,"format"))).innerHTML
	this.recordEvent("Search_Filter_Compatibility","Search_Filter_Compatibility:show_all",label);
}
FilterView.prototype.showFewerHandler = function(evt){
	var target = evt.target ? evt.target : evt.srcElement;
	var parentItem = YHDom.getAncestorByClassName(target,"full");
	display(parentItem,false);
	display(YHDom.getPreviousSibling(parentItem),true);
	if(YHDom.getAncestorByClassName(parentItem,"selectedFilter")){
		var label=YHDom.getPreviousSibling(YHDom.getAncestorByClassName(parentItem,"format")).innerHTML;
		this.recordEvent("Search_Selected_Filters","Search_Selected_Filters:show_fewer_formats",label);
		return;
	};
	var label=YHDom.getFirstChild(YHDom.getPreviousSibling(YHDom.getAncestorByClassName(parentItem,"format"))).innerHTML
	this.recordEvent("Search_Filter_Compatibility","Search_Filter_Compatibility:show_fewer",label);
}

FilterView.prototype.clearAllFilter = function(){
	var args = ["all","",true];
	TSWIDGET.EVENTS.fireEvent('evtUpdateFilter',args);
}
FilterView.prototype.getFilterHelp = function(evt){
	YAHOO.util.Event.preventDefault(evt);
	YAHOO.util.Event.stopPropagation(evt);
	var args = "search_selectedFilter";
	TSWIDGET.EVENTS.fireEvent('evtGetHelpInfo',args);
}

FilterView.prototype.restoreFilters = function(evt){
	TSWIDGET.EVENTS.fireEvent('evtRestoreFilters',null);
}

FilterView.prototype.removeFilter = function(evt){
	var target = evt.target? evt.target : evt.srcElement;
	var clearTypeArr = target.id.split(",");
	var clearType= clearTypeArr[0];
	var args = [];
	switch(clearType){
		case "LockClearProducttype":
			args = ["categoryid","",false];
			TSWIDGET.EVENTS.fireEvent('evtUpdateFilter',args);
			args = ["media_typeid","",true];
			TSWIDGET.EVENTS.fireEvent('evtUpdateFilter',args);
			break;
		case "LockClearCategory":
			args = ["categoryid",clearTypeArr[1],true];
			TSWIDGET.EVENTS.fireEvent('evtUpdateFilter',args)
			break;
		case "LockClearCompatibility":
			args = ["file_type","",false];
			TSWIDGET.EVENTS.fireEvent('evtUpdateFilter',args);
			args = ["application_ids","",true];
			TSWIDGET.EVENTS.fireEvent('evtUpdateFilter',args);
			break;
		case "LockClearPrice":
			args = ["min_price","0",false];
			TSWIDGET.EVENTS.fireEvent('evtUpdateFilter',args);
			args = ["max_price","",true];
			TSWIDGET.EVENTS.fireEvent('evtUpdateFilter',args);
			break;
		case "LockClearRating":
			args = ["rating","0",false];
			TSWIDGET.EVENTS.fireEvent('evtUpdateFilter',args);
			args = ["rating_count","-1",true];
			TSWIDGET.EVENTS.fireEvent('evtUpdateFilter',args);
			break;
		case "LockClearTier":
			args = ["squid_level","",true];
			TSWIDGET.EVENTS.fireEvent('evtUpdateFilter',args);
			break;
		case "LockClearArtists":
			args = ["include_artist","null",true];
			TSWIDGET.EVENTS.fireEvent('evtUpdateFilter',args);
			break;
		case "LockClearDaterange":
			args = ["date_published_after","null",false];
			TSWIDGET.EVENTS.fireEvent('evtUpdateFilter',args);
			args = ["date_published_before","null",true];
			TSWIDGET.EVENTS.fireEvent('evtUpdateFilter',args);
			break;
		case "LockClearProductid":
			args = ["product_ids","",true];
			TSWIDGET.EVENTS.fireEvent('evtUpdateFilter',args);
			break;
	}
	
}
////////////////////////////////////////// Product type ///////////////////////////////////
FilterView.prototype.initProductType = function(){
	YAHOO.util.Event.on("btnShowMoreType", "click", this.showMoreTypeItems);
	YAHOO.util.Event.on("btnShowMoreTypeBox", "click", this.showMoreTypeItems);
}
FilterView.prototype.showMoreTypeItems = function(){
	var container = get("moreProductType");
	if($("#btnShowMoreTypeBox").hasClass("box") == true){
		YAHOO.util.Dom.replaceClass(container,"hidden","show");
		$("#btnShowMoreType").html("Show fewer product types &gt;");
		YAHOO.util.Dom.replaceClass("btnShowMoreTypeBox","box","subBox");
	}
	else{
		YAHOO.util.Dom.replaceClass(container,"show","hidden");
		$("#btnShowMoreType").html("Show more product types &gt;");
		YAHOO.util.Dom.replaceClass("btnShowMoreTypeBox","subBox","box");
	}
}
////////////////////////////////////////// Category ///////////////////////////////////
FilterView.prototype.initCategory = function(){
	YAHOO.util.Event.on("btnShowMoreCategory", "click", this.showMoreCategoryItems);
	YAHOO.util.Event.on("btnShowMoreCategoryBox", "click", this.showMoreCategoryItems);
}
FilterView.prototype.showMoreCategoryItems = function(){
	var container = get("moreCategory");
	if($("#btnShowMoreCategoryBox").hasClass("box") == true){
		YAHOO.util.Dom.replaceClass(container,"hidden","show");
		$("#btnShowMoreCategory").html("Show fewer categories &gt;");
		YAHOO.util.Dom.replaceClass("btnShowMoreCategoryBox","box","subBox");
	}
	else{
		YAHOO.util.Dom.replaceClass(container,"show","hidden");
		$("#btnShowMoreCategory").html("Show more categories &gt;");
		YAHOO.util.Dom.replaceClass("btnShowMoreCategoryBox","subBox","box");
	}
}
////////////////////////////////////////// Format ///////////////////////////////////
FilterView.prototype.initFileFormat = function(){
	YAHOO.util.Event.on("btnShowMoreFormat", "click", this.showMoreFormatItems);
	YAHOO.util.Event.on("btnShowMoreFormatBox", "click", this.showMoreFormatItems);
	YAHOO.util.Event.on("btnShowSpecifyFileFomatsFromList", "click", this.showSpecifyFileFomatsFromList);
	YAHOO.util.Event.on("btnShowSpecifyFileFomatsFromListBox", "click", this.showSpecifyFileFomatsFromList);
}
FilterView.prototype.showMoreFormatItems = function(){
	var container = get("moreCompatibility");
	if($("#btnShowMoreFormatBox").hasClass("box") == true){
		YAHOO.util.Dom.replaceClass(container,"hidden","show");
		$("#btnShowMoreFormat").html("Show fewer apps &gt;");
		YAHOO.util.Dom.replaceClass("btnShowMoreFormatBox","box","subBox");
	}
	else{
		YAHOO.util.Dom.replaceClass(container,"show","hidden");
		$("#btnShowMoreFormat").html("Show more apps &gt;");
		YAHOO.util.Dom.replaceClass("btnShowMoreFormatBox","subBox","box");
	}
}

FilterView.prototype.showSpecifyFileFomatsFromList = function(){
	TSWIDGET.EVENTS.fireEvent('evtShowFileFormatPicker', null);
}

////////////////////////////////////////// Price ///////////////////////////////////
FilterView.prototype.initPrice = function(){	
	var set = YHDom.getFirstChild("actPriceFooter");
	YAHOO.util.Event.on(set, "click", this.toPriceEditor, null, this);
}
FilterView.prototype.inputKeyPressHandlePrice = function(evt){
	if(evt.keyCode == 13)
	{
	  this.applyPrice(evt);
	}
}
FilterView.prototype.applyPrice = function(evt){
	YAHOO.util.Event.preventDefault(evt);
	var root = get("priceItemEditorPanel");
	var items = YHDom.getElementsBy(function(obj){if(obj.type=="text")return true;else return false;}, "input", root,null);
	var html = "";
	var minPrice = items[0].value;
	var maxPrice = items[1].value;
	var valid = true;
	$("#minPriceTilte").removeClass("warning");
	$("#maxPriceTilte").removeClass("warning");
	if(minPrice==""&&maxPrice==""){
		valid = false;
		$("#minPriceTilte").addClass("warning");
		$("#maxPriceTilte").addClass("warning");
	}
	else{
		  if(minPrice!=""){
			if(!isNumeric(minPrice)){
				valid = false;
				$("#minPriceTilte").addClass("warning");
			}
			else{
				if(minPrice<0||minPrice=="-0")
				{
					valid = false;
					$("#minPriceTilte").addClass("warning");
					
				}
			}
		  }
		  if(maxPrice!=""){
			if(!isNumeric(maxPrice)){
				valid = false;
				$("#maxPriceTilte").addClass("warning");
			}
			else
			{
				if(maxPrice<0||maxPrice=="-0")
				{
					valid = false;
					$("#maxPriceTilte").addClass("warning");
				}
				else
				{
					if(minPrice=="")
					{
						minPrice="0";
					}
				}
			}
		  }
		  if(valid==true && parseInt(minPrice)>parseInt(maxPrice)){
			  valid = false;
			  $("#minPriceTilte").addClass("warning");
			  $("#maxPriceTilte").addClass("warning");
		  }
	}
	if(valid==false){
		return;
	}
	TSWIDGET.EVENTS.fireEvent('evtClickFilterItemLink', "Price");
	var args = ["min_price",minPrice,false];
	TSWIDGET.EVENTS.fireEvent('evtUpdateFilter',args);
	args = ["max_price",maxPrice,true];
	TSWIDGET.EVENTS.fireEvent('evtUpdateFilter',args);
}
FilterView.prototype.cancelPrice = function(evt){
	YAHOO.util.Event.preventDefault(evt);
	$("#minPriceTilte").removeClass("warning");
	$("#maxPriceTilte").removeClass("warning");
	display("actPriceFooter",true);
	display("priceItemEditor",false);	
	display("priceItemEditorRound",false);
}
FilterView.prototype.toPriceEditor = function(evt){
	YAHOO.util.Event.preventDefault(evt);
	if (get("priceItemEditorFooter") == null) {
		var editorHTML = '';
		editorHTML += '<div id="priceItemEditorFooter" class="editorFooter">';
		editorHTML += '<input name="btnPriceEditCancel" type="button" class="cancelButton">';
		editorHTML += '&nbsp;&nbsp;<input name="btnPriceEditApply" type="button" class="applyButton">';
		editorHTML += '</div>';
		get("priceItemEditor").innerHTML += editorHTML;
		var btns = YHDom.getElementsBy(function(obj){if(obj.type=='button'||obj.type=='text')return true;else return false;},"input","priceItemEditor",null);
		YAHOO.util.Event.on(btns[0], "keydown", this.inputKeyPressHandlePrice, null, this);
		YAHOO.util.Event.on(btns[1], "keydown", this.inputKeyPressHandlePrice, null, this);
		YAHOO.util.Event.on(btns[2], "click", this.cancelPrice, null, this);
		YAHOO.util.Event.on(btns[3], "click", this.applyPrice, null, this);
		YAHOO.util.Event.on(btns[2], "click", this.trackEvent,["Search_Filter_Price","Search_Filter_Price:cancel"],this);
		YAHOO.util.Event.on(btns[3], "click", this.trackEvent,["Search_Filter_Price","Search_Filter_Price:apply","price"],this);
	}	
	display("actPriceFooter",false);
	display("priceItemEditor",true);
	display("priceItemEditorRound",true);	
	var items = YHDom.getElementsBy(function(){return true}, "input", "priceItemEditorPanel",function(obj){if(obj.type=="text")obj.value="";});
}
////////////////////////////////////////// Rating ///////////////////////////////////
FilterView.prototype.initRating = function(){
	var clear = YHDom.getElementsByClassName("warnLink","a","ratingButtons");
	YAHOO.util.Event.on(clear, "click", this.clearRating, null, this);
	var edit = YHDom.getElementsByClassName("link","a","ratingButtons");
	YAHOO.util.Event.on(edit, "click", this.toRatingEditor, null, this);
	var remove = YHDom.getElementsByClassName("right","div","ulRating");
	YAHOO.util.Event.on(remove, "click", this.clearRating, null, this);
	var set = get("actEditRating");
	YAHOO.util.Event.on(set, "click", this.toRatingEditor, null, this);
}
FilterView.prototype.toRatingEditor = function(){
	if (get("ratingItemEditorFooter") == null) {
		var editorHTML = '<div class="clear"></div>'
        editorHTML += '<div id="ratingItemEditorFooter" class="editorFooter">';
        editorHTML += '<input name="btnPriceEditCancel" type="button" class="cancelButton">';
        editorHTML += '<input name="btnPriceEditApply" type="button" class="applyButton"></div>';
		get("RatingEditor").innerHTML += editorHTML;
		var btns = YHDom.getElementsBy(function(obj){if(obj.type=='button')return true;else return false;},"input","RatingEditor",null);
		YAHOO.util.Event.on(btns[0], "click", this.cancelRating, null, this);
		YAHOO.util.Event.on(btns[1], "click", this.applyRating, null, this);
	}		
	get("ratingTitle").innerHTML = "Edit Rating";
	display("ratingButtons",false);
	display("ulRating",false);
	display("actEditRating",false);
	display("RatingEditor",true);
	var rating = "0";
	var ratingCount = "0";
	if(FilterController.instance.model.m_obFilterParams!=null && FilterController.instance.model.m_obFilterParams["rating"]){
		rating = FilterController.instance.model.m_obFilterParams["rating"];
		ratingCount = FilterController.instance.model.m_obFilterParams["rating_count"];
	}
	var root = get("RatingEditor");
	var items = YHDom.getElementsBy(function(){return true}, "input", root,null);
	var len = items.length;
	if (rating != "0") {
		for(var i=0;i<len;i++){
			if(rating==$(items[i]).attr("r")){
				items[i].checked = true;
				break;
			}
		}
	}
	else{
		if(len>=1){
			items[0].checked = true;
		}
	}
	if (len > 0 && $(items[len - 3]).attr("r")=="0") {
		items[len - 3].checked = ratingCount == "0" ? true : false;
	}
}
 FilterView.prototype.cancelRating = function(){
	get("ratingTitle").innerHTML = "Rating";
	if(YHDom.getElementsByClassName("link","a","ratingButtons").length==0){	// unfiltered staus
		display("ratingButtons",false);
		display("actEditRating",true);
	}
	else{
		display("ratingButtons",true);
		display("actEditRating",false);
	}
	//display("btnRatingEdit",true);
	display("RatingEditor",false);
	display("ulRating",true);
}
FilterView.prototype.applyRating = function(){
	var root = get("RatingEditor");
	var items = YHDom.getElementsBy(function(obj){if(obj.type!="button")return true;return false;},"input",root,null);
	var values = "0";
	var ratingCount = "0";
	var len = items.length;
	for(var i=0;i<len;i++){
		if(items[i].checked==true){
			values = $(items[i]).attr("r");
			break;
		}
	}
	if(len>0 &&  $(items[len - 1]).attr("r")=="0" && items[len-1].checked==false){
		ratingCount = "1";
	}
	var args = ["rating_count",ratingCount,false];
	TSWIDGET.EVENTS.fireEvent('evtUpdateFilter',args);
	args = ["rating",values,true];
	TSWIDGET.EVENTS.fireEvent('evtUpdateFilter',args);
}
FilterView.prototype.clearRating = function(){
	if(get("ratingTitle").innerHTML == "Rating"){
		var args = ["rating_count","1",false];
		TSWIDGET.EVENTS.fireEvent('evtUpdateFilter',args);
		args = ["rating","0",true];
		TSWIDGET.EVENTS.fireEvent('evtUpdateFilter',args);
	}
	else{				//edit state		
		var root = get("RatingEditor");
		var items = YHDom.getElementsBy(function(){return true},"input",root,null);
		items[0].checked = items[1].checked = items[2].checked = false;
	}
}
////////////////////////////////////////// Author ///////////////////////////////////
FilterView.prototype.createAutoComplete = function(){
	if(this.authorAutoComplete==null){
		var oACDS = new YAHOO.util.XHRDataSource(TSWIDGET.XMGR.baseURI);
		oACDS.responseType = YAHOO.util.XHRDataSource.TYPE_XML;
		oACDS.responseSchema = {
			resultNode : "AUTHORS",
			fields : [{key:"MEMBERNAME"},{key:"MEMBERID"},{key:"COUNT"}]
		};
		oACDS.maxCacheEntries = 0;	

		var oAutoComp = new YAHOO.widget.AutoComplete("txtAuthor", "AuthorAutoComplete", oACDS);
		oAutoComp.autoHighlight = false;
		oAutoComp.queryDelay = 0.6;
		oAutoComp.generateRequest = function(sQuery) {
			var url=location.href.substring(location.href.indexOf("?")+1,location.href.length).split("&");
			var param={keyword:"",
						page_num:1,
						page_size:1,
						media_typeid:"",
						affiliateid:"",
						categoryid:"",
						is_all_keywords:"ALL",
						exclude_keywords:"null",
						min_price:0,
						max_price:2147483647,
						date_published_before:"null",
						date_published_after:"null",
						include_artist:"null",
						exclude_artist:"null",
						file_type:"",
						is_game_ready:0,
						rating:0,
						rating_count:-1,
						bundleid:0,
						search_type:"null",
						show_mature:0,
						sort_column:"null",
						sort_order:"null",
						product_ids:"",
						include_artist_ids:"null",
						application_ids:"",
						squid_level:""
						}
			for(var i=0,j=url.length;i<j;i++){
				var text=url[i].substring(0,url[i].indexOf("=")).toLowerCase();
				if(param.hasOwnProperty(text)){
					var value=url[i].substring(url[i].indexOf("=")+1,url[i].length);
					param[text]=value;
				}
			}
			var newurl="";
			for(ob in param){
				newurl=newurl+"&"+ob+"="+param[ob];
			}
	        return "?format=xmlcomplex&afc=null&package=searchr2&op=getAuthorsByName&page_num=1&bundleid=0&VendorKey="+ sQuery+newurl;
	    }; 
		oAutoComp.formatResult = function(oResultItem, sQuery) {
			return "<div class='authorACResultItem'><label class='link'>" + oResultItem[0] + "</label><span>&nbsp;(" + oResultItem[2] + ")</span></div>";
		};		
		oAutoComp.itemSelectEvent.subscribe(this.selectProduct,this,this);
		this.authorAutoComplete = oAutoComp;
		oAutoComp.containerCollapseEvent.subscribe(this.onCollapseAC,this); 
		
	}
}
FilterView.prototype.onCollapseAC = function(oSelf,ac,filterView){
	TSWIDGET.log("onCollapseAC---this.autoCompleteTarget={0}", filterView.autoCompleteTarget);	
	if(filterView.autoCompleteTarget==true){
		filterView.applyAuthor();
	}
}
FilterView.prototype.selectProduct = function(oSelf , elItem , oData){
	//this.addAuthor(elItem[2][1],elItem[2][0],elItem[2][2]);//id, name, count
	get("txtAuthor").value = elItem[2][0];
	this.applyAuthor();
}
FilterView.prototype.initAuthor = function(){
	var set = get("actAuthorFooter");
	YAHOO.util.Event.on(set, "click", this.toAuthorEditor, null, this);
}
FilterView.prototype.toAuthorEditor = function(){
	var container = get("AuthorEditor");
	if (container.innerHTML == "") {
		var html = '<div id="AuthorAutoCompleteContainer" class="authorAutoComplete">';
		html += '	<div class="autoCompleteTitle brightHeader" id="autoCompleteTitle">Find a specific artist</div>';
		html += '	<div class="brightBody"><div class="input"><input type="text" class="textInput" id="txtAuthor" value="" maxlength="27"/></div>';
		html += '	<div id="AuthorAutoComplete"></div></div>';
		html += '	<div class="editorFooter">';
		html += '<input name="doCancel" type="button" class="cancelButton" />';
		html += '&nbsp;&nbsp;<input name="doApply" type="button" class="applyButton"/>';
		html += '   </div>';
		html += '</div>';
		container.innerHTML = html;
		this.createAutoComplete();
		var btns = YHDom.getElementsBy(function(obj){
										if (obj.type == 'button'||obj.type=='text') 
											return true;
										else 
											return false;
									}, "input", "AuthorAutoCompleteContainer", null);
		YAHOO.util.Event.on(btns[0], "keydown", this.inputKeyPressHandleAuthor, null, this);
		YAHOO.util.Event.on(btns[1], "click", this.cancelAuthor, null, this);
		YAHOO.util.Event.on(btns[2], "click", this.applyAuthor, null, this);
		YAHOO.util.Event.on(btns[2], "mouseover", this.setAutoCompleteTarget, 1, this);
		YAHOO.util.Event.on(btns[2], "mouseout", this.setAutoCompleteTarget, 0, this);
	}
	display("AuthorEditor", true);
	display("authorItemEditorRound", true);
	display("actAuthorFooter", false);
}
FilterView.prototype.setAutoCompleteTarget = function(evt,condition){
	if(condition==1){
		this.autoCompleteTarget = true;
	}
	else{
		this.autoCompleteTarget = false;
	}
	TSWIDGET.log("setAutoCompleteTarget-----this.autoCompleteTarget={0}", this.autoCompleteTarget);	
}
FilterView.prototype.applyAuthor = function(){
	var authors = get("txtAuthor").value;
	if (authors.trim()!="") {
		this.recordEvent("Search_Filter_Artists","Search_Filter_Artists:apply",authors);
		TSWIDGET.EVENTS.fireEvent('evtClickFilterItemLink', "Artists");
		var args = ["include_artist", authors, true];
		TSWIDGET.EVENTS.fireEvent('evtUpdateFilter', args);
		$("#autoCompleteTitle").removeClass("warning");
	}
	else
	{
		
		$("#autoCompleteTitle").addClass("warning");
	}
}
FilterView.prototype.inputKeyPressHandleAuthor = function(event){
	if(event.keyCode == 13)
	{
	  this.applyAuthor();
	}
	
}
FilterView.prototype.cancelAuthor = function(){
	display("AuthorEditor", false);
	display("authorItemEditorRound", false);
	display("actAuthorFooter",true);
	$("#autoCompleteTitle").removeClass("warning");
	get("txtAuthor").value="";
	this.recordEvent("Search_Filter_Artists","Search_Filter_Artists:cancel",null);
}
////////////////////////////////////////// Product ID ///////////////////////////////////
FilterView.prototype.initProductId = function(){
	var set = get("actEnterProductID");
	var setIcon = get("actEnterProductIDIcon");
	YAHOO.util.Event.on(set, "click", this.toProductIdEditor, null, this);
	YAHOO.util.Event.on(setIcon, "click", this.toProductIdEditor, null, this);	
}
FilterView.prototype.toProductIdEditor = function(){
	var container = get("editorProductIdContainer");
	if(container.innerHTML == "") {
		var html = '<div class="editorContent">';
		html += '	<div class="brightHeader" id="editorProductTilte">Enter Product ID number</div>';
		html += '	<div class="brightBody" id="editorProductId">';
		html += '		<input class="textInput" type="text" maxlength="27">';
		html += '	</div>';
		html += '</div>';
		html += '<div class="editorFooter">';
		html += '<input name="doCancel" type="button" class="cancelButton"/>';
		html += '&nbsp;&nbsp;<input name="doApply" type="button" class="applyButton"/>';
		html += '</div>';
		container.innerHTML = html;
		var btns = YHDom.getElementsBy(function(obj){if(obj.type=='button'||obj.type=='text')return true;else return false;},"input","editorProductIdContainer",null);
		YAHOO.util.Event.on(btns[0], "keydown", this.inputKeyPressHandleProductId, null, this);
		YAHOO.util.Event.on(btns[1], "click", this.cancelProductId, null, this);
		YAHOO.util.Event.on(btns[2], "click", this.applyProductId, null, this);
		
	}
	display("EnterProductID",false);
	display("editorProductIdContainer",true);	
	display("productIdItemEditorRound",true);
}
FilterView.prototype.inputKeyPressHandleProductId = function(event){
	if(event.keyCode == 13)
	{
	  this.applyProductId();
	}
}
FilterView.prototype.applyProductId = function(){
	var ids = [];
	var inputs = YHDom.getElementsBy(function(obj){ if(obj.type=="text")return true;return false; }, "input", "editorProductIdContainer", null);
	var valid = true;
	for(var i=0; i<inputs.length; i++) {
		if(isNumeric(inputs[i].value)) {
			ids.push(inputs[i].value);
			//$("#editorProductTilte").removeClass("warning");
		}
		else if(inputs[i].value.trim()==""){
			$("#editorProductTilte").addClass("warning");
			continue;
		}
		else{
			valid = false;
			$("#editorProductTilte").addClass("warning");
		}
	}
	if(ids.length==0 || valid==false) return;
	TSWIDGET.EVENTS.fireEvent('evtClickFilterItemLink', "ProductID");
	var product_ids = ids.join(",");
	var args = ["product_ids",product_ids,true];
	TSWIDGET.EVENTS.fireEvent('evtUpdateFilter',args);
}
FilterView.prototype.cancelProductId = function(){
	$("#editorProductTilte").removeClass("warning");
	var inputs = YHDom.getElementsBy(function(obj){ return true; }, "input", "editorProductId", null);
	for(var i=0; i<inputs.length; i++) {		
			inputs[i].value = "";			
	}
	display("EnterProductID", true);
	display("editorProductIdContainer", false);
	display("productIdItemEditorRound", false);
}
////////////////////////////////////////// Date published ///////////////////////////////////
FilterView.prototype.initDatePublished = function(){
	var set = get("actDefineTimeSpan");
	var setIcon = get("actDefineTimeSpanIcon");
	YAHOO.util.Event.on(set, "click", this.toDatePublishedEditor, null, this);
	YAHOO.util.Event.on(setIcon, "click", this.toDatePublishedEditor, null, this);
}
FilterView.prototype.toDatePublishedEditor = function(){
	var container = get("DatePublishedEditor");
	if(container.innerHTML == "") {
		var html = '<div id="dateEditorContent" class="editorContainer">';
		html += '  <div class="brightHeader">';
		html += '	Enter custom date range';
		html += '	</div><div class="brightBody">';
		html += '  <div class="AfterBeforeTimeTitle">';
		html += '		<label id="afterdateTitle">After</label><label id="beforedateTitle">Before</label>';
		html += '	</div>';
		html += '	<div id="AfterDatePick"><div class="bd"><div id="calaft"></div></div></div><div id="BeforeDatePick"><div class="bd"><div id="calbef"></div></div></div>';
		html += '	<div class="dateContent">';
		html += '		<input id="afterdate" type="hidden"><input class="long textInput" maxlength="10" type="text" value="mm/dd/yy" id="displayedafterdate"><button class="datepick" id="btnAfter"></button>';
		html += '&nbsp;&nbsp;&nbsp;<input id="beforedate" type="hidden"><input  class="long textInput" maxlength="10" type="text" value="mm/dd/yy" id="displayedbeforedate"><button class="datepick" id="btnBefore"></button>';
		html += '	</div></div>';
		html += '</div>';
        html += '<div class="editorFooter">';
		html += '<input name="doCancel" type="button" class="cancelButton"/>';
		html += '&nbsp;&nbsp;<input name="doApply" type="button" class="applyButton"/>';
		html += '</div>';
		container.innerHTML = html;
		this.initPublishDateContorl();
		var btns = YHDom.getElementsBy(function(obj){if(obj.type=='button'||obj.type=='text')return true;else return false;},"input","DatePublishedEditor",null);
		YAHOO.util.Event.on(btns[0], "keydown", this.inputKeyPressHandleDatePublished, null, this);
		YAHOO.util.Event.on(btns[1], "keydown", this.inputKeyPressHandleDatePublished, null, this);
		YAHOO.util.Event.on(btns[2], "click", this.cancelDatePublished, null, this);
		YAHOO.util.Event.on(btns[3], "click", this.applyDatePublished, null, this);
		var inputs = YHDom.getElementsBy(function(obj){if(obj.type=='text')return true;else return false;},"input","DatePublishedEditor",null);
		YAHOO.util.Event.on(inputs, "focus", this.clearTip, null, this);
		YAHOO.util.Event.on(inputs, "blur", this.addTip, null, this);
	}
	display("DatePublishedEditor", true);	
	display("datePublishedItemEditorRound",true);
	display("datePublishedActDefine",false);
}

FilterView.prototype.initPublishDateContorl = function(){
		YAHOO.util.Event.onDOMReady(function(){
		var dlgAfter, calAfter;
        var dlgBefore, calBefore;
		calAfter = new YAHOO.widget.Calendar("calaft", {
            iframe:false,
			navigator:true,
            hide_blank_weeks:false
        });
        calBefore = new YAHOO.widget.Calendar("calbef", {
            iframe:false,     
			navigator:true,
            hide_blank_weeks:false 
        });
		var blStayAfter=false;
		var blStayBefore=false;
		ControlDatePickShow =function(){
			if(!blStayAfter){
				dlgAfter.hide();
			}
			if(!blStayBefore){
			 	dlgBefore.hide();
			}
		};
		YAHOO.util.Event.on(document.body, "click",ControlDatePickShow, this, true);
		YAHOO.util.Event.on("AfterDatePick", "mouseover", function(){blStayAfter=true;}, this, true);
		YAHOO.util.Event.on("AfterDatePick", "mouseout", function(){blStayAfter=false;}, this, true);
		YAHOO.util.Event.on("afterdate", "mouseover", function(){blStayAfter=true;}, this, true);
		YAHOO.util.Event.on("afterdate", "mouseout", function(){blStayAfter=false;}, this, true);
		YAHOO.util.Event.on("btnAfter", "mouseover", function(){blStayAfter=true;}, this, true);
		YAHOO.util.Event.on("btnAfter", "mouseout", function(){blStayAfter=false;}, this, true);
		YAHOO.util.Event.on("BeforeDatePick", "mouseover", function(){blStayBefore=true;}, this, true);
		YAHOO.util.Event.on("BeforeDatePick", "mouseout", function(){blStayBefore=false;}, this, true);
		YAHOO.util.Event.on("beforedate", "mouseover", function(){blStayBefore=true;}, this, true);
		YAHOO.util.Event.on("beforedate", "mouseout", function(){blStayBefore=false;}, this, true);
		YAHOO.util.Event.on("btnBefore", "mouseover", function(){blStayBefore=true;}, this, true);
		YAHOO.util.Event.on("btnBefore", "mouseout", function(){blStayBefore=false;}, this, true);
        function okAfterHandler() {
            if (calAfter.getSelectedDates().length > 0) {
                var selDate = calAfter.getSelectedDates()[0];
                var dStr = selDate.getDate();
                var mStr =selDate.getMonth()+1;
                var yStr = selDate.getFullYear()+'';
                YAHOO.util.Dom.get("displayedafterdate").value =  mStr + "/" + dStr + "/" + yStr.substr(2);
            } else {
				YAHOO.util.Dom.get("displayedafterdate").value = "";
            }
            dlgAfter.hide();
        };
		function okBeforeHandler() {
            if (calBefore.getSelectedDates().length > 0) {
                var selDate = calBefore.getSelectedDates()[0];
                var dStr = selDate.getDate();
                var mStr =selDate.getMonth()+1;
                var yStr = selDate.getFullYear()+'';
                YAHOO.util.Dom.get("displayedbeforedate").value =  mStr + "/" + dStr + "/" + yStr.substr(2);
            } else {
				YAHOO.util.Dom.get("displayedbeforedate").value ="";
            }
            dlgBefore.hide();
        };
		
        dlgAfter = new YAHOO.widget.Dialog("AfterDatePick", {
            context:["show", "tl", "bl"],
            width:"203px",
			height:"212px",
            draggable:false,
			underlay:false,
            close:true
        });
		dlgBefore = new YAHOO.widget.Dialog("BeforeDatePick", {
            context:["show", "tl", "bl"],
            width:"203px",
			height:"212px",
            draggable:false,
			underlay:false,
            close:true
        });
		calAfter.selectEvent.subscribe(okAfterHandler, calAfter, true);
		calAfter.render();
		dlgAfter.render();
		dlgAfter.hide();
		calBefore.selectEvent.subscribe(okBeforeHandler, calBefore, true);
		calBefore.render();
		dlgBefore.render();
		dlgBefore.hide();
		
        calAfter.renderEvent.subscribe(function() {
            dlgAfter.fireEvent("changeContent");
        });
		calBefore.renderEvent.subscribe(function() {
            dlgBefore.fireEvent("changeContent");
        });
		setAfterDatePick=function(){
			var strDBef = completeDate(get("displayedbeforedate").value);
			if(validateDate(strDBef)){
				calAfter = new YAHOO.widget.Calendar("calaft", {
				iframe:false,
				maxdate:strDBef,
				navigator:true,
				hide_blank_weeks:false
			});
				calAfter.selectEvent.subscribe(okAfterHandler, calAfter, true);
				calAfter.render();
			}
			var strDAf = completeDate(get("displayedafterdate").value);
			if(validateDate(strDAf)){
				pickMDY=strDAf.split("/");
				calAfter.select(strDAf);
				calAfter.cfg.setProperty("pagedate", pickMDY[0] + "/" + pickMDY[2]); 
	        	calAfter.render(); 
			}
            dlgAfter.show();
			if (YAHOO.env.ua.opera && document.documentElement)document.documentElement.style += "";
		}
		setBeforeDatePick=function(){
			var strDAfter = completeDate(get("displayedafterdate").value);
			if(validateDate(strDAfter)){
				calBefore = new YAHOO.widget.Calendar("calbef", {
				iframe:false,
				mindate:strDAfter,
				navigator:true,
				hide_blank_weeks:false
			});
				calBefore.selectEvent.subscribe(okBeforeHandler, calBefore, true);
				calBefore.render();
			}
			var strDBefore = completeDate(get("displayedbeforedate").value);
			if(validateDate(strDBefore)){
				pickMDY=strDBefore.split("/");
				calBefore.select(strDBefore);
				calBefore.cfg.setProperty("pagedate", pickMDY[0] + "/" + pickMDY[2]); 
	        	calBefore.render();
			}
			dlgBefore.show();
			if (YAHOO.env.ua.opera && document.documentElement)document.documentElement.style += "";
		}
		//YAHOO.util.Event.on("afterdate", "click",setAfterDatePick);
		//YAHOO.util.Event.on("beforedate", "click", setBeforeDatePick);
        YAHOO.util.Event.on("btnAfter", "click",setAfterDatePick);
		YAHOO.util.Event.on("btnBefore", "click", setBeforeDatePick);
	})
}
FilterView.prototype.inputKeyPressHandleDatePublished = function(event){
	if(event.keyCode == 13)
	{
	  this.applyDatePublished();
	}
}
FilterView.prototype.applyDatePublished = function(){
	var o_date_before = get("displayedbeforedate").value;
	var o_date_after = get("displayedafterdate").value;
	var date_before = completeDate(o_date_before);
	var date_after = completeDate(o_date_after);
	$("#afterdateTitle").removeClass("warning");
	$("#beforedateTitle").removeClass("warning");
	var time_b = null;
	var time_a = null;
	//time_b = new Date(validate(date_before)).getTime();
	//time_a = new Date(validate(date_after)).getTime();
	time_b = new Date(date_before).getTime();
	time_a = new Date(date_after).getTime();
	if(o_date_before=="mm/dd/yy" && o_date_after=="mm/dd/yy"){
		$("#afterdateTitle").addClass("warning");
		$("#beforedateTitle").addClass("warning");
		return;
	}
	else if(o_date_before=="mm/dd/yy" && isNaN(time_a)){
		$("#afterdateTitle").addClass("warning");
		return;
	}
	else if(isNaN(time_b) && o_date_after=="mm/dd/yy"){
		$("#beforedateTitle").addClass("warning");
		return;
	}
	if(isNaN(time_a) && isNaN(time_b)){
		$("#afterdateTitle").addClass("warning");
		$("#beforedateTitle").addClass("warning");
		return;
	}
	else if(isNaN(time_a)){
		if (o_date_after == "mm/dd/yy") {
			date_after = "null";
		}
		else{
			$("#afterdateTitle").addClass("warning");
			return;
		}
	}
	else if(isNaN(time_b)){
		if (o_date_before == "mm/dd/yy") {
			date_before = "null";
		}
		else{
			$("#beforedateTitle").addClass("warning");
			return;
		}
	}
	else if(time_a>time_b){
		$("#afterdateTitle").addClass("warning");
		$("#beforedateTitle").addClass("warning");
		return;
	}
	var valid = true;
	if(checkValidDate(date_before)==false){		//if a valid date
		$("#beforedateTitle").addClass("warning");
		valid = false;
	}
	if(checkValidDate(date_after)==false){		//if a valid date
		$("#afterdateTitle").addClass("warning");
		valid = false;
	}
	if(valid==false){
		return;
	}
	TSWIDGET.EVENTS.fireEvent('evtClickFilterItemLink', "DatePublished");
	var args = ["date_published_after",date_before,false];
	TSWIDGET.EVENTS.fireEvent('evtUpdateFilter',args);
	args = ["date_published_before",date_after,true];
	TSWIDGET.EVENTS.fireEvent('evtUpdateFilter',args);
}
FilterView.prototype.cancelDatePublished = function(){
	//get("afterdate").value="";
	//get("beforedate").value="";
	get("displayedafterdate").value="mm/dd/yy";
	get("displayedbeforedate").value="mm/dd/yy";
	$("#afterdateTitle").removeClass("warning");
	$("#beforedateTitle").removeClass("warning");
	display("datePublishedActDefine",true);	
	get("dateTitle").innerHTML = "Date Published";
	display("DatePublishedEditor",false);
	display("datePublishedItemEditorRound",false);
}
FilterView.prototype.clearTip = function(evt){
	var target = evt.target ? evt.target : evt.srcElement;
	if(target.value.trim()=="mm/dd/yy"){
		target.value = "";
	}
}
FilterView.prototype.addTip = function(evt){
	var target = evt.target ? evt.target : evt.srcElement;
	if(target.value.trim()==""){
		target.value = "mm/dd/yy";
	}
}

////////////////////////////////////////// Filter Link ///////////////////////////////////
FilterView.prototype.initLink = function(){
	var allLinks = YHDom.getElementsBy(function(obj){if (obj.id != '')return true;else return false;},"a", "FilterWrapper", null);
	//$("#FilterWrapper > div.Filter > div.filterPanel > a");
	YAHOO.util.Event.on(allLinks, "click", this.linkClick, null, this);
}
FilterView.prototype.linkClick = function(evt){
	var target = evt.target ? evt.target : evt.srcElement;
	var id = target.id;
	if(target.tagName.toLowerCase()=="div"){
		if(target.className.indexOf("star")!=-1){
			id = "Rating";
		}
		else{
			id = "Tier";
		}		
	}
	var validIds = "ProductTypes,Category,Compatibility,DatePublished,Price,Rating,Artists,ProductID,Tier,";
	id = id.replace("link","");
	id = id.replace(/\d*/g,"");
	if (id != "" && validIds.indexOf(id + ",") != -1) {
		TSWIDGET.EVENTS.fireEvent('evtClickFilterItemLink', id);
	}
}
/******************************* 
 *			private
 *			helper 
 *******************************/
String.prototype.trim=function(){
	return this.replace(/(^\s*)|(\s*$)/g,'');
}
/**
 * alias function for document.getElementById
 * @param {String} id
 * @return {YHDom object} YHDom
 */
function get(id){
	var r = document.getElementById(id);
	if(r)
		return r;
	return null;
}

/**
 * set YHDom element display or hide
 * @param {object_or_id} el
 * @param {Boolean} isShow
 * @return{void}
 */
function display(el, isShow) {
	var obj
	if(typeof el == "string") {
		obj = get(el);
	}
	else {
		obj = el;
	}
	if (obj != null) {
		//isShow ? obj.style.display = "" : obj.style.display = "none";
		isShow ? YAHOO.util.Dom.replaceClass(obj,"hidden","show") : YAHOO.util.Dom.replaceClass(obj,"show","hidden");
	}
}

/**
 * if the string is numeric
 * @param {string} str
 */
function isNumeric(str){
	if(/^(\-?)(\d+)$/.test(str.trim())) 
		return true;
	else 
		return false;
}

/**
 * @param {int_string} intMonth 
 * @param {Boolean} blAbbreviated default=true
 * @return {String} 'Jan' or 'January' ...
 **/ 
function month2String(intMonth,blAbbreviated){
	if (intMonth == "") {
		intMonth = "1";
	}
	if(blAbbreviated==undefined){
		blAbbreviated = true;
	}
	var months = [];
	if(blAbbreviated==true){
		months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sept","Oct","Nov","Dec"];
	}
	else{
		months = ["January","February","March","April","May","June","July","August","September","October","November","December"];
	}
	try{
		var m = parseInt(intMonth);
		return months[m-1];
	}catch(e){ 
		return months[0];
	}
}

/**
 * add pre-zero for month or date 
 * @param {String} str --7
 * @return {String} --07
 */
function addZero(str){
	if(str.length==1){
		str = "0" + str;
	}
	return str;
}
/**
 * add pre-zero for month or date 
 * @param {String} str --mm/dd/yy or mm/dd/yyyy
 * @return {Boolean}
 */
function validateDate(str){	
	if(str.trim()!=""){
		var re = /^\d{1,2}\/\d{1,2}\/\d{2,4}$/;
		if (re.test(str)) {
			var arr = str.split("/");
			if (arr[0] > 12 || arr[0] < 1) {
				return false;
			}
			if (arr[1] > 31 || arr[1] < 1) {
				return false;
			}
			return true;
		}
	}
	return false;
}
/**
 * add pre-zero for month or date 
 * @param {String} str --mm/dd/yy
 * @return {String}
 */
function completeDate(dateStr){
	if (validateDate(dateStr) == true) {
		var datearr = dateStr.split("/");
		if((datearr[2]+"").length==4){
			return dateStr;
		}
		var centuryNo = "19";
		var yearNo = datearr[2];
		if (Number(yearNo) < 80) 
			centuryNo = "20";
		return datearr[0] + "/" + datearr[1] + "/" + centuryNo + yearNo;
	}
	return "";
}
/**
 * check the gavin date if a valid date
 * @param {String} str --mm/dd/yyyy
 * @return {Boolean}
 */
function checkValidDate(strDate){ 
	try {
		var arrDate = strDate.split("/");
		var maxDay = 0;
		var intDD = parseInt(arrDate[1]);
		var intMM = parseInt(arrDate[0]);
		var intYY = parseInt(arrDate[2]);
		switch (intMM) {
			case 1:
			case 3:
			case 5:
			case 7:
			case 8:
			case 10:
			case 12:
				maxDay = 31;
				break;
			case 4:
			case 6:
			case 9:
			case 11:
				maxDay = 30;
				break
			case 2:
				if ((intYY % 4 == 0 && intYY % 100 != 0) || intYY % 400 == 0) {
					maxDay = 29;
				}
				else {
					maxDay = 28;
				}
				break;
		}
		if(intDD>maxDay){
			return false;
		}
	}
	catch(ext){
		return false;
	}
	return true;
}  