/*
Script: Function.js
	Contains Function Prototypes like create, bind, pass, and delay.

License:
	MIT-style license.
*/

Function.prototype.extend = function(properties) {
	for (var property in properties) this[property] = properties[property];
	return this;
};
Function.prototype.create = function(options) {
	var self = this;
	options = options || {};
	return function(event){
		var args = options.arguments;
		args = (args != undefined) ? $splat(args) : Array.slice(arguments, (options.event) ? 1 : 0);
		if (options.event) args = [event || window.event].extend(args);
		var returns = function(){
			return self.apply(options.bind || null, args);
		};
		if (options.delay) return setTimeout(returns, options.delay);
		if (options.periodical) return setInterval(returns, options.periodical);
		if (options.attempt) return $try(returns);
		return returns();
	};
};
Function.prototype.run = function(args, bind) {
	return this.apply(bind, $splat(args));
};
Function.prototype.pass = function(args, bind) {
	return this.create({bind: bind, arguments: args});
};
Function.prototype.bind = function(bind, args) {
	return this.create({bind: bind, arguments: args});
};
Function.prototype.bindWithEvent = function(bind, args) {
	return this.create({bind: bind, arguments: args, event: true});
};
Function.prototype.attempt = function(args, bind) {
	return this.create({bind: bind, arguments: args, attempt: true})();
};
Function.prototype.delay = function(delay, bind, args) {
	return this.create({bind: bind, arguments: args, delay: delay})();
};
Function.prototype.periodical = function(periodical, bind, args) {
	return this.create({bind: bind, arguments: args, periodical: periodical})();
};


if(!Array.prototype.each) {
	Array.prototype.each = function(pFc, pContext) {
		var vSz = this.length;
		if(typeof(pFc) != "function") throw new TypeError();
		
		var vThis = arguments[1];
		if(!pContext) pContext = vThis;
		for(var vLoop = 0; vLoop < this.length; vLoop++) {
			if(vLoop in this) pFc.call(pContext, this[vLoop], vLoop, this);
		}
	};
}
if(!Object.prototype.each) {
	Object.prototype.each = Array.prototype.each;
}
if((typeof(NodeList) != "undefined") && !NodeList.prototype.each) {
	NodeList.prototype.each = function(pFc, pContext) {
		var vSz = this.length;
		if(typeof(pFc) != "function") throw new TypeError();
		
		var vThis = arguments[1];
		if(!pContext) pContext = vThis;
		for(var vLoop = 0; vLoop < this.length; vLoop++) {
			if(vLoop in this) pFc.call(pContext, this.item(vLoop), vLoop, this);
		}
	};
}
if((typeof(HTMLCollection) != "undefined") && !HTMLCollection.prototype.each) {
	HTMLCollection.prototype.each = NodeList.prototype.each;
}
if(!Date.prototype.mmddyyyy) {
	Date.prototype.mmddyyyy = function(pSeparator) {
		if(!pSeparator) pSeparator = "/";
		var vString = "";
		var vNumber = this.getMonth() + 1;
		if(vNumber < 10) vString = "0";
		vString += vNumber + pSeparator;
		vNumber = this.getDate();
		if(vNumber < 10) vString += "0";
		vString += vNumber + pSeparator;
		vString += this.getFullYear();
		
		return vString;
	}
}
if(!Date.prototype.yyyymmdd) {
	Date.prototype.yyyymmdd = function(pSeparator) {
		if(!pSeparator) pSeparator = "-";
		var vString = this.getFullYear() + pSeparator;
		var vNumber = this.getMonth() + 1;
		if(vNumber < 10) vString += "0";
		vString += vNumber + pSeparator;
		vNumber = this.getDate();
		if(vNumber < 10) vString += "0";
		vString += vNumber;
		
		return vString;
	}
}


