var dom;
if(dom){
	dom = YAHOO.util.Dom;
}
/** 
 * controller for SearchResultControlBar
 */

function SearchResultController() {
	this.init();
	this.topSortSelect="";
	this.bottomSortSelect="";
	this.topPagesSelect="";
	this.bottomPagesSelect="";
}

/** 
* Initialize
*/
SearchResultController.prototype.init = function() {
	var rootId = "searchResultContainer";
	
	var tile = YHDom.getElementsByClassName("tile","div",rootId);
	YAHOO.util.Event.on(tile, "click", this.trackEvent,["Search_Filter_ResultPane","Search_Filter_ResultPane:select_grid"], this);
	YAHOO.util.Event.on(tile, "click", this.selectFormat, "tile", this); 
	var list = YHDom.getElementsByClassName("list","div",rootId);
	YAHOO.util.Event.on(list, "click", this.trackEvent,["Search_Filter_ResultPane","Search_Filter_ResultPane:select_list"], this);
	YAHOO.util.Event.on(list, "click", this.selectFormat, "list", this);
	
	var small = YHDom.getElementsByClassName("small","div",rootId);
	YAHOO.util.Event.on(small, "click", this.trackEvent,["Search_Filter_ResultPane","Search_Filter_ResultPane:select_small_thumbnail"], this);
	YAHOO.util.Event.on(small, "click", this.selectSize, "Small", this);
	var petite = YHDom.getElementsByClassName("petite","div",rootId);
	YAHOO.util.Event.on(petite, "click", this.trackEvent,["Search_Filter_ResultPane","Search_Filter_ResultPane:select_petite_thumbnail"], this);
	YAHOO.util.Event.on(petite, "click", this.selectSize, "Petite", this);
	var medium = YHDom.getElementsByClassName("medium","div",rootId);
	YAHOO.util.Event.on(medium, "click", this.trackEvent,["Search_Filter_ResultPane","Search_Filter_ResultPane:select_medium_thumbnail"], this);
	YAHOO.util.Event.on(medium, "click", this.selectSize, "Medium", this);
	
	var TopPageSize = document.getElementById("ResultControlTopBarPageSize");
	YAHOO.util.Event.on(TopPageSize, "click", this.loadTopSearchBarPages, "args", this);
	var BottomPageSize = document.getElementById("ResultControlBottomBarPageSize");
	YAHOO.util.Event.on(BottomPageSize, "click", this.loadBottomSearchBarPages, "args", this);
	
	var TopSortSelect = document.getElementById("ResultControlTopBarSortOrder");
	YAHOO.util.Event.on(TopSortSelect, "click", this.loadTopSearchBarSort, "args", this);
	var BottomSortSelect = document.getElementById("ResultControlBottomBarSortOrder");
	YAHOO.util.Event.on(BottomSortSelect, "click", this.loadBottomSearchBarSort, "args", this);
	
	var topSortSelect = document.getElementById("topSortSelect");
	YAHOO.util.Event.on(topSortSelect, "mouseover", this.stayOnSelect, "topSortSelect", this);
	YAHOO.util.Event.on(topSortSelect, "mouseout", this.stayOffSelect, "topSortSelect", this);
	var bottomSortSelect = document.getElementById("bottomSortSelect");
	YAHOO.util.Event.on(bottomSortSelect, "mouseover", this.stayOnSelect, "bottomSortSelect", this);
	YAHOO.util.Event.on(bottomSortSelect, "mouseout", this.stayOffSelect, "bottomSortSelect", this);
	var topPagesSelect = document.getElementById("topPagesSelect");
	YAHOO.util.Event.on(topPagesSelect, "mouseover", this.stayOnSelect, "topPagesSelect", this);
	YAHOO.util.Event.on(topPagesSelect, "mouseout", this.stayOffSelect, "topPagesSelect", this);
	var bottomPagesSelect = document.getElementById("bottomPagesSelect");
	YAHOO.util.Event.on(bottomPagesSelect, "mouseover", this.stayOnSelect, "bottomPagesSelect", this);
	YAHOO.util.Event.on(bottomPagesSelect, "mouseout", this.stayOffSelect, "bottomPagesSelect", this);
	
	YAHOO.util.Event.on(document.body, "click", this.hideSelect, this, true);
	var sortItems = $(".sortOrderNFSelectOptions > ul > li > a");
 	YAHOO.util.Event.on(sortItems, "click", this.selectSortOrder, null, this);
	var pagesItems = $(".pageSizeNFSelectOptions > ul > li > a");
 	YAHOO.util.Event.on(pagesItems, "click", this.changePageSize, null, this);

	
	
	
	var pre = YHDom.getElementsByClassName("pre","div",rootId);
	YAHOO.util.Event.on(pre, "click", this.trackEvent,["Search_Filter_ResultPane","Search_Filter_ResultPane:previous"], this);
	YAHOO.util.Event.on(pre, "click", this.prePage, this, true);
	var next = YHDom.getElementsByClassName("next","div",rootId);
	YAHOO.util.Event.on(next, "click", this.trackEvent,["Search_Filter_ResultPane","Search_Filter_ResultPane:next"], this);
	YAHOO.util.Event.on(next, "click", this.nextPage, this, true);
	
	var totalPage = YHDom.getElementsByClassName("linknumber","div",rootId);
	YAHOO.util.Event.on(totalPage, "click", this.trackEvent,["Search_Filter_ResultPane","Search_Filter_ResultPane:finalPage"], this);
	YAHOO.util.Event.on(totalPage, "click", this.finalPage, this, true);
	
	var pageInput = YHDom.getElementsByClassName("pageInput","input",rootId);
	YAHOO.util.Event.on(pageInput, "keypress", this.pageInputOnKeyPress, this, true);
	YAHOO.util.Event.on(pageInput, "paste", this.pageInputOnPaste, this, true);
	YAHOO.util.Event.on(pageInput, "dragenter", this.pageInputOnDragenter, this, true);
	YAHOO.util.Event.on(pageInput, "keyup", this.submitPage, this, true);
	
	var assettile = YHDom.getElementsByClassName("assetTileIcon","div",rootId);
	var assetlist = YHDom.getElementsByClassName("thumbnail","div",rootId);
	YAHOO.util.Event.on(assettile, "click", this.trackEvent,["Search_Filter_ResultPane","Search_Filter_ResultPane:select_result","asset"], this);
	YAHOO.util.Event.on(assetlist, "click", this.trackEvent,["Search_Filter_ResultPane","Search_Filter_ResultPane:select_result","asset"], this);
}

