var MAGAZINE_DATA = new Object();
var photo_browser;
var spread_hairlines;
var caption  = new Object();
caption.data = new Object();


function init() {
	param_search_name  = 'mag_id';

	if (MAGAZINE_DATA.photos == undefined) {
			var_closure = function(req) { MAGAZINE_DATA.photos = eval('(' +req.responseText+')'); return MAGAZINE_DATA.photos;
		};
		loadJsonResponse("/data/photos.php?medium=magazines",
		var_closure,
		addItemsToBrowser);
		return;
	}
	MAGAZINE_DATA.issues     = $H(getData("ds_data"));
		
	MAGAZINE_DATA.issue_numbers = MAGAZINE_DATA.issues.keys().sort(function(a, b) { return b - a;	});
	MAGAZINE_DATA.first_issue_number = MAGAZINE_DATA.issue_numbers[0];
	
	if (!readParam(param_search_name)) {
		displayLandingPage();
		return;
	}
	
	magazine_browser         = Browser.instantiate(
	{
		'dom_add_point':      'browser',
		'number_of_slots':    6
	});
	// magazine_browser.cookie_search_name = 'mag_id';
	magazine_browser.param_search_name = param_search_name;
	
	magazine_browser.addTrigger("activate", function(item) {
		updatePageContent(item.id);
	}
	);
	magazine_browser.addTrigger("deactivate", function(item) {
		item.browser.active_item.showActiveContent();
	}
	);
	magazine_browser.addTrigger("preview", function(item) {
		item.browser.active_item.showDefaultContent();
	}
	);
	
	MAGAZINE_DATA.issue_numbers.each(function(key) {
		var item = new Item(key);
		item.showPreviewContent = function() {
			this.dom_element.innerHTML =  '<img src="' + MAGAZINE_DATA.photos._paths['cover_thumb'] + '/' + imgOrDefault([key, 'cover', 'thumb']) + '" ' +
			'alt="Cover of issue ' + key + '" ' +
			'width="61" height="71" ' +
			'onload="imageLoaded()" />';
		};
		item.showActiveContent  = function() {
			this.dom_element.innerHTML =  '<img src="' + MAGAZINE_DATA.photos._paths['cover_thumb'] + '/' + imgOrDefault([key, 'cover', 'thumb']) + '" ' +
			'alt="Cover of issue ' + key + '" width="61" height="71" />';
		};
		item.showDefaultContent = function() {
			this.dom_element.innerHTML =  '<img src="' + MAGAZINE_DATA.photos._paths['cover_number'] + '/' + imgOrDefault([key, 'cover', 'number']) + '" ' +
			'alt="' + key + '" ' +
			'width="61" height="71" ' +
			'onload="imageLoaded()" />';
		};
		magazine_browser.addItem(item);
	}
	);
	magazine_browser.showSlottedItems();
}


function addArticleMouseEvents(issue_content) {
	var articleEvent = function(article, issue_content, msg) {
		if ( article.id && $(article.id) ) {
			var issue_number = issue_content.issue_number;
			if (msg == "click") {
				issue_content.articles.each(function (article) {
					Element.removeClassName($(article.id), "on");
					Element.removeClassName($(article.id), "active");
				});
				Element.addClassName($(article.id), "on");
				if (Element.hasClassName($(article.id), "art")) {
					if (issue_content.is_short_form) {
						initializeShortPhotoArticle(issue_number, article.id);
					} else {
						initializePhotoBrowser(issue_number, article.id);
					}
				} else if (Element.hasClassName($(article.id), "text")) {
					showArticleText(issue_number, article.id);
				}
			}
			else if (msg == "mouseover") {
				issue_content.articles.each(function (article) {
					Element.removeClassName($(article.id), "active");
				});
				Element.addClassName($(article.id), "active");
			}
			else if (msg == "mouseout") {
				issue_content.articles.each(function (article) {
					Element.removeClassName($(article.id), "active");
				});
			}
		}
	};
	article_list = issue_content.articles;
	article_list.each(function (article) {
		util.addEventListener($(article.id), "mouseover",
		function(ev) { articleEvent(article, issue_content, ev.type);
	});
	util.addEventListener($(article.id), "click",
	function(ev) { articleEvent(article, issue_content, ev.type);
});
util.addEventListener($(article.id), "mouseout",


function(ev) { articleEvent(article, issue_content, ev.type);
});
});
if (article_list.length > 0) {
	var idx = 0;
	var req_artist = readParam("artist_id");
	if (req_artist) {
		idx = findIndexByArtist(article_list, req_artist);
	}
	articleEvent(article_list[idx], issue_content, "click");
}
}


