/*
 * MAIN REFRACT OBJECT
 */

// Constructors
function PageInfoList(navImages, title, blurb, rightImage, bannerImage) {
	this.navImages = navImages;
	this.title = title;
	this.blurb = blurb;
	this.rightImage = rightImage;
	this.bannerImage = bannerImage;
}

function PageTypeDef(tabs, navImages, title, blurb, rightImage, bannerImage) {
	this.tabs = tabs;
	this.info = new PageInfoList(navImages, title, blurb, rightImage, bannerImage);
	this.extras = new Array();
}

function RefractDataObj()
{
	this.fetch_date = new Date(1971, 1, 1);
	this.data = new Array();
}

function RefractPageObj()
{
	this.opened = new Array();
	this.fetch_date = null;
	this.data = new Array();
	this.hierarchy = new hierarchy_obj(0, 'root');
}

function RefractObj(level)
{
	this.current_user_id = 0;
	this.lastmodified = '';
	this.level = level;

	this.user =     new RefractDataObj();
	this.workflow = new RefractDataObj();
	this.role =     new RefractDataObj();
	this.page =     new RefractPageObj();
	this.image =    new RefractDataObj();
	this.file =     new RefractDataObj();

	this.location = new RefractDataObj();
	this.region = new RefractDataObj();

	this.loadPageDefs = _loadPageDefs;
	
	this.home_page_feature = new RefractDataObj();
	this.quick_links = new RefractDataObj();
	this.career_links = new RefractDataObj();
	this.google_video_links = new RefractDataObj();
	this.home_page_flash = new RefractDataObj();
	this.video_links = new RefractDataObj();
	this.graduate_profiles = new RefractDataObj();
	this.calendar_of_events = new RefractDataObj();
	this.library_news_items = new RefractDataObj();
}

// **CUSTOMIZATION**
function _loadPageDefs() {
	var pagetypes = new Array();

	pagetypes['home'] = new PageTypeDef(new Array('main', 'extra buttons'));
	pagetypes['home'].info.navImages = true;
	pagetypes['home'].extras[0] = Array('navcolor', 'select', 'Choose a nav/background color for this page/section', Array('', 'yellow', 'green', 'blue', 'red', 'purple', 'grey'), Array('- choose -', 'Yellow', 'Green', 'Blue', 'Red', 'Purple', 'Grey'));

	pagetypes['extranet home'] = new PageTypeDef(new Array('left', 'main', 'right'));
	pagetypes['extranet home'].info.navImages = true;

	pagetypes['goto first child'] = new PageTypeDef(new Array('right'));
	pagetypes['goto first child'].info.navImages = true;

	pagetypes['standard'] = new PageTypeDef(new Array('main', 'right'));
	pagetypes['standard'].info.navImages = true;
	pagetypes['standard'].info.title = true;
	
	pagetypes['wide'] = new PageTypeDef(new Array('main'));
	pagetypes['wide'].info.navImages = true;
	pagetypes['wide'].info.title = true;

	pagetypes['top level navigation'] = new PageTypeDef(new Array('main', 'right'));
	pagetypes['top level navigation'].info.navImages = true;
	pagetypes['top level navigation'].info.title = true;
	pagetypes['top level navigation'].extras[0] = Array('navcolor', 'select', 'Choose a nav/background color for this page/section', Array('', 'yellow', 'green', 'blue', 'red', 'purple', 'grey'), Array('- choose -', 'Yellow', 'Green', 'Blue', 'Red', 'Purple', 'Grey'));

	pagetypes['standalone'] = new PageTypeDef(new Array('main'));

	pagetypes['redirect'] = new PageTypeDef(new Array());
	pagetypes['redirect'].info.navImages = true;
	pagetypes['redirect'].extras[0] = Array('url', 'varchar', 'Which URL should this page redirect to?');

	pagetypes['search results'] = new PageTypeDef(new Array());

	this.pagetypes = pagetypes;
}

/*
 * UTILITY FUNCIONS
 */

function canAccessPage(page_id, user_id) {
	if(!refract || !refract.user || !refract.user.data || !refract.user.data[user_id])
		return false;

	if(refract.user.data[user_id].administrator == 'y')
		return true;

	if(!refract.page || !refract.page.data || !refract.page.data[page_id])
		return false;

	if(refract.page.data[page_id].owner != 0)
		return (refract.page.data[page_id].owner == user_id);

	// Go back up the tree to find the source of permission for this page
	var permission_page_id = page_id;
	while(permission_page_id && refract.page.data[permission_page_id].owner != user_id)
		permission_page_id = refract.page.data[permission_page_id].parent_page_id;

	if(permission_page_id && refract.page.data[permission_page_id].owner == user_id)
		return true;

	return false;
}

function previewPage(page_id, version) {
	var sitename = ''; 
	var page = refract.page.data[page_id];

	while(page && page.parent_page_id)
		page = refract.page.data[page.parent_page_id];

	if(page && page.name)
		sitename = page.name;

	var previewWindow = window.open(hrefbase + 'default.asp?command=preview&page_id=' + page_id + '&version=' + version + '&sitename=' + sitename + '&cb=' + Math.random().toString().slice(2), 'preview', 'width=550,height=500,scrollbars,resizable');
	previewWindow.focus();
}