SearchResultController.prototype.loadTopSearchBarSort = function() {
	var el = document.getElementById("ResultControlTopBarSortOrderNFSelectOptions");
	if (el.className=='NFSelectOptions hidden') {
		this.display(el,true);
	}
	else {
		this.display(el,false);
	}
}
SearchResultController.prototype.loadBottomSearchBarSort = function() {
	var el = document.getElementById("ResultControlBottomBarSortOrderNFSelectOptions");
	if (el.className=='NFSelectOptions hidden') {
		this.display(el,true);
	}
	else {
		this.display(el,false);
	}
}

SearchResultController.prototype.loadTopSearchBarPages = function() {
	var el = document.getElementById("ResultControlTopBarPageNFSelectOptions");
	if (el.className=='NFSelectOptions hidden') {
		this.display(el,true);
	}
	else {
		this.display(el,false);
	}
}
SearchResultController.prototype.loadBottomSearchBarPages = function() {
	var el = document.getElementById("ResultControlBottomBarPageNFSelectOptions");
	if (el.className=='NFSelectOptions hidden') {
		this.display(el,true);
	}
	else {
		this.display(el,false);
	}
}

SearchResultController.prototype.stayOnSelect= function(evt,selectStay){
	if(selectStay=="topSortSelect")
	  this.topSortSelect="true";
	else if(selectStay=="bottomSortSelect")
	  this.bottomSortSelect="true";
	else if(selectStay=="topPagesSelect")
	  this.topPagesSelect="true";
	else if(selectStay=="bottomPagesSelect")
	 this.bottomPagesSelect="true";
}
SearchResultController.prototype.stayOffSelect= function(evt,selectStay){
	if(selectStay=="topSortSelect")
	  this.topSortSelect="false";
	else if(selectStay=="bottomSortSelect")
	  this.bottomSortSelect="false";
	else if(selectStay=="topPagesSelect")
	  this.topPagesSelect="false";
	else if(selectStay=="bottomPagesSelect")
	 this.bottomPagesSelect="false";
}
SearchResultController.prototype.hideSelect = function() {
	
	if(this.topSortSelect=="false"){
	  var topSort = document.getElementById("ResultControlTopBarSortOrderNFSelectOptions");
	  if (topSort.className=='NFSelectOptions show') {
		  this.display(topSort,false);
	  }
	}
	if(this.bottomSortSelect=="false"){
	  var bottomSort = document.getElementById("ResultControlBottomBarSortOrderNFSelectOptions");
	  if (bottomSort.className=='NFSelectOptions show') {
		  this.display(bottomSort,false);
	  }
	}
	if(this.topPagesSelect=="false"){
	  var topPages = document.getElementById("ResultControlTopBarPageNFSelectOptions");
	  if (topPages.className=='NFSelectOptions show') {
		  this.display(topPages,false);
	  }
	}
	if(this.bottomPagesSelect=="false"){
	var bottomPages = document.getElementById("ResultControlBottomBarPageNFSelectOptions");
	if (bottomPages.className=='NFSelectOptions show') {
		this.display(bottomPages,false);
	}
	}
}



