var Site = new Object();

Site.getDdForDt = function(dt) {
	var cur = dt.nextSibling;

	while (cur) {
		if (cur.nodeName == 'DT') {
			return false;
		}
		else if (cur.nodeName == 'DD') {
			return cur;
		}

		cur = cur.nextSibling;
	}

	return cur;
};

Site.getElementClasses = function(el) {
	var str = el.className;
	str = str.replace(/\s+/g, ' ');
	str = $.trim(str);
	var classes = str.split(' ');

	return classes;
};

Site.getParamFromElementClass = function(param, el) {
	var classes = Site.getElementClasses(el);
	var count   = classes.length;
	var length  = param.length;
	var item;

	for (var i = 0; i < count; i++) {
		item = classes[i];
		if (item.substr(0, length) == param && item.substr(length, 1) == '-' && item.length > length + 1) {
			return item.substr(length + 1);
			break;
		}
	}

	return false;
};

Site.initAccordions = function(exclusive) {
	var accordions = $('DL.accordion');
	accordions.addClass('accordion-inited');

	$.each(accordions, function() {
		var accordion = this;
		var dts = $('DT.accordion-item', accordion);
		var dds = $('DD.accordion-item', accordion);

		dts.click(function() {
			if (true === exclusive) {
				Site.showAccordionItemExclusively(this, dts, dds);
			}
			else {
				Site.toggleAccordionItem(this, dts, dds);
			}
			return false;
		});

		Site.toggleAccordionItem(dts.get(0), true);
	});
};

Site.accordionAddClassCur = function(dt, dd) {
	dt.addClass('cur')
	dd.addClass('cur');
};

Site.accordionRemoveClassCur = function(dt, dd) {
	dt.removeClass('cur')
	dd.removeClass('cur');
};

Site.toggleAccordionItem = function(dt, noSlide) {
	if ($(dt).hasClass('cur')) {
		Site.hideAccordionItem(dt, noSlide);
	}
	else {
		Site.showAccordionItem(dt, noSlide);
	}
};

Site.showAccordionItem = function(dt, noSlide) {
	var dd = Site.getDdForDt(dt);
	var dt = $(dt);
	dd = $(dd);

	if (true === noSlide) {
		Site.accordionAddClassCur(dt, dd);
	}
	else {
		dd.slideDown(350, function() {
			Site.accordionAddClassCur(dt, dd);
		});
	}
};

Site.hideAccordionItem = function(dt, noSlide) {
	var dd = Site.getDdForDt(dt);
	var dt = $(dt);
	dd = $(dd);

	if (true === noSlide) {
		Site.accordionRemoveClassCur(dt, dd);
	}
	else {
		dd.slideUp(350, function() {
			Site.accordionRemoveClassCur(dt, dd);
		});
	}
};

Site.showAccordionItemExclusively = function(dt, dts, dds) {
	$.each(dts, function() {
		Site.hideAccordionItem(this);
	});
	Site.showAccordionItem(dt);
};

Site.initTabs = function() {
	var tabBlks = $('.tabs');
	tabBlks.addClass('tabs-inited');
	var titles = new Array();
	
	$.each(tabBlks, function() {
		var tabBlk = this;
		var dts = $('DT.tab', tabBlk);
		var dds = $('DD.tab', tabBlk);
		dds.removeClass('cur');
		dds.eq(0).addClass('cur');

		$.each(dts, function() {
			var dt = this;
			titles[titles.length] = $(dt).text();
		});

		var d = document;

		var nav = d.createElement('div');
		nav.className = 'rounded tabs-nav';

		var navDivLt = d.createElement('div');
		navDivLt.className = 'lt';

		var navDivRt = d.createElement('div');
		navDivRt.className = 'rt';

		var navDivRb = d.createElement('div');
		navDivRb.className = 'rb';

		var navDivLb = d.createElement('div');
		navDivLb.className = 'lb';

		nav.appendChild(navDivLt);
		navDivLt.appendChild(navDivRt);
		navDivRt.appendChild(navDivRb);
		navDivRb.appendChild(navDivLb);

		var navUl = d.createElement('ul');
		var count = titles.length;

		for (var i = 0; i < count; i++) {
			var li = d.createElement('li');

			if (!i) {
				$(li).addClass('cur');
			}

			$(li).addClass('i-' + i);
			dds.eq(i).addClass('tab-' + i);

			var a  = d.createElement('a');
			a.href = '#';

			$(a).click(function() {
				return Site.showTab(this);
			});

			$(a).focus(function() {
				this.blur();
				return false;
			});

			li.appendChild(a);
			var span = d.createElement('span');
			a.appendChild(span);
			var span2 = d.createElement('span');
			span.appendChild(span2);
			var text = d.createTextNode(titles[i]);
			span2.appendChild(text);
			navUl.appendChild(li);
		}
		navDivLb.appendChild(navUl);
		tabBlk.insertBefore(nav, tabBlk.firstChild);
	});
};