YAHOO.widget.DataTable.prototype.getTdEl = function(cell) {
	var Dom = YAHOO.util.Dom,
	lang = YAHOO.lang,
	elCell,
	el = Dom.get(cell);
	// Validate HTML element
	if(el && (el.ownerDocument == document)) {
		// Validate TD element
		if(el.nodeName.toLowerCase() != "td") {
			// Traverse up the DOM to find the corresponding TR element
			elCell = Dom.getAncestorByTagName(el, "td");
		} else elCell = el;
		// Make sure the TD is in this TBODY
		if(elCell && (elCell.parentNode.parentNode == this._elTbody)) {
			// Now we can return the TD element
			return elCell;
		}
	} else if(cell) {
		var oRecord, nColKeyIndex;
		if(lang.isString(cell.columnKey) && lang.isString(cell.recordId)) {
			oRecord = this.getRecord(cell.recordId);
			var oColumn = this.getColumn(cell.columnKey);
			if(oColumn) nColKeyIndex = oColumn.getKeyIndex();
		}
		if(cell.record && cell.column && cell.column.getKeyIndex) {
			oRecord = cell.record;
			nColKeyIndex = cell.column.getKeyIndex();
		}
		var elRow = this.getTrEl(oRecord);
		if((nColKeyIndex !== null) && elRow && elRow.cells && elRow.cells.length > 0) {
			return elRow.cells[nColKeyIndex] || null;
		}
	}
	return null;
};
YAHOO.widget.DataTable.prototype.newRecord = function() {
	return null;
};
YAHOO.widget.DataTable.prototype.addNewRow = function() {
	this.addRow(this.newRecord());
	this.render();
	return false;
};
YAHOO.widget.DataTable.prototype.deleteSelectedRow = function() {
	var vSelection = this.getSelectedRows();
	if(vSelection) this.deleteRows(this.getRecord(vSelection[0]));
	this.render();
	return false;
};
YAHOO.widget.DataTable.prototype.requery = function(pNewRequest, pCallback) {
	if(!this.waitPanel) {
		this.waitPanel = new YAHOO.widget.Panel("wait", 
			{ width:"240px", 
			  fixedcenter:true, 
			  close:false, 
			  draggable:false, 
			  zindex:4,
			  modal:true,
			  visible:false
			} 
		);
		this.waitPanel.setHeader("Working, please wait...");
		this.waitPanel.setBody('<img src="http://l.yimg.com/a/i/us/per/gr/gp/rel_interstitial_loading.gif" />');
		this.waitPanel.render(document.body);
	}
	this.waitPanel.show();
	
	if(pCallback) this.getDataSource().sendRequest((!pNewRequest ? this.get('initialRequest') : pNewRequest), pCallback);
	else this.getDataSource().sendRequest((!pNewRequest ? this.get('initialRequest') : pNewRequest), {
		success: this.onDataReturnInitializeTable,
		failure: this.onDataReturnInitializeTable,
		scope: this,
		argument: this.getState()
	});
};

YAHOO.namespace("monitus");
YAHOO.monitus.Element = function() { };
YAHOO.monitus.Element.prototype.getTag = function() {
	return this.get('element').tagName.toLowerCase();
};
YAHOO.monitus.Element.prototype.getElementByClassName = function(pClassName, pTag) {
	return this.getElementsByClassName(pClassName, pTag)[0];
};
YAHOO.monitus.Element.prototype.getChildren = function() {
	var vChildren = this.get('element').childNodes();
	for(var vLoop = 0; vLoop < vChildren.length; vLoop++) vChildren[vLoop] = YAHOO.util.Dom.get(vChildren[vLoop]);
	return vChildren;
};
YAHOO.monitus.Element.prototype.insertAfter = function(pElement, pAfter) {
	pElement = pElement.get ? pElement.get('element') : pElement;
	pAfter = (pAfter && pAfter.get) ? pAfter.get('element') : pAfter;
	
	var vSibling = YAHOO.util.Dom.getNextSibling(pAfter);
	if(vSibling) return this.insertBefore(pElement, vSibling);
	 return this.get('element').appendChild(pElement);
};