SearchResultController.prototype.trackEvent=function(evt,args){
	var category=args[0];
	var action=args[1];
	var label=null;
	if(args[2]){
		var target = evt.target?evt.target : evt.srcElement;
		switch(args[2]){
			case "value":
				label=target.value;
			break;
			case "asset":
			var getParent=function(obj){
				if(obj.className=="thumbnail"||obj.className=="assetTileIcon"){
					return obj;
				}else{
					return getParent(obj.parentNode);
				}
			}
				label=getParent(target).id;
			break;
			}
	}
	Analytics.prototype.recordEvent(category,action,label);
}
SearchResultController.prototype.selectFormat = function(evt,format) {
	//this.submitForm("display_size","Small",false);
	this.submitForm("display_format",format,true);
}
SearchResultController.prototype.selectSize = function(evt,size){
	this.submitForm("display_size",size);
}
SearchResultController.prototype.changePageSize = function(evt){
	var target = evt.target?evt.target : evt.srcElement;
	var pagesize = target.innerHTML;
	/*var size = evt.target?evt.target.value : evt.srcElement.value;*/
	this.submitForm("page_size",pagesize);
}

SearchResultController.prototype.selectSortOrder = function(evt){
	var target = evt.target?evt.target : evt.srcElement;
	var order = target.innerHTML;
	var sortOrder;
	var sortColumn;
	switch(order){
		case "Best Match":
		sortOrder = "null";
		sortColumn = "null";
		break;
		case "Lower Prices":
		sortOrder = "asc";
		sortColumn = "A5";
		break;
		case "Higher Prices":
		sortOrder = "desc";
		sortColumn = "A5";
		break;
		case "Newest":
		sortOrder = "desc";
		sortColumn = "A7";
		break;
		case "Best Rated":
		sortOrder = "desc";
		sortColumn = "A8";
		break;
		case "File Type":
		sortOrder = "asc";
		sortColumn = "AB";
		break;
		case "Author":
		sortOrder = "asc";
		sortColumn = "AS";
		break;
		default:
		sortOrder = "null";
		sortColumn = "null";
		break;
	}
	this.submitForm("sort_column",sortColumn,false);
	this.submitForm("sort_order",sortOrder,true);
}
SearchResultController.prototype.display = function(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");
	}
}

