﻿if (!window.PartnerGallery)
	window.PartnerGallery = {};

PartnerGallery.Page = function() 
{
}

PartnerGallery.Page.prototype =
{
	handleLoad: function(control, userContext, rootElement) 
	{
	    var searchPartner = document.getElementById("searchPartner");
	    if (searchPartner != null)
	    {
	        searchPartner.style.display = "block";
	    }
	
		this.control = control;			//Silverlight Control
		this.root = rootElement;		//Root Canvas
		this.toggleStates ={};			//Toggle State of Sort Buttons
		this.distinctExpertises = {};	//Distinct Expertise List
		this.distinctRegions ={};		//Distinct Region list
		this.expCbs = new Array();		//Checkbox for expertise
		this.regCbs = new Array();		//Checkbox for Regions
		this.currentAccordion = "";		//Current Accordion Name
		this.items = new Array();       //Partner Item
		this.currentItemIndex = -1;
		this.sortButtons = new Array(); // Sort Buttons
		this.distinctRegionIds = new Array();
		this.distinctExpertiseIds = new Array();
		this.xotree = new XML.ObjTree();
		this.tree = {};

		this.queryStr = {
			exps:"",                    //Expertise
			regs:"",                    //Region
			sort:"asc",                 //Sort Direction "asc" or "des"
			search:"",                  //keywords
			page:"1"                    //page
		};

		/*** UI elements ***/
		
        var mainCanvasBackgroundImageBrush = this.root.findName("MainCanvasBackgroundImageBrush");
        if (mainCanvasBackgroundImageBrush != null)
        {
            mainCanvasBackgroundImageBrush.ImageSource = "../../styles/pageset/bg_partners.jpg";
	        var mainCanvasBackgroundTransform = mainCanvasBackgroundImageBrush.findName("MainCanvasBackgroundTransform");
            if (mainCanvasBackgroundTransform != null)
            {
                mainCanvasBackgroundTransform.X = 0.45;
                mainCanvasBackgroundTransform.Y = -0.2;
            }
        }
		
		//Loading
		this.LoadingCanvas = this.root.FindName("LoadingCanvas");
		this.LoadingShowSb = this.root.FindName("LoadingShowSb");
		this.LoadingHideSb = this.root.FindName("LoadingHideSb");
		this.LoadingShowSb.Begin();
		//Showcase
		this.showcaseShowSb = this.root.FindName("ShowcaseShowSb");
		this.showcaseHideSb = this.root.FindName("ShowcaseHideSb");
		this.showcaseCloseBtn = this.root.FindName("ShowcaseCloseBtn");	

		//Partner List
		this.partnerItemsCanvas = this.root.FindName("PartnerItemsCanvas");
		this.sliderContainer = this.root.findName("SliderContainer");
		this.slider = this.root.findName("Slider");
		this.initSlider();
		
		//Panel
		this.searchBtn = this.root.FindName("SearchBtn");
		this.searchBtn.cursor="Hand";
		this.searchOverSb = this.root.FindName("SearchOverSb");
		this.searchOutSb = this.root.FindName("SearchOutSb");
		this.clearSearchBtn = this.root.FindName("ClearSearchBtn");
		this.clearSearchBtn.cursor="Hand";
		this.clearSearchOverSb = this.root.FindName("ClearSearchOverSb");
		this.clearSearchOutSb = this.root.FindName("ClearSearchOutSb");
		this.regClearBtn = this.root.Findname("GeoFilterClearAllBtn");
		this.expClearBtn = this.root.Findname("ExpFilterClearAllBtn");
		this.regCbCanvas = this.root.Findname("GeoFilterCb");
		this.expCbCanvas = this.root.Findname("ExpFilterCb");
		this.expUp = this.root.FindName("ExpFilterUpBtn");
		this.expDown = this.root.FindName("ExpFilterDownBtn");
		this.expUp.cursor = "Hand";
		this.expDown.cursor = "Hand";
		this.geoUp = this.root.FindName("GeoFilterUpBtn");
		this.geoDown = this.root.FindName("GeoFilterDownBtn");
		this.geoUp.cursor = "Hand";
		this.geoDown.cursor = "Hand";
		this.sortButtons[0] = new PartnerGallery.ToggleButton(this.root.findName("AscBtn"),"AscOffBtn","AscOnBtn", this.delegate(this,this.onSortBtnClick,"asc"),true);
		this.sortButtons[1] = new PartnerGallery.ToggleButton(this.root.findName("DesBtn"),"DesOffBtn","DesOnBtn", this.delegate(this,this.onSortBtnClick,"des"),false) 
		this.initAccordion(["ExpFilterCanvas","GeoFilterCanvas"]);
		
		/*** Event Listener ***/
		this.showcaseCloseBtn.addEventListener("MouseLeftButtonUp",this.delegate(this,this.onShowcaseCloseBtnClicked));
		this.showcaseCloseBtn.addEventListener("MouseEnter",this.delegate(this,this.onShowcaseCloseBtnEnter));
		this.showcaseCloseBtn.addEventListener("MouseLeave",this.delegate(this,this.onShowcaseCloseBtnLeave));
		this.root.FindName("ShowcasePartnerUrlTxt").addEventListener("MouseLeftButtonUp",this.delegate(this,this.onOpenPartnerUrl));
		this.root.FindName("ShowcasePartnerUrlTxt").cursor = "Hand";
		this.showcaseHideSb.addEventListener("completed",this.delegate(this,this.onHideDetailCompleted));
		this.showcaseShowSb.addEventListener("completed",this.delegate(this,this.onShowDetailCompleted));
        this.searchBtn.addEventListener("MouseLeftButtonUp",this.delegate(this,this.onSearchBtnClick));
        this.searchBtn.addEventListener("MouseEnter",this.delegate(this,this.onSearchBtnEnter));
        this.searchBtn.addEventListener("MouseLeave",this.delegate(this,this.onSearchBtnLeave));
		this.clearSearchBtn.addEventListener("MouseLeftButtonUp",this.delegate(this,this.onClearSearchBtnClick));
        this.clearSearchBtn.addEventListener("MouseEnter",this.delegate(this,this.onClearSearchBtnEnter));
        this.clearSearchBtn.addEventListener("MouseLeave",this.delegate(this,this.onClearSearchBtnLeave));
		this.regClearBtn.addEventListener("MouseLeftButtonUp",this.delegate(this,this.onRegClearBtnClick));
		this.expClearBtn.addEventListener("MouseLeftButtonUp",this.delegate(this,this.onExpClearBtnClick));
		this.sliderContainer.addEventListener("MouseLeftButtonDown",this.delegate(this,this.onSliderContainerDownClick));
		this.sliderContainer.addEventListener("MouseLeftButtonUp",this.delegate(this,this.onSliderContainerUpClick));
		this.geoUp.addEventListener("MouseLeftButtonDown",this.delegate(this,this.onGeoUpClick));
		this.geoDown.addEventListener("MouseLeftButtonDown",this.delegate(this,this.onGeoDownClick));
		this.expUp.addEventListener("MouseLeftButtonDown",this.delegate(this,this.onExpUpClick));
		this.expDown.addEventListener("MouseLeftButtonDown",this.delegate(this,this.onExpDownClick));
	
	    var downloader = control.createObject("downloader");
	    downloader.addEventListener("completed", this.delegate(this,this.onItemStrDownloaded));
	    downloader.open("GET", "../../xaml/partners/PartnerItem.xaml");
		downloader.send();
	},
	
	/* Download the xaml of Partner Item */
	onItemStrDownloaded: function(sender, eventArgs){
		this.itemStr = sender.ResponseText;
		var downloader = this.control.createObject("downloader");
	    downloader.addEventListener("completed", this.delegate(this,this.onCheckboxStrDownloaded));
	    downloader.open("GET", "../../xaml/partners/CheckBox.xaml");
		downloader.send();
	},
	
	/* Download the xaml of Checkbox */
	onCheckboxStrDownloaded: function(sender, eventArgs){
		this.checkboxStr = sender.ResponseText;
		this.initUi();
	},
	
	/* Init Ui */
	initUi: function(){
		this.getSettings();
		this.getPartnerList();
	},
	
	/* Show loading indicator */
	showLoading: function(){
		//this.LoadingShowSb.Begin();
		this.LoadingCanvas.Visibility ="Visible";
	},
	
	/* Hide loading indicator */
	hideLoading:function(){
		//this.LoadingHideSb.Begin();
		this.LoadingCanvas.Visibility ="Collapsed";
	},
	
	onSortBtnClick: function(sender,order){
		for(var i=0; i<this.sortButtons.length; i++){
			if(this.sortButtons[i].state){
				this.sortButtons[i].setState(!this.sortButtons[i].state);
			}
		}

		this.queryStr.sort = order;
		this.getPartnerList(this.queryStr);
		
	},
	
	/* Partner Search Function */
	onSearchBtnClick: function(sender, eventArgs){
		if(document.getElementById("searchPartnerText"))
			this.queryStr.search = document.getElementById("searchPartnerText").value;
	   this.getPartnerList(this.queryStr);
	},
	
	onSearchBtnEnter: function(){
	    this.searchOverSb.Begin();
	},
	
	onSearchBtnLeave: function(){
	    this.searchOutSb.Begin();
	},
	
	onClearSearchBtnClick: function(sender, eventArgs){
		this.clear();
		if(document.getElementById("searchPartnerText"))
			document.getElementById("searchPartnerText").value="";
	},
	
	onClearSearchBtnEnter: function(){
	    this.clearSearchOverSb.Begin();
	},
	
	onClearSearchBtnLeave: function(){
	    this.clearSearchOutSb.Begin();
	},
	
	/*** Slider of Partner Canvas ***/
	initSlider: function(){
		this.dragging = false;
		this.slider.addEventListener("MouseMove",this.delegate(this,this.onSliderMove));
		this.slider.addEventListener("MouseLeftButtonDown",this.delegate(this,this.onSliderDown));
		this.slider.addEventListener("MouseLeftButtonUp",this.delegate(this,this.onSliderUp));
		this.slider.cursor = "Hand";
		this.sliderContainer.cursor="Hand";
	},
	
	onSliderMove: function(sender, eventArgs){
		if(this.dragging){
    		sender.captureMouse();
			var mouseX = eventArgs.getPosition(this.sliderContainer).X;
			this.onUpdateSliderPosition(mouseX);
		}
	},
	
	onUpdateSliderPosition: function(mouseX){
		var x = this.slider.getValue("Canvas.Left");
		var maxLeft = this.sliderContainer.GetValue("Width") - this.slider.GetValue("Width");
		if(x >= 0 && x <= maxLeft){
			var left = mouseX - this.startDraggingX  + this.startDraggingLeft;
			if(left < 0) 
				left =0;
			else if(left > maxLeft)
				left =  maxLeft;

			this.slider.setValue("Canvas.Left",left);
			left = Math.round(left / maxLeft * (this.columnNumber -1)) * -500;
			this.root.findName("MovePartnerListSb").Children.GetItem(0).keyframes.GetItem(0).Value = left;
			this.root.findName("MovePartnerListSb").Begin();
		}
	},
	
	onSliderDown: function(sender, eventArgs){
		this.startDraggingTime = (new Date()).valueOf();
		this.dragging = true;
		sender.captureMouse();
		this.startDraggingX = eventArgs.getPosition(this.sliderContainer).X;
		this.startDraggingLeft = this.slider.getValue("Canvas.Left");
		this.root.findName("SliderDownSb").Begin();
	},
	
	onSliderUp: function(sender, eventArgs){
		stopDraggingTime = (new Date()).valueOf();
		var dragTimeElapsed = stopDraggingTime - this.startDraggingTime;
		this.dragging = false;
		var delta = (this.sliderContainer.GetValue("Width") - this.slider.GetValue("Width")) / this.columnNumber; /* how much does a click on the arrows in the slider move the slider */
		sender.releaseMouseCapture();
		
		if (dragTimeElapsed < 1000 /* 1 second */)
		{
		    // Move a bit in one direction or another if we effectively had a "click" and were on top of
		    // one of the arrows at the ends of the drag bar.
		    
		    var w = this.slider.GetValue("Width");
		    var movement = this.slider.getValue("Canvas.Left") - this.startDraggingLeft;
		    if (Math.abs(movement) < 4 /* if we move less than 4 pixels and we "click" */)
		    {
    		    var clickX = this.startDraggingX - this.startDraggingLeft;
    		    if (clickX < 20 /* number of pixels from the left end of the slider, where the left arrow exists */)
    		    {
        			this.onUpdateSliderPosition(this.startDraggingX - delta - movement);
    		    }
    		    else if (clickX > (w - 20) /* ... near the right end */)
    		    {
        			this.onUpdateSliderPosition(this.startDraggingX + delta - movement);
    		    }
    		}
		}
		
		this.root.findName("SliderUpSb").Begin();
	},
	
	onSliderLeave: function(sender, eventArgs){
	    try { this.onSliderUp(sender,eventArgs); }
	    catch (e) {}
	},
	
	onSliderContainerDownClick: function(sender, eventArgs){
		if(!this.dragging){
			this.startDraggingX = this.slider.GetValue("Canvas.Left");
    		this.startDraggingLeft = this.slider.GetValue("Canvas.Left");
    		var delta = (this.sliderContainer.GetValue("Width") - this.slider.GetValue("Width")) / this.columnNumber; /* how much does a click on the arrows in the slider move the slider */
    		if ((typeof("eventArgs") != "undefined") && (eventArgs != null))
    		{
        		sender.captureMouse();
        		this.startAutoScrollingX = eventArgs.getPosition(this.sliderContainer).X;
            }
			if (this.startAutoScrollingX > this.startDraggingX)
			{
    			this.onUpdateSliderPosition(this.startDraggingX + delta);
			}
			else
			{
    			this.onUpdateSliderPosition(this.startDraggingX - delta);
    		}
    		this.sliderAutoScrollTimerID = setTimeout(this.delegate(this,this.onSliderContainerDownClick), 700);
		}
	},
	
	onSliderContainerUpClick: function(sender, eventArgs){
		if(!this.dragging){
		    if ((typeof(this.sliderAutoScrollTimerID) != "undefined") && (this.sliderAutoScrollTimerID != null))
		    {
        		sender.releaseMouseCapture();
		        clearTimeout(this.sliderAutoScrollTimerID);
		        this.sliderAutoScrollTimerID = null;
		    }
		}
	},

	/*** Accordion ***/
	initAccordion: function(canvases){
		for(var i=0;i<canvases.length;i++){
			var canvas = this.root.FindName(canvases[i]);
			this.root.FindName(canvases[i] + "Navi").Visibility = "Collapsed";
			this.root.FindName(canvases[i] + "Navi").Visibility = "Collapsed";
			var toggleBtn = canvas.FindName(canvases[i] + "Toggler");
			if(toggleBtn){
				toggleBtn.addEventListener("MouseLeftButtonUp",this.delegate(this,this.onToggleAccordion,canvases[i]));
				toggleBtn.cursor = "Hand";
			}
		}
	},
	
	onToggleAccordion: function(sender, eventArgs, name){
		if(name == this.currentAccordion){
			this.root.FindName(name +"HideSb").Begin();
			this.root.FindName(name + "Navi").Visibility = "Collapsed";
			this.currentAccordion = "";
			for(var i=0;i<this.expCbs.length;i++){
				this.expCbs[i].hide();
			}
			for(var i=0;i<this.regCbs.length;i++){
				this.regCbs[i].hide();
			}
		}else{
			if(name=="ExpFilterCanvas"){
				this.currentAccordion = name;
				this.root.FindName("ExpFilterCanvasShowSb").Begin();
				this.root.FindName("ExpFilterCanvasNavi").Visibility = "Visible";
				this.root.FindName("GeoFilterCanvasHideSb").Begin();
				this.root.FindName("GeoFilterCanvasNavi").Visibility = "Collapsed";
				for(var i=0;i<this.expCbs.length;i++){
					this.expCbs[i].show();
				}
				for(var i=0;i<this.regCbs.length;i++){
					this.regCbs[i].hide();
				}
			}else{
				this.currentAccordion = name;
				this.root.FindName("ExpFilterCanvasHideSb").Begin();
				this.root.FindName("GeoFilterCanvasShowSb").Begin();
				this.root.FindName("ExpFilterCanvasNavi").Visibility = "Collapsed";
				this.root.FindName("GeoFilterCanvasNavi").Visibility = "Visible";
				for(var i=0;i<this.expCbs.length;i++){
					this.expCbs[i].hide();
				}
				for(var i=0;i<this.regCbs.length;i++){
					this.regCbs[i].show();
				}
			}
		}
	},
	
	onRegUpClick:function(){
		var top = this.regCbCanvas.GetValue("Canvas.Top");
		var page = Math.ceil(this.distinctRegions.length/24) ;
		if(top < 0 ){
			this.regCbCanvas.SetValue("Canvas.Top", top + 150);
			if(page > 1)
				this.geoDown.Visibility = "Visible";
			if(top == -(page-1) * 150)
				this.geoUp.Visibility = "Collapsed"; 
			else
				this.geoUp.Visibility = "Visible"; 
		}
	},
		
	onRegDownClick:function(){
		var top = this.regCbCanvas.GetValue("Canvas.Top");
		var page = Math.ceil(this.distinctRegions.length/24) ;
		if(top >= -1 * page * 150){
			this.regCbCanvas.SetValue("Canvas.Top", top - 150);
			this.geoUp.Visibility = "Visible";
			if(top -150 == -1 * (page -1) * 150)
				this.geoDown.Visibility = "Collapsed"; 
			else
				this.geoDown.Visibility = "Visible"; 
		}
	},
		
	onExpUpClick:function(){
		var top = this.expCbCanvas.GetValue("Canvas.Top");
		var page = Math.ceil(this.distinctExpertises.length/24) ;
		if(top < 0 ){
			this.expCbCanvas.SetValue("Canvas.Top", top + 150);
			if(page > 1)
				this.expDown.Visibility = "Visible";
			if(top == -(page-1) * 150)
				this.expUp.Visibility = "Collapsed"; 
			else
				this.expUp.Visibility = "Visible"; 
		}
	},
		
	onExpDownClick:function(){
		var top = this.expCbCanvas.GetValue("Canvas.Top");
		var page = Math.ceil(this.distinctExpertises.length/24) ;
		if(top >= -1 * page * 150){
			this.expCbCanvas.SetValue("Canvas.Top", top - 150);
			this.expUp.Visibility = "Visible";
			if(top -150 == -1 * (page -1) * 150)
				this.expDown.Visibility = "Collapsed"; 
			else
				this.expDown.Visibility = "Visible"; 
		}
	},
	
	onRegClearBtnClick: function(){
		this.clear("reg");
	},
	
	onExpClearBtnClick: function(){
		this.clear("exp");
	},
	
	clear:function (type){
		this.showLoading();
		if(type == "exp"){
			this.queryStr.exps="";
			for(var i=0;i<this.expCbs.length;i++){
				if(this.expCbs[i].state)
					this.expCbs[i].check();
			}
		}else if(type=="reg"){
			this.queryStr.regs= "";
			for(var i=0;i<this.regCbs.length;i++){
				if(this.regCbs[i].state)
					this.regCbs[i].check();
			}
		}else{
			this.queryStr.exps= "";
			this.queryStr.regs= "";
			for(var i=0;i<this.expCbs.length;i++){
				if(this.expCbs[i].state)
					this.expCbs[i].check();
			}
			for(var i=0;i<this.regCbs.length;i++){
				if(this.regCbs[i].state)
					this.regCbs[i].check();
			}
			this.queryStr.search = "";
		}
		this.getPartnerList(this.queryStr);
	},
	
	/*** Show showcase of agency ***/
	onShowDetail: function(){
		this.showcaseShowSb.Begin();
	},
	
	onShowDetailCompleted: function(sender, eventargs){
	},
	
	onHideDetail: function(){
		this.showcaseHideSb.Begin();
	},
	
	onHideDetailCompleted: function(sender, eventargs){
		if(this.root.FindName("PartnerItem_Current" +this.currentItemIndex))
			this.root.FindName("PartnerItem_Current" +this.currentItemIndex).Visibility = "Collapsed";
	},
	
	onClickItem: function(sender, eventArgs,i){
		var partner = this.partners[i];
		this.showcaseShowSb.Begin();
		this.root.FindName("ShowcasePartnerUrlTxt").Text = partner.url;
		this.root.FindName("ShowcasePartnerNameTxt").Text = partner.name;
		if(this.root.FindName("PartnerItem_Current" +i))
			this.root.FindName("PartnerItem_Current" +i).Visibility = "Visible";
		if(this.root.FindName("PartnerItem_Current" + this.currentItemIndex)){
			this.root.FindName("PartnerItem_Current" + this.currentItemIndex).Visibility = "Collapsed";
		}
		this.currentItemIndex = i;
		if(partner["-expertise"]){
			var exps = partner["-expertise"].split(",");
			var expTxt = this.root.FindName("ShowcasePartnerExpTxt");
			expTxt.Text = "";
			for(var i=0;i<exps.length;i++ ){
				expTxt.inlines.add(this.control.content.createFromXaml("<Run Text='"+this.getSettingsText("expertise",exps[i])+"'/>"));
				expTxt.inlines.add(this.control.content.createFromXaml("<LineBreak/>"));
				
			}
		}
		if(partner["-region"]){
			var regs = partner["-region"].split(",");
			var regTxt = this.root.FindName("ShowcasePartnerRegTxt");
			regTxt.Text = "";

			for(var i=0;i<regs.length;i++ ){
				regTxt.inlines.add(this.control.content.createFromXaml("<Run Text='"+this.getSettingsText("region",regs[i])+"'/>"));
				regTxt.inlines.add(this.control.content.createFromXaml("<LineBreak/>"));
			}
		}

	},
	
	getSettingsText: function(type,id){
		if(type=="expertise"){
			for(var i=0;i<this.distinctExpertises.length;i++){
				if(this.distinctExpertises[i]["-id"] == id)
					return this.distinctExpertises[i]["-name"];
			}
		}
		if(type=="region"){
			for(var i=0;i<this.distinctRegions.length;i++){
				if(this.distinctRegions[i]["-id"] == id)
					return this.distinctRegions[i]["-name"];
			}
		}
	},
	onEnterItem: function(sender, eventArgs,i){
		sender.FindName("PartnerItemOverSb"+i).Begin();
	},
	
	onLeaveItem: function(sender, eventArgs,i){
		sender.FindName("PartnerItemOutSb"+i).Begin();
	},
	
	/*** Show Case ***/
	onShowcaseCloseBtnClicked: function(sender, eventArgs){
		this.showcaseHideSb.Begin();
	},
	
	onShowcaseCloseBtnEnter: function(sender, eventArgs){
		this.root.findName("ShowcaseCloseBtnOverSb").Begin();
	},
	
	onShowcaseCloseBtnLeave: function(sender, eventArgs){
		this.root.findName("ShowcaseCloseBtnOutSb").Begin();
	},

	
	/*** Query Partner List ***/
	getPartnerList: function(queryObj){
		this.showLoading();
		var url="../../Handlers/PartnerGallery.ashx";
		if(queryObj){
			url += "?exps="+ queryObj.exps
						+"&regs="+queryObj.regs
						+"&sort="+queryObj.sort
						+"&search="+queryObj.search
						+"&page="+queryObj.page;
		}
		this.xotree.force_array = ["partner"];
		//this.tree = this.xotree.parseHTTP(url);
//		this.onPartnerListLoaded(this.tree);
		this.xotree.parseHTTP(url,null,this.delegate(this,this.onPartnerListLoaded));
	},

    onPartnerListEmpty: function(){
        this.hideLoading();
    },
	
	onPartnerListLoaded: function(result){
	    var partners = result.partners.partner;
		this.partners = partners;
	    this.listPointer =0;
		this.root.FindName("TotalPartnersTxt").Text = result.partners["-total"];
		if(result.partners["-total-regions"])
		    this.distinctRegionIds = result.partners["-total-regions"].split(",");
        if(result.partners["-total-expertises"])		    
		    this.distinctExpertiseIds = result.partners["-total-expertises"].split(",");
		if(this.distinctRegionIds.length)
		    this.root.FindName("TotalRegionsTxt").Text = ""+this.distinctRegionIds.length;

	    if(!partners){
	        this.onPartnerListEmpty();
	        return;
	    }

		this.distinctExpertises = new Array();
		this.distinctRegions = new Array();
		var expertisesCount = this.settings.result.expertises.item.length;
		for(var i=0;i<this.distinctExpertiseIds.length;i++){
			for(var j=0 ; j< expertisesCount; j++){
				if(this.distinctExpertiseIds[i] == this.settings.result.expertises.item[j]["-id"]){
					this.distinctExpertises.push(this.settings.result.expertises.item[j]);
				}
			}
		}
		var regionsCount = this.settings.result.regions.item.length;
		for(var i=0;i<this.distinctRegionIds.length;i++){
        	for(var j=0 ; j< regionsCount; j++){
				if(this.distinctRegionIds[i] == this.settings.result.regions.item[j]["-id"]){
					this.distinctRegions.push(this.settings.result.regions.item[j]);
				}
			}
		}
		
		this.updateCheckbox();
	    for(var i=0;i<this.items.length;i++){
	        if(this.items[i])
	            this.items[i].Visibility = "Collapsed";
	    }
		for(var i=0; i<partners.length; i++){
			var item;
			if(this.items[i]){
				item = this.items[i];
				item.Visibility = "Visible";
			}else{
				item = this.control.content.createFromXAML(this.itemStr.replaceAll("_var",i));
				this.items[i] = item;
				this.partnerItemsCanvas.Children.Add(item);
			    item.addEventListener("MouseLeftButtonUp",this.delegate(this, this.onClickItem,i));
			    item.addEventListener("MouseEnter",this.delegate(this,this.onEnterItem,i));
			    item.addEventListener("MouseLeave",this.delegate(this,this.onLeaveItem,i));
			}

			item.findName("PartnerItem_TitleTxt" + i).Text =  partners[i].name;
			if(partners[i].description.length > 338)
				item.findName("PartnerItem_BodyTxt" + i).Text = partners[i].description.substring(0,338) + " ...";
			else
				item.findName("PartnerItem_BodyTxt" + i).Text = partners[i].description;
			item.findName("PartnerItem_Logo" + i).Source = partners[i].logo;
			item.SetValue("Canvas.Top",(this.listPointer % 3)* 80);
			item.SetValue("Canvas.Left",Math.floor(this.listPointer / 3)* 500);
			this.listPointer ++;
			item = null;
		}
			
		this.columnNumber = Math.ceil((this.listPointer) /3);
		this.root.findName("MovePartnerListSb").Children.GetItem(0).keyframes.GetItem(0).Value = 0;
			this.root.findName("MovePartnerListSb").Begin();
		if(this.columnNumber >1 ){
			this.root.findName("Slider").setValue("Canvas.Left",0);
			this.root.findName("SliderContainer").Visibility = "Visible";	
		}else{
			this.root.findName("SliderContainer").Visibility = "Collapsed";
		}
		
		this.hideLoading();
		partners = null;
	},
	
	/*** Load Expertise and Region List ***/
	getSettings: function(){
		this.xotree = new XML.ObjTree();
		this.xotree.force_array = ["item"];
		this.settings = this.xotree.parseHTTP("../../locale/en-us/data/partners/settings.xml");
	},

	updateCheckbox: function(){
		var exps = this.queryStr.exps.split(",");
		var regs = this.queryStr.regs.split(",");
		
		this.expCbCanvas.Children.Clear();
		this.regCbCanvas.Children.Clear();
		this.expCbCanvas.SetValue("Canvas.Top",0);
		this.regCbCanvas.SetValue("Canvas.Top",0);
		this.expUp.Visibility = "Collapsed"; 
		this.geoUp.Visibility = "Collapsed"; 
		
		if(this.distinctExpertises.length <= 24){
			this.expDown.Visibility = "Collapsed"; 
		}else{
			this.expDown.Visibility = "Visible"; 
		}
		if(this.distinctRegions.length <= 24){
			this.geoDown.Visibility = "Collapsed"; 
		}else{
			this.geoDown.Visibility = "Visible"; 	
		}
		
		for(var i=0;i<this.distinctExpertises.length;i++){
			var cb = this.control.content.createFromXaml(this.checkboxStr.replaceAll("_var","_exp" +i));
			this.expCbCanvas.Children.Add(cb);
			cb.SetValue("Canvas.Left",Math.floor(i / (this.distinctExpertises.length/2))* 180);
			cb.SetValue("Canvas.Top", 15 *(i%Math.round(this.distinctExpertises.length/2)));
			this.expCbs[i] = new PartnerGallery.Checkbox(cb,"exp"+i,this.delegate(this,this.onExpertiseClicked,i));
			this.expCbs[i].setText(this.distinctExpertises[i]["-name"]);
			if(exps.length){
				for(var j=0; j<exps.length; j++){
					if(exps[j] == this.distinctExpertises[i]["-id"])
						this.expCbs[i].check();
				}
			}
			if(this.currentAccordion != "ExpFilterCanvas")
				this.expCbs[i].hide();
		}
		
		for(var i=0;i<this.distinctRegions.length;i++){
			var cb = this.control.content.createFromXaml(this.checkboxStr.replaceAll("_var","_reg" + i));
			this.regCbCanvas.Children.Add(cb);
			cb.SetValue("Canvas.Left",Math.floor(i / (this.distinctRegions.length/2))* 180);
			cb.SetValue("Canvas.Top",15 *(i%Math.round(this.distinctRegions.length/2)));
			this.regCbs[i] = new PartnerGallery.Checkbox(cb,"reg"+i,this.delegate(this,this.onRegionClicked,i));
			this.regCbs[i].setText(this.distinctRegions[i]["-name"]);
			if(regs.length){
				for(var j=0; j<regs.length; j++){
					if(regs[j] == this.distinctRegions[i]["-id"])
						this.regCbs[i].check();
				}
			}
			if(this.currentAccordion != "GeoFilterCanvas")
				this.regCbs[i].hide();
		}
		
	},
	
	onExpertiseClicked: function(isChecked,i){
		var expertise = this.distinctExpertises[i];
		var exist = false;
		var exps = new Array();
		if(this.queryStr.exps!= ""){
			exps = this.queryStr.exps.split(",");
			for(var i=0;i<exps.length;i++){
				if(exps[i] == expertise["-id"]){
					exist = true;
					if(!isChecked){
						exps.splice(i,1);
					}
					break;
				}
			}
		}
		if(!exist &&isChecked){
			exps.push(expertise["-id"]);
		}
		this.queryStr.exps = exps.join(",");
		this.getPartnerList(this.queryStr);
	},
	
	onRegionClicked: function(isChecked,i){
		var region = this.distinctRegions[i];
		var exist = false;
		var regs = new Array();
		if(this.queryStr.regs!= ""){
			for(var i=0;i<regs.length;i++){
				if(regs[i] == region["-id"]){
					exist = true;
					if(!isChecked){
						regs.splice(i,1);
					}
					break;
				}
			}
		}
		if(!exist && isChecked){
			regs.push(region["-id"]);
		}
		this.queryStr.regs = regs.join(",");
		this.getPartnerList(this.queryStr);
	},
	
	/*** Open Link ***/
	openUrl:function(sender, eventargs,url){
		window.location.href = url;
	},
	onOpenPartnerUrl: function(sender, eventargs){
	    if (sender.Text.indexOf("http") > -1)
	    {
    		window.open(sender.Text);
        }
	},
	
	/*** Utility function ***/
	delegate: function( target, callback )
	{
			var func;
			if(arguments.length > 2)
			{
			  var _params = [];
			  for(var n = 2; n < arguments.length; n++) _params.push(arguments[n]);
			  func = function() { 
				var params = [];
				for(var n = 0; n < arguments.length; n++) params.push(arguments[n]);
				for(var n = 0; n < _params.length; n++) params.push(_params[n]);
				callback.apply(target,params); 
			  }
			}
			else{
				func =  function() {  callback.apply(target,arguments); }
			}
			return func;
	}
	
}

