var iM = {

	jQuery : $,

	settings : {
		cache: [],
		colorStylePattern: /\bcolor-[\w]{1,}\b/,
		columns : '#columns>li>ul',
		widgetSelector: 'li.widget',
		handleSelector: 'div.widget-header',
		editSelector: 'div.widget-settings',
		contentSelector: 'div.widget-content',
		childWidgetSelector: 'li.widget-child',
		childHandleSelector: 'div.widget-child-head',
		childContentSelector: 'div.widget-child-content',
		widgetDefault : {
			movable: true,
			removable: true,
			collapsible: true,
			editable: true,
			extendable: false, // +/- - in future can optimize, remove extendable, leave only count & delta
			count: 3,
			delta: 1, // +/- - how many items add/remove
			selectable: false, // checkbox - in future can optimize, remove selectable, leave only mask
			mask: 0xffffffff,
			colorable: true,
			colorClasses : ['color-1', 'color-2', 'color-3', 'color-4', 'color-5', 'color-6'],
			colorClass: 'color-4'
		},
		widgetIndividual : {
			'main-panel' : {
				name: 'A',
				editable: false,
				movable: false,
				removable: false,
				colorable: false
			},
			news : {
				name: 'B',
				selectable: true
			},
			'facts-and-figures' : {
				name: 'C',
				selectable: true
			},
			'administrative-resources' : {
				name: 'D',
				selectable: true
			},
			'living-information' : {
				name: 'E',
				selectable: true
			},
			'county-participation' : {
				name: 'F',
				selectable: true
			},
			'report-center' : {
				name: 'G',
				selectable: true
			},
			'county-information' : {
				name: 'H',
				selectable: true
			},
			'tourist-information' : {
				name: 'I',
				selectable: true
			},
			'personal-services' : {
				name: 'J'
			},
			'county-office' : {
				name: 'K',
				selectable: true
			},
			'chairman' : {
				name: 'L',
				selectable: true
			},
			'site-help' : {
				name: 'M',
				selectable: true
			},
			'information-alerts' : {
				name: 'N'
			},
			'bonghwa-focus' : {
				name: 'O',
				extendable: true
			},
			'permanent-links' : {
				name: 'P'
			},
			'family-site' : {
				name: 'Q'
			},
			'todays-events' : {
				name: 'R'
			},
			'news-speech' : {
				name: 'W'
			},
			'banners' : {
				name: 'Y',
				extendable: true,
				delta: 2
			},
			'weather' : {
					name: 'Z'
			}
		},
		childWidgetDefault: {
			extendable: true,
			count: 2,
			delta: 1
		},
		childWidgetIndividual: {
			'news-board' : {
				name: 'a'
			},
			'news-announcement' : {
				name: 'b'
			},
			/*'news-report' : {
				name: 'c'
			},
			'news-speech' : {
				name: 'd'
			},*/
			'news-tender' : {
				name: 'e'
			},
			'news-contract' : {
				name: 'f'
			},
			'news-premium' : {
				name: 'g'
			},
			'news-sanitary' : {
				name: 'h'
			},
			'news-report' : {
				name: 'i'
			},
			'news-etc' : {
				name: 'k'
			}
		}
	},
	
	color2preferences : {
		'color-1'	: '!',
		'color-2'	: '@',
		'color-3'	: '#',
		'color-4'	: '$',
		'color-5'	: '%',
		'color-6'	: '^'
	},
	
	preferences2color : {
		'!' : 'color-1',
		'@' : 'color-2',
		'#' : 'color-3',
		'$' : 'color-4',
		'%' : 'color-5',
		'^' : 'color-6'
	},

	init : function () {
		var iM = this;

		//if (navigator.userAgent.indexOf("MSIE 6.0") == -1) {
			//this.jQuery.cookies.setOptions({hoursToLive: 720});

			this.createMainPanel();
			this.createResetButton();
			this.createCollapseButton();

			this.addWidgetControls();

			this.makeSortable('#columns>li>ul');
		//}


		 //this.initPopupZone();
	},

	getWidgetSettings : function (id) {
		var $ = this.jQuery,
				settings = this.settings,
				widgetSettings = settings.cache[id];

		if (typeof widgetSettings === 'undefined') {
			widgetSettings = (id && settings.widgetIndividual[id])
				? $.extend({},settings.widgetDefault,settings.widgetIndividual[id])
				: settings.widgetDefault;
			settings.cache[id] = widgetSettings;
		}

		return widgetSettings;
	},

	getChildWidgetSettings: function(id) {
		var $ = this.jQuery,
				settings = this.settings,
				widgetSettings = settings.cache[id];

		if (typeof widgetSettings === 'undefined') {
			widgetSettings = (id && settings.childWidgetIndividual[id])
						? $.extend({}, settings.childWidgetDefault, settings.childWidgetIndividual[id])
						: settings.childWidgetDefault;
			settings.cache[id] = widgetSettings;
		}

		return widgetSettings;
	},

	addWidgetControls : function () {
		var iM = this,
				$ = this.jQuery,
				settings = this.settings,
				$columns = $(settings.columns);

		$columns.find(settings.childWidgetSelector).each(function() {
			var widget = this,
					thisChildWidgetSettings = iM.getChildWidgetSettings(widget.id);

			if (thisChildWidgetSettings.extendable)
					iM.makeExtendable(widget);
		});

		$columns.find(settings.widgetSelector).each(function() {
			var widget = this,
					thisWidgetSettings = iM.getWidgetSettings(widget.id);

			if (thisWidgetSettings.removable)
					iM.makeRemovable(widget);

			if (thisWidgetSettings.editable) {
				iM.makeEditable(widget);
			
				if (thisWidgetSettings.colorable)
					iM.makeColorable(widget, thisWidgetSettings.colorClasses);
				
				if (thisWidgetSettings.selectable)
					iM.makeSelectable(widget);
			}

			if (thisWidgetSettings.extendable)
					iM.makeExtendable(widget);

			if (thisWidgetSettings.collapsible)
					iM.makeCollapsible(widget);
		});
	},

	makeSortable : function(container) {
		var iM = this,
				$ = this.jQuery,
				settings = this.settings,
				$container = $(container),
				$sortableItems = $container.find(settings.widgetSelector).not('#main-panel');

		$sortableItems//.find(settings.handleSelector)
			.css({
				cursor: 'move'
			})
			.mousedown(function() {
				$sortableItems.css({width:''});
				$(this).parent().css({
					width: $(this).parent().width() + 'px'
				});
			})
			.mouseup(function() {
				if ($(this).parent().hasClass('dragging'))
					$(container).sortable('disable');
			});

		$container.sortable({
			items: $sortableItems,
			connectWith: $container,
			//handle: settings.handleSelector,
			placeholder: 'widget-placeholder',
			forcePlaceholderSize: true,
			revert: 300,
			delay: 0,
			opacity: 0.9,
			containment: 'document',
			start: function (e,ui) {
				$(ui.helper).addClass('dragging');
			},
			stop: function (e,ui) {
				$(ui.item).css({width:''}).removeClass('dragging');
				$(container).sortable('enable');
				iM.savePreferences();
			}
		});
	},
		
	createMainPanel : function() {
		var iM = this,
				$ = this.jQuery,
				settings = this.settings,
				$mainPanel = $('<ul id="main"><li id="main-panel" class="widget color-4 hidden"><b class="xtop"><b class="xb1"></b><b class="xb2"></b><b class="xb3"></b></b><div class="widget-wrapper"><div class="widget-content"></div></div><b class="xbottom"><b class="xb3"></b><b class="xb2"></b><b class="xb1"></b></b></li></ul>').insertAfter($('#menu')),
				$content = $mainPanel.find(settings.contentSelector);

		var panelContent =  [];
		panelContent.push('<ul>');

		$(settings.widgetSelector).each(function() {
			if (this.id)
				if (this.id != 'main-panel') { // change to check 'removable'
					panelContent.push('<li><label><input type="checkbox"');
					if ($(this).hasClass('hidden') == false)
						panelContent.push(' checked="checked"');
					panelContent.push(' value="');
					panelContent.push(this.id);
					panelContent.push('" />');
					panelContent.push($(this).find(settings.handleSelector).find('h3').text());
					panelContent.push('</label></li>');
				}
		});

		panelContent.push('</ul>');
		$content.html(panelContent.join(''));

		$content.click(function(e){
			var checkbox = e.target,
					$checkbox = $(e.target);
			if ($checkbox.is(':checkbox'))
			{
				if (checkbox.checked)
					iM.showWidget($checkbox.val(), false, true);
				else
					iM.hideWidget($checkbox.val(), false, true);
			}
		});
			
		/*
		$mainPanel.find(':checkbox').click(function(){
			if (this.checked)
				iM.showWidget($(this).val(), false, true);
			else
				iM.hideWidget($(this).val(), false, true);
		});*/
	},
	
	/*
	createCollapseButton : function() {
		var iM = this,
				$ = this.jQuery,
				settings = this.settings,
				$mainPanel = $('#main-panel');

		$('<img src="/images/main/misc/button-expand.png" class="collapse" alt="메인페이지 설정" />')
			.insertBefore($mainPanel.parent())
			.click(function() {
				if ($mainPanel.hasClass('hidden'))	{
					$mainPanel.removeClass('hidden');
					this.src = "/images/main/misc/button-collapse.png";
				}
				else {
					$mainPanel.addClass('hidden');
					this.src = "/images/main/misc/button-expand.png";
				}
		});
	},

	createResetButton : function() {
		var iM = this,
				$ = this.jQuery,
				settings = this.settings,
				$mainPanel = $('#main-panel');
		
		$('<img src="/images/main/misc/button-reset.png" alt="초기화" class="reset" />')
			.insertBefore($mainPanel.parent())
			.click(function() {
				iM.resetPreferences();
			});
	},
	*/
	serializeColumn : function(column, num) {
		var iM = this,
				$ = this.jQuery,
				settings = this.settings,
				preferences = [];

		preferences.push('+' + num);
		$(settings.widgetSelector + ',' + settings.childWidgetSelector, $(column)).each(function() {
			var thisWidgetSettings = $(this).is(settings.widgetSelector) ? iM.getWidgetSettings(this.id) : iM.getChildWidgetSettings(this.id);
			preferences.push('+');
			preferences.push(thisWidgetSettings.name);
			if (thisWidgetSettings.collapsible) {
				if ($(this).hasClass('collapsed'))
						preferences.push('c'); // collapsed
				else
						preferences.push('e'); // expanded
			}
			if (thisWidgetSettings.removable) {
				if ($(this).hasClass('hidden'))
						preferences.push('h'); // hidden
				else
						preferences.push('v'); // visible
			}
			var thisWidgetColorClass = iM.getWidgetColorClass(this);
			if (thisWidgetColorClass != thisWidgetSettings.colorClass)
				preferences.push(iM.color2preferences[thisWidgetColorClass]);
			// extendable XOR selectable
			if (thisWidgetSettings.extendable && thisWidgetSettings.count != iM.getWidgetItemsCount(this))
				preferences.push(iM.getWidgetItemsCount(this));
			if (thisWidgetSettings.selectable && thisWidgetSettings.mask != iM.getWidgetItemsMask(this))
				preferences.push(iM.getWidgetItemsMask(this));
		});

		return preferences.join('');
	},
	
	getWidgetId : function(name) {
		var $ = this.jQuery,
				settings = this.settings,
				id;
				
		$.each(settings.widgetIndividual, function(i, val) {
			if (val.name && val.name == name) {
				id = i;
				return false;
			}
		});
		
		return id;
	},

	getChildWidgetId : function(name) {
		var $ = this.jQuery,
				settings = this.settings,
				id;
				
		$.each(settings.childWidgetIndividual, function(i, val) {
			if (val.name && val.name == name) {
				id = i;
				return false;
			}
		});
		
		return id;
	},

	savePreferences : function() {
		var iM = this,
				$ = this.jQuery,
				settings = this.settings;

		var preferences = [];
		preferences.push(iM.serializeColumn('.column1', 1));
		preferences.push(iM.serializeColumn('.column2', 2));
		preferences.push(iM.serializeColumn('.column3', 3));
		preferences.push('+');

		//alert(preferences);
		$.cookies.set('preferences', preferences.join(''));
	},
	
	resetPreferences : function() {
		var iM = this,
				$ = this.jQuery;
		
		$.cookies.del('preferences');
		window.location.reload();
	},

	// widget only
	makeEditable: function(widget) {
		var iM = this,
				$ = this.jQuery,
				settings = this.settings,
				$widget = typeof widget === 'string' ? $('#' + widget) : $(widget),
				$handle = $widget.find(settings.handleSelector),
				$edit = $('<div class="widget-settings" style="display:none;"></div>').insertAfter($handle);
		
		$('<img src="/images/main/misc/edit.png" alt="편집" title="편집" class="edit" />')
			.mousedown(function() {
				return false;
			})
			.toggle(function() {					
				$edit.show().find('input').focus();
				return false;
			},function() {				
				$edit.hide();
				return false;
			})
			.appendTo($handle);
	},
	
	// widget only
	makeColorable: function(widget, colors) {
		var iM = this,
				$ = this.jQuery,
				settings = this.settings,
				$widget = typeof widget === 'string' ? $('#' + widget) : $(widget),
				$edit = $widget.find(settings.editSelector);
				
		var colorList = ['<div><label class="settings">색상 변경:</label><ul class="colors settings">'];
		$(colors).each(function() {
			colorList.push('<li class="');
			colorList.push(this);
			colorList.push('"/>');
		});
		colorList.push('</ul></div>');
		$edit.append(colorList.join(''));
				
		$edit.find('ul.colors>li').click(function() {
			iM.setWidgetColorClass($widget, $(this).attr('class').match(settings.colorStylePattern)[0], true);
			return false;
		});
	},

	setWidgetColorClass : function(widget, colorClass, save) {
		var iM = this,
				$ = this.jQuery,
				settings = this.settings,
				$widget = typeof(widget) == 'string' ? $('#' + widget) : $(widget),		
				thisWidgetColorClass = iM.getWidgetColorClass($widget);
		
		if (thisWidgetColorClass) // should we really check it?
			if (thisWidgetColorClass[0] != colorClass) {
				$widget
					.removeClass(thisWidgetColorClass[0])
					.addClass(colorClass);
		
				if (save)
					iM.savePreferences();
			}
	},
	
	getWidgetColorClass : function(widget) {
		var iM = this,
				$ = this.jQuery,
				settings = this.settings,
				$widget = typeof(widget) == 'string' ? $('#' + widget) : $(widget),		
				thisWidgetColorClass = $widget.attr('class').match(settings.colorStylePattern);
				
		return thisWidgetColorClass;
	},

	// widget only
	makeSelectable : function(widget) {
		var iM = this,
				$ = this.jQuery,
				settings = this.settings,
				$widget = typeof widget === 'string' ? $('#' + widget) : $(widget),
				$edit = $widget.find(settings.editSelector),
				$content = $widget.find(settings.contentSelector);

		var cbList = ['<div class="select"><label class="settings">링크:</label><ul class="select settings">'];
		$content.find('>ul:not(.skip)>li,>div>ul:not(.skip)>li').each(function() { // introduced '>div' 'cause of tourist-information
			cbList.push('<li><label><input type="checkbox"');
			if ($(this).hasClass('hidden') === false)
				cbList.push(' checked="checked"');
			cbList.push(' />');
			if ($('h4', this).length)
				cbList.push($('h4', this).text());
			else {
				if ($('img', this).length)
					cbList.push($('img', this).attr('alt'));
				else
					cbList.push($(this).text());
			}
			cbList.push('</label></li>');
		});
		cbList.push('</ul></div>');
		$edit.append(cbList.join(''));

		$edit.click(function(e) {
			var $target=$(e.target);
			if ($target.is(':checkbox')) {
				var mask = 0;
				$edit.find('ul.select :checkbox').each(function(i) {
					if (this.checked)
						mask |= 1 << i;
				});
				iM.setWidgetItemsMask($widget, mask, true);
			}
		});
	},
	
	setWidgetItemsMask : function(widget, mask, save) {
		var iM = this,
				$ = this.jQuery,
				settings = this.settings,
				$widget = typeof widget === 'string' ? $('#' + widget) : $(widget),
				$edit = $widget.find(settings.editSelector),
				$content = $widget.find(settings.contentSelector),
				$contentItems = $content.find('>ul:not(.skip)>li,>div>ul:not(.skip)>li');
			
		$edit.find('ul.select :checkbox').each(function(i) {
			if (mask & (1 << i))
				$(this).attr('checked', 'checked');
			else
				$(this).removeAttr('checked');
		});
		$contentItems.each(function(i) {
			if (mask & (1 << i))
				$(this).removeClass('hidden');
			else
				$(this).addClass('hidden');
		});
		$contentItems.removeClass('first').removeClass('last');
		$contentItems.filter(':not(.hidden):first').addClass('first');
		$contentItems.filter(':not(.hidden):last').addClass('last');

		if (save)
			iM.savePreferences();
	},
		
	getWidgetItemsMask : function(widget) {
		var	$ = this.jQuery,
				settings = this.settings,
				$widget = typeof widget === 'string' ? $('#' + widget) : $(widget),
				mask = 0;
			
		$widget.find(settings.contentSelector).find('>ul:not(.skip)>li,>div>ul:not(.skip)>li').each(function(i){
			if ($(this).is(':not(.hidden)'))
				mask |= (1 << i);
		});
			
		return mask;
	},
	
	// widget only
	makeRemovable : function(widget) {
		var iM = this,
				$ = this.jQuery,
				settings = this.settings,
				$widget = typeof widget === 'string' ? $('#' + widget) : $(widget),
				$handle = $widget.find(settings.handleSelector);
		
		$('<img src="/images/main/misc/close.png" alt="닫기" title="닫기" class="close" />')
			.mousedown(function() {
				return false;
			})
			.click(function() {
				iM.hideWidget($widget, true, true);
					return false;
			})
			.appendTo($handle);
	},

	showWidget : function(widget, animate, save) {
		var iM = this,
				$ = this.jQuery,
				$widget = typeof widget === 'string' ? $('#' + widget) : $(widget);
		
		$('#main-panel :checkbox[value=' + $widget[0].id + ']').attr('checked', 'checked');
		$widget.removeClass('hidden');
		$widget.animate({opacity: 1}, animate ? 'normal' : 0, null, function() {
			if (save)
				iM.savePreferences();
		});
	},

	hideWidget : function(widget, animate, save) {
		var iM = this,
				$ = this.jQuery,
				$widget = typeof(widget) == 'string' ? $('#' + widget) : $(widget);
		
		$('#main-panel :checkbox[value=' + $widget[0].id + ']').removeAttr('checked');
		$widget.animate({opacity: 0}, animate ? 'normal' : 0, null, function(){
			$widget.addClass('hidden');
			if (save)
				iM.savePreferences();
		});
	},
	
	// widget only
	makeCollapsible : function(widget) {
		var iM = this,
				$ = this.jQuery,
				settings = this.settings,
				$widget = typeof widget === 'string' ? $('#' + widget) : $(widget),
				$handle = $widget.find(settings.handleSelector),
				$title = $handle.find('h3');

		$title
				.mousedown(function() {
						return false;
				})
				.click(function() {
					if ($widget.hasClass('collapsed'))
						iM.expandWidget($widget, true);
					else
						iM.collapseWidget($widget, true);							
					return false;
				});
	},
	
	// widget only
	collapseWidget : function(widget, save) {
		var	iM = this,
				$ = this.jQuery,
				settings = this.settings,
				$widget = typeof widget === 'string' ? $('#' + widget) : $(widget);

		$widget.addClass('collapsed');

		if (save)
			iM.savePreferences();
	},

	// widget only
	expandWidget : function(widget, save) {
		var iM = this,
				$ = this.jQuery,
				settings = this.settings,
				$widget = typeof(widget) === 'string' ? $('#' + widget) : $(widget),
				$handle = $widget.find(settings.handleSelector);

		$widget.removeClass('collapsed');

		if (save)
			iM.savePreferences();
	},
	
	// widget & child widget
	makeExtendable : function(widget) {
		var iM = this,
				$ = this.jQuery,
				settings = this.settings,
				$widget = typeof widget === 'string' ? $('#' + widget) : $(widget),
				thisWidgetSettings = iM.getWidgetSettings($widget[0].id),
				$handle, $content;
		
		if ($widget.is(settings.widgetSelector)) {
			$handle = $widget.find(settings.handleSelector);
			$content = $widget.find(settings.contentSelector);
		} else {
			$handle = $widget.find(settings.childHandleSelector);
			$content = $widget.find(settings.childContentSelector);
		}
		
		var $items = $content.find('>ul>li');
		var src = ($items.filter(':not(.hidden)').length > thisWidgetSettings.delta) ? 'minus.png' : 'minus-disabled.png';

		$(['<img src="/images/main/misc/', src, '" alt="-" title="-" class="minus" />'].join(''))
			.mousedown(function() {
				return false;
			})
			.click(function() {
				var $items = $content.find('li:not(.hidden)');
				var count = $items.length - thisWidgetSettings.delta;
				if (count < thisWidgetSettings.delta)
					count = thisWidgetSettings.delta;
				if (count % thisWidgetSettings.delta != 0)
					count = Math.ceil(count / thisWidgetSettings.delta) * thisWidgetSettings.delta;
				iM.setWidgetItemsCount($widget, count, true);
				return false;
			})
			.appendTo($handle);

		src = ($items.filter('.hidden').length == 0) ? 'plus-disabled.png' : 'plus.png';

		$(['<img src="/images/main/misc/', src, '" alt="+" title="+" class="plus" />'].join(''))
			.mousedown(function() {
				return false;
			})
			.click(function() {
				var $items = $content.find('li:not(.hidden)');
				var count = $items.length + thisWidgetSettings.delta;
				iM.setWidgetItemsCount($widget, count, true);
				return false;
			})
			.appendTo($handle);

		$handle.find('a.rss').appendTo($handle);
	},
	
	// widget & child widget
	setWidgetItemsCount : function(widget, count, save) {
		var iM = this,
				$ = this.jQuery,
				settings = this.settings,
				$widget = typeof widget === 'string' ? $('#' + widget) : $(widget),
				$content = $widget.is(settings.widgetSelector) ? $widget.find(settings.contentSelector) : $widget.find(settings.childContentSelector);

		$content.find('>ul>li').removeClass('hidden').filter(':gt(' + (count-1) + ')').addClass('hidden');
		iM.updatePlusMinusButtons($widget);

		if (save)
			iM.savePreferences();
	},

	// widget & child widget
	getWidgetItemsCount : function(widget) {
		var $ = this.jQuery,
				settings = this.settings,
				$widget = typeof widget === 'string' ? $('#' + widget) : $(widget),
				$content = $widget.is(settings.widgetSelector) ? $widget.find(settings.contentSelector) : $widget.find(settings.childContentSelector);
					
		return $content.find('>ul>li:not(.hidden)').length;
	},
	
	// widget & child widget
	updatePlusMinusButtons : function(widget) {
		var $ = this.jQuery,
				settings = this.settings,
				$widget = typeof widget === 'string' ? $('#' + widget) : $(widget),
				thisWidgetSettings = iM.getWidgetSettings($widget[0].id),
				$content = $widget.is(settings.widgetSelector) ? $widget.find(settings.contentSelector) : $widget.find(settings.childContentSelector),
				$items = $content.find('>ul>li');
				
		if ($items.filter(':not(.hidden)').length > thisWidgetSettings.delta)
			iM.enableMinusButton($widget);
		else
			iM.disableMinusButton($widget);
		if ($items.filter('.hidden').length == 0)
			iM.disablePlusButton($widget);
		else
			iM.enablePlusButton($widget);
	},

	// widget & child widget
	disableMinusButton : function(widget) {
		var $ = this.jQuery,
				settings = this.settings,
				$widget = typeof widget === 'string' ? $('#' + widget) : $(widget),
				$handle = $widget.is(settings.widgetSelector) ? $widget.find(settings.handleSelector) : $widget.find(settings.childHandleSelector);

		$handle.find('img.minus')[0].src = '/images/main/misc/minus-disabled.png';
	},

	// widget & child widget
	enableMinusButton : function(widget) {
		var $ = this.jQuery,
				settings = this.settings,
				$widget = typeof widget === 'string' ? $('#' + widget) : $(widget),
				$handle = $widget.is(settings.widgetSelector) ? $widget.find(settings.handleSelector) : $widget.find(settings.childHandleSelector);

		$handle.find('img.minus')[0].src = '/images/main/misc/minus.png';
	},

	// widget & child widget
	disablePlusButton : function(widget) {
		var $ = this.jQuery,
				settings = this.settings,
				$widget = typeof widget === 'string' ? $('#' + widget) : $(widget),
				$handle = $widget.is(settings.widgetSelector) ? $widget.find(settings.handleSelector) : $widget.find(settings.childHandleSelector);

		$handle.find('img.plus')[0].src = '/images/main/misc/plus-disabled.png';
	},

	// widget & child widget
	enablePlusButton : function(widget) {
		var $ = this.jQuery,
				settings = this.settings,
				$widget = typeof widget === 'string' ? $('#' + widget) : $(widget),
				$handle = $widget.is(settings.widgetSelector) ? $widget.find(settings.handleSelector) : $widget.find(settings.childHandleSelector);

		$handle.find('img.plus')[0].src = '/images/main/misc/plus.png';
	}/*,
	
	
	initPopupZone : function() {
		var iM = this,
				$ = this.jQuery;

		$.ajax({
			url: 'ajax/highlights/',
			success: function(data) {
				var $popupZone = $('#popup-zone');
				$popupZone.find('ul').replaceWith(data);
				var $popupZoneItems = $popupZone.find('li');
				var popupZoneRun = false;
				var popupHasFocus = false;
				var popupMouseOver = false;
				var popupCount = $popupZoneItems.length;

				$popupZone.find('a.play').click(function() {
					popupZoneRun = true;
					return false;
				});

				$popupZone.find('a.stop')
					.click(function() {
						popupZoneRun = false;
						return false;
					});

				var popupSetIndex = function(index) {
					$popupZoneItems.removeClass('current');
					$($popupZoneItems[index]).addClass('current');

 					var oldButton = $popupZoneItems.find('img.runner[src$=on.gif]')[0];
 					oldButton.src = oldButton.src.replace('_on', '_off');
 					var newButton = $popupZoneItems.find('img.runner')[index];
					newButton.src = newButton.src.replace('_off', '_on');
 
				};

				$popupZoneItems.find('a.runner')
					.focus(function() {
						var index = $popupZoneItems.index($(this).parent());
						popupSetIndex(index);
					})
					.mouseenter(function() {
						var index = $popupZoneItems.index($(this).parent());
						popupSetIndex(index);
					})
					.click(function() {
						return false;
					});

				$popupZoneItems
					.mouseenter(function() {
						popupMouseOver = true;
					})
					.mouseleave(function() {
						popupMouseOver = false;
					});

				$popupZoneItems.find('a')
					.focus(function() {
						popupHasFocus = true;
					})
					.blur(function() {
						popupHasFocus = false;
					});

				if (popupCount > 1)
				{
					setInterval(function() {
						if (popupZoneRun && !popupHasFocus && !popupMouseOver)
						{
							var index = $popupZoneItems.index($popupZoneItems.filter('.current'));
							index = (index + 1) % popupCount;
							popupSetIndex(index);
							 
						}
					}, 3000);
				}
			}
		});
	}
*/
};


