var downloadWindow;
var basicFunctions = {
    popWindow:'',
    windowObject:'',
    setWindowObject: function (windowObj) {
        basicFunctions.windowObject = windowObj;
    },
    getWindowObject: function() {
        return basicFunctions.windowObject;
    },
    addEventListener: function(element, type, expression, bubbling) {
        bubbling = bubbling || false;
        if(window.addEventListener) { // Standard
            element.addEventListener(type, expression, bubbling);
            return true;
        } else if(window.attachEvent) { // IE
            element.attachEvent('on' + type, expression);
            return true;
        } else return false;
    },
    getDivByID:function (name) {
        var div;
        if(document.layers) {	   //NN4+
            if(document.layers[name]){
                div = document.layers[name];
            }
        } else if(document.getElementById){	  //gecko(NN6) + IE 5+
                if(document.getElementById(name)){
                    div = document.getElementById(name);
                }
        } else if(document.all){	// IE 4
            if(document.all[name]){
                div = document.all[name];
            }
        }
        return div;
    },
    toggleDiv:function (name, state) {
        var div = basicFunctions.getDivByID(name);
        if(document.layers) {
            div.visibility = state ? "visible" : "hidden";
        } else {
            if(div.style) {
                div.style.visibility = state ? "visible" : "hidden";
                if(document.getElementById) {
                    div.style.display = state ? "block" : "none";
                }
            }
            
        }
    },
    changePrintPage: function(name, url) {
        
        if(document.styleSheets) {
            var styleSheets = document.styleSheets;
            for(i = 0; i < styleSheets.length; i++) {
                if(styleSheets[i].title == name) {
                    try {
                        styleSheets[i].href = url;
                    } catch(er) {
                        var el = basicFunctions.getDivByID(name);
                        el.setAttribute('href', url);
                    }
                }
            }
        }
    },
    setTextInStatusBar: function(text) {
        basicFunctions.windowObject.status = text;
    },
    popupWindow:function (url, windowTitle, width, height) {
        basicFunctions.setTextInStatusBar(url);
        var popWindow = basicFunctions.popWindow;
        if (!popWindow || popWindow == '' || popWindow.closed) {
			widthC = width + '';
			heightC = height + '';
			if(basicFunctions.windowObject.open) {
				popWindow = basicFunctions.windowObject.open(url, '_blank', 'width=' + widthC + ',height=' + heightC + ',left=0,top=0,scrollbars=yes,toolbar=no,menubar=yes,status=no,resizable=true', true);
			}
            
        } else {
            popWindow.focus();
            popWindow.location = winURL;
        }
    },
    changeStyle:function (name, propertyName, propertyValue) {
        var div = basicFunctions.getDivByID(name);
        var style = div.style;
        if(style) {
            style.setAttribute(propertyName, propertyValue);
        }
        
    },
    toggleButtonByName: function(nameOfDiv, nameOfButton, hiddenText, visibleText) {
        var currentStatus = basicFunctions.toggleDivByName(nameOfDiv);
        var visible = false;
        if(currentStatus == 'hidden') {
            basicFunctions.changeContentOfElement(nameOfButton, visibleText);
        } else if(currentStatus == 'visible') {
            basicFunctions.changeContentOfElement(nameOfButton, hiddenText);
            visible = true;
        }
        return visible;
    },
    toggleDivByName:function (name) {
        var div = basicFunctions.getDivByID(name);
        var returnValue = "hidden";
        var value = "hidden";
        if(div.style.visibility) {
            value = div.style.visibility;
        }
        
        if(value == 'hidden') {
            basicFunctions.toggleDiv(name, 1);
            returnValue = 'visible';
        } else if(value == 'visible') {
            basicFunctions.toggleDiv(name, 0);
            returnValue = 'hidden';
        }
        return returnValue;
    },
    changeContentOfElement:function(name, content) {
        var div = basicFunctions.getDivByID(name);
        if(div) {
            div.innerHTML = content;
        }
    },
    copyContentFromElement:function(sourceName, targetName) {
        var sourceDiv = basicFunctions.getDivByID(sourceName);
        var targetDiv = basicFunctions.getDivByID(targetName);
        if(sourceDiv && targetDiv) {
            targetDiv.innerHTML = sourceDiv.innerHTML;
        }
    },
    getContentFromElement:function(name) {
        var sourceElement = basicFunctions.getDivByID(name);
        return sourceElement.innerHTML;
    },
    setAttributeOfElement:function(name, propertyName, propertyValue) {
        var div = basicFunctions.getDivByID(name);
        if(div) {
            if(div.getAttribute(propertyName)) {
                div.setAttribute(propertyName, propertyValue);
            }
        }
    },
    toggleClassById: function(name, valueOne, valueTwo) {
        var div = basicFunctions.getDivByID(name);
        var classAttribute = div.className;
        if(classAttribute) {
            if(classAttribute == valueOne) {
                div.className = valueTwo;
            } else if(classAttribute == valueTwo) {
                div.className = valueOne;
            }
        }
        
    },
    toggleClassOfElement: function(element, valueOne, valueTwo) {
        var classAttribute = element.className;
        if(classAttribute) {
            if(classAttribute == valueOne) {
                element.className = valueTwo;
            } else if(classAttribute == valueTwo) {
                element.className = valueOne;
            }
        }
        
    },
    switchToUrl:function(link) {
        basicFunctions.windowObject.location.href = link;
    },
    registerOnSiteStatAndOpenUrl : function(siteStatUrl, url) {
        sitestat(siteStatUrl);
        window.location = url;
    },
    showInModalBox : function(id, _title) {
        Modalbox.show($(id).innerHTML, {title: _title, overlayOpacity: .25});
    },
    showInModalBoxWithWidth : function(id, _title, _width) {
		Modalbox.show($(id).innerHTML, {title: _title, overlayOpacity: .25, width: _width});
    }
}