function findIndexByArtist(article_list, req_artist) {
	var idx = 0;
	$A(article_list).each(function(art, index) {
		$A(art.artists).each(function (artist){ if (artist.id == req_artist) idx = index;
	});
});
return idx;
}


function addItemsToBrowser(passedObj) {
	init();
}


function addToCart(issue_number) {
	var issue_info = MAGAZINE_DATA.issues[issue_number];
	minicart.add(issue_info);
}


function changeCaption(issue_number, spread_id) {
	$('caption').innerHTML = '';
	caption.issue_number   = issue_number;
	caption.spread_id      = spread_id;
	if (caption.data && caption.data[issue_number]) {
		lookupCaption();
	} else {
		loadCaptionData();
	}
}


function deactivatePhotoBrowser() {
	$A(["main_image_box", "caption", "hairline_container", "more_about", "more_about_short", "photo_thumbs"]).each(
		function(key) { if ($(key)) { $(key).innerHTML = "";
	}});
	$("hairline_block").style.display = "none";
}


function deleteEmptyRecords(arr) {
	return $A(arr).findAll(
	function(line) {
		return (util.rmlines(line).length > 0);
	})
}


function displayLandingPage() {
	// full_path  = MAGAZINE_DATA.photos._paths['cover_landing_full'];
	// thumb_path = MAGAZINE_DATA.photos._paths['cover_landing_thumb'];
	var full_path      = "/images/magazine/cover/landing/full";
	var thumb_path     = "/images/magazine/cover/landing/thumb";
	var latest_issue   = MAGAZINE_DATA.first_issue_number;
	var full_cover_src = full_path + '/' + latest_issue + '.jpg';
	var featuring_text = MAGAZINE_DATA.issues[latest_issue].featuring_text;
	
	var landing_html = 
	'<div id="current_issue_box"><a href="?mag_id=' +latest_issue+ '">' +
	'<img src="' + full_cover_src + '" width="201" height="234" alt="latest issue cover"/>' + '</a>' +
	'<div class="text_container"><div class="text"><span class="issue_number">' +
	'<a href="?mag_id=' +latest_issue+ '">Issue '+ latest_issue + '</a></span>' + 
	'<div class="featuring_text"><b>On Newsstands</b><br /><br />' + 
	featuring_text + 
	'<p><a href="/subscribe">Click here to subscribe to <i>Blind Spot</i></a>.</p>' + '</div></div></div></div>';
	
	num_cols = 5;
	thumbnail_table_width = 806;
	thumbnail_width = 126;
	last_col_width = thumbnail_width;
	col_width = (thumbnail_table_width-last_col_width)/(num_cols-1);
	
	landing_html += '<table id="back_issues">' +
	'<col span="'+(num_cols-1)+'" width="'+col_width+'"/><col class="last" width="'+last_col_width+'"/>';
	
	for (i=1; i < MAGAZINE_DATA.issue_numbers.length; i++) {
		var issue_number    = MAGAZINE_DATA.issue_numbers[i];
		var thumb_cover_src = thumb_path + '/' + issue_number + '.jpg';
		var col = i % num_cols;
		if (col==1) {
			landing_html += '<tr>';
		}
		landing_html += '<td><a href="page2.html?mag_id=' +issue_number+ '"><img src="' +thumb_cover_src+ '" width="126" height="147" alt="" /></a>' +
		                '<div class="back_issue_number"><a href="?mag_id=' +issue_number+ '">Issue ' +issue_number+ '</a></div></td>';
		if (col==0) {
			landing_html += '</tr>';
		}
		
	}
	
	landing_html += '</table>';
	
	// alert(landing_html);
	
	$('content').innerHTML = landing_html;
}