Site.showTab = function(link) {
	var li = link.parentNode;
	var num = Site.getParamFromElementClass('i', li);
	var lis = $(li.parentNode).children('LI');
	lis.removeClass('cur');
	$(li).addClass('cur');
	var tabsList = $('DL.tabs-list');
	var tabs = $('DD.tab', tabsList);
	tabs.removeClass('cur');
	var tab = $('DD.tab.tab-' + num, tabsList);
	tab.addClass('cur');
	tab.focus();
	return false;
};

Site.showRecordCommentForm = function(link) {
	var linkObj = $(link);
	var parentFirst = link.parentNode;
	var parentFirstObj = $(parentFirst);
	var parentSecond = parentFirst.parentNode;
	var anchor = linkObj.attr('href');
	var frm = $(anchor, parentSecond).eq(0);
	var next = $(parentFirst).next('form');
	if (!next.length) {
		parentFirstObj.after(frm);
	}
	frm.toggleClass('hidden');

	if (!frm.hasClass('hidden')) {
		frm.get(0).elements[0].focus();
	}
	
	return false;
};

Site.initMiscHandlers = function() {
	$('.search-n-playlist DL.playlist DT').click(function(){
      $(this).parent().toggleClass('playlist-active');
    });
};

Site.initVtabs = function() {
	var tabBlks = $('DIV.vtabs');
	tabBlks.removeClass('vtabs-uninited');
	var titles = new Array();

	$.each(tabBlks, function() {
		var tabBlk = this;
		var dts = $('DT.tab', tabBlk);
		var dds = $('DD.tab', tabBlk);
		var veryParent = $('DIV.vtabs-d', tabBlk).eq(0);

		var classes = new Array();
		var customClasses, curClass, dtClasses;

		$.each(dts, function() {
			var classesFiltered = new Array();
			var dt = this;
			titles[titles.length] = $(dt).text();
			dtClasses = Site.getElementClasses(dt);

			$.each(dtClasses, function() {
				curClass = this;
				if ('tab' != curClass) {
					classesFiltered[classesFiltered.length] = curClass;
				}
			});

			classes[classes.length] = classesFiltered;
		});

		dds.removeClass('cur');
		dds.eq(0).addClass('cur');

		var d = document;

		var navUl = d.createElement('ul');
		navUl.className = 'vtabs-nav';
		var count = titles.length;

		for (var i = 0; i < count; i++) {
			var li = d.createElement('li');

			if (!i) {
				$(li).addClass('cur first');
			}

			$(li).addClass('i-' + i);
			dds.eq(i).addClass('tab-' + i);

			var span = d.createElement('span');
			li.appendChild(span);
			var span2 = d.createElement('span');
			span.appendChild(span2);
			$(span).addClass(classes[i].join(' '));

			var a  = d.createElement('a');
			a.href = '#';

			$(a).click(function() {
				return Site.showVtab(this);
			});

			$(a).focus(function() {
				this.blur();
				return false;
			});

			var text = d.createTextNode(titles[i]);
			a.appendChild(text);

			span2.appendChild(a);

			navUl.appendChild(li);
		}
		var vtabsContent = $('DL.vtabs-content').get(0);
		vtabsContent.parentNode.insertBefore(navUl, vtabsContent);
	});
};

Site.showVtab = function(link) {
	var li = link.parentNode.parentNode.parentNode;
	var vtabsContainer = li.parentNode.parentNode;
	var num = Site.getParamFromElementClass('i', li);
	var lis = $(li.parentNode).children('LI');
	lis.removeClass('cur');
	$(li).addClass('cur');
	var tabsList = $('DL.vtabs-content', vtabsContainer);
	var tabs = $('DD.tab', tabsList);
	tabs.removeClass('cur');
	var tab = $('DD.tab.tab-' + num, tabsList);
	tab.addClass('cur');
	return false;
};

Site.miscActions = function() {
	$('.js-hidden').addClass('hidden');
};

Site.showDropdownForm = function(link) {
	var container = $(link).next('div');
	var rndClass = 'cur-' + Math.floor(Math.random() * 10000000);
	container.addClass(rndClass);
	$('.dropdown:not(.' + rndClass + ')').removeClass('active');
	container.toggleClass('active');

	if (container.hasClass('active')) {
		$(':text', container).eq(0).focus();
	}

	return false;
};

Site.closeDropdownForm = function(form) {
	$(form).parent().removeClass('active');
	return false;
};

$(document).ready(function() {
	Site.initAccordions(true);
	Site.initTabs();
	Site.initVtabs();
	Site.initMiscHandlers();
	Site.miscActions();
});