(function(page) {

	// note: page.openpagewindow.rewriteurl can be defined
	// as a function that preprocesses the url passed
	// to the page before it is sent.
	
	// public
	page.openpagewindow = function(page) {
		// Version: 2009 06 22
		// args
		var params = {};
		var windowname;
		var windowoptions;
		for(var i=1; i<arguments.length;i++) {
			var arg = arguments[i];
			if (i<=4 && (typeof arg != 'object' || arg == null)) {
				if (typeof windowname == 'undefined') { windowname = arg; }
				else if (typeof windowoptions == 'undefined') { windowoptions = arg; }
				continue;
			}
			else if (i<=4 && typeof arg == 'object') {
				params = arg;
				continue;
			}
			alert('Bad arguments for page.openpagewindow(actionname[,params][,windowname][,windowoptions])');
			return;
		}
		// params
		params = private.rewriteparams(params);
		if (typeof params == 'object' && params != null) {
			var count=0; 
			for(index in params) { count++; }
			if (count>0) {
				params = '?'+private.objtoqstring(params);				
			} else {
				params = '';				
			}
		} else {
			params = '';
		}
		// url
		url = page+".php"+params;
		url = private.rewriteurl(url);
		// open window for location
		if (windowname==null && windowoptions==null) {
			var win = window.open(url);		
		} else if (windowoptions==null) {			
			var win = window.open(url,windowname);
		} else if (windowname==null) {	
			// note: you must use '' in order for IE to let you change the name of the window afterwards
			var win = window.open(url,'',windowoptions);			
		} else {
			var win = window.open(url,windowname,windowoptions);			
		}
		if (!win) { alert('A popup blocker has blocked this window from opening. Please disable your popup blocker'); return; }
		if (win) { win.focus(); }
	}

	// private
	var private = {};
	private.rewriteparams = function(params) {
		if (typeof page.openpagewindow.rewriteparams == "function") {
			params = page.openpagewindow.rewriteparams(params);
		}
		return params;
	}
	private.rewriteurl = function(url) {
		if (typeof page.openpagewindow.rewriteurl == "function") {
			url = page.openpagewindow.rewriteurl(url);
		}
		return url;
	}
	private.objtoqstring = function(obj, path) {
		// Version: 2009 06 19
		var result = []; 
		if (!path) path = [];
		var indexcount = 0;
		for(index in obj) {
			if (obj[index]==null) { continue; }
			indexcount++;
			path.push(index);
			if (typeof(obj[index])!=='object') { 
				var front = path[0];
				var rest = path.slice(1).join('][');
				if (rest!='') { 
					var name = front+"["+rest+"]"; 
				}
				else { 
					var name = front 
				};
				if (typeof obj[index] == 'boolean') {
					obj[index] = obj[index] ? 1 : 0;
				}
				if (typeof u == 'function') {
					var topush = ""+u(name)+"="+u(obj[index]);
					result.push( topush );
				} else {
					result.push( name+"="+obj[index] );					
				} 
			}
			if (typeof(obj[index])=='object') {
				result.push( private.objtoqstring(obj[index],path) );
			}
			path.pop();
		}
		if (indexcount==0) {
			var front = path[0];
			var rest = path.slice(1).join('][');
			if (rest!='') { 
				var name = front+"["+rest+"]"; 
			}
			else { 
				var name = front+"" 
			};			
			var topush = ""+u(name)+"=";
			result.push( topush );
		}
		return result.join('&');
	}

})(window.page = (window.page) ? window.page : {});