function displayMoreAboutLinks(issue_number, article_id, is_short_issue) {
	var more_about_div = $("more_about");
	if (is_short_issue) {
		more_about_div = $("more_about_short");
	}
	var article_array         = MAGAZINE_DATA.issues[issue_number].articles;
	more_about_div.innerHTML = (function() {
		var new_html="";
		article_array.each(function(article, idx) {
			if (article.id == article_id && article.artists) {
				new_html = article.artists.inject("more about", function(accumulator, artist_obj, index) {
					return accumulator+ '<br /><a href="../artists/index.php?id=' +artist_obj.id+ '">' +
					artist_obj.name+ '</a>';
				});
			}
		});
		return new_html;
	})();
}


function extractString(text, start, end, type) {
	if (type != undefined && type == 'pattern') {
		var read_start = text.search(start);
		if (read_start == -1) {
			return false;
		}
		var read_stop = text.search(end);
	} else {
		var read_start = text.indexOf(start);
		if (read_start == -1) {
			return false;
		}
		read_start += start.length;
		var read_stop = text.indexOf(end, read_start);
	}
	return text.substring(read_start, read_stop);
}


function getData(target_class_name) {
	var data_object = $H();
	var ds_data_divs = $A(document.getElementsByClassName(target_class_name));
	ds_data_divs.each(
	function(div) {
		var issue_number     = util.readDsDiv("issue_number", div);
		var issue            = new Object();
		issue.issue_number   = issue_number;
		issue.details        = util.readDsDiv("articles_display", div);
		var articles_details = $A();
		if(issue.details) {
			articles_details = $A(issue.details.split(/\s*\<BR[^\>]*\>\s*<BR[^\>]*\>\s*/i)) || [];
			articles_details     = articles_details.findAll(
			function(line) {
				return (line.length > 0);
			}
			);
		}
		var articles_info    = util.readDsDiv("articles_info", div);
		if (articles_info != null) {
			articles_info        = $A(articles_info.split(/\s*\<BR[^\>]*\>\s*/i));
			articles_info        = articles_info.findAll(
			function(line) {
				return (line.indexOf(';') != -1);
			}
			);
			issue.articles     = new Array();
			if (articles_info.length == articles_details.length) {
				articles_info.each(
				function(line, index) {
					var article      = new Object();
					var article_info = line.split(';');
					article.id       = util.rmlines(article_info[0]);
					article.medium   = article_info[2];
					var artist_ids   = $A(util.rmlines(article_info[1]).split(/\s*,\s*/));
					var artists      = new Array();
					var detail_lines    = articles_details[index].split(/\s*\<BR[^\>]*\>\s*/i);
					article.author_line = detail_lines[0];
					var artist_names    = (artist_ids.length > 1) ? detail_lines[0].split(/ and |,|&amp;|&/) : new Array(article.author_line);
					artist_names    = deleteEmptyRecords(artist_names);

					artist_ids.each(
					function(id, index) {
						var artist    = new Object();
						artist.id     = id;
						artist.name   = artist_names[index];
						artists[index]=artist;
					}
					);
					article.artists = artists;
					article.title = (detail_lines.length > 1) ?
					detail_lines[1] : '';
					issue.articles[index] = article;
				});
			} else {
				var article         = new Object();
				article.id          = "error";
				article.medium      = "text";
				article.author_line = "";
				article.title       = "The articles for this issue can not be displayed at this time.";
				issue.articles[0]   = article;
			}
		}
		if (document.getElementsByClassName("featured_editions", div).length > 0) {
			issue.featured_editions = document.getElementsByClassName("featured_editions", div)[0].innerHTML.split(/[,;]\s*/);
		}
		issue.cart_name     = util.readDsDiv("cart_name", div);
		issue.display_name  = util.readDsDiv("display_name", div);
		issue.price         = util.readDsDiv("price", div).replace(/^(\d)/, "$$$1");
		issue.add_cart_url  = util.readDsDiv("add_cart", div);
		issue.item_number   = util.readDsDiv("item_num", div);
		issue.in_stock      = (parseInt(util.readDsDiv("on_hand", div)) > parseInt(util.readDsDiv("out_stock", div)));
		issue.more_info     = util.readDsDiv("more_info", div);
		issue.featuring_text= util.readDsDiv("featuring_text", div);
		var product_type    = util.readDsDiv("product_type", div);
		issue.is_short_form = ( (product_type != null) && (product_type.search(/SHORT/i) > -1) );
		data_object[issue_number] = issue;
	});
	return data_object;
}