PartnerGallery.Checkbox = function(target,key, func) 
{
	this.key =  key;
	this.state = false;
	this.enabled = true;
	this.callback = func;
	this.target = target;
	this.target.cursor="Hand";
	this.square = target.findName("CheckBox_Square_" + key);
	this.txt = target.findName("CheckBox_Txt_" + key);
	this.flag = target.findName("CheckBox_Flag_" + key);
	
	this.target.addEventListener("MouseLeftButtonUp",Silverlight.createDelegate(this,this.onClick));
	this.disableSb = target.findName("CheckBox_DisableSb_" + key);
	this.enableSb = target.findName("CheckBox_EnableSb_" + key);
}

PartnerGallery.Checkbox.prototype =
{
	disable: function() 
	{
	    this.enabled = false;
		this.disableSb.Begin();
	},
	
	enable: function(){
	    this.enabled = true;
		this.enableSb.Begin();
	},
	
	hide: function(){
		this.target.visibility = "Collapsed";
	},
	
	show: function(){
		this.target.visibility = "Visible";
	},
	
	check: function(){
		this.state = ! this.state;
		if(this.state)
			this.flag.visibility = "Visible";
		else
			this.flag.visibility = "Collapsed";
	},
	
	setText: function(text){
		this.txt.Text = text;
	},
	
	onClick: function(sender, eventArgs){
	    if(this.enabled){
		    this.check();
		    if(this.callback) this.callback(this.state);
		 }
	}
}