function setProcessHeight(){
		var scnWid,scnHei, offset;
		if (self.innerHeight) // all except Explorer
		{
			scnWid = self.innerWidth;
			scnHei = self.innerHeight;
			offset = window.pageYOffset;
		}
		else if (document.documentElement && document.documentElement.clientHeight)
			// Explorer 6 Strict Mode
		{
			scnWid = document.documentElement.clientWidth;
			scnHei = document.documentElement.clientHeight;
			offset = document.documentElement.scrollTop;
		}
		else if (document.body) // other Explorers
		{
			scnWid = document.body.clientWidth;
			scnHei = document.body.clientHeight;
			offset = document.body.scrollTop;
		}
		var groundElement =  document.getElementById('loading-layer');
		groundElement.style.height = (scnHei )+ 'px';
		groundElement.style.top = (offset)+ 'px';
	}

function useLoadingImage(imageSrc) {
          var loadingImage;
          if (imageSrc) loadingImage = imageSrc;
          else loadingImage = "ajax-loader.gif";
          
          DWREngine.setPreHook(function(){
            var disabledImageZone = $('disabledImageZone');
            if (!disabledImageZone) {
              disabledImageZone = document.createElement('div');
              disabledImageZone.setAttribute('id', 'disabledImageZone');
              disabledImageZone.style.position = "absolute";
              disabledImageZone.style.zIndex = "1000";
              disabledImageZone.style.right = "0px";
              disabledImageZone.style.top = "0px";
              disabledImageZone.style.width = screen.width;
              disabledImageZone.style.height = screen.height;
              var imageZone = document.createElement('img');
              imageZone.setAttribute('id','imageZone');
              imageZone.setAttribute('src',imageSrc);
              imageZone.style.position = "absolute";
              imageZone.style.top = "0px";
              imageZone.style.right = "0px";
              imageZone.style.width = "32px";
              imageZone.style.height = "32px";
              disabledImageZone.appendChild(imageZone);
              document.body.appendChild(disabledImageZone);
              disabledImageZone = Element.extend(disabledImageZone);
            } else {
              $('imageZone').src = imageSrc;
            }
            disabledImageZone.setStyle({visibility: 'visible'});
          });
          
          DWREngine.setPostHook(function() {
            $('disabledImageZone').setStyle({visibility: 'hidden'});
          });
}

