/*
 *
 * Article Insert Script for CMS
 * Copyright (C) 2002, Three Wise Men
 *
 * Version 1.3.0 - 07-Apr-2003
 *
 * 07-Apr-2003 - Added support for new CMS v1.3 article sizes
 * 19-Feb-2003 - Added multi-article slot support, added alphaqueue support
 * 11-Jan-2003 - Added path flexibility for finding CMS content
 * 24-Sep-2002 - General code cleanup, variable name and function name consistency audit
 * 24-Sep-2002 - Consolidated several individual JavaScript libraries into this single script
 * 30-Aug-2002 - Function library created for CMS v1.1 release to simplify JavaScript tags
 *
 */

// Function library to accept parameters, do minor syntax checking,
// and format the correct url to insert the appropriate article into
// the page.

var CMS_Path = "/cms";

var CMS_nextSlot = {};
var CMS_userID;
var CMS_server;

var CMS_currentQueue;
var CMS_currentQueueType;
var CMS_targetPage;

var CMS_QueryParsed;
var CMS_QueryParameters = {};

/*
 *	Initialize a source server for article content
 *		- remembers user ID and server address for convenience functions
 */
function CMS_setupSource( server, user ) {
	CMS_userID = user;
	CMS_server = server;
}

/*
 * Ensure the source server has been defined
 */
function CMS_verifySource() {
	if (CMS_userID == null || CMS_server == null) return false;
	return true;
}

/*
 * Raw content URL formatting function, requires CMS_setupSource to be called first
 *  - verifies valid size and queuetype parameters
 */
function CMS_insertArticle ( slot, queuetype, queue, size, page ) {

	if (queuetype != 'queue' && queuetype != 'futurequeue' && queuetype != 'historyqueue' && queuetype != 'alphaqueue') {
		document.write("Invalid queue type; must be 'queue', 'futurequeue', or 'historyqueue'.");
	} else {

		if (CMS_verifySource()) {
			if (size == "small" || size == "large" || size == "tiny" || size == "full" || size == "body" || size == "headline"
				|| size == "ll1" || size == "ll2" || size == "ll3" || size == "ll4" || size == "ll5" || size == "ll6"
				|| size == "ll7" || size == "lr1" || size == "lr2" || size == "lr3" || size == "lr4" || size == "lr5"
				|| size == "lr6" || size == "lr7" || size == "lc1" || size == "lc2" || size == "lc3" || size == "lc4"
				|| size == "lc5" || size == "lc6" || size == "fl1" || size == "fl2" || size == "fl3" || size == "fl4"
				|| size == "fl5" || size == "fl6" || size == "fl7" || size == "fr1" || size == "fr2" || size == "fr3"
				|| size == "fr4" || size == "fr5" || size == "fr6" || size == "fr7" || size == "fc1" || size == "fc2"
				|| size == "fc3" || size == "fc4" || size == "fc5" || size == "fc6" || size == "tl1" || size == "tl2"
				|| size == "tr1" || size == "tr2" || size == "image" || size == "thumbnail") {
				
				CMS_nextSlot[queue] = slot+1;
				var scripttext = "<script language='JavaScript' src='http://" + CMS_server + CMS_Path + "/content/" + CMS_userID;
				scripttext += "/js/article/" + queuetype + "/" + queue + "/" + slot + "/" + size;
				if (page != null) scripttext += "?page=" + page;
				scripttext += "'></scr" + "ipt>";
				document.write(scripttext);
			} else {
				document.write("Invalid size specified in insertArticle function.");
			}
		} else {
			document.write("CMS_setupSource function not run - can't insert article.");
		}
	}
}

/*
 *	Initialize a group of article slots, according to queue name and type
 *		- resets slot counter for convenience functions
 *		- remembers queue and queuetype for convenience functions
 */

function CMS_setupSlotGroup( queuetype, queue, page ) {
	var slotKey = queue + '-' + queuetype;
	
	CMS_currentQueue = queue;
	CMS_currentQueueType = queuetype;
	CMS_targetPage = page;

	CMS_nextSlot[slotKey] = 0;
}

/*
 * Ensure the queue and queuetype have been defined
 */
function CMS_verifySlotGroup() {
	if (CMS_currentQueue == null || CMS_currentQueueType == null) return false;
	return true;
}

/*
 * Return the next slot number for the current slot group
 * - assumes the slot group has been set up, must be preceded with a call to CMS_verifySlotGroup
 */
function CMS_getNextSlot() {
	var slotKey = CMS_currentQueue + '-' + CMS_currentQueueType;
	var slot = CMS_nextSlot[slotKey]; // Slot # is pre-incremented, so grab it first
	CMS_nextSlot[slotKey]++;
	return slot;
}

/*
 * Insert the next article into the current slot in the defined current slot group
 */
function CMS_insertNextArticle( size ) {
	if (CMS_verifySlotGroup()) {
		var slot = CMS_getNextSlot();
		CMS_insertArticle ( slot, CMS_currentQueueType, CMS_currentQueue, size, CMS_targetPage );
	} else {
		document.write("CMS_setupSlotGroup function not run - can't insert next article");
	}
}

/*
 * Parse the GET parameters out of the request query string
 */
function CMS_parseQueryString() {
	var query = window.location.search.substring(1);
	var pairs = query.split("&");

	for (var i=0;i<pairs.length;i++) {
		var pos = pairs[i].indexOf('=');
		if (pos >= 0) {
			var argname = pairs[i].substring(0,pos);
			var value = pairs[i].substring(pos+1);
			CMS_QueryParameters[argname] = value;
		}
	}
	CMS_QueryParsed = 1;
}

/*
 * Ensure the query parameters have already been parsed
 */
function CMS_verifyQueryParsed() {
	if (CMS_QueryParsed == null) return false;
	return true;
}

/*
 * Return the GET parameter value for the key provided
 */
function CMS_getParameter( key ) {

	// Parse the parameters if they haven't already been
	if (!CMS_verifyQueryParsed()) {
		CMS_parseQueryString();
	}

	if (key == null) return null;

	var value = CMS_QueryParameters[key];
	return value;
}

/*
 * Insert a specific article determined by GET parameters from the request query string
 */
function CMS_insertRequestedArticle(host) {
	var scripttext = "<script language='JavaScript' src='http://" + host + CMS_Path + "/content/";
	scripttext += CMS_getParameter("user");
	scripttext += "/js/article/id/";
	scripttext += CMS_getParameter("id");
	scripttext += "/full'></scr" + "ipt>";

	document.writeln(scripttext);
}
