var nsVisu    = 'http://www.bab-tec.de/eibPort:visu';
var nsStyles  = 'http://www.bab-tec.de/eibPort:visu:styles';
var nsProject = 'http://www.bab-tec.de/eibPort:visu:project';
var nsPage    = 'http://www.bab-tec.de/eibPort:visu:page';
var nsObject  = 'http://www.bab-tec.de/eibPort:visu:object';

var nsPrefixVisu    = "visu";
var nsPrefixStyles  = "styles";
var nsPrefixProject = "prj";
var nsPrefixPage    = "page";
var nsPrefixObject  = "obj";

var defaultFont = "Verdana";

function loadVisu(onFinish) {
  var path = "/users/bt1/visu/data/visu.xml";

  log.info("Requesting Visu: " + path);

  $.ajax({
		dataType: 'xml',
		url: path,
		cache: false,
		success: function(data){
			log.info("Data loaded");
			
			$(data).find("project").each(function(){
				var project = new VisuProject($(this).attr("id"), $(this).find("name").text(), $(this).find("filename").text());
				
				visuModel.addProject(project);
			});
			
			log.info("Loading styles");
			var styles = $(data).find("styles")[0];
			
			var style = getElements(styles, nsStyles, nsPrefixStyles, "default")[0];
			visuModel.addStyle(loadFgStyle(style, ""));
			
			style = getElements(styles, nsStyles, nsPrefixStyles, "style");
			for (var i = 0; i < style.length; i++) {
				visuModel.addStyle(loadFgStyle(style[i], getAttribute(style[i], nsStyles, nsPrefixStyles, "key")));
			}
			
			onFinish();
		}
	});
}

function loadFgStyle(xml, key) {
  var font = getElementText(xml, nsStyles, nsPrefixStyles, "font").split("-");
  var font_family = font[0] + ", "+defaultFont;
  var font_style = font[1];
  var font_size = font[2];
  var color = intToHexRGB(parseInt(getElementText(xml, nsStyles, nsPrefixStyles, 'color', 0xe0e5ff)));
  
  var fontStyle = "";
  if(font_style == "ITALIC" || font_style == "BOLDITALIC") {
    fontStyle = "italic";
  }
	
  var fontWeight = "";
  if(font_style == "BOLD" || font_style == "BOLDITALIC") {
    fontWeight = "bold";
  };
  var fgStyle = new FgStyle();
  fgStyle.key = key;
  fgStyle.css = {
    "font-family": font_family,
    "font-style": fontStyle,
    "font-weight": fontWeight,
    "font-size": font_size + "px",
    "color": color,
		"white-space": "nowrap"
    };
		
  return fgStyle;
}

function loadProject(project, onFinish){
	var path = "/users/bt1/visu/data/" + project.url;
	
	log.info("Requesting Project: " + path);
	
	$.ajax({
		dataType: 'xml',
		url: path,
		cache: false,
		success: function(data) {
	    log.info("Data loaded");
	
	    project.startId = parseInt(getElementText(data, nsProject, nsPrefixProject, 'startId'));
		
	    var str = getElementText(data, nsProject, nsPrefixProject, 'kioskMode');
	    project.kioskMode = str == "true";
	    
	    var str = getElementText(data, nsProject, nsPrefixProject, 'showPageIndex');
	    project.showPageIndex = str == "true";
	    
	    str = getElementText(data, nsProject, nsPrefixProject, 'showDisconnectBar');
	    project.showDisconnectBar = str == "true";
	    
	    project.hAlign = parseInt(getElementText(data, nsProject, nsPrefixProject, 'hAlign'));
	    project.vAlign = parseInt(getElementText(data, nsProject, nsPrefixProject, 'vAlign'));

        project.returnToStartPageDelay = parseInt(getElementText(data, nsProject, nsPrefixProject, 'returnToStartPageDelay'));
	    
	    /* load toolbar settings */
	    str = getElementText(data, nsProject, nsPrefixProject, 'showToolBar');
	    project.showToolBar = str == "true";
	    str = getElementText(data, nsProject, nsPrefixProject, 'showTbNavigation');
	    project.showTbNavigation = str == "true";
	    str = getElementText(data, nsProject, nsPrefixProject, 'showTbKioskMode');
	    project.showTbKioskMode = str == "true";
	    str = getElementText(data, nsProject, nsPrefixProject, 'showTbProject');
	    project.showTbProject = str == "true";
	    str = getElementText(data, nsProject, nsPrefixProject, 'showTbPageSelect');
	    project.showTbPageSelect = str == "true";
	    str = getElementText(data, nsProject, nsPrefixProject, 'showTbCurrentUser');
	    project.showTbCurrentUser = str == "true";
	    str = getElementText(data, nsProject, nsPrefixProject, 'showTbRestart');
	    project.showTbRestart = str == "true";
	    str = getElementText(data, nsProject, nsPrefixProject, 'showTbExit');
	    project.showTbExit = str == "true";
			
      var bgStyle = getElements(data, nsObject, nsPrefixObject, "bgStyle")[0];
			loadBgStyle(project.defaultObjectBg, bgStyle);
	    
	    var elementPages = getElements(data, nsProject, nsPrefixProject, 'page');
		
	    for (i = 0; i < elementPages.length; i++) {
        var page = new AbstractPage(
          $(elementPages[i]).attr("id"), 
          $(elementPages[i]).find("name").text(), 
          $(elementPages[i]).find("filename").text());
					
        page.type = $(elementPages[i]).attr("type");
			  
        if(page.type == "visu_page") {
          jQuery.extend(page, new VisuPage());
        }
        if(page.type == "master_page") {
          jQuery.extend(page, new MasterPage());
        }
        if(page.type == "embedded_page") {
          jQuery.extend(page, new EmbeddedPage());
        }
				
        project.addPage(page);
		  }
			onFinish(project);
  	}
	});
}

