
// Check Flash version
if (
     deconcept.SWFObjectUtil.getPlayerVersion().major >= 8
  && document.getElementById
  && document.getElementsByTagName
) {



  // Hide the content
  document.write("<style type=\"text/css\"> #portal-data-container { display: none; } </style>");       
        
  
  // Class variables
  var _p, _s;
  
  _s = Timer = function(){
    this.obj = (arguments.length)?arguments[0]:window;
  }
  _p = _s.prototype;
  _p.setTimeout = function(func, msec){
    var i = Timer.getNew();
    Timer.buildCall(this.obj, i, arguments);
    Timer.set[i].timer = window.setTimeout("Timer.callOnce("+i+");",msec);
    return i;
  }
  _s.set = new Array();
  _s.buildCall = function(obj, i, args){
    var t = "";
    Timer.set[i] = new Array();
    if(obj != window){
            Timer.set[i].obj = obj;
            t = "Timer.set["+i+"].obj.";
    }
    t += args[0]+"(";
    if(args.length > 2){
      Timer.set[i][0] = args[2];
      t += "Timer.set["+i+"][0]";
      for(var j=1; (j+2)<args.length; j++){
        Timer.set[i][j] = args[j+2];
        t += ", Timer.set["+i+"]["+j+"]";
      }
    }
    t += ");";
    Timer.set[i].call = t;
    return t;
  }
  Timer.callOnce = function(i){
    if(!Timer.set[i]) return;
    eval(Timer.set[i].call);
    Timer.set[i] = null;
  }
  Timer.getNew = function(){
    var i = 0;
    while(Timer.set[i]) i++;
    return i;
  }
  
  _s = LocationManager = function() {
  }
  _s.getInstance = function() {
    if (!this.instance) {
      this.instance = new LocationManager();
    }
    return this.instance;
  }
  _p = _s.prototype;
  _p.getLocationHandler = function() {
    if (!this.locationHandler) {
      if(navigator.userAgent.toLowerCase().indexOf("msie")>-1) {
        this.locationHandler = new IFrameLocationHandler(this, "locationIFrame");
      } else {
        this.locationHandler = new UrlLocationHandler(this);
      }
    }
    return this.locationHandler;
  }
  _p.addListener = function(id, listener) {
    if (!this.listeners) {
      this.listeners = [];
    }
    this.listeners[id] = listener;
  }
  _p.store = function(id, value) {
    if (!this.persisted) {
      this.persisted = [];
    }
    if ((!this.persisted[id] || this.persisted[id] != value) && id != null) {
      if (value != null) {
        this.persisted[id] = value;
      } else {
        delete this.persisted[id];
      }
      this.getLocationHandler().store(this.getMergedValues());
      if (this.listeners && this.listeners[id]) {
        this.listeners[id].onChange(value);
      }
    }
  }
  _p.checkForUpdate = function() {
    this.parseMergedValues(this.getLocationHandler().getHashValue());
  }
  _p.onValueChange = function(value) {
    this.parseMergedValues(value);
  }
  _p.getValue = function(id) {
    return this.persisted[id];
  }
  _p.getMergedValues = function() {
    var result = "";
    for (var i in this.persisted) {
      if (result != "") 
        result += ";"
      result += i+":"+this.persisted[i];
    }
    return result;
  }
  _p.parseMergedValues = function(str) {
    if (str) {
      var splitStr = str.split(";");
      for (var i=0; i<splitStr.length; i++) {
        var pair = splitStr[i];
        var j = pair.indexOf(":");
        var key = pair.substring(0,j);
        var value = pair.substr(j+1);
        if (key != "" && value != null) {
          this.store(key, value);
        }
      }
    }
  }
  
  /**
   * Seperates the hash value from the real url
   */
  _s = UrlKeeper = function(dividingCharacter) {
    this.dividingCharacter = dividingCharacter ? dividingCharacter : "#";
  }
  _p = _s.prototype;
  _p.getLocation = function() {
    // Overwrite this method if you have a different url
    return window.location.href;
  }
  _p.getHashValue = function() {
    var url = this.getLocation();
    if(url.indexOf(this.dividingCharacter)>-1) {
      var url_elements = url.split(this.dividingCharacter);
      return url_elements[url_elements.length-1];
    }
    return null;
  }
  _p.getHref = function() {
    var url = this.getLocation();
    var url_elements = url.split(this.dividingCharacter)
    return url_elements[0];
  }
  _p.createLocation = function(value) {
    return this.getHref() + this.dividingCharacter + value;
  }
  
  /** 
   * Handles URL'S in iFrames
   */
  _s = IFrameLocationHandler = function(callBack, iframeid) {
  
    this.callBack = callBack;
    this.windowlocator = new UrlKeeper();
    
    var frame = this.frame = document.createElement("iframe");
    frame.setAttribute("id", iframeid);
    frame.setAttribute("name", iframeid);
    frame.setAttribute("src", "mockpage?hash="+this.windowlocator.getHashValue());
    frame.style.display = "none";
    document.body.appendChild(frame);
    
    this.iframeid = iframeid;
    
    this.locator = new UrlKeeper("?hash=");
    this.locator.getLocation = function() {
      var frm = document.frames[iframeid];
      if (frm.getLocation) {
        return frm.getLocation();
      }
      return "";
    }
    
    this.timer = new Timer(this);
    this.timer.setTimeout("checkForChange", 200); // IE requires timeout
  }
  _p = _s.prototype;
  _p.store = function(value) {
    this.frame.setAttribute("src", this.locator.createLocation(value));
  }
  _p.getHashValue = function() {
    return this.locator.getHashValue();
  }
  _p.checkForChange = function(formerHash){
    var hash = this.getHashValue();
    if(hash != formerHash) {
      this.callBack.onValueChange(hash);
      window.location.href = this.windowlocator.createLocation(hash);
    }
    this.timer.setTimeout("checkForChange", 200, hash);
  }
  
  /**
   * Handler for standard URL
   */
  _s = UrlLocationHandler = function(callBack) {
    this.callBack = callBack;
    this.keeper = new UrlKeeper();
    this.timer = new Timer(this);
    this.checkForChange();
  }
  _p = _s.prototype;
  _p.getHashValue = function() {
    return this.keeper.getHashValue();
  }
  _p.store = function(value) {
    window.location.href = this.keeper.createLocation(value);
  }
  _p.checkForChange = function(formerHash){
    var hash = this.keeper.getHashValue();
    if(hash != formerHash) {
      this.callBack.onValueChange(hash);
    }
    this.timer.setTimeout("checkForChange", 200, hash);
  }
  
  _s = FlashIntegrator = function(node, id, swf, contentNode) {
    FlashIntegrator.registry[id] = this;
    
    this.locationManager = LocationManager.getInstance();
    this.locationManager.addListener(id, this);
    this.id = id;
    
    var so = this.so = new SWFObject(swf, id, "100%", "100%", "8", "#FFFFFFF");
    so.addParam("scale", "noscale");
    so.addParam("allowScriptAccess", "always");
    so.addVariable("web-id", id);
    
    if (!contentNode) {
      contentNode = node;
    }
    
    this.storedContent = XMLConverter.convertNodeToXml(contentNode);
    
    node.innerHTML = "";
    
      if (node == document.body) {
      with (document.getElementsByTagName('html')[0].style) {
        height = "100%";
        overflow = "hidden";
      }
      
      with (document.body.style) {
        height = "100%";
        margin = "0";
        padding = "0";
      }
    }
      
    so.write(node);
  }
  _s.registry = new Array();
  _p = _s.prototype;
  _p.storedContent = "";
  _p.getContent = function() {
    return this.storedContent;
  }
  _p.getElement = function() {
    if (navigator.appName.indexOf("Microsoft") != -1) {
        return window[this.id];
    } else {
        return document[this.id];
    }
  }
  _p.onChange = function(value) {
    try {
      this.getElement().onChange(value);
    } catch(e) {
    }
  }
  _p.setTitle = function(title) {
    document.title = title;
  }
  _p.getLocation = function() {
    this.locationManager.checkForUpdate();
    var value = this.locationManager.getValue(this.id);
    this.onChange();
    return value;
  }
  _p.storeLocation = function(location) {
    this.locationManager.store(this.id, location);
  }
  
  _s = XMLConverter = function() {}
  _s.isFilledString = function(str) {
    for (var i=0; i< str.length; i++) {
      var cc = str.charCodeAt(i);
      if (cc != 32 && cc != 10 && cc != 9) {
        return true;
      }
    }
    return false;
  }
  _s.getPropertyNode = function(node, props, parent) {
    if (node.nodeType == 3) {
      if (parent) {
        parent.nodeValue += node.nodeValue;
      }
    }
    
    var val;
    var clsName = node.className;
    var id = "property ";
    if (clsName && clsName.indexOf(id) == 0) {
      var name = clsName.substring(id.length);
      val = {
        nodeName: "meta-"+name,
        nodeValue: ""
      }
      props.push(val);
    }
    for (var i=0; i<node.childNodes.length; i++) {
      this.getPropertyNode(node.childNodes[i], props, val);
    }
  }
  _s.convertNodeToXml = function(node, parentNodeProperties) {
    switch (node.nodeType) {
      case 3:
        if (this.isFilledString(node.nodeValue)) {
          return "<![CDATA["+node.nodeValue+"]]>";
        } else {
          return "";
        }
      case 8:
        if (node.nodeValue.indexOf('Meta') == 0) {
          var properties = node.nodeValue.substring(4);
          var doc = document.createElement("span");
          doc.innerHTML = properties;
          
          this.getPropertyNode(doc, parentNodeProperties);
        }
        return "";
    }
    var result = "<"+node.nodeName.toLowerCase();
    var props = [];
    for (var i=0; i<node.attributes.length; i++) {
      props.push(node.attributes[i]);
    }
    var cLen = node.childNodes.length;
    
    var subNodeContent = "";
    if (cLen > 0) {
      for (var i = 0; i < cLen; i++) {
        subNodeContent += this.convertNodeToXml(node.childNodes[i], props);
      }
    }
    
    for (var i = 0; i < props.length; i++) {
      var attr = props[i];
      if (attr && attr.nodeValue != null && attr.nodeValue != "") {
        result += " "+attr.nodeName.toLowerCase()+"=\""+attr.nodeValue+"\"";
      }
    }
    
    if (subNodeContent != "") {
      return result+">"+subNodeContent+"</"+node.nodeName.toLowerCase()+">";
    } else {
      return result+="/>";
    }
  }

  onload = function() {
    new FlashIntegrator(document.body, "main", "ab_flash/main.swf", document.getElementsByTagName('html')[0]);
  }
}       