SearchResultController.prototype.changePages = function(page){	
	this.submitForm("page_num",page);
}
SearchResultController.prototype.pageInputOnKeyPress = function(event){
	var result = ((event.keyCode>=48&&event.keyCode<=57)|| (event.which>=48&&event.which<=57)||event.keyCode==13);
	return result;
}
SearchResultController.prototype.pageInputOnPaste = function(){
	return !clipboardData.getData('text').match(/\D/);
}
SearchResultController.prototype.pageInputOnDragenter = function(){
	return false;
}
SearchResultController.prototype.submitPage = function(event){
	var page = event.target?event.target.value : event.srcElement.value;
	if(event.keyCode==13 || event.which==13){
		page = parseInt(page);
		var obj = document.getElementById("ResultControlTopBarRightPageNum");
		var currentPage = 0;
		try{
			currentPage = parseInt(obj.value);
		}catch(e){}
		/*if(currentPage==page)
			return;*/
		if(page<=0)
			page = 1;
		else{
			var objTotal = document.getElementById("ResultControlTopBarTotalPages");
			var totalPage = parseInt(objTotal.innerHTML);
			if(page>totalPage)
				page = totalPage;
		}
		Analytics.prototype.recordEvent("Search_Filter_ResultPane","Search_Filter_ResultPane:enter_page_number",page);
		this.changePages(page);
	}
}

SearchResultController.prototype.prePage = function(){
	var obj = document.getElementById("ResultControlTopBarRightPageNum");
	var currentPage = 0;
	try{
		currentPage = parseInt(obj.value);
	}catch(e){}
	if(currentPage<=1){
		return;
	}
	this.changePages(currentPage-1);
}

SearchResultController.prototype.nextPage = function(){
	var obj = document.getElementById("ResultControlTopBarRightPageNum");
	var objTotal = document.getElementById("ResultControlTopBarTotalPages");
	var currentPage = 0;
	var totalPage = 0;
	try{
		currentPage = parseInt(obj.value);
		totalPage = parseInt(objTotal.innerHTML);
	}catch(e){}
	if(currentPage>=totalPage){
		return;
	}
	this.changePages(currentPage+1);
}
SearchResultController.prototype.finalPage = function(event){
	var page = event.target?event.target.innerHTML : event.srcElement.innerHTML;
	this.changePages(page);
}
SearchResultController.prototype.submitForm = function(key,value,blSubmit) {
	var form = document.getElementById("searchBarForm");
	var hiddens = YAHOO.util.Dom.getElementsBy(function(obj){if(obj.type=="hidden")return true;else return false}, "input", form,null);
	var len = hiddens.length;
	var blExist = false;
	var blEqual = false;
	var html = "";
	for(var i=0;i<len;i++){
		if(key==hiddens[i].name){
			blExist = true;
			if(value!=hiddens[i].value){
				hiddens[i].value = value;
			}
			else{
				blEqual = true;
			}
			break;
		}
	}
	if(blEqual==false){
		if(blExist==false){
			html = "<input type='hidden' name='"+key+"' value='"+value+"'>";
			form.innerHTML += html;
		}
		if(blSubmit==undefined || blSubmit==true)
			form.submit();
	}
}

function initSearchResultSummary() {
	var historyModel = new HistoryModel();
	var historyController = new HistoryController();
	historyController.init(historyModel);
	TSWIDGET.log("Initializing SearchResultSummary");
	var src = new SearchResultController();
}
YAHOO.util.Event.onDOMReady(initSearchResultSummary);
