/*******
** vp - EventListener module - (c) Indivirtual 2008 - 1.0 **
** $Revision: 1.27 $	
*******/

var EventListener = {
    listeners: [],
    bCapture: false,
    bSafari: /safari/i.test(navigator.userAgent),

    addEvents: function(els, type, func, scope) {
        var events = [];
        for (var event, i = 0; i < els.length; i++) {
            event = this.addEvent(els[i], type, func, scope);
            events.push(event);
        }
        return events;
    },

    addEvent: function(el, type, func, scope) {
        if (!el) return;
        var handler = this.delegate(func, scope || el);
        try {
            el.addEventListener(type, handler, this.bCapture);
        } catch (e) {
            el.attachEvent('on' + type, handler);
        }

        var event = { element: el, type: type, handler: handler, capture: this.bCapture };
        this.listeners.push(event);
        return event;
    },

    removeEvents: function(events) {
        for (var i = 0; i < events.length; i++) {
            this.removeEvent(events[i]);
        }
    },

    removeEvent: function(event) {
        try {
            event.element.removeEventListener(event.type, event.handler, event.capture);
        } catch (e) {
            event.element.detachEvent('on' + event.type, event.handler);
        }

        for (var i = 0; i < this.listeners.length; i++) {
            if (this.listeners[i] == event) {
                this.listeners.splice(i, 1);
                break;
            }
        }
    },

    dispatchEvents: function(elements, type) {
        for (var i = 0; i < elements.length; i++) {
            this.dispatchEvent(elements[i], type);
        }
    },

    dispatchEvent: function(el, type) {
        var events, node = el, event = { target: el, type: type };
        while (node && !event.cancelBubble) {
            events = this.getEvents(node, type);
            for (var i = 0; i < events.length; i++) {
                events[i].handler(event);
            }
            node = node.parentNode;
        }
    },

    getTarget: function(e, name) {
        var target = e.target || e.srcElement;
        var reg = name ? new RegExp('^' + name + '$', 'i') : null;
        while (target && (target.nodeType != 1 || (reg && !reg.test(target.nodeName)))) {
            target = target.parentNode;
        }
        return target;
    },

    getEvents: function(el, type) {
        var result = [];
        for (var item, i = 0; (item = this.listeners[i++]); ) {
            if ((!el || el == item.element) && (!type || type == item.type)) {
                result.push(item);
            }
        }
        return result;
    },

    cancelEvent: function(e) {
        this.preventDefault(e);
        this.stopPropagation(e);
        return false;
    },

    preventDefault: function(e) {
        try {
            e.preventDefault();
        } catch (exception) {
            e.returnValue = false;
        }

        if (this.bSafari) {
            var target = this.getTarget(e, 'a');
            if (target) { target.onclick = function() { return false; }; };
        }
    },

    stopPropagation: function(e) {
        try {
            e.stopPropagation();
        } catch (exception) {
            e.cancelBubble = true;
        }
    },

    setCapture: function(toggle) {
        this.bCapture = toggle;
    },

    delegate: function(func, scope) {
        return function() {
            func.apply(scope, arguments);
        }
    }
}

// Handle PNG transparency for images in Win IE 5.5 & 6.

function correctPNG() 
{
   var arVersion = navigator.appVersion.split("MSIE")
   var version = parseFloat(arVersion[1])
   if ((version >= 5.5) && (document.body.filters)) 
   {
      for(var i=0; i<document.images.length; i++)
      {
         var img = document.images[i]
         var imgName = img.src.toUpperCase()
         if (imgName.substring(imgName.length-3, imgName.length) == "PNG")
         {
            var imgID = (img.id) ? "id='" + img.id + "' " : ""
            var imgClass = (img.className) ? "class='" + img.className + "' " : ""
            var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "
            var imgStyle = "display:inline-block;" + img.style.cssText 
            if (img.align == "left") imgStyle = "float:left;" + imgStyle
            if (img.align == "right") imgStyle = "float:right;" + imgStyle
            if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle
            var strNewHTML = "<span " + imgID + imgClass + imgTitle
            + " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
            + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
            + "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>" 
            img.outerHTML = strNewHTML
            i = i-1
         }
      }
   }    
}

// Open Layer Imagemap
function setImageLayer() {
	var ID = 'imageMap';
	if (document.getElementById(ID)) {
		setInfo(ID);	
	}
}

function setInfo(ID) {
	var entries = document.getElementById(ID).getElementsByTagName('div');
	for (var i=0; i<entries.length; i++) {
		if (entries[i].className=="dot") {						
			entries[i].onmouseover = function() {
				var childId = this.id + "Text";
				setInfoLayer(childId);
				var areaId = this.id + "Area";
				//setAreaCoords(areaId);				
				if (document.getElementById(childId)) {
					if (this.className.indexOf('selected') == -1) {
						document.getElementById(childId).style.display = 'block';
						this.className = this.className + ' selected';
					}
					else {
						document.getElementById(childId).style.display = 'block';
						this.className = this.className.replace(/ selected/g, '');
					}
				}				
			};
		}
	}
}

function setAreaCoords (ID) {
	var entries = document.getElementById('imageMap').getElementsByTagName('area');
	var areaId = ID;

	for (var i=0; i<entries.length; i++) {
		if (areaId = entries[i].id) {
			var areaCoords = document.getElementById(areaId).getAttribute('coords');

		}
		else {
			alert ("no coords");
		}
	}
}