function loadPage(page, onFinish) {
  if(page.hasBeenLoaded) {
    onFinish();
  } else {
	  var path = "/users/bt1/visu/data/" + page.url;
	  
	  log.info("Requesting Page: " + path);
		
	  $.ajax({
			dataType: 'xml',
			url: path,
			cache: false,
			success: function(data){
				log.info("Data loaded");
			
		    var root = getElements(data, nsPage, nsPrefixPage, 'page')[0];
				
				page.width = parseInt(getElementText(data, nsPage, nsPrefixPage, 'width', 0));
				page.height = parseInt(getElementText(data, nsPage, nsPrefixPage, 'height', 0));
				
				page.bgPattern = getElementText(data, nsPage, nsPrefixPage, 'bgPattern', 0);
				page.bgAlignment = parseInt(getElementText(data, nsPage, nsPrefixPage, 'bgAlignment', 0));
			
				var bgStyle = getElements(data, nsPage, nsPrefixPage, 'bgStyle')[0];
				loadBgStyle(page.bgStyle, bgStyle);
				
        page.borderPageColor = getElementText(data, nsPage, nsPrefixPage, 'borderPageColor') == "true";
        page.borderColor = intToHexRGB(parseInt(getElementText(data, nsPage, nsPrefixPage, 'borderColor', 0xffffff)));

		    var elementObjects = getElements(data, nsObject, nsPrefixObject, 'object');
			    
		    for(i = 0; i < elementObjects.length; i++) {
		    	loadObject(page, elementObjects[i]);
		    }
				
				if(page.isVisuPage()) { 
          page.masterId = parseInt(getElementText(data, nsPage, nsPrefixPage, 'masterId', -1));
          page.borderOverride = getElementText(data, nsPage, nsPrefixPage, 'borderOverride') == "true";
          page.bgOverride = getElementText(data, nsPage, nsPrefixPage, 'bgOverride') == "true";
				}
				if(page.isMasterPage()) {
				}
        if(page.isEmbeddedPage()) {
				  page.bgAlpha = parseInt(getElementText(data, nsPage, nsPrefixPage, 'bgAlpha', 1));
				  page.pageCount = parseInt(getElementText(data, nsPage, nsPrefixPage, 'pageCount', 1));
				  page.startPage = parseInt(getElementText(data, nsPage, nsPrefixPage, 'startPage', 0));
        }
				
		    page.hasBeenLoaded = true;
		
		    onFinish();
		  }
		});
  }
}

function loadBgStyle(objBg, bgStyle) {
	objBg.bgSettings = parseInt(getElementText(bgStyle, nsObject, nsPrefixObject, 'BgSettings', BG_SETTINGS_THEME));
	if(objBg.bgSettings === BG_SETTINGS_MANUAL) {
        objBg.bgType = parseInt(getElementText(bgStyle, nsObject, nsPrefixObject, 'BgType', BG_TYPE_NONE));
        objBg.cornerRadius = parseInt(getElementText(bgStyle, nsObject, nsPrefixObject, 'CornerRadius', 0));
		
        objBg.gradientType = parseInt(getElementText(bgStyle, nsObject, nsPrefixObject, 'GradientType', BG_GRADIENTTYPE_VERTICAL));
        objBg.bgColor1 = intToHexRGB(parseInt(getElementText(bgStyle, nsObject, nsPrefixObject, 'GradientColor1', 0xffffff)));
        objBg.bgColor2 = intToHexRGB(parseInt(getElementText(bgStyle, nsObject, nsPrefixObject, 'GradientColor2', 0xc0c0c0)));
		
        objBg.borderType = parseInt(getElementText(bgStyle, nsObject, nsPrefixObject, 'BorderType', BORDER_TYPE_AUTO));
        objBg.borderColor = intToHexRGB(parseInt(getElementText(bgStyle, nsObject, nsPrefixObject, 'BorderColor', 0xaaaaaa)));
        objBg.borderWidth = parseInt(getElementText(bgStyle, nsObject, nsPrefixObject, 'BorderWidth', 1));
	}
}

