/**
 * Code Copyright Lightmaker Tunbridge Wells Ltd 2008
 * created 20/02/2008
 * @version 0.1, 20/02/2008
 * @author ronak.patel (ronak.patel@lightmaker.com)
 */
 
/*
 * Conventions:
 * - All varaibles and functions start with "overlay" so they don't conflict with anything else
 * - internal functoins start with "pr_overlay" (private)
 *  */


/*
 * Use the tabwidths to define the widths for specified tabs
 * The more elements in the array, the more tabs can be shown without scroller arrows appearing
 */ 
 
/*
 *	// The tab structure is as follows
 *	var tab[] tabs;
 *	class tab
 *	{
 *		var tabname;
 *		var iframeloc;
 *		var title;
 *		var rated=false;
 *		var rateable=true;
 *	}
 */ 


var overlayUseJS = true; 
var tabwidths = [140, 140, 140, 105, 84, 70];
var tabstextlengths = [17, 17, 17, 10, 8, 5]

var overlayDisplayStyle = "none";
var tabs = [];
var firstTab = 0;

var selectedTab;

var overlayDotDotPath = "./";

var tabOnStar = "images/star.gif";
var tabOffStar = "images/star_blank.gif";
var tabHalfStar = "images/star_half.gif";
var tabSiteRoot = "";
var tabCurrentRating = 0;