/** These functions are here for compatibility reasons. They will be deleted when they are not necessary anymore **/

var netsc;
var iexpl;
var netsc6;
var mac;

netsc = (document.layers) ? 1:0;
iexpl = (document.all) ? 1:0;
netsc6 = (!document.all && document.getElementById) ? 1:0;

mac = (navigator.appVersion.indexOf('Mac') != -1) ? 1 : 0;

var containerWidthToSub3;
var containerWidthToSub2;
var initialParsingOfSubs = false; 


function repositionMenus(widthToSub2, widthToSub3){
if (parseInt(navigator.appVersion)>3) {
 if (navigator.appName=="Netscape") {
  winW = window.innerWidth-16;
  winH = window.innerHeight-16;
 }
 if (navigator.appName.indexOf("Microsoft")!=-1) {
  winW = document.body.offsetWidth-20;
  winH = document.body.offsetHeight-20;
 }
}
 var menuOffset = 0; 
 var sub3 = document.getElementById("sub3");
 var sub2 = document.getElementById("sub2");
 if(widthToSub3 || containerWidthToSub3) { //The code beneath this 'if' will be triggered when someone clicks on the navigation text or the screen is resized.
     if(initialParsingOfSubs == false) {
            if(sub3) {   
                containerWidthToSub3 = widthToSub3;
            }
            if(sub2) {
                containerWidthToSub2 = widthToSub2;
            }
            initialParsingOfSubs = true;
        }
     var containerOffset = (winW - 755)/2;
    
     
    
     var menuPosition;
     if(containerOffset > 0){
        menuPosition = containerOffset + containerWidthToSub3;
     } else {
        menuPosition  = containerWidthToSub3;
     }
     
     if(sub3){
            var sub3_style = sub3.style;
            if(sub3_style){
                    sub3_style.left = menuPosition + "px";
                    for(i=1;i<20;i++){
                    var sub4 = document.getElementById("sub4" + i);
                            if(sub4){
                                    var sub4_style = sub4.style;
                                    if(sub4_style){
                                            sub4_style.left = (menuPosition + 135) + "px";
                                    }
                            } else {
                                    break;
                            }
                    }
            }
     }
    
    if(containerOffset > 0){
        menuPosition = containerOffset + containerWidthToSub2;
     } else {
        menuPosition =  containerWidthToSub2;
     }
     if(sub2){
            var sub2_style = sub2.style;
            if(sub2_style){
                    sub2_style.left = menuPosition + "px";
                    for(i=1;i<20;i++){
                    var sub4 = document.getElementById("sub4" + i);
                            if(sub4){
                                    var sub4_style = sub4.style;
                                    if(sub4_style){
                                            sub4_style.left = (menuPosition + 135) + "px";
                                    }
                            } else {
                                    break;
                            }
                    }
            }
     }
}

}

function divDefined(myDiv) {
	if (iexpl) {
		if (document.all[myDiv]) return true;
		}
	if (netsc) {
			if (document.layers[myDiv]) return true;
		}
	if (netsc6) { 
			if (document.getElementById(myDiv)) return true;
		}
	return false;
}

function hideDiv(myDiv) {
	if(divDefined(myDiv)) {
		if (iexpl) { document.all[myDiv].style.visibility='hidden'; }
		if (netsc) { document.layers[myDiv].visibility='hide'; }
		if (netsc6) { document.getElementById(myDiv).style.visibility='hidden'; }
	}
}