PartnerGallery.ToggleButton = function(parent,OffName, OnName, callback,defaultState) 
{
	this.offBtn = parent.FindName(OffName);
	this.onBtn = parent.FindName(OnName);
	this.onBtn.cursor = "Hand";
	this.offBtn.cursor = "Hand";
		
	this.callback = callback;
	this.onBtn.addEventListener("MouseLeftButtonUp",Silverlight.createDelegate(this,this.onToggle));
	this.offBtn.addEventListener("MouseLeftButtonUp",Silverlight.createDelegate(this,this.onToggle));
	
	if(defaultState){
		this.setState(true);
	}else{
		this.setState(false);
	}
}

PartnerGallery.ToggleButton.prototype =
{
	onToggle: function(){
		this.callback(this.state);
		this.setState(!this.state);
	},
	
	setState: function(state){
		this.state = state;
		if(this.state){
			this.onBtn.visibility = "Visible";
			this.offBtn.visibility = "Collapsed";
		}else{
			this.onBtn.visibility = "Collapsed";
			this.offBtn.visibility = "Visible";
		}
	}
}

String.prototype.replaceAll  = function(s1,s2){   
	   return this.replace(new RegExp(s1,"gm"),s2);   
}  

function searchPartner(event)
{
    if ((event.keyCode == 13) && (typeof(window.partnerGallery) != "undefined") && (window.partnerGallery != null))
    {
        window.partnerGallery.onSearchBtnClick();
    }
}