function createCookie(name,value,days) {
//	if (days) {
//		var date = new Date();
//		date.setTime(date.getTime()+(days*24*60*60*1000));
//		var expires = "; expires="+date.toGMTString();
//	}
//	else var expires = "";
	var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

function overlayDisable()
{
	overlayUseJS = false;
	createCookie("overlayUseJS", "false");
}

function overlayEnable()
{
	overlayUseJS = true;
	createCookie("overlayUseJS", "true");
}

function overlayInit(siteroot)
{
	var items = (""+readCookie("tabs")).split("~~");
	
	if ( readCookie("overlayUseJS") == "false" ){
		overlayUseJS = false;
	}
	
	for ( var i=0 ; i<items.length ; i++ ){
		var itemStr = items[i].split("~");
		if (itemStr.length>=4){
			overlayNewTabSilent(itemStr[0], itemStr[1], itemStr[2], itemStr[3]);
		}
	}
	
	pr_overlayRefreshRestoreButton();
	drawStarsForTab(siteroot, siteroot+tabOnStar, siteroot+tabOffStar, siteroot+tabHalfStar);
	if(selectedTab>=0 && tabs.length>0){
		document.getElementById("overlay_link").href=tabs[selectedTab].iframeloc;
	}
}

// Shows the overlay
//
function overlayPopup()
{
	overlayDisplayStyle = "block";
	document.getElementById("overlay").style.display = overlayDisplayStyle;

	pr_redrawTabs();
}

// Hides the overlay
//
function overlayHide()
{
	overlayDisplayStyle = "none";
	document.getElementById("overlay").style.display = overlayDisplayStyle;
}

// Clears all tabs and hides the overlay
//
function overlayClose()
{
	tabs = [];
	firstTab = 0;
	overlayHide();
	document.getElementById("overlay_tabs").innerHTML = "";
	document.getElementById("overlay_main_window").innerHTML = "";
	
	pr_overlayResetCookies();
	pr_overlayRefreshRestoreButton();
}

// Adds new tab and shows overlay
// 
function overlayNewTab(tabname, iframeloc, title, rateable)
{
	if ( overlayUseJS ){
		overlayNewTabSilent(tabname, iframeloc, title, rateable)
		
		if (firstTab < selectedTab-tabwidths.length+1)
			firstTab = selectedTab-tabwidths.length+1;
		if (firstTab < 0) firstTab = 0;
		
		overlayPopup();
	
		pr_overlayResetCookies();
		pr_overlayRefreshRestoreButton();
		
		overlaySelectTab(selectedTab);
	}
	return (! overlayUseJS);
}

// Adds new tab
// 
function overlayNewTabSilent(tabname, iframeloc, title, rateable)
{
	if ( rateable == undefined ){
		rateable = true;
	}
	var found = false;
	
	for ( var i = 0 ; i<tabs.length ; i++ ){
		if (tabs[i].tabname == tabname){
			// Tab already exists, select it
			overlaySelectTab(i);
			found = true;
			break;
		}
	}
	
	// New tab
	if (! found){
		for(var j=0 ; j<tabs.length ; j++){
			document.getElementById("overlay_"+tabs[j].tabname).style.display = "none";
		}
		
		var tabObj = {tabname:tabname, iframeloc:iframeloc, title:title, rated:false, rateable:rateable }
		tabs.push(tabObj);
		
		selectedTab = tabs.length-1;
		
		var newframe = "";
		//newframe  += "<!--overlay#"+tabname+"#-->";
		newframe += 	"<div id=\"overlay_"+tabname+"\" class='overlay_main_iframe'>";
		newframe += 		"<iframe width=\"100%\" height=\"100%\" frameborder=\"0\" scrolling=\"auto\" src=\""+iframeloc+"\" id=\"frm"+tabname+"\" name=\"frm"+tabname+"\"></iframe>";
		newframe += 	"</div>";
		//newframe += "<!--#overlay#"+tabname+"#-->";
		
		if (document.getElementById("overlay_main_window") != null ){
			document.getElementById("overlay_main_window").innerHTML += newframe;
		}
	}
}


// Closes tab
//
function overlayCloseTab(tabIndex)
{
	var currentTab = tabIndex==selectedTab;
	
	// Hide Tab
	document.getElementById("overlay_"+tabs[tabIndex].tabname).style.display = "none";
	pr_overlayRemoveIFrame(tabs[tabIndex].tabname);
	
	
	tabs.splice(tabIndex, 1);

	if (tabIndex<selectedTab){
		selectedTab--;
	}
	if (selectedTab>=tabs.length){
		selectedTab--;
	}

	while (tabs.length-firstTab < tabwidths.length ){
		if(tabs.length<tabwidths.length){
			firstTab = 0;
			break;
		}
		firstTab--;
	}

	if (currentTab){
		if( tabIndex == tabs.length )
			tabIndex--;
		overlaySelectTab(tabIndex);
	}

	if (tabs.length == 0){
		overlayClose();
	}
	else {
		pr_redrawTabs();
	}
	
	pr_overlayResetCookies();
	pr_overlayRefreshRestoreButton();
}

// selects tabs
//
function overlaySelectTab(tabIndex)
{
	selectedTab = tabIndex;
	pr_redrawTabs();
	var dispStyle;
	
	// show appropriate iframe
	for (var q=0 ; q<tabs.length ; q++){
		if (tabIndex == q){
			dispStyle = "block";	
		}
		else {
			dispStyle = "none";	
		}
		var divElement = "overlay_"+tabs[q].tabname;
		document.getElementById(divElement).style.display = dispStyle;
		
		/*Rate Section*/
		drawStarsForTab(tabSiteRoot, tabOnStar, tabOffStar, tabHalfStar, tabs[tabIndex].tabname, tabs[tabIndex].rateable);
	}
	
	if(selectedTab>=0){
		document.getElementById("overlay_link").href=tabs[selectedTab].iframeloc;
	}
}

// moves tabs left
//
function overlayTabLeft()
{
	if (firstTab>0){
		firstTab--;
	}	
	pr_redrawTabs();
}

// moves tabs right
//
function overlayTabRight()
{
	if (firstTab+tabwidths.length<tabs.length){
		firstTab++;
	}	
	pr_redrawTabs();
}

function pr_overlayRefreshRestoreButton()
{
	var dispStyle = tabs.length==0 ? "none" : "block";
	
	if ( document.getElementById("externSites")!=null ){
		document.getElementById("externSites").style.display = dispStyle;
	}
	
	if ( document.getElementById("num_extern_sites")!=null ){
		document.getElementById("num_extern_sites").innerHTML = ""+tabs.length;
	}
}

// recursive function to resize class in css
//
function pr_overlayResizeTabsInStyleSheets(stylesheet, newSize)
{
	var r = stylesheet.cssRules ? stylesheet.cssRules : stylesheet.rules;
	
	// IE Only
	if(stylesheet.imports && stylesheet.imports.length > 0){
		for(var i=0 ; i<stylesheet.imports.length ; i++){
			pr_overlayResizeTabsInStyleSheets(stylesheet.imports[i], newSize);
		}
	}
	// End IE Only	
	
	if (newSize==undefined){
		newSize = 0;
	}
	
	for (var j=0; j<r.length; j++){
		// Firefox Only
		if(r[j].styleSheet){
			pr_overlayResizeTabsInStyleSheets(r[j].styleSheet, newSize);
		}
		// End Firfox Only
		
		//document.getElementById("test").innerHTML += r[j].selectorText+"<br/>";	
		if(r[j].selectorText!=undefined && (r[j].selectorText == ".overlay_tab" || r[j].selectorText == ".overlay_tab_active") ){
			r[j].style.width = newSize+"px";
		}
	}
}

// Resizes all tabs
//
function pr_overlayResizeTabsTo(newSize)
{
	for(var i=0; i<document.styleSheets.length; i++){
		pr_overlayResizeTabsInStyleSheets(document.styleSheets[i], newSize);
	}
}

// adds new tab to overlays
//
function pr_redrawTabs()
{
	var w;
	if (tabs.length <= tabwidths.length){
		w = tabwidths[tabs.length-1];
	}
	else {
		w = tabwidths[tabwidths.length-1];
	}
	
	pr_overlayResizeTabsTo(w);

	document.getElementById("overlay_tabs").innerHTML = "";
	var outstr;
	if (firstTab>0){
		outstr  = "<div class=\"overlay_tab_prev\">";
		outstr += 	"<a href=\"#\" class=\"overlay_button_left\" onclick=\"overlayTabLeft();return(false);\">";
		outstr += 		"<img src=\""+overlayDotDotPath+"images/overlay_arrow_left.gif\" alt=\"previous tab\"/>";
		outstr += 	"</a>";
		outstr += "</div>";
		document.getElementById("overlay_tabs").innerHTML += outstr;
	}
	
	for (var i=firstTab ; i<firstTab+tabwidths.length ; i++){
		if (i>=tabs.length){
			break;
		}
		var title = tabs[i].title.replace("\\n", "\n");
		// title = tabs[i].title.replace("\\n", "<br/>");
		if (i==selectedTab){
			outstr  = "<div class=\"overlay_tab_active\" title=\""+title+"\">";
			outstr += 	"<div class=\"overlay_tab_close\" title=\""+title+"\">";
			outstr += 		"<a href=\"#\" class=\"overlay_closebutton\" onclick=\"overlayCloseTab("+i+");\" >";
			outstr += 			"<img src='"+overlayDotDotPath+"images/overlay_tab_close.gif' alt='close' title='close tab'/>";
			outstr += 		"</a>";
			outstr += 	"</div>";
		}
		else {
			outstr  = "<div class=\"overlay_tab\" onclick=\"overlaySelectTab("+i+")\" title=\""+title+"\">";
			outstr += 	"<div class=\"overlay_tab_close\" title=\""+title+"\">";
			outstr += 		"<a href=\"#\" class=\"overlay_closebutton\" onclick=\"overlayCloseTab("+i+");\" >";
			outstr += 			"<img src='"+overlayDotDotPath+"images/overlay_tab_close_dark.gif' alt='close' title='close tab'/>";
			outstr += 		"</a>";
			outstr += 	"</div>";
		}
		
		var txtsize = tabs.length>tabstextlengths.length ? tabstextlengths[tabstextlengths.length-1] : tabstextlengths[tabs.length-1];

		if ( tabs[i].tabname.length<=txtsize ){
			outstr += 	tabs[i].tabname;
		}
		else{
			outstr += 	tabs[i].tabname.substr(0,txtsize)+"...";
		}
		outstr += "</div>";
		document.getElementById("overlay_tabs").innerHTML += outstr;
	}
	
	if (firstTab+tabwidths.length<tabs.length){
		outstr  = "<div class=\"overlay_tab_next\">";
		outstr += 	"<a href=\"#\" class=\"overlay_button_right\" onclick=\"overlayTabRight();return(false);\">";
		outstr += 		"<img src=\""+overlayDotDotPath+"images/overlay_arrow_right.gif\" alt=\"previous tab\"/>";
		outstr += 	"</a>";
		outstr += "</div>";
		document.getElementById("overlay_tabs").innerHTML += outstr;
	}
}


function pr_overlayRemoveIFrame(tabname)
{
	//completeDiv = document.getElementById("overlay_main_window").innerHTML;
	
	// startpos = completeDiv.indexOf("<!--overlay#"+tabname+"#-->");
	// endpos = completeDiv.indexOf("<!--#overlay#"+tabname+"#-->") + ("<!--#overlay#"+tabname+"#-->").length;
	
	// newDiv  = completeDiv.substring(0, startpos);
	// newDiv += completeDiv.substring(endpos);
	// document.getElementById("overlay_main_window").innerHTML = newDiv;
	
	document.getElementById("overlay_"+tabname).outerHTML = "";
}

function pr_overlayResetCookies()
{
	eraseCookie("tabs");
	var cookieStr = "";
	
	for ( var i=0 ; i < tabs.length ; i++ ){
		if(i>0) cookieStr += "~~";
		cookieStr += tabs[i].tabname + "~" + tabs[i].iframeloc + "~" + tabs[i].title + "~" + tabs[i].rateable;
	}
	
	createCookie("tabs", cookieStr);
}