YAHOO.lang.augmentProto(YAHOO.util.Element, YAHOO.monitus.Element);

YAHOO.monitus.page_init = new Array();
YAHOO.monitus.page_validator = null;

YAHOO.monitus.se_query_strings = new Array();
YAHOO.monitus.se_query_strings["google"] = "http://www.google.com/search?hl=en&q=site%3A%s%+%q%&pws=0";
YAHOO.monitus.se_query_strings["yahoo"] = "http://search.yahoo.com/search?p=site%3A%s%+%q%";
YAHOO.monitus.se_query_strings["msn"] = "http://search.msn.com/results.aspx?q=site%3A%s%+%q%";

YAHOO.monitus.radioSelectedValue = function(pRadio) {
	for(var vLoop = 0; vLoop < pRadio.length; vLoop++) {
		if(pRadio[vLoop].checked) return pRadio[vLoop].value;
	}
	return null;
};

YAHOO.monitus.site_search_url = function(pSearchEngine, pSite, pQuery) {
	if(!MONITUS.se_query_strings[pSearchEngine]) return "";
	
	var vURL = MONITUS.se_query_strings[pSearchEngine].replace(/%s%/g, encodeURIComponent(pSite));
	vURL = vURL.replace(/%q%/g, encodeURIComponent(pQuery).replace(/%20/g, '+'));
	
	return vURL;
};

YAHOO.monitus.date_string_to_date = function(pDateString) {
	var vTokens = pDateString.match(/(\d{2,4})[-\s\\\.](\d{1,2})[-\s\\\.](\d{1,2})/);
	
	if(vTokens) {
		for(var vLoop = 1; vLoop < vTokens.length; vLoop++) vTokens[vLoop] = (vTokens[vLoop] * 1);
		if(vTokens[1] < 100) vTokens[1] += ((vTokens[1] < 70)?2000:1900);
		
		try {
			return new Date(vTokens[1], vTokens[2] - 1, vTokens[3], 0, 0, 0, 0);
		} catch (e) { }
	}
	return null;
};
YAHOO.monitus.date_format = function(pDate, pFormat) {
	if(!pDate || (pDate.getTime() <= 0)) return '-';
	if(!pFormat) pFormat = 'YYYY-MM-DD';
	
	var vYear = parseInt(pDate.getFullYear());
	var vMonth = parseInt(pDate.getMonth()) + 1;
	if(vMonth < 10) vMonth = '0' + vMonth;
	var vDay = parseInt(pDate.getDate());
	if(vDay < 10) vDay = '0' + vDay;
		
	var vResult = pFormat.replace(/YYYY/, vYear);
	vResult = vResult.replace(/YY/, (vYear - 2000));
	vResult = vResult.replace(/MM/, vMonth);
	vResult = vResult.replace(/DD/, vDay);
	return vResult;
};
YAHOO.monitus.number_format = function(pNumber, pDecimals, pForceSign) {
	var vNumberString = '' + pNumber;
	vNumberString = vNumberString.replace(/^\-/, '');
	var vTokens = vNumberString.split('.');
	var vUnits = vTokens[0];
	var vDecimals = "";
	if(vTokens.length <= 1) vTokens[1] = '';
	if(pDecimals) {
		if(vTokens[1].length >= pDecimals) vTokens[1] = vTokens[1].substr(0, pDecimals);
		else {
			var vDelta = pDecimals - vTokens[1].length;
			for(var vLoop = 0; vLoop < vDelta; vLoop++) vTokens[1] += '0';
		}
	}
	if(vTokens[1] != "") vDecimals = '.' + vTokens[1];
	var vRE = /(\d+)(\d{3})/;
	while(vRE.test(vUnits)) vUnits = vUnits.replace(vRE, '$1' + ',' + '$2');
	
	var vPrefix = ((pNumber < 0) ? "-" : (pForceSign ? "+" : ""));
	return vPrefix + vUnits + vDecimals;
};