function setInfoLayer(ID) {
	var infoLayer = document.getElementById(ID);
	infoLayer.style.display = 'none';
	var infoLink = infoLayer.getElementsByTagName('a')[0];
	infoLink.style.display = 'block';
	var infoSpace = infoLayer.getElementsByTagName('div')[0];
	infoSpace.style.display = 'block';
	
	//infoLayer.onmouseover = function() {
		//infoLayer.style.display = 'block';
	//};
	
	infoLayer.onmouseout = function() {
		infoLayer.style.display = 'none';
	};
	
	infoLink.onmouseover = function() {
		infoLayer.style.display = 'block';		
	};
	infoLink.onmouseout = function() {
		infoLayer.style.display = 'none';
	};	
}

// Set style Selectlists

function replaceSelects() {	
	var selects;
	var selectText;
	var selectType;
	//get all the select fields on the page
    selects = document.getElementsByTagName('select');
	selectType = document.getElementById("selectList");
	
	//cycle trough the select fields
    for(var i=0; i < selects.length; i++) {	
		
		if("selects"+i == "selects0") {selectText = "Language";}
		else {
			if(selectType.className=="frmContact") {selectText = "Choose region";}
			else if(selectType.className=="frmServices") {selectText = "Select";}
		}		

		//create and build div structure
		var selectArea = document.createElement('div');
		var left = document.createElement('div');
		var right = document.createElement('div');
		var center = document.createElement('div');
		var button = document.createElement('a');
		var text = document.createTextNode(selectText);
		center.id = "mySelectText"+i;
		button.href="javascript:showOptions("+i+")";
		selectArea.className = "selectArea";
		left.className = "left";
		right.className = "right";
		center.className = "center";
		right.appendChild(button);
		center.appendChild(text);
		selectArea.appendChild(left);
		selectArea.appendChild(right);
		selectArea.appendChild(center);
		
		//hide the select field
        selects[i].style.display='none'; 
		
		//insert select div
		selects[i].parentNode.insertBefore(selectArea, selects[i]);
		
		//build & place options div
		var optionsDiv = document.createElement('div');
		optionsDiv.className = "optionsDivInvisible";
		optionsDiv.id = "optionsDiv"+i;
		optionsDiv.style.left = findPosX(selectArea) + 'px';
		optionsDiv.style.top = findPosY(selectArea) + 19 + 'px';
		
		//get select's options and add to options div
		for(var j=0; j < selects[i].options.length; j++) {
			var optionHolder = document.createElement('p');
			var optionLink = document.createElement('a');
			var optionTxt = document.createTextNode(selects[i].options[j].text);
			optionLink.href = "javascript:showOptions("+i+"); selectMe('"+selects[i].id+"',"+j+","+i+");";
			optionLink.appendChild(optionTxt);
			optionHolder.appendChild(optionLink);
			optionsDiv.appendChild(optionHolder);
		}
		
		//insert options div
		document.getElementsByTagName("body")[0].appendChild(optionsDiv);
	}
}

function showOptions(g) {
		elem = document.getElementById("optionsDiv"+g);
		if(elem.className=="optionsDivInvisible") {elem.className = "optionsDivVisible";}
		else if(elem.className=="optionsDivVisible") {elem.className = "optionsDivInvisible";}
}

function selectMe(selectFieldId,linkNo,selectNo) {
	//feed selected option to the actual select field
	selectField = document.getElementById(selectFieldId);
	for(var k = 0; k < selectField.options.length; k++) {
		if(k==linkNo) {
			selectField.options[k].selected = "selected";
		}
		else {
			selectField.options[k].selected = "";
		}
	}
	//show selected option
	textVar = document.getElementById("mySelectText"+selectNo);
	//var newText = document.createTextNode(selectField.options[linkNo].value);
	var newText = document.createTextNode(selectField.options[linkNo].innerHTML);
	textVar.replaceChild(newText, textVar.childNodes[0]);
}

function findPosY(obj) {
	var posTop = 0;
	while (obj.offsetParent) {
		posTop += obj.offsetTop;
		obj = obj.offsetParent;
	}
	return posTop;
}
function findPosX(obj) {
	var posLeft = 0;
	while (obj.offsetParent) {
		posLeft += obj.offsetLeft;
		obj = obj.offsetParent;
	}
	return posLeft;
}

// set style input file upload
var W3CDOM = (document.createElement && document.getElementsByTagName);

function setStyleUpload(imagepath) {
	if (!W3CDOM) return;
	var fakeFileUpload = document.createElement('div');
	fakeFileUpload.className = 'fakefile';
	fakeFileUpload.appendChild(document.createElement('input'));
	var image = document.createElement('img');
	image.src = imagepath;
	fakeFileUpload.appendChild(image);
	var x = document.getElementsByTagName('input');
	for (var i=0;i<x.length;i++) {
		if (x[i].type != 'file') continue;
		if (x[i].getAttribute('noscript')) continue;
		if (x[i].parentNode.className != 'fileinputs') continue;
		x[i].className = 'file hiddenField';
		x[i].style.filter = 'alpha(opacity: 0)';
		var clone = fakeFileUpload.cloneNode(true);
		x[i].parentNode.appendChild(clone);
		x[i].relatedElement = clone.getElementsByTagName('input')[0];
		if (x[i].value)
			x[i].onchange;
		x[i].onchange = x[i].onmouseout = function () {
			this.relatedElement.value = this.value;
		}
	}
}

function setAsianTextStyle() {
    if (location.pathname.startsWith('/en')) {
        return;
    }
    if (location.pathname.startsWith('/de')) {
        return;
    }
    $$("#navMenu li a").each(function(myParam) { myParam.addClassName("asianTextStyle")})
}

EventListener.addEvent(window, "load", function() {
    setAsianTextStyle();
    correctPNG();
    setImageLayer();
});