/*=Sarven Capadisli 2007*/

var TDM = {
	Config: {
		Init: {
			Increment: 0,
			CurrentTab: 0
		},
		
		Selectors: {
			Opened: "opened",
			Closed: "closed",
			Selected: "selected",
			Current: "current",
			Hover: "hover",
			OpenResourceOnNewWindow: "open_resource_on_new_window"
		}
	},

	Utils: {
		ClassName: {
			hasClass: function(obj, str) {
				return obj && new RegExp('(?:^|\\s)' + str + '(?:\\s|$)').test(obj.className);
			},
			Add: function (obj, str) {
				if (!this.hasClass(obj, str)) { obj.className += (obj.className ? ' ' : '') + str; }
			},
			Remove: function (obj, str) {
				if (this.hasClass(obj, str)) { obj.className = obj.className.replace(new RegExp('^(?:' + str + '(?:\\s+|$))+|\\s+' + str + '\\s*(?=\\s|$)', 'g'), ''); }
			},
			setClass: function (obj, str, add) {
				return add ? this.Add(obj, str) : this.Remove(obj, str);
			}
		},
		
		GetElementsByClassName: function (name, nodes, match_type) {
			var ret = [];
			var re = (!match_type) ? new RegExp('(?:^|\\s)' + name + '(?:\\s|$)') : new RegExp('(?:^|\\s)' + name);

			if (!nodes) { nodes = document.getElementsByTagName('*'); }
			for (var i = 0, l = nodes.length; i < l; i++) {
				if (re.test(nodes[i].className)) { ret.push(nodes[i]); }
			}
			return ret;
		},

		FindEvent: function (el, evt, handler) {
			for (var events = TDM.Utils.AddEvent.events, i = events.length, e; i--;) {
				e = events[i];
				if (e[0] == el && e[1] == evt && e[2] == handler) {
					return i;
				}
			}
			return -1;
		},

		DelEvent: function (el, evt, handler, flush) {
			if (!el) { return; }
			if (!flush) {
				var i = TDM.Utils.FindEvent(el, evt, handler);
				if (i != -1) { TDM.Utils.AddEvent.events.splice(i, 1); }
			}
			if (el.removeEventListener) {
				el.removeEventListener(evt, handler, false);
			} else if (el.detachEvent) {
				el.detachEvent('on' + evt, handler);
			} else {
				el['on' + evt] = null;
			}
		},

		FlushEvents: function () {
			for (var events = TDM.Utils.AddEvent.events, i = events.length, e; i--;) {
				e = events[i];
				TDM.Utils.DelEvent(e[0], e[1], e[2], true);
			}
			TDM.Utils.AddEvent.events = [];
		},

		HaltEvent: function (evt) {
			if (evt) {
				evt.returnValue = false;
				if (evt.preventDefault) { evt.preventDefault(); }
			}
			return false;
		},

		AddEvent: function (el, evt, handler) {
			if (!el) { return; }
			if (el.addEventListener) {
				el.addEventListener(evt, handler, false);
			} else if (el.attachEvent) {
				el.detachEvent('on' + evt, handler);
				el.attachEvent('on' + evt, handler);
			} else {
				var oldevent = el['on' + evt];
				if (typeof oldevent != 'function') {
					el['on' + evt] = handler;
				} else {
					el['on' + evt] = function(e) {
						oldevent(e);
						handler(e);
					};
				}
			}
			if (TDM.Utils.FindEvent(el, evt, handler) == -1 && evt != 'unload') {
				TDM.Utils.AddEvent.events.push([el, evt, handler]);
			}
		},

		Tabbing: function(datas, actions) {
			var modifyClass = TDM.Utils.ClassName;
			var settings = TDM.Config.Selectors;

			for (var i=0; i<actions.length; i++) {
				TDM.Utils.AddEvent(actions[i], 'click', (function(datas, actions, i) {
					return function(e) {
						TDM.Utils.ShowObject(datas, actions, i);
						e.returnValue = false;
						if (e.preventDefault) { e.preventDefault(); }	
					};
				})(datas, actions, i));
			}
		},

		ShowObject: function (datas, actions, change_id) {
			var modifyClass = TDM.Utils.ClassName;
			var settings = TDM.Config.Selectors;
			TDM.Utils.Close(datas[TDM.Config.Init.CurrentTab]);	
			modifyClass.Remove(actions[TDM.Config.Init.CurrentTab], settings.Selected);

			TDM.Config.Init.CurrentTab = change_id;
			TDM.Utils.Open(datas[TDM.Config.Init.CurrentTab]);
			modifyClass.setClass(actions[TDM.Config.Init.CurrentTab], settings.Selected, 'add');
		},

		ShowHide: function(datas, actions, internal_anchor_switch) {
			var modifyClass = TDM.Utils.ClassName;
			var settings = TDM.Config.Selectors;

			for (var i=0; i<actions.length; i++) {
				TDM.Utils.AddEvent(actions[i], 'click', function(datas, actions, i, internal_anchor_switch) {
					return function (e) {
						if (modifyClass.hasClass(datas[i], settings.Opened)) {
							TDM.Utils.Close(datas[i]);
						}
						else {
							TDM.Utils.Open(datas[i]);
						}

						if (internal_anchor_switch === false) {
							e.returnValue = false;
							if (e.preventDefault) { e.preventDefault(); }				
						}
					};	
				}(datas, actions, i, internal_anchor_switch));
			}
		},

		Close: function (obj) {
			var modifyClass = TDM.Utils.ClassName;
			var settings = TDM.Config.Selectors;
			modifyClass.Remove(obj, settings.Opened);
			modifyClass.setClass(obj, settings.Closed, 'add');
		},

		Open: function(obj) {
			var modifyClass = TDM.Utils.ClassName;
			var settings = TDM.Config.Selectors;
			modifyClass.Remove(obj, settings.Closed);
			modifyClass.setClass(obj, settings.Opened, 'add');
		},

		OpenResourceOnNewWindow: function () {
			var new_window_elements = this.GetElementsByClassName(TDM.Config.Selectors.OpenResourceOnNewWindow, '', '');

			for (var i=0; i < new_window_elements.length; i++) {
				new_window_elements[i].onkeypress = new_window_elements[i].onclick = function () {
					window.open(this.href); return false;
				};
			}
		}
	}
};


function Go() {
	TDM.Utils.AddEvent(window, 'unload', TDM.Utils.FlushEvents);

	if (document.getElementById('highlights_data')) {
		var datas = document.getElementById('highlights_data').getElementsByTagName('li');
		var actions = document.getElementById('highlights_titles').getElementsByTagName('li');
		
		TDM.Utils.Tabbing(datas, actions);
	}

	if (document.getElementById('action_print')) {
		if (document.getElementById('action_print').getElementsByTagName('span')[0].title.length === 0) {
			document.getElementById('action_print').getElementsByTagName('span')[0].onclick = function(){ window.print(); };
		}
		else {
			document.getElementById('action_print').getElementsByTagName('span')[0].onclick = function(){ window.open(document.getElementById('action_print').getElementsByTagName('span')[0].title); };
		}
	}

	TDM.Utils.OpenResourceOnNewWindow();
}