YAHOO.monitus.emptycell_formatter = function(pCell, pRecord, pColumn, pData) {
	pCell.innerHTML = "";
};
YAHOO.monitus.string_formatter = function(pCell, pRecord, pColumn, pData) {
	var vEmptyValue = pRecord.getData("emptyStringValue");
	if(!vEmptyValue) vEmptyValue = "";
	pCell.innerHTML = ((pData == "") ? vEmptyValue : pData);
};
YAHOO.monitus.date_formatter = function(pCell, pRecord, pColumn, pData) {
	pCell.innerHTML = YAHOO.monitus.date_format(pData);
};
YAHOO.monitus.number_formatter = function(pCell, pRecord, pColumn, pData) {
	pCell.innerHTML = YAHOO.monitus.number_format(parseFloat(pData), 2);
};
YAHOO.monitus.amount_formatter = function(pCell, pRecord, pColumn, pData) {
	pCell.innerHTML = "$"  + YAHOO.monitus.number_format(parseFloat(pData), 2);
};
YAHOO.monitus.percent_formatter = function(pCell, pRecord, pColumn, pData) {
	pCell.innerHTML = pData + "%";
};
YAHOO.monitus.multiDays_formatter = function(pCell, pRecord, pColumn, pData) {
	var vValue = '';
	for(var vLoop = 0; vLoop < pData.length; vLoop++) {
		var vDay = parseInt(pData[vLoop]);
		switch(vDay) {
			case 6:
				vDay = 'Sat';
				break;
			case 5:
				vDay = 'Fri';
				break;
			case 4:
				vDay = 'Thu';
				break;
			case 3:
				vDay = 'Wed';
				break;
			case 2:
				vDay = 'Tue';
				break;
			case 1:
				vDay = 'Mon';
				break;
			default:
				vDay = 'Sun';
				break;
		}
		vValue += ((vValue == "") ? "" : " ") + vDay;
	}
	pCell.innerHTML = vValue;
};
YAHOO.monitus.description_formatter = function(pCell, pRecord, pColumn, pData) {
	pCell.innerHTML = "<span style='font-size: small; color: #666666;'>"  + pData + "</span>";
};

YAHOO.monitus.strict_positive_number_validate = function(pData) {
	var vNumber = pData * 1;
	if(YAHOO.lang.isNumber(vNumber) && (vNumber > 0)) return vNumber;
	else {
		YAHOO.log("Could not validate data " + YAHOO.lang.dump(pData) + " to type Number", "warn", "");
		return null;
	}
};
YAHOO.monitus.positive_number_validate = function(pData) {
	var vNumber = pData * 1;
	if(YAHOO.lang.isNumber(vNumber) && (vNumber >= 0)) return vNumber;
	else {
		YAHOO.log("Could not validate data " + YAHOO.lang.dump(pData) + " to type Number", "warn", "");
		return null;
	}
};
YAHOO.monitus.day_selection_validate = function(pData) {
	if(!pData || (pData.length == 0)) {
		alert("Pleaase select at least one day");
		return undefined;
	} else return pData;
};

YAHOO.monitus.table_button_clicked = function(oArgs) {
	YAHOO.util.Event.stopEvent(oArgs.event);
	var vAnchor = oArgs.target;
	var vRecord = this.getRecord(vAnchor);
	var vAction = vAnchor.hash.substr(1);
	if(typeof(this.button_clicked) == "function") this.button_clicked(vRecord, vAction);
};

