var Homepage = Class.create();
Homepage.prototype = {
	initialize: function() {
		this.dynChannels = new Array();
		this.containers = new Array();
		this._ids = new Hash();
		this._idsr = new Hash();
		this.editing = false;
	},
	initHomepage: function(evt) {
		var contentWrapper = $('content');
		var columnWrapper = $('column');
		var columns = new Array();
		var channels = new Array();
		var i=0;
		layout.columns.column.each( 
			function(column) {
				var nextColumn = $(columnWrapper.cloneNode(true));
				nextColumn.setAttribute('id', ('column'+i));
				columns[i] = column;
				window.hp.containers.push(contentWrapper.appendChild(nextColumn));
				i++;
			}
		);
		columnWrapper.remove();
		_zindex = 100;  
		i = 0;
		var j = 0;
		columns.each( function(column) {
			columnWrapper = $('column'+i);
			var channelWrapper = $$('#column'+i+' .channel')[0];
			var _columnArray = Array.from(column.channel);
			if (_columnArray.length==0 && column.channel) {
				_columnArray = new Array(column.channel);
			}
			_columnArray.each( function(c) {
				var nextChannel = $(channelWrapper.cloneNode(true));
				window.hp._ids[c.attributes.id] = 'channel_'+j;
				window.hp._idsr['channel_'+j] = c.attributes.id;
				nextChannel.setAttribute('id', 'channel_'+j);
				nextChannel.setStyle({zIndex: _zindex});
				columnWrapper.appendChild(nextChannel);
				channels.push(c);
				_zindex--;
				j++;
			});
			i++;
			channelWrapper.remove();
		});
		this.initChannelUpdates(channels);
	},
	
	initChannelUpdates: function(channels) {
		var l = layout.columns.attributes.layout;
		channels.each(
			function (channel) {
				var c = channel.attributes.id;
				var _url = ''+l+'/'+c;
				new Ajax.Updater($(window.hp._ids[c]), _url, {onComplete: function() {
					if (channel.timeout) {
						window.hp.dynChannels.push(window.hp._ids[c]);
						new Ajax.PeriodicalUpdater(
							{success: $(window.hp._ids[c])}, 
							_url, {
								frequency: channel.timeout,
								onLoading: function(obj) {
									$$('#'+window.hp._ids[c]+' .dynamic').each(function(c) {c.addClassName('dynamicactive')});
								}
							}
						);
					}
				}});
			}
		);
	},
	
	updateChannel: function(c, t) {
		if (!t && c=='cinema_preview') t='cinema';
		if (!t) t = c;
		var l = layout.columns.attributes.layout;
		var _url = ''+l+'/'+c;
		new Ajax.Updater(	
			$(window.hp._ids[t]), 
			_url, {
				onLoading: function(obj) {
					$$('#'+window.hp._ids[t]+' .dynamic').each(function(c) {c.addClassName('dynamicactive')});
				},
				onComplete: function(obj) {
					if (window.hp.editing) {
						makeEditable();
					}
				}
			});
	},
	
	refreshChannels: function() {
		window.hp.dynChannels.each(
			function(c) {
				window.hp.updateChannel(window.hp._idsr[c]);
			}
		);
	},
	
	makeDraggable: function() {
		$$('.column').each(
			function(c) {
				$$('#'+c.getAttribute('id')+' .channel').each(
					function(c) {
						$$('#'+c.getAttribute('id')+' .draggable').each(
							function(d) {
								d.setAttribute('id', 'draggable_'+c.getAttribute('id').match(/\d+/));
							}
						);
					}
				)
				Sortable.create(c, {
					tag: 'dl',
					constraint: false,
					dropOnEmpty: true,
					handle: 'draggable',
					containment: $$('.column'),
					ghosting: true,
					onUpdate: window.hp.updateSorting
				});
			}
		);
	},
	
	updateSorting: function(sortable) {
		var order = new Array();
		var childs = Array.from(sortable.childNodes);
		childs.each(
			function(child) {
				if (child.attributes) {
					order.push(window.hp._idsr[child.getAttribute('id')]);
				}
			}
		);
		Cookie.set('_sorting_'+layout.columns.attributes.layout+'_'+sortable.getAttribute('id'), order.toJSON());
	},
	
	switchLayout: function(l) {
		window.location='./'+l;
	},
	
	makeEditable: function(show) {
		this.editing = !this.editing;
		if (show) this.editing = true;
		$$('.draggable').each(
			function(d) {
				d.setStyle({display: ((!window.hp.editing) ? 'none' : 'block')});
			}
		);
		$('addchannel').setStyle({display: ((!this.editing) ? 'none' : 'block')});
	},
	
	deleteChannel: function(d) {
		var _d = $(window.hp._ids[d]);
		var sortable = _d.parentNode;
		_d.remove();
		window.hp.updateSorting(sortable);
	},
	
	addChannel: function(d) {
		c = d.value;
		var idx = window.hp._ids.size();
		window.hp._ids[c] = 'channel_'+idx;
		window.hp.dynChannels.push(window.hp._ids[c]);
		window.hp._idsr['channel_'+idx] = c;
		con = window.hp.containers[0];
		con.appendChild(Builder.node('dl', {id: 'channel_'+idx}));
		window.hp.updateSorting(con);
		window.hp.updateChannel(c, c, true);
		d.options[d.selectedIndex].remove();
	},
	resetLayout: function() {
		window.hp.containers.each(
			function(sortable) {
				Cookie.erase('_sorting_'+layout.columns.attributes.layout+'_'+sortable.getAttribute('id'));
			}
		);
		window.hp.switchLayout(layout.columns.attributes.layout);
	}
};

var Cookie = {
  set: function(name, value, daysToExpire) {
    var expire = '';
    if (daysToExpire != undefined) {
      var d = new Date();
      d.setTime(d.getTime() + (86400000 * parseFloat(daysToExpire)));
      expire = '; expires=' + d.toGMTString();
    }
    return (document.cookie = escape(name) + '=' + escape(value || '') + expire);
  },
  get: function(name) {
    var cookie = document.cookie.match(new RegExp('(^|;)\\s*' + escape(name) + '=([^;\\s]*)'));
    return (cookie ? unescape(cookie[2]) : null);
  },
  erase: function(name) {
    var cookie = Cookie.get(name) || true;
    Cookie.set(name, '', -1);
    return cookie;
  },
  accept: function() {
    if (typeof navigator.cookieEnabled == 'boolean') {
      return navigator.cookieEnabled;
    }
    Cookie.set('_test', '1');
    return (Cookie.erase('_test') === '1');
  }
};

function init() {
	hp = new Homepage();
	hp.initHomepage();
}
var hp = null;
Event.observe(window, 'load', init.bindAsEventListener(init), false);

