/****  Finder Class  ******/
    function getUrlPrefix(pagetype) {
        var urlprefix = "";
        var lhref=document.location.href;
        if (lhref.indexOf("//")>0) {
            slash = lhref.indexOf("//");
            slash = lhref.indexOf("/",slash+2);
            nextslash = lhref.indexOf("/",slash+1);
            urlprefix = lhref.substring(slash+1,nextslash) + "/";
        } else {
            slash = lhref.indexOf("/");
            nextslash = lhref.indexOf("/",slash+1);
            urlprefix = lhref.substring(slash+1,nextslash) + "/";
        }
        
        var urltype = false;
        var urlparam = "";
		var genericfinderurl = "";
        if (lhref.indexOf(".aspx") > 0) {
            urltype=true;
            urlparam = "results.aspx";
        } else {
            if (genericfinderurl != 'Generic_Url') urlparam = genericfinderurl;
            else urlparam = "results";
        }
        
        if (pagetype == "home") {
            if (urltype) {
		        urlparam = urlprefix + "results.aspx";
		    } else {
		        if (genericfinderurl != 'Generic_Url') urlparam = urlprefix + genericfinderurl;
                else urlparam = urlprefix + "results";
		    }
		} else if(pagetype == "resources") {
		    if (urltype) {
		         urlparam = urlprefix + "resourceresults.aspx";
		    } else {
		        if (resourcefinderurl != 'Resource_Url') urlparam = urlprefix + resourcefinderurl;
                else urlparam = urlprefix + "resources";
		    }
		    
		} else if(pagetype == "products") {
		    if (urltype) {
		         urlparam = urlprefix + "products";
		    } else {
		        if (productfinderurl != 'Product_Url') urlparam = urlprefix + productfinderurl;
                else urlparam = urlprefix + "products";
		    }
		} else if(pagetype == "solutions") {
		    if (urltype) {
		        urlparam = urlprefix + "solutionslanding.aspx";
		    } else {
		        if (solutionfinderurl != 'Solution_Url') urlparam = urlprefix + solutionfinderurl;
                else urlparam = urlprefix + "solutions";
		    }
		}
		//replace ca-en and ca-fr with usa
                urlparam = urlparam.replace(/gr/,"gr/Message-gr.asp?ExitURL=/emea");
		urlparam = urlparam.replace(/cz/,"cz/Message-cz.asp?ExitURL=/emea");
		urlparam = urlparam.replace(/sk/,"sk/Message-sk.asp?ExitURL=/emea");
		urlparam = urlparam.replace(/hu/,"hu/Message-hu.asp?ExitURL=/emea");
		urlparam = urlparam.replace(/ca-en/,"usa");
		urlparam = urlparam.replace(/ca-fr/,"ca-fr/Message-FR-CA.asp?ExitURL=/usa");
		return urlparam;
    }
    function SortFilter(filter) {
        var sortfilter = "";
        sortarray = filter.split("/")
        sortarray = sortarray.sort();
        for(i=0;i<sortarray.length;i++) {
            if (sortarray[i] != "") {
                if (sortfilter != "") {
                    sortfilter = sortfilter + "/";
                }
                sortfilter = sortfilter + sortarray[i]
            }
        }
        return sortfilter;
    }
	
	$j.Avaya.Finder = function(options){
	
	    if(typeof PAGETYPE != "undefined") {
	        if (PAGETYPE == "") PAGETYPE = "home";
		    $j.Avaya.Page.Section.id = PAGETYPE;	
	    }
	/***** Initialize *****/
		var self = this;
		
		var settings = $j.extend({
			page: $j.Avaya.Page.Section.id, //Could be 'home', 'solutions', 'products'; other pages do not have finder on them
			expanded: false,
			limit: null,
			isOpen: false,
			altDesign: false,
			submitRefreshes: false,
                        submitCallback: function() {},
                        collapse: null
		},options);
		
		//var urlprefix = getUrlPrefix(settings.page);
		//var urlparam = urlprefix + "results";
		var urlparam = getUrlPrefix(settings.page);
		var urlmode = false;
		
		if (document.location.href.indexOf(".aspx") > 0) {
            urlmode = true;
        }
		
		var $finder = $j('#finder-mod');
		var $wrapper = $finder.find('div.wrapper');
		var $topSection = $finder.find('div.top-section');
		var $form = $finder.find('form');
		var $expandedState = $j('#expanded-state');
		var $submit = $j('#finder-submit');
		var $customSelects, locked, sections;
		var selects = null;
		var $filters = null;
		var isLocked = 0;
		var prepopulated = false;
		var qs = new $j.Avaya.QueryString();

        //localization logic		
        $finder.find('#finder-whatlooking').html($j.Avaya.Messages.Finder.cta);
		$finder.find('#finder-submit').html($j.Avaya.Messages.Finder.submitText);		
		

		var solfilter  = "";

        if (settings.altDesign){
			$finder.addClass('alt-design');
		}
		if($j.cookie("finderClosed") == 1 && settings.collapse != null) {
			settings.isOpen = false;	
		}
	
	    /*
		if (settings.page == "home") {
		    urlparam = urlprefix + "results";
		} else if(settings.page == "resources") {
		    urlparam = urlprefix + "resources";
		} else if(settings.page == "products") {
		    urlparam = urlprefix + "products";
		} else if(settings.page == "solutions") {
		    urlparam = urlprefix + "solutions";
		}*/
		
//		var oFinder = new Finder();
//		var oCategories  = oFinder.GetDefaultGroups(settings.page,function(params){
		    //$j.Avaya.FinderCategories = params.result;
		    //alert($j.Avaya.FinderCategories[0].entries)
	//	    sections = 'home' //$j.Avaya.FinderCategories;
	//		var initString = "";
			
			//for (var i=0;i<sections.length;i++){
//				var section = sections[i];
//				initString += '<select name="'+section.wWWName+'">';
//				//initString += '<option value="default">'+section.displayValue+'</option>';
//				if (settings.page == "solutions") {
//					//initString += '<option value="default">Select</option>';
//				}
//				initString += '<option value="all">' + $j.Avaya.Messages.Filters.all + '</option>';
//				for (var o in section.entries){
//					var opt = section.entries[o];
//					initString += '<option value="'+opt.wWWName+'">'+opt.displayValue+'</option>';
//				}
//				initString += '</select>';
//			}
 
                        //Remove the inputs from sections since it was conflicting with the customSelect order
			//		for (var i=0;i<sections.length;i++){
//						var section = sections[i];
//						if (section.type=='input'){
//							sections.splice(i,1);
//						}
//					}
					
//			$form.prepend($j(initString));
//			$selects = $finder.find('select');
			//Build selects from the json obj
		
	//		$selects.each(function(index){
	//			var select = this;
				
				//Reset all the selects to 0
	//			select.selectedIndex = 0;
	//					var cs = new $j.Avaya.CustomSelect($j(this), {
	//				submitFunction:function() {
//						if(!isLocked) {
//							isLocked = 1;
//							var info = _generateResults();
//							var qs = info.split("&");
//							var filter  = "";
//							for ( var i in qs )
//                            {
//                                var qparam = qs[i].split("=")
//                                var name = qparam[0];
//                                var value = qparam[1];
//                                if (value != "default" && value.toLowerCase() != "all") {
//                                    if (filter != "") {
//                                        filter = filter + "/";
//                                    }
//                                    filter = filter + name + "--" + unescape(value.replace(/\+/g," "));
//                                }
//                            }
//                            //alert("fitler:" + filter + "==" + settings.page);
//                            //if (filter != "") {
//                            var _status = oFinder.GetFilterGroups(settings.page,filter,function(params){ 
//                                _filterSelects({
//											selectedCat: select.name,
//											newCategories: params.result
//										});
//                                            isLocked = 0;
//			                });
//			                //} else {
//			                //    _filterSelects({
//							//				selectedCat: select.name,
//							//				newCategories: params.result
//							//			});
//			                //}
//						}
//					},
//                                        openCallback : function(){
//								if (!settings.altDesign){
//									cs.displaySpan.css('color','#858585').html(sections[index].defaultText);
//									var $selectDropdown = cs.container.find("div.selectDropDown");
//									var $selectScroller = cs.container.find('div.selectScroller');
//									var height = $selectScroller.height();
//										$selectDropdown.css({height: 10});
//										$selectDropdown.stop();
//									
//									if (height > cs.settings.maxHeight){
//										$selectDropdown.animate({height: cs.settings.maxHeight});
//									}
//									
//									else {
//										$selectDropdown.animate({height: height});
//									}
//									
//								}
//							},
//							closeCallback : function(){
//								if (!settings.altDesign && !isLocked){
//								if (select.value!='default' && select.value!='all'){
//									cs.displaySpan.css('color','#cc0000').html(select[select.selectedIndex].innerHTML);
//								}
//								}
//							}
//				});
//						
//                                               //Check for qs values  
//                        var href = document.location.href;  
//                        var sname = cs.select.attr('name');    
//                        var svalue = "";
//                        if (href.indexOf(sname+'--')>0) {
//                            var en = href.length;
//                            var sl = href.indexOf(sname+'--')+(sname+'--').length;
//                            if (href.indexOf("/",sl) > 0) {
//                                en = href.indexOf("/",sl);
//                            }
//                            svalue = href.substring(sl,en);
//                        } else if (qs.key[cs.select.attr('name')]!=null) {
//                            svalue = qs.key[cs.select.attr('name')];
//                        }  
//                        //alert(sname + "=="+ svalue + "==" + cs.jumpToValue(svalue));                            
//						//if (qs.key[cs.select.attr('name')]!=null && cs.jumpToValue(qs.key[cs.select.attr('name')]) > -1){
//						if ((sname!="" && svalue!="") || cs.jumpToValue(svalue) > -1){
//						//if (qs.key['size']!=null && cs.jumpToValue(qs.key['size']) > -1){    
//						    //Set value of select to qs value;
//						    if (solfilter != "") {
//						        if (!urlmode) {
//						            solfilter = solfilter + "/";
//						        } else {
//						            solfilter = solfilter + "&";
//						        }
//						    }
//						    if (urlmode) {
//						        solfilter = solfilter + sname  + "--" + svalue;
//						    } else {
//						        solfilter = solfilter + sname  + "--" + svalue;
//						    }
//						    
//						    prepopulated = true;
//						} else {
//						//Initially start it as the default section name
//						if (!settings.altDesign){
//						    cs.displaySpan.html(sections[index].displayValue);
//						} else {
//								
//							cs.displaySpan.html($j.Avaya.Messages.Finder.selectCta);
//						}
//                                                }
//						//alert(solfilter)
//						if (settings.altDesign){
//						    cs.display.before($j("<p>"+sections[index].displayValue+"</p>"));
//						}
//				
//						if (index == $selects.length-1 && settings.limit == null){
//					$j(this).parent('div.selectParent').addClass('last');
//				}
//			});
//			
//			settings.expanded ? $collapsedState.addClass('hidden') : $expandedState.addClass('hidden');
//				
//				
//			// LIMIT STUFF
//			if(settings.limit != null && settings.limit > 0) {
//				$filters = $j("#finder-form .selectParent");
//				
//						$j("#finder-form .submit").before('<div id="additionalFilters"><a href="javascript:void(0);" id="btn_additionalFilters">'+$j.Avaya.Messages.Finder.more+'</a></div>');
//			
//				$j("#btn_additionalFilters").click(function(e) {
//					e.preventDefault(e);																
//
//							if($j(this).data("open") == null || $j(this).data("open") == 0) {
//					_showFeatures();
//								$j(this).data("open", 1);
//								$j(this).html($j.Avaya.Messages.Finder.fewer);
//							} else {
//								_hideFeaturesByLimit();	
//								$j(this).data("open", 0);
//								$j(this).html($j.Avaya.Messages.Finder.more);
//							}
//				});
//				
//				_hideFeaturesByLimit();
//			}
//		/***** BIND EVENTS ******/ 
//			
//			$topSection.find('a').live('click',function(e){
//				e.preventDefault();
//				if (settings.expanded){
//					_collapse();
//					if(settings.limit != null) {
//								var $additionalFilters_btn = $j("#btn_additionalFilters");
//								$additionalFilters_btn.data("open", 0);
//								$additionalFilters_btn.html($j.Avaya.Messages.Finder.more);
//						_hideFeaturesByLimit();	
//								//$j("#additionalFilters").show();
//					}
//				} else {
//					_expand();
//				}
//			});
//				    
//			$submit.click(function(e){
//				e.preventDefault();
//                if (!settings.submitRefreshes){
//                    settings.submitCallback();
//                    					
//				    var info = _generateResults();
//				    var qs = info.split("&");
//				    var filter="";
//				    for ( var i in qs ) {
//                        var qparam = qs[i].split("=")
//                        var name = qparam[0];
//                        var value = qparam[1];
//                        if (value != "" && value != "default" && value.toLowerCase() != "all") {
//                            if (filter != "") {
//                                if (urlmode) {
//                                    filter = filter + "/";
//                                } else {
//                                    filter = filter + "/";
//                                }
//                            }
//                            if (urlmode) {
//                                filter = filter + name + "--" + unescape(value.replace(/\+/g," "));
//                            } else {
//                                filter = filter + name + "--" + unescape(value.replace(/\+/g," "));
//                            }
//                        }
//                    }
//                    //Submit only if some filter is selected.
//                    //Submit only for resources,home
//                    if (filter != "") {
//                        filter = SortFilter(filter);
//                        if (settings.page == "home" || settings.page == "resources") {
//                            if (urlmode) {
//	                            document.location.href = "http://" + document.location.host + "/" + urlparam + "?filter=" + filter;
//	                        } else {
//	                            document.location.href = "http://" + document.location.host + "/" + urlparam + "/" + filter + "/";
//	                        }
//				        } else if (settings.page == "solutions") {
//				            if (typeof SEARCHTYPE != "undefined" && SEARCHTYPE != null) {
//				                filter = filter.replace(/=/g,"--");
//				                var oCategories  = oFinder.GetItems(settings.page,filter,function(params){
//				                    _populateSolutionsDrawer( params.result);   
//		                        });
//		                    } else {
//		                        //alert("http://" + document.location.host + "/" + urlparam + "solutions/" + filter + "/");
//		                        if (urlmode) {
//		                            document.location.href = "http://" + document.location.host + "/" + urlparam + "?filter=" + filter;
//		                        } else {
//		                            document.location.href = "http://" + document.location.host + "/" + urlparam + "/" + filter + "/";
//		                        }
//		                    }
//				        }
//				    }
//                } else {
//				    $form.submit();
//			    }
//					}).hover(function(){
//						$form.addClass('submit-hovered');
//					},function(){
//						$form.removeClass('submit-hovered');
//			});
//			
//			//Show finder after loaded and skinned
//			if (settings.isOpen){
//				_expand();	
//			}
//			$finder.show();
//                        _setScrollers();
//
//				
//                        if (prepopulated && !settings.submitRefreshes){
//                                        
//					var oCategories  = oFinder.GetItems(settings.page,solfilter,function(params){
//                                           settings.submitCallback();
//		                            _populateSolutionsDrawer( params.result);   
//		                        });
//				}
//                        if(settings.collapse != null && $j.cookie("finderClosed") != 1) {
//					var collapseTimeout = setTimeout(function() {
//						_collapse();
//						$j.cookie("finderClosed", 1);
//					}, settings.collapse);
//					$finder.mouseenter(function() {
//						clearTimeout(collapseTimeout);							
//					});
//				}
//		});
	    
	    
	/****** Public methods ******/
		
		this.hide = function(){
			$finder.css({display:'none'});
		}
		
		this.show = function(){
			$finder.show();
		}
		
		this.expand = function() {
			_expand();	
		}
		
		this.collapse = function() {
			_collapse();	
		}
	/****** Private methods ******/
		function _hideFeaturesByLimit() {
			$filters.each(function(index, itm) {
				if(index >= settings.limit) {
					$j(itm).css({left: "-999em", position: "absolute"});	
				}
			});
		}
		
		function _showFeatures() {
			$filters.each(function(index, itm) {
				$j(itm).css({left: 0, position: "static"});	
			});
		}
		
		function _expand(){
		    if (settings.page=='products'){
				$topSection.html('<a class="control" href="javascript:void(0);">&ndash;</a><span>'+$j.Avaya.Messages.Finder.productCta+'</span>');
			} else {
				$topSection.html('<a class="control" href="javascript:void(0);">&ndash;</a><span>'+$j.Avaya.Messages.Finder.selectCta+'</span>');
			}
			$wrapper.removeClass('collapsed');
			
			$expandedState.show();
			var $content = $expandedState.parents("div.content");
			
			$content.css({height: 0, position: "relative"});
			$content.animate({height: $expandedState.height()}, 200, function(){ 
				$j(this).css({position: "static", height: "auto"});	
				self.finderModClosedHeight = $j("#finder-mod").height();
			});
			_setScrollers();
			settings.expanded = true;
			
		}
		
		function _collapse(){
			var $content = $expandedState.parents("div.content");

			$content.css({position: "relative", height: self.finderModClosedHeight - 55});
			$content.animate({height: 0}, 200, function(){ 
			$expandedState.hide();

			$wrapper.addClass('collapsed');
				$topSection.html('<a class="control" href="javascript:void(0);">+</a><a href="javascript:void(0);">'+$j.Avaya.Messages.Finder.cta+'</a>');
			settings.expanded = false;
			});
		}
		
		function _setScrollers(){
			if (!$customSelects){
				$customSelects = $finder.find('div.selectWrapper');
			}
			
			$customSelects.each(function(){
				var id = this.id.split('_')[1];
				$j.Avaya.global.CustomSelects[id].setScrollPane();
			});
		}
		
		function _setStatus(selectObj,defaultText){

            var value = selectObj.select.val();
			if (value != 'default' && value != 'all'){
				if (!settings.altDesign){
					selectObj.displaySpan.css({color:'#cc0000',cursor:'pointer'});
				}
			} else {
				if (!settings.altDesign){
				selectObj.displaySpan.html(defaultText);
				}
				//else {
				//	selectObj.displaySpan.html('Select');
				//}
				selectObj.displaySpan.css({color:'#858585',cursor:'pointer'});
			}

			if (settings.altDesign){
				var text = selectObj.displaySpan.html();
				if (text.length > 23){
					selectObj.displaySpan.html(text.substr(0,23) + '...');
				}
			}
			
			if (selectObj.opts.length<=1){
				selectObj.displaySpan.css({color :'#d9d9d9',cursor:'default'});
				selectObj.locked = true;
			}

		}
		
		//Gets rid of the conflicts from the other dropdowns
		function _filterSelects(params){	

			//var conflicts = selectedCat.values[value].conflicts;
			var selectedCat = params.selectedCat;
			var filtered = params.newCategories;
			//set the conflictedValues property of the selected cat to the current
			//selectedCat.conflictedValues = conflicts;
			
			//Remake the dropdown for each category
			if (filtered != null) {
			for (var i=0;i<filtered.length;i++){
				var optString = '';

				//var cat = filtered[sections[i].name]; 
				var cat = filtered[i]; 
				
				//Check all categories to get an array of what is filtered out for this category according to the current selections
				//var filtered = [];
				
				//for each value in the catgory
				if (settings.page == "solutions"){
					//optString += '<option value="default">Select</option>';
				}
				optString += '<option value="all">' + $j.Avaya.Messages.Filters.all  + '</option>';
				for (var o in cat.entries){
					var opt = cat.entries[o];
					//check to see if the value is contained in the filtered array, if not append the option to the string
					//if ($j.inArray(opt.value, filtered) == -1){
					    optString += '<option value="'+opt.wWWName+'">'+opt.displayValue+'</option>';
					//}
				}
				//alert(filtered[i].name + "==" + optString);
				//rebuild the select
				_createSelect(filtered[i],optString);

			}
			}
		}
		
		function _createSelect(section,string){
			var select,customSelect,id;
			var wWWName = section.wWWName;
			//find the select with the same name
			$selects.each(function(){
			    if (this.name==wWWName){
					select = $j(this);
				}
			});

			if (!select.get(0)) return;
			select.html(string);
			id = select.parent('div.selectParent').find('div.selectWrapper').get(0).id;
			
			//grab the select from the $j.Avaya.global.CustomSelects array and update the custom select
			customSelect = $j.Avaya.global.CustomSelects[id.split('_')[1]];
			select.parent("div.selectParent").find("div.selectScroller").jScrollPaneRemove();
			
			customSelect.updateList();
			
			if (customSelect.display.data("Value")){
				customSelect.matchToValue(customSelect.display.data("Value"));
			}
			
			_setStatus(customSelect, section.displayValue);
		}
		
		function _generateResults(){
			var info = $form.find('select, :text');
			return $j.param(info);
		}
		
		function _populateSolutionsDrawer(results){

			var selects = $form.find('select');
			$j.Avaya.global.Tracking.solutionFinder(selects.eq(0).val(), selects.eq(1).val());
		
			if (results.length == 0 && document.getElementById('noSolutionsFound')){
				$j('#noSolutionsFound').addClass('active');
				$j('#drawerContainer').css('height',0);
				$j.Avaya.Page.Sizing.resize();
				return;
			}
			
			$j('#noSolutionsFound').removeClass('active');
			
			contentlist = [];
			contentlist.splice(0,contentlist.length);
			
			for (var i=0;i<results.length;i++) {
				contentlist.push(results[i]);
			}

			_appendData();			
			_openSolutionsDrawer();
		}
		
		function _appendData(){
			var container = $j('#results div.content').eq(0);
			var wrapper = $j('#results div.wrapper').eq(0);
			container.html('');
			for (var i=0;i<contentlist.length;i++){
				var content = contentlist[i];
				var alt = '';
				
				if (i%2){
					alt = 'alt'
				}
				
				if(content.title.length > $j.Avaya.Item.truncate) { 
					var str = content.title;
								
					var truncated = str.substr(0, $j.Avaya.Item.truncate) + '<span class="elip">... </span>';
					truncated += '<span class="leftover">'+ str.slice($j.Avaya.Item.truncate, content.title.length) +'</span> ';
					
					content.title = truncated;
				}
				//SmartDock Removal Start
				//class="smartdock-add">+ save</a>
				//SmartDock Removal End
				var itm = $j('<div class="item '+alt+'" ><div class="titlebar"><span>'+content.contentTypeDescription+'</span><div class="item-utils"><a href="javascript:void(0)" id="itm-'+content.id+'" class="smartdock-add"></a></div></div><div class="item-content"><img src="'+content.largeImage+'" /><a href="'+content.url+'">'+content.title+'</a></div></div>');
				container.append(itm);
				
				new $j.Avaya.ToolTipTrigger(itm.find('div.item-content a'),{staticContent:'<p>'+content.description+'</p>',location:'NE',width:214, yOffset: 25, xOffset: -25});
				
			}
			
			if (contentlist.length%2){
				wrapper.removeClass('even');
			} else {
				wrapper.addClass('even');
			}
			
		}
		
		function _openSolutionsDrawer(){
			if (!document.getElementById('solutionsDrawer')) return;
			
			var container = $j('#drawerContainer');
			var height = $j('#solutionsDrawer').outerHeight();
			
			if (container.outerHeight() != height){
				$j('#footer').css('visibility','hidden');
				//container.css('height',height + 'px');
				container.animate(
					{height : height - 10},	
					{duration:300,easing:'easeout',complete:function(){$j.Avaya.Page.Sizing.resize();$j('#footer').css('visibility','visible')}}
				);
				//$j.Avaya.Page.Sizing.resize();
				//$j('#footer').css('visibility','visible');
			}
		}
	}
	