function getJsonResponse(ajax_url, callback) {
	new Ajax.Request(ajax_url, {
		method: 'get',
		onComplete: callback
	});
}


function imageLoaded() {
	magazine_browser.SLOTS_LOADED++;
	if (magazine_browser.SLOTS_LOADED == magazine_browser.number_of_slots) {
		magazine_browser.trigger("slots_loaded");
	}
}


function imgOrDefault(locList) {
	var collection_name = "MAGAZINE_DATA.photos";
	try {
		var locStr = '["' + locList.join('"]["') + '"]';
		var returnString = eval(collection_name + locStr);
		if (returnString == '') { throw new EvalError();
	}
	return returnString;
}
catch (ex) {
	return "_default.gif";
}
}


function initializeHairlineObject(container_div_id) {
	obj = new Object();
	obj.container           = $(container_div_id);
	obj.container.innerHTML = '';
	obj.hairlines           = new $H();
	obj.activate            = function(item) {
		item = $(item);
		if (this.hairlines[item.id]) {
			this.hairlines.keys().each(function(line_id, idx) {
				this.hairlines[line_id].style.display  = (line_id == item.id) ? "block" : "none";
			}.bind(this));
		}
	};
	return obj;
}


function initializeHairlines() {
	$("hairline_block").style.display = "block";
	spread_hairlines.container.innerHTML = "";
	photo_browser.slotted_items.each(function(item, index) {
		thumb             = item.dom_element.getElementsByTagName("img")[0];
		var dims          = Element.getDimensions(thumb);
		var offset        = Position.positionedOffset(thumb);
		var topOffset     = dims.height/2 + offset[1] + 1;
		var hairline_div         = document.createElement("div");
		hairline_div.style.top   = topOffset + "px";
		hairline_div.id          = "hair_" + item.id;
		hairline_div.className   = "hairline";
		spread_hairlines.container.appendChild(hairline_div);
		spread_hairlines.hairlines[item.id]       = hairline_div;
	});
	spread_hairlines.activate(photo_browser.active_item);
}


