function GridViewManager(params){
	
	var COLUMN = 5;
	var last = null;
	var lastRowId = 100;
	var triggers = new Array();
	var slides = new Array();
	var grids = new Array();
	var pmGid = -1;
	var isTall = false;
	var slideTimer = new Array();
	var gridClass;
	
	function getRow(pos){
		return Math.floor(pos/COLUMN);
	}
	function findContainerTop(pos) {
		return document.getElementById('slide-container_'+(getRow(pos)-1));
	}
	function findContainerBottom(pos) {
		return document.getElementById('slide-container_'+getRow(pos));
	}
	function findArrowUp(pos){
		return document.getElementById('up_'+pos);
	}
	function findArrowDn(pos){
		return document.getElementById('dn_'+pos);
	}
	function clearTimer(tid){
		clearTimeout(slideTimer[tid]);
	}
	function showArrowDn(arrow) {
		if (arrow) arrow.className = 'arrow-dn';
	}
	function showArrowUp(arrow) {
		if (arrow) arrow.className = 'arrow-up';
	}
	var hideArrow = function(arrow) {
		if (arrow) arrow.className = 'arrow-container';
	}
	var highlightGrid = function() {
		this.slideItem.delayedShow();
	}
	var lowlightGrid = function() {
		this.slideItem.delayedHide();
	}
	var delayedHide = function() {
		clearTimer(this.timerId);
		if (this.className.indexOf('slide-on') > -1) {
			var el = this;
			slideTimer[this.timerId] = setTimeout( function(){
				hideSlide(el);}, 1000);
		}
	}
	var delayedShow = function(){
		clearTimer(this.timerId);
		if (this.className.indexOf('slide-off') > -1 ) {
			var el = this;
			slideTimer[this.timerId] = setTimeout(function(){
				showSlide(el);}, 250);
		}
	}
	var hideSlide = function(el){
		if (el) {
			el.className = 'grid-cell-slide slide-off';
			if(el.containerTop) {
				el.containerTop.className='slide-container off';
				getPMGid();
				if (sPopupGroups[pmGid]) {
					sPopupGroups[pmGid].setProperty('topOffset', -10);
					sPopupGroups[pmGid].setProperty('leftOffset', 7);
				}
				hideArrow(findArrowDn(el.pos));
			}
			if(el.containerBottom) {
				el.containerBottom.className='slide-container off';
				hideArrow(findArrowUp(el.pos));
			}
			clearTimer(last.timerId);
			last = null;
			lastRowId = 100;
		}
	}
	var showSlide = function(el){
		var overlap = false;
		var overlapRow = -1;
		if (last && last != el) {
			overlap = true;
			overlapRow = lastRowId;	
			hideSlide(last);
		}
		if (el) {
			if (overlap && overlapRow < el.rowId && el.containerTop) {
				if (el.containerTop) {
					getPMGid();
					el.containerTop.className = 'slide-container on';
					if (sPopupGroups[pmGid]) {
						sPopupGroups[pmGid].setProperty('topOffset', isTall ? (-385-230*(el.rowId-1)) : (-345-195*(el.rowId-1)));
						sPopupGroups[pmGid].setProperty('leftOffset', NextagUtils.is_ie ? -360 : -210);
					}
				}
				if (el.containterBottom) el.containerBottom.className = 'slide-container off';
				el.className = 'grid-cell-slide slide-onTop';
				showArrowDn(findArrowDn(el.pos));
				lastRowId = el.rowId-1;
			} else if (el.containerBottom) {
				if (el.containerBottom) el.containerBottom.className = 'slide-container on';
				if (el.containerTop) el.containerTop.className = 'slide-container off';
				el.className = 'grid-cell-slide slide-onBottom';
				showArrowUp(findArrowUp(el.pos));
				lastRowId = el.rowId;
			}
			last = el;
		}
	}
	function getTriggers(con_prefix) {
		var i = 0;
		var curEle;
		var containerGroup = new Array();
		while (curEle =	document.getElementById(con_prefix+(i++))){
			containerGroup.push(curEle);
		}
		triggers.push(con_prefix, containerGroup);
	}
	function getGrids() {
		var i = 0;
		var curEle;
		while (curEle =	document.getElementById('grid-container_'+i)){
			grids.push(curEle);
			if (curEle = findArrowDn(i)) grids[i].dn = curEle;
			if (curEle = findArrowUp(i)) grids[i].up = curEle;
			i++;
		}
	}
	function getSlides() {
		var i = 0;
		var curEle;
		while (curEle = document.getElementById('grid-cell-slide_'+(i++))){
			slides.push(curEle);
		}
	}
	function getPMGid() {
		var i = 0;
		var curGroup;
		if (pmGid < 0 && sPopupGroups) {
			while(curGroup = sPopupGroups[i]) {
				if (curGroup.getProperty('triggerPrefix') == 'mltLink') {
					pmGid = i;
					break;
				}
				i++;
			}
		}
	}
	var init = function(){
		getSlides();
		getGrids();
		getTriggers('grid-img-container_');
		getTriggers('grid-name-container_');
		if (!slides || !grids || !triggers) 
			return;
		
		slideTimer = new Array(slides.length);
		if (grids[0]) gridClass = grids[0].className;
		var slidesTable = document.getElementById('slides-tbl-0');
		if (slidesTable && slidesTable.className) isTall = slidesTable.className.indexOf('tall') > -1;

		for (var i = 0; i < slides.length; i++) {
			var slide = slides[i];
			var grid = grids[i];
			if (!slide || !grid) continue;
			
			slide.pos = i;
			slide.containerTop = findContainerTop(slide.pos);
			slide.containerBottom = findContainerBottom(slide.pos);
			slide.rowId = getRow(i);
			slide.timerId = i;
			
			slide.delayedShow = delayedShow;
			slide.delayedHide = delayedHide;
			slide.onmouseout = delayedHide;
			slide.onmouseover = delayedShow;
			
			for (var group in triggers) {
				if (!triggers[group][i]) continue;
				
				triggers[group][i].gridItem = grid;
				triggers[group][i].slideItem = slide;
				triggers[group][i].onmouseover = highlightGrid;
				triggers[group][i].onmouseout = lowlightGrid;
			}
		}
	}
	
	init();
}