/*************************
flash header, mdi 1.3.2
*************************/


//height of calibrated header

hGTempObjects = [];
swfHeader = [];
var hGMinVersion;

function hGStart(){
  hGMinVersion = hasMinFlashVersion(6);
	if ((!hGMinVersion) || browser.macIE){
    return;
  }
  for (var i in swfHeader){
    var h = swfHeader[i];
    var selector = h.parentId ? '#' + h.parentId + ' ' : '';
    selector += h.tagName;
    selector += h.className ? '.' + h.className : '';
    addStyle(selector,'visibility:hidden;');
    //onload = hGLoader;
  }
}
function SwfHeader(oArg){
  //alert(oArg.swfFont);
  this.swfFont = oArg.swfFont;
  this.tagName = oArg.tagName;
  this.className = oArg.className ? oArg.className : '';
  this.parentId = oArg.parentId ? oArg.parentId : '';
  this.size = oArg.size ? oArg.size : '';
  this.align = oArg.align ? oArg.align : 'left';
  this.color = oArg.color ? '0x' + oArg.color : '';
  this.bGColor = oArg.bGColor ? '0x' + oArg.bGColor : '';
  this.bGColorAlpha = oArg.bGColorAlpha ? oArg.bGColorAlpha : '';
  this.hoverColor = oArg.hoverColor ? '0x' + oArg.hoverColor : '';
  this.hoverBGColor = oArg.hoverBGColor ? '0x' + oArg.hoverBGColor : '';
  this.paddingTop = oArg.paddingTop ? oArg.paddingTop : 0;
  this.paddingRight = oArg.paddingRight ? oArg.paddingRight : 0;
  this.paddingBottom = oArg.paddingBottom ? oArg.paddingBottom : 0;
  this.paddingLeft = oArg.paddingLeft ? oArg.paddingLeft : 0;
  this.upperCase = oArg.upperCase;
  this.menuHover = oArg.menuHover;
  this.rotate = oArg.rotate == 90 || oArg.rotate == 180 || oArg.rotate == 270 ? oArg.rotate : 0;
  this.flipHorVert = oArg.rotate == 90 || oArg.rotate == 270;
  this.getList = function(){
    var parentEl;
    if (this.parentId){
      parentEl = getEl(this.parentId);
      if (!parentEl){
        return 0;
      }
    }
    else {
      parentEl = document;
    }
    return parentEl.getElementsByTagName(this.tagName);
  }
}


  // browser sniffer
function Browser(){
  this.iE = navigator.appName.toLowerCase().indexOf('microsoft') != -1 ? 1 : 0;
  this.mac =  navigator.userAgent.toLowerCase().indexOf('mac') != -1 ? 1 : 0;
  this.win = navigator.userAgent.toLowerCase().indexOf('windows') != -1 ? 1 : 0;
  this.safari =  navigator.userAgent.toLowerCase().indexOf('safari') != -1 ? 1 : 0;
  this.opera =  navigator.userAgent.toLowerCase().indexOf('opera') != -1 ? 1 : 0;    
  this.mozilla = navigator.appName.toLowerCase().indexOf('netscape') != -1 && !this.safari ? 1 : 0;
  this.winMozilla = this.mozilla && this.win ? 1 : 0;
  this.winIE = this.iE && this.win && !this.opera ? 1 : 0;
  this.macIE = this.iE && this.mac ? 1 : 0;
}

var browser = new Browser();


function getEl(el){
  return document.getElementById(el);
}

 
function setInlineStyle(el,cssText){
  if (!cssText){
    return;
  }
  var elStyle = el.getAttribute('style');
  if (elStyle){
    elStyle.setAttribute('cssText',cssText);
  }
  else {
    el.setAttribute('style',cssText);
  }
}


function setClassName(el,className){
  if (!className){
    return;
  }
  if (el.getAttribute('className') != null){
    el.setAttribute('className',className);
  }
  else {
    el.setAttribute('class',className);
  }
}

function getClassName(el){
  var cN;
  if (el.getAttribute('className') != null){
    cN = el.getAttribute('className');
  }
  else {
    cN = el.getAttribute('class');
  }
  return cN ? cN : '';
}


// check if the proper version is installed
function hasMinFlashVersion(versionNumber){
  if (browser.winIE){
    try{
    	var flash = new ActiveXObject("ShockwaveFlash.ShockwaveFlash." + versionNumber);
    	return 1;
    }
    catch(e){
    	return 0;
    }
  }
  else {
    if(navigator.plugins.length){
    	for (var i=0; i < navigator.plugins.length; i++){
    		var pluginIdent = navigator.plugins[i].description.split(" ");
    		if(pluginIdent[0] == "Shockwave" && pluginIdent[1] == "Flash"){
    			var versionArray = pluginIdent[2].split(".");
    			return versionArray[0] >= versionNumber;
    		}
    	} 	
    }
  }
  return 0;
}
 
  
function addStyle(selector,properties){
  if (document.styleSheets) {
    var s = document.getElementsByTagName('STYLE');
    if (s.length == 0){
      var sheet = document.createElement('style');
      sheet.setAttribute('type','text/css');
      document.getElementsByTagName('HEAD')[0].appendChild(sheet);
    }
    if (browser.winIE){
      var lastSheet = document.styleSheets[document.styleSheets.length - 1];
      lastSheet.addRule(selector, properties);
    }
    else {
      var lastSheet = s[0];
      lastSheet.appendChild(document.createTextNode(selector + ' { ' + properties + ' }'));
    }
  }
}
 
  
  // HG FlashObject class
function HGFlashObject(id,parId,uri,params,requiredVersion,className,cssText){
	this.id = id;
	this.parId = parId;      
  this.uri = uri;
	this.requiredVersion = requiredVersion;
  this.className = className;
  this.cssText = cssText;
	if (requiredVersion){
    //addStyle('#' + parId + ' .printHeader','display:none;');
  }
	this.params = [];
	for (var i = 0; i < params.length; i += 2){
		this.params[params[i]] = params[i + 1];
	}
  this.params['salign'] = 'lt';
  this.params['SeamlessTabbing'] = false;
  this.create = function(){
    if (!this.requiredVersion){
      return;
    }
    var obj = document.createElement('object');
    obj.setAttribute('type','application/x-shockwave-flash');
    obj.setAttribute('id',this.id);
    obj.setAttribute('data',this.uri);
    obj.setAttribute('src',this.uri);
    setClassName(obj,this.className);
    setInlineStyle(obj,this.cssText);
    for (var i in this.params){
      var param = document.createElement('param');
      param.setAttribute('name',i);
      param.setAttribute('value',this.params[i]);
      obj.appendChild(param);
      obj.setAttribute(i,this.params[i]);
    }
    getEl(this.parId).appendChild(obj);
    try {
      obj.loadMovie(0,this.uri);
    }
    catch (e){
    }
  }
    
}

function addSwfHeader(oArg){
  hGMinVersion = hasMinFlashVersion(6);
  if ((!hGMinVersion) || browser.macIE){    
    return;
  }
  swfHeader[swfHeader.length] = new SwfHeader(oArg);
}

function hGLoader(){
	var cHS = getEl(hGCalId);
	var fontScale = cHS ? cHS.offsetHeight / hGCalHeight : 1;
	for (var i in swfHeader){
		var o = swfHeader[i];
		var list =  o.getList();
		for (var j = 0; j < list.length; j++){
			var el = list[j];
      if (el.getAttribute('hGSet')){
        continue;
      }
      if (o.className && getClassName(el).indexOf((o.className)) == -1){
        continue;
      }
      el.style.visibility = 'visible';
      var width = el.offsetWidth;
			var height = el.offsetHeight;
      var swfWidth = o.flipHorVert ? height : width;     
      if (o.upperCase){
        hGToUpper(el);
      } 
			var text = URLEncode(el.innerHTML);      
			var id = 'hG_'+ o.tagName + '_' + o.className + '_' + o.parentId + '_' +j;
      var parentId = id + '_parent';
      var hLinkEl = el.getElementsByTagName('A')[0];
      hLink = hLinkEl ? URLEncode(hLinkEl.href) : '';
      
      var oldHeader = document.createElement('DIV');
      oldHeader.innerHTML = el.innerHTML;
      el.innerHTML = '';
      el.appendChild(oldHeader);
      
      el.setAttribute('id',parentId);
      el.setAttribute('hGSet',true);      
      setClassName(oldHeader,'printHeader');
      el.removeChild(oldHeader);
		  var swfURL = hGPath + 
        '?swfFont=' + o.swfFont + 
        '&hText=' + text + 
        '&hSize=' + parseInt(o.size * fontScale,10)  + 
        '&hWidth=' + swfWidth + 
        '&hAlign=' + o.align +    
        '&hLink=' + hLink +     
        '&hPaddingTop=' + o.paddingTop + 
        '&hPaddingRight=' + o.paddingRight + 
        '&hPaddingBottom=' + o.paddingBottom + 
        '&hPaddingLeft=' + o.paddingLeft + 
        '&hRotate=' + o.rotate +
        '&winIE=' + browser.winIE ;

      var colorSet = 
        '&hColor=' + o.color + 
        '&hBGColor=' + o.bGColor +
        '&hBGColorAlpha=' + o.bGColorAlpha +     
        '&hHoverColor=' + o.hoverColor + 
        '&hHoverBGColor=' + o.hoverBGColor;
        
		  var params = Array('scale','noscale');
		  if ((!o.bGColor) || o.bGColorAlpha){
		  	params[params.length] = 'wmode';
		  	params[params.length] = 'transparent';
		  }

      var wTN = o.tagName == 'div' ? 'SPAN' : 'DIV'; //wrapperTagName
      if (hLinkEl){
        wTN = 'A';
      }
      var wrapper = document.createElement(wTN);
      var parentId = id + '_wrapper';
      wrapper.setAttribute('id',parentId);
      if (hLinkEl){
        wrapper.href = hLinkEl.href;
      }
      el.appendChild(wrapper);
        
      hGAddFlash(o,'flashHeader',hLinkEl,id,parentId,swfURL + colorSet,params,hGMinVersion,width,height);
      
      if (o.menuHover){
        colorSet = 
        '&hColor=' + o.hoverColor + 
        '&hBGColor=' + o.hoverBGColor +         
        '&hHoverColor=' + o.hoverColor + 
        '&hHoverBGColor=' + o.hoverBGColor;
		    hGAddFlash(o,'flashHeaderHover',hLinkEl,id + '_MH',parentId,swfURL + colorSet,params,hGMinVersion,width,height);
      }
		}
	}
	if (browser.winIE) {
		setTimeout('hGShowAll()',10);
	}
}

function hGToUpper(el){
  for (var i = 0; i < el.childNodes.length;i++){
    var node = el.childNodes[i];
    if (node.nodeType == 3){
      node.data = node.data.toUpperCase();
    }
    else if(node.nodeType == 1){
      hGToUpper(node);
    }
  }
}

function hGAddFlash(o,className,hLinkEl,id,parentId,swfURL,params,hGMinVersion,width,height){
  hGTempObjects[id] = o;
	var fO = new HGFlashObject(id,parentId,swfURL + '&hId=' + id,params,hGMinVersion,className,'width:'+ width + 'px;height:'+ height + 'px;');
  fO.create();
}

// win ie try and catch routine
function hGShowAll(){
	for (var i in hGTempObjects){
		hGTry(i,0);
	}
}

function hGTry(i,numTrys){
	var h = getEl(i);
	if (h){
		try {
			hGShow(i,h.GetVariable('headerHeight'));
		} 
    catch (e) {
			numTrys++;
			if (numTrys < 20){
				setTimeout('hGTry(\''+i+'\',' + numTrys + ')',200);
			}
		}
	}
}

function hGShow(_id,_height){
	var o = hGTempObjects[_id];
	var el = getEl(_id);
  if (o.flipHorVert){
    el.style.width =  _height +'px';
  }
  else {
    el.style.height =  _height +'px';
  }
  
  el.style.visibility = 'visible';
}





function URLEncode(inp){
	// The Javascript escape and unescape functions do not correspond
	// with what browsers actually do...
	var SAFECHARS = "0123456789" +					// Numeric
					"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +	// Alphabetic
					"abcdefghijklmnopqrstuvwxyz" + 	//"éëèêáäãâöõóôüúùûïíìîÉËÈÊÁÄÃÂÖÕÓÔÜÚÙÛÏÍÌÎ" +
					"-_.!~*'()";					// RFC2396 Mark characters
	var HEX = "0123456789ABCDEF";
	var SAFECHARCODES = "|233|235|232|234|225|228|227|226|246|245|243|244|252|250|249|251|239|237|236|238|201|203|200|202|193|196|195|194|214|213|211|212|220|218|217|219|207|205|204|206";
	var plaintext = inp;
	var encoded = "";
	for (var i = 0; i < plaintext.length; i++ ) {
		var ch = plaintext.charAt(i);
	    if (ch == " ") {
		    encoded += "+";				// x-www-urlencoded, rather than %20
		}
		else if (SAFECHARS.indexOf(ch) != -1) {
		    encoded += ch;
		}
		else {
		    var charCode = ch.charCodeAt(0);
			if (SAFECHARCODES.indexOf('|'+charCode+'|') != -1){
				encoded += ch;
			}
			else if (charCode > 255) {
				encoded += "+";
			}
			else {
				encoded += "%";
				encoded += HEX.charAt((charCode >> 4) & 0xF);
				encoded += HEX.charAt(charCode & 0xF);
			}
		}
	}
	return encoded;
}