jQuery(document).ready(function(){
		setTimeout(function() { iM.init(); }, 0);
 });

 
	//==========================================================================

	var $bannerZone = $('#banner-zone');
	var $bannerZoneContentList = $bannerZone.find('div.content ul');
	var offset = 0;
	var bannerZoneScroll = true;
	var bannerHasFocus = false;
	var bannerCount = $bannerZoneContentList.find('li').length;

	$bannerZoneContentList.find('a')
		.focus(function() {
			bannerHasFocus = true;
		})
		.blur(function() {
			bannerHasFocus = false;
		});

	if (bannerCount > 5)
		setInterval(function() {
			if (bannerZoneScroll && !bannerHasFocus) {
				if (offset < 96)
					$bannerZoneContentList.attr('style', 'margin-left: ' + (-offset / 10) + 'em');
				if (offset >= 96) {
					$bannerZoneContentList.removeAttr('style');
					$bannerZoneContentList.find('li:first').appendTo($bannerZoneContentList);
					offset = 0;
				}
				else
					offset++;
			}
		}, 100);
	$bannerZone.find('img.arrow-stop').wrap('<a href="#" class="control"></a>').parent().click(function(){
		bannerZoneScroll = !bannerZoneScroll;
		return false;
	});
	$bannerZone.find('img.arrow-left').wrap('<a href="#" class="control"></a>').parent().click(function(){		
		if (bannerCount > 5)
			$bannerZoneContentList.find('li:lt(5)').appendTo($bannerZoneContentList);
		return false;
	});
	$bannerZone.find('img.arrow-right').wrap('<a href="#" class="control"></a>').parent().click(function(){
		if (bannerCount > 5) {
			for (var i=0; i<5; i++)
				$bannerZoneContentList.find('li:last').prependTo($bannerZoneContentList);
		}
		return false;
	});