function initializePhotoBrowser(issue_number, article_id) {
	deactivatePhotoBrowser();
	spread_hairlines = initializeHairlineObject("hairline_container");
	var spreads;
	spreads      = $H(MAGAZINE_DATA.photos[issue_number][article_id]);
	if (spreads.keys().length == 0) {
		spreads = $H({'01': {'thumb': '_default.gif', 'full': '_default.gif'
	}
});
}
var thumbs = $A();
var fulls  = $A();
var spread_numbers = spreads.keys().sort();
photo_browser = Browser.instantiate(
{
	'dom_add_point':      'photo_thumbs',
	'number_of_slots':    8,
	'browser_name':       'spreads',
	'next_button':        'arrow_down.gif',
	'back_button':        'arrow_up.gif'
});
spread_numbers.each(function(num, index) {
	thumbs[index]  = MAGAZINE_DATA.photos._paths['spread_thumb'] + '/' + spreads[num].thumb;
	fulls[index]   = MAGAZINE_DATA.photos._paths['spread_full'] + '/' + spreads[num].full;
	var item = new Item(article_id + "_" + num);
	item.showInitialContent = function() {
		this.dom_element.innerHTML = '<img src="' + thumbs[index] + '" ' +
		'alt="' + 'spread photo ' + parseInt(index+1) + '" ' +
		'onload="spreadLoaded()" />';
	};
	photo_browser.addItem(item);
});
photo_browser.addTrigger("slots_loaded",


function() {
	initializeHairlines();
}
);
photo_browser.addTrigger("preview",


function(item) {
	spread_hairlines.activate(item);
}
);
photo_browser.addTrigger("activate",


function(item) {
	var item_index = item.browser.item_index_hash[item.id];
	var new_src = fulls[item_index];
	$("main_image_box").innerHTML = '<img src="' +new_src+ '" ' +
	'alt="spread photo ' +parseInt(item_index+1)+ '" />';
	spread_hairlines.activate(item);
	changeCaption(issue_number, item.id);
}
);
photo_browser.addTrigger("deactivate",


function(item) {
	spread_hairlines.activate(item.browser.active_item);
}
);
photo_browser.showSlottedItems();
displayMoreAboutLinks(issue_number, article_id);
}


function initializeShortPhotoArticle(issue_number, article_id) {
	deactivatePhotoBrowser();
	Element.addClassName($("hairline_block"), "inactive");
	container_div = $('main_image_box');
	spreads      = $H(MAGAZINE_DATA.photos[issue_number][article_id]);
	if (spreads.keys().length == 0) {
		spreads = $H({'01': {'thumb': '_default.gif', 'full': '_default.gif'
	}
});
}
var spread_numbers = spreads.keys().sort();
for (i=0; i<Math.min(spread_numbers.length, 2); i++) {
	var img_src = MAGAZINE_DATA.photos._paths['spread_full'] + '/' + spreads[spread_numbers[i]].full;
	container_div.innerHTML += '<img src="' +img_src+ '" class="short_display" />';
}
changeCaption(issue_number, article_id + "_" + spread_numbers[0]);
displayMoreAboutLinks(issue_number, article_id, "short");
}


function loadCaptionData() {
	if (util.strValueFor(MAGAZINE_DATA.issues[caption.issue_number].more_info)) {
		getUrl = MAGAZINE_DATA.issues[caption.issue_number].more_info;
		getUrl = getUrl.replace(/http:\/\/(www\.)?blindspot\.com/,'');
		new Ajax.Request(getUrl, {
			method: 'get',
			onComplete: updateCaptionData
		});
	}
}


function loadJsonResponse(ajax_url, targetObjAccessor, nextFunction) {
	getJsonResponse(ajax_url, function(request) {
		val = targetObjAccessor(request);
		nextFunction(val);
	});
}


function lookupCaption() {
	if (caption.data[caption.issue_number][caption.spread_id] != undefined)
	{
		$('caption').innerHTML = caption.data[caption.issue_number][caption.spread_id];
	} else {
		$('caption').innerHTML = "";
	}
}


function setArticleListingsText(issue_content) {
	var articles_html = "";
	var html_elements = new Array();
	if (issue_content.is_short_form) {
		issue_content.articles.each(function(article) {
			html_elements[html_elements.length] =
			'<span id="' +article.id+ '" class="article_author ' +article.medium+ '">' +
			article.author_line+ '</span>';
		});
		articles_html = html_elements.join(', ');
	} else {
		issue_content.articles.each(function(article) {
			articles_html += '<p id="' +article.id+ '" class="' +article.medium+ '">' +
			'<span class="article_author">'+ article.author_line+ '</span><br />' +
			'<span class="article_title">'+ article.title+ '</span></p>';
		});
	}
	return articles_html;
}