function showDiv(myDiv) {
	if(divDefined(myDiv)) {
		if (iexpl) { 
			if (mac) {
				if ( myDiv!='sub1' && myDiv!='sub6' && myDiv!='subbg0' && myDiv!='SupraNavHead' ){
					var jsTempTop = document.all[myDiv].style.top;
					var tempPos = jsTempTop.indexOf('px');
					if ( tempPos > 0 ) {
						jsTempTop = jsTempTop.substring(0, tempPos);
					}
					moveDivUp( myDiv, jsTempTop );
				} 
			}
			document.all[myDiv].style.visibility='visible';	
		}
		if (netsc) { document.layers[myDiv].visibility='show'; }
		if (netsc6) { document.getElementById(myDiv).style.visibility='visible'; }
	}
}

function hideSub(number) {
  hideDiv('sub' + number);
}

function hideAll() {
  hideDiv('sub1');
  hideDiv('sub2');
  hideDiv('sub3');
  hideDiv('sub41');
  hideDiv('sub42');
  hideDiv('sub43');
  hideDiv('sub44');
  hideDiv('sub45');
  hideDiv('sub46');
  hideDiv('sub47');
  hideDiv('sub48');
  hideDiv('sub49');
  hideDiv('sub410');
  hideDiv('sub411');
  hideDiv('sub412');
  hideDiv('sub413');
  hideDiv('sub414');
  hideDiv('sub415');
  hideDiv('sub416');
  hideDiv('sub5');
  hideDiv('sub6');
  hideDiv('subbg0');
}

function showSub(number) {
  showDiv('sub' + number);
  showDiv('subbg0');
}

function goto(url){
    window.location.href = url;
}

	function copyOptions(fromID, toID, selectedOnly) {
	   var fromOptions = $(fromID).options;
	   var toOptions = $(toID).options;
	   var optionsToCopy = new Array();
	   var optionsToStay = new Array();
	   copyCount = 0;
	   stayCount = 0;
	   
	   //create the two new arrays of options
	   for (var i = 0; i < toOptions.length; i++) {
	   	  optionsToCopy[copyCount] = toOptions[i];
	      copyCount++;
	   }
	   for (var i = 0; i < fromOptions.length; i++) {
	   	  if(fromOptions[i].selected || !selectedOnly){	
	      	optionsToCopy[copyCount] = fromOptions[i];
	      	copyCount++;
	      } else {
	      	optionsToStay[stayCount] = fromOptions[i];
	      	stayCount++;
	      }
	   }
	   //sort the two arrays
	   optionsToStay.sort(sortOptions);
	   optionsToCopy.sort(sortOptions);
	   
	   //convert the two arrays to objects
	   var copyMap = new Object();
	   for(var i=0; i < optionsToCopy.length; i++){
	   		copyMap[optionsToCopy[i].value] = optionsToCopy[i].innerHTML;
	   }
	   var stayMap = new Object();
	   for(var i=0; i < optionsToStay.length; i++){
	   		stayMap[optionsToStay[i].value] = optionsToStay[i].innerHTML;
	   }
	   
	   //update the elements
	   dwr.util.removeAllOptions(fromID);
	   dwr.util.addOptions(fromID, stayMap);
	   dwr.util.removeAllOptions(toID);
	   dwr.util.addOptions(toID, copyMap);
	}
	
	function sortOptions(a, b){
		if(a.innerHTML > b.innerHTML){
      		return 1;
      	} else if(a.innerHTML < b.innerHTML) {
      		return -1; 
      	} else {
   			return 0;
   		} 
	}
	
	function addAll(){
		copyOptions('unselectedCountries', 'selectedCountries', false);
	}
	
	function removeAll(){
		copyOptions('selectedCountries', 'unselectedCountries', false);
	}
	
	function addSelected(){
		copyOptions('unselectedCountries', 'selectedCountries', true);
	}
	
	function removeSelected(){
		copyOptions('selectedCountries', 'unselectedCountries', true);
	}
	
	function selectAllOptions(id){
		var options = $(id).options;
		for (var i = 0; i < options.length; i++) {
			options[i].selected = true;
		}
	}