YAHOO.monitus.clean_up_url = function(pValue) {
	var vResult = pValue.replace(/^(?:https?\:\/\/)?([^\/]+(?:\/.*)?)$/i, "$1");
	var vDomain = pValue.replace(/^(?:https?\:\/\/)?([^\/]+)(?:\/.*)?$/i, "$1");
	var vTokens = vDomain.split(".");
	if(vTokens.length < 3) vResult = "www." + vResult;
	return vResult;
};
YAHOO.monitus.lastNdays = function(pDays, pFromPicker, pToPicker) {
		var vDate = new Date();
		pToPicker.setDate(vDate);
		vDate.setHours(vDate.getHours() - (24 * pDays));
		pFromPicker.setDate(vDate);
		return false;
};

YAHOO.monitus.set_field_status = function(pStatusBarId, pMode, pStatus) {
	// pMode = -1 (error), 0 (waiting) or 1 (valid)
	var vStatusField = YAHOO.util.Dom.get(pStatusBarId);
	vStatusField.innerHTML = pStatus;
	YAHOO.util.Dom.setStyle(vStatusField, "display", (pStatus ? "block" : "none"));
	YAHOO.util.Dom.setStyle(vStatusField, "color", ((pMode == 0) ? "#999999" : ((pMode < 0) ? "red" : "green")));
};

YAHOO.monitus.set_module_title = function(pModule, pTitle) {
	var vObject= YAHOO.util.Dom.get(pModule);
	if(pModule) pModule.innerHTML = pTitle;
};

YAHOO.monitus.goToRegistration = function() {
	YAHOO.monitus.login_popup.hide();
	YAHOO.monitus.register_popup.show();
	return false;
};

YAHOO.monitus.ProgressIndicator = function(element, imageBaseURL, ghostElement) {
	this.count = 0;
	this.timer = null;
	this.element = element;
	this.element.style.display = "none";
	this.imageBaseURL = imageBaseURL;
	this.ghostElement = ghostElement;
};
YAHOO.monitus.ProgressIndicator.prototype = {
	start: function () {
		if(this.ghostElement) this.ghostElement.style.opacity = 0.5;
		this.element.style.display = "block";
		if (this.timer) clearInterval(this.timer);
		this.tick();
		var localThis = this;
		this.timer = setInterval(function() { localThis.tick() }, 100);
	},
	stop: function () {
		clearInterval(this.timer);
		this.element.style.display = "none";
		if(this.ghostElement) this.ghostElement.style.opacity = 1.0;
	},
	tick: function () {
		var imageURL = this.imageBaseURL + (this.count + 1) + ".png";
		this.element.src = imageURL;
		this.count = (this.count + 1) % 12;
	}
};

