/*
 * Global variables
 */
var BG_SETTINGS_THEME           = 0;
var BG_SETTINGS_PROJECT         = 1;
var BG_SETTINGS_MANUAL          = 2;

var BG_TYPE_NONE                = 0;
var BG_TYPE_SOLID               = 1;
var BG_TYPE_GRADIENT            = 2;

var BORDER_TYPE_NONE            = 0;
var BORDER_TYPE_AUTO            = 1;
var BORDER_TYPE_LINE            = 2;

var BORDER_WIDTH                = 1;
var BORDER_RADIUS               = 0;

var BG_ALIGN_CENTERED           = 0;
var BG_ALIGN_STRETCHED          = 1;
var BG_ALIGN_TITLED             = 2;

var BG_GRADIENTTYPE_HORIZONTAL  = 0;
var BG_GRADIENTTYPE_VERTICAL    = 1;

function VisuModel() {
	var styles = new Array();
	var projects = new Array();
	
	this.addStyle = function(style) {
		log.info("Adding style: "+style.key);
		styles[styles.length] = style;
	}
	
	this.getStyle = function(key) {
    for(var i = 0; i < styles.length; i++) {
      if(styles[i].key == key) {
        return styles[i];
      }
    }
		return styles[0];
	}

	this.addProject = function(project) {
		projects[projects.length] = project;
		project.setParent(this);
	};

	this.getProjects = function() {
		return projects;
	};

	this.getProjectById = function(id) {
		for(var i = 0; i < projects.length; i++) {
			if(projects[i].id == id) {
				return projects[i];
			}
		}
	};
}

function VisuProject(id, title, url) {
	var visuModel;

	var pages = new Array();

	this.id = id;
	this.title = title;
	this.url = url;
	
	this.startId = 0;
	this.showPageIndex = true;
	this.kioskMode = false;
	this.showDisconnectBar = false;
	this.hAlign = 1;
	this.vAlign = 1;
	this.pageFadeTime = 0;
	this.pageFadeSmart = false;
	this.returnToStartPage = 0;
	this.optimizeMemoryUsage = false;
	this.showToolBar = true;
	this.showTbNavigation = true;
	this.showTbKioskMode = true;
	this.showTbProject = true;
	this.showTbPageSelect = true;
	this.showTbCurrentUser = true;
	this.showTbRestart = true;
	this.showTbExit = true;
	
	this.defaultObjectBg = new BgStyle();

	this.setParent = function(parent) {
		visuModel = parent;
	};

	this.getParent = function() {
		return visuModel;
	};

	this.addPage = function(page) {
		pages[pages.length] = page;
		page.setParent(this);
	};

	this.getPages = function() {
		return pages;
	};

	this.getPageById = function(id) {
		for(i = 0; i < pages.length; i++) {
			if(pages[i].id == id) {
				return pages[i];
			}
		}
	};
}

function AbstractPage(id, title, url) {
	this.hasBeenLoaded = false;
	
	var visuProject;
	
  this.type = "visu_page";
	
	var objects = new Array();

	this.id = id;
	this.title = title;
	this.url = url;
	
	this.width = 800;
	this.height = 600;
	this.bgPattern = "";
	this.bgAlignment = 0;
	
	this.bgStyle = new BgStyle();
	
	this.borderPageColor = false;
	this.borderColor = "#fff";
	
	this.setParent = function(parent) {
		visuProject = parent;
	};

	this.getParent = function() {
		return visuProject;
	};
	
	this.addObject = function(obj) {
		objects[objects.length] = obj;
		obj.setParent(this);
	};
	
	this.getObjects = function() {
		return objects;
	};

  this.getObjectById = function(id) {
    for(i = 0; i < objects.length; i++) {
      if(objects[i].id == id) {
        return objects[i];
      }
    }
  };
  this.isMasterPage = function() {
    return this.type == "master_page";
  }
  this.isVisuPage = function() {
    return this.type == "visu_page";
  }
  this.isEmbeddedPage = function() {
    return this.type == "embedded_page";
  }
}

function MasterPage() {
}

function VisuPage() {
  this.masterId = -1;
  this.borderOverride = false;
}

function EmbeddedPage() {
	this.bgAlpha = 0;
  this.pageCount = 3;
  this.startPage = 0;
	
	this.listener = [];
	
	this.flipToSegment = function(segment, animated) {
		for(var key in this.listener) {
			this.listener[key](segment, animated);
		}
	}
}

function FgStyle() {
	this.key;
	this.css;
}

function BgStyle() {
	this.bgSettings      = BG_SETTINGS_THEME;
	this.cornerRadius    = 0;
	this.bgStyle         = BG_TYPE_GRADIENT;
	this.bgGradientType  = BG_GRADIENTTYPE_VERTICAL;
	this.bgColor1        = "#ffffff";
	this.bgColor2        = "#c0c0c0";
	this.borderType      = BORDER_TYPE_AUTO;
	this.borderColor     = "#aaaaaa";
	this.borderWidth     = 1;
}