function showArticleText(issue_number, article_id) {
	deactivatePhotoBrowser();
	container_div = $('main_image_box');
	var html;
	new Ajax.Request("/includes/articles/"+issue_number+"_"+article_id+".html", {
		method: 'get',
		asynchronous: false,
		onFailure: function(request) {
			html = "Sorry. The contents of this article were not found.";
		},
		onSuccess: function(request) {
			var body_html = extractString(request.responseText,'/\<body/i','/\<\/body\>/i', 'pattern');
			if (body_html) {
				html = body_html;
			}
			else {
				html = request.responseText;
			}
		}
	});
	util.setUpScrollingText(container_div, html);
	displayMoreAboutLinks(issue_number, article_id);
}


function updateCaptionData(request) {
	var issue_number = extractString(request.responseText,'<div id="issue_number">','</div>');
	var spreadlines_div_content = extractString(request.responseText,'<div id="spread_info">','</div>');
	if ( !(issue_number && spreadlines_div_content) ) {
		return;
	}
	var spreadlines = $A(util.rmbreaks(spreadlines_div_content).split(/\s*\<br[^\>]*\>\s*/i));
	caption.data[caption.issue_number] = new Array();
	spreads = new Array();
	spreadlines.each(function(line) {
		var pieces = util.splitOnce(line, ';');
		var spread_id = pieces[0];
		var caption_string = pieces[1];
		caption.data[issue_number][spread_id] = caption_string;
	});
	lookupCaption();
}


function spreadLoaded() {
	photo_browser.SLOTS_LOADED++;
	if (photo_browser.SLOTS_LOADED == photo_browser.number_of_slots) {
		photo_browser.trigger("slots_loaded");
	}
}


function updatePageContent(issue_number) {
	Element.removeClassName($("hairline_block"), "inactive");
	var issue_content = MAGAZINE_DATA.issues[issue_number];
	$("issue_number").innerHTML = '<img src="/images/magazine/header/' +
	issue_content.display_name + '.gif" alt="' + issue_content.display_name +'"' +
	'width="40" height="28" />';
	var store_controls_html   = '';
	if (issue_content.in_stock) {
		store_controls_html    += issue_content.price + '<br />';
		store_controls_html    += '<a href="' +issue_content.add_cart_url+ '">Purchase Now<br />';
		store_controls_html    += "<a href=\"javascript:addToCart(" +issue_number+ ")\">Add to Basket</a><br />";
	}
	else {
		store_controls_html    += 'Sold Out.<br />';
	}
	store_controls_html += '<a href="../subscribe/">Subscribe</a><br />';
	$("store_controls").innerHTML = store_controls_html;
	util.setUpScrollingText($("articles"), setArticleListingsText(issue_content));
	addArticleMouseEvents(issue_content);
	$("featured_editions_display").innerHTML = '';
	if ( issue_content.featured_editions && !(util.isEmptyField(issue_content.featured_editions[0])) ) {
		loadEditionCovers(issue_content);
	}
}


function loadEditionCovers(issue_content) {
	var num_prints = issue_content.featured_editions.length;
	var editions = $A(num_prints);
	var prints_loaded = 0;
	var addEditionCovers = function(req, idx, edition_id) {
		editions[idx] = {'img_src':    req.responseText,
		'edition_id': edition_id
		};
		if (++prints_loaded == num_prints) {
			var editions_display = $("featured_editions_display");
			editions.each(function(ed) {
				editions_display.innerHTML += '<a href="page4.html?edition_id=' +ed.edition_id+ '"><img src="' +ed.img_src+ '" /></a>';
			});
			var sp = (num_prints > 1) ? 'Prints' : 'Print';
			editions_display.innerHTML += '<br clear="all"><p>Special Limited Edition ' +sp+ ' from This Issue<p>';
		}
	}
	var ajax_url = "/data/photos.php?medium=edition_thumb&id=";
	issue_content.featured_editions.each(function(edition_id, idx) {
		new Ajax.Request(ajax_url + edition_id, {
			method: 'get',
			onComplete: function(req) { addEditionCovers(req, idx, edition_id);
		}
		});
	});
}