YAHOO.monitus.SmoothScroll = function() {
	var vBody = YAHOO.util.Dom.get(document.getElementsByTagName('body')[0]);
	var vLinks = vBody.getElementsByTagName("a");
	for(var vLoop = 0; vLoop < vLinks.length; vLoop++) {
		if(vLinks[vLoop].href.indexOf("#") < 0) { return; }
		var vAnchor = vLinks[vLoop].href.replace(/^[^#]*#/, "");
		if(vAnchor) this.setupLink(vLinks[vLoop], YAHOO.util.Dom.getElementBy(function(pAnchor) {
			if((pAnchor.id == vAnchor) || (pAnchor.name == vAnchor)) return true;
			return false;
		}, "a"));
	}
};
YAHOO.monitus.SmoothScroll.prototype.setupLink = function(pLink, pTargetAnchor) {
	YAHOO.util.Event.addListener(pLink, "click", function(pEvent) {
		if(pTargetAnchor) {
			YAHOO.util.Event.preventDefault(pEvent);
			var y = YAHOO.util.Dom.getY(pTargetAnchor);
			var vScroll = new YAHOO.util.Scroll(YAHOO.util.Dom.get(document.getElementsByTagName('body')[0]), {scroll: { to: [0, y] }}, 0.35);
			vScroll.animate();
			pLink.blur();
		}
	});
};

YAHOO.monitus.accordionViewInit = function(pAccordionView) {
	var vObjects = YAHOO.util.Dom.getElementsByClassName("mjoomla_panel_title", "span");
	if(vObjects && (vObjects.length > 0)) {
		for(var vLoop = 0; vLoop < vObjects.length; vLoop++) {
			var vLink = YAHOO.util.Dom.getAncestorByClassName(vObjects[vLoop], "yui-accordion-toggle");
			if(vLink) {
				vObjects[vLoop].accordionView = pAccordionView;
				YAHOO.util.Event.addListener(vObjects[vLoop], "click", function(){this.accordionView._onClick(YAHOO.util.Dom.getAncestorByClassName(this, "yui-accordion-toggle"));});
			}
		}
	}
};

YAHOO.monitus.DatePicker = function(buttonContainerID, fieldID, selectedDate, minDate, maxDate) {
	this.field = YAHOO.util.Dom.get(fieldID);
	this.menu = new YAHOO.widget.Overlay(fieldID + "Calendar", { visible: false, zIndex: 100 });
	this.button = new YAHOO.widget.Button({ type: "menu", id:fieldID + "DatePicker", label:selectedDate, menu:this.menu, container:buttonContainerID});
	
	var vThis = this;
	this.button.on("appendTo", function () {
		vThis.menu.setBody(" ");
		vThis.menu.body.id = fieldID + "CalContainer";
		vThis.menu.render(this.get("container"));
	});
	
	this.onButtonClick = function() {
		var vCalendar = new YAHOO.widget.Calendar("buttoncalendar", vThis.menu.body.id, {pagedate: vThis.button.get("label").replace(/(\d+)\/\d+(\/\d+)/, "$1$2"), minDate: minDate, maxdate: maxDate});
		vCalendar.render();
		vCalendar.changePageEvent.subscribe(function() {
			window.setTimeout(function() {
				vThis.menu.show();
			}, 0);
		});
		vCalendar.selectEvent.subscribe(function(p_sType, p_aArgs) {
			if(p_aArgs) {
				var aDate = p_aArgs[0][0];
				var nMonth = aDate[1];
				var nDay = aDate[2];
				var nYear = aDate[0];
				vThis.button.set("label", (nMonth + "/" + nDay + "/" + nYear));
				vThis.field.value = (nYear + "-" + nMonth + "-" + nDay);
			}
			if(typeof(vThis.valueSelectedCallback) == "function") vThis.valueSelectedCallback(vThis.field);
			vThis.menu.hide();
		});
		this.unsubscribe("click", vThis.onButtonClick);
	}
	this.button.on("click", this.onButtonClick);
};
YAHOO.monitus.DatePicker.prototype.setDate = function(pDate) {
	this.button.set("label", ((parseInt(pDate.getMonth()) + 1) + "/" + pDate.getDate() + "/" + pDate.getFullYear()));
	this.field.value = (pDate.getFullYear() + "/" + (parseInt(pDate.getMonth()) + 1) + "/" + pDate.getDate() );
};

YAHOO.monitus.videoHelpPane = function(pTargetID, pOverlayTitle, pVideoPath, pWidth, pHeight, pBgColor) {
	var vTarget = YAHOO.util.Dom.get(pTargetID);
	if(vTarget) {
		if(!pOverlayTitle) pOverlayTitle = "Monitus Help";
		vTarget.vidOverlay = new YAHOO.widget.Panel("vidHelp_vid" + pTargetID, 
				{ width: parseInt(pWidth) + 20 + "px", 
				  fixedcenter:true, 
				  close:true, 
				  draggable:true, 
				  zindex:10000000,
				  modal:false,
				  visible:false,
				  effect:{effect:YAHOO.widget.ContainerEffect.FADE,duration:0.25}
				}
		);
		vTarget.vidOverlay.setHeader(pOverlayTitle);
		vTarget.vidOverlay.setBody('<div id="vidHelp_media' + pTargetID +'"></div>');
		var vID = "vidHelp_cws" + pTargetID;
		vTarget.vidOverlay.beforeShowEvent.subscribe(function() {
			if(!pVideoPath.match(/^http/i)) pVideoPath = "http://site.rtml-training.com/screencasts/" + pVideoPath;
			this.swf = new SWFObject(pVideoPath, vID, pWidth, pHeight, "9.0.28", pBgColor);
			this.swf.addParam("quality", "best");
			this.swf.addParam("allowFullScreen", "true");
			this.swf.addParam("scale", "showall");
			this.swf.addParam("allowScriptAccess", "always");
			this.swf.addParam("autostart", "false");
			if(typeof(YAHOO.monitus.videoHelpCustom) == "function") YAHOO.monitus.videoHelpCustom(pTargetID, this.swf);
			this.swf.write("vidHelp_media" + pTargetID);
		});
		vTarget.vidOverlay.beforeHideEvent.subscribe(function() {
			var vObject = document.getElementById(vID);
			if(vObject) {
				vObject.parentNode.removeChild(vObject);
			}
		});
		vTarget.vidOverlay.render(document.body);
	}
};
// pButtons div should be of class "mjoomla_video_help"
YAHOO.monitus.videoHelpButton = function(pButtonID, pOverlayTitle, pVideoPath, pWidth, pHeight, pBgColor) {
	var vButton = new YAHOO.widget.Button({title: "View a screencast", id:"vidHlp_" + pButtonID, container: pButtonID });
	YAHOO.monitus.videoHelpPane(pButtonID, pOverlayTitle, pVideoPath, pWidth, pHeight, pBgColor);
	vButton.on("click", function() {
		this.vidOverlay.show();
	});
	return vButton;
};

YAHOO.monitus.init = function() {
	if(YAHOO.env.ua.ie == 0) {
		// SmoothScrolling
		new YAHOO.monitus.SmoothScroll();
	}
	
	// make tooltips automatically
	var vLinks = YAHOO.util.Dom.getElementsByClassName("mjoomla_tooltip", "a", document);
	for(var vLoop = 0; vLoop < vLinks.length; vLoop++) {
		new YAHOO.widget.Tooltip("tip_" + vLinks[vLoop].id, {context: vLinks[vLoop].id});
	}
	
	// adjust forms and pagination links
	var vCurrentLocation = document.location.pathname;
	if(document.location.hash && (document.location.hash != "")) vCurrentLocation += "#" + document.location.hash;
	var vPagination = YAHOO.util.Dom.getElementsByClassName("pagination", "ul", document);
	for(var vLoop = 0; vLoop < vPagination.length; vLoop++) {
		vLinks = vPagination[vLoop].getElementsByTagName("a");
		for(var vLoop2 = 0; vLoop2 < vLinks.length; vLoop2++) vLinks[vLoop2].href = vLinks[vLoop2].href.replace(/^.+\?/i, vCurrentLocation + "?");
	}
	if(document.location.search && (document.location.search != "")) vCurrentLocation += document.location.search;
	var vForms = YAHOO.util.Dom.getElementsByClassName("adminForm", "form", document);
	for(var vLoop = 0; vLoop < vForms.length; vLoop++) vForms[vLoop].action = vCurrentLocation;
	
	// catch the referrer
	var vTokens = document.location.search.match(/ref\=([^&]+)/);
	var vReferer = (vTokens ? vTokens[1] : null);
	if(vReferer)
		YAHOO.util.Cookie.set("m_ref", vReferer, {expires: new Date((new Date()).getTime() + (7 * 24 * 3600000))});
	else
		vReferer = YAHOO.util.Cookie.get("m_ref");
	
	var vField = YAHOO.util.Dom.get("referer");
	if(vField)
		vField.value = vReferer;
	
	for(var vLoop = 0; vLoop < YAHOO.monitus.page_init.length; vLoop++) YAHOO.monitus.page_init[vLoop]();
};

YAHOO.util.Event.addListener(window, "load", YAHOO.monitus.init);