// ---
var tv4 = {

    content: null,
	context: null,
    clickEvents: Array(),

    textSizes: Array("", "large", "larger"),
    currentTextSize: 0,
	playerInstalled: false,
	
	prepare: function() {
		this.initClickEvents();
		this.runOnDOMLoad("tv4.init()");
		this.runOnDOMLoad("initLightbox()");
	},

	runOnDOMLoad: function(functionStr) {
		// added delay to make sure everything is loaded properly
		DOMAssistant.DOMReady("setTimeout(\"" + functionStr + "\", 200)");
	},

    init: function() {
        this.content = DOMAssistant.$$("content");
        if (this.content) {
            this.initTextSize();
            this.applyListHover();
            this.applyExpandContractEvents();
            this.applySearchFieldFocus();
            //this.applySearchTypeEvents();
            this.applyCommentCounterEvents();
            if (typeof tv4TVTable != "undefined") {
                tv4TVTable.init();
            }
			this.slideshowlinks();
			this.videorating();
        }
    },

    initClickEvents: function() {
        DOMAssistant.$(document).addEvent("click", this.clickHandler);
        this.addClickEventToClass("toggle", this.toggle);
        this.addClickEventToClass("show-additional-items", this.changeAdditionalItems);
        this.addClickEventToClass("hide-additional-items", this.changeAdditionalItems);
        this.addClickEventToClass("text-increase", this.increaseText);
        this.addClickEventToClass("text-decrease", this.decreaseText);
        this.addClickEventToClass("print", this.print);
        this.addClickEventToClass("send-mail", this.openTip);
        this.addClickEventToClass("open-in-new", this.openWindow);
        this.addClickEventToClass("open-in-popup", this.openPopup);
        this.addClickEventToClass("tab-image", this.tabClick);
		this.addClickEventToClass("lightbox", this.lightbox);
		this.addClickEventToClass("toggle-leftmenu", this.showLeftMenu);
    },

	showLeftMenu: function(e) {
		var link = this;
		var parent = link.parentNode;
		var submenu = link.next();
		var linkClass = "selected";
		var parentClass = "selected-item";
		var submenuClass = "show";
		var submenuParents;
		var submenuItems;
		var submenuLinks;	
		
		if (!DOMAssistant.$(link).hasClass(linkClass)) {
			DOMAssistant.$(parent).addClass(parentClass);
			DOMAssistant.$(submenu).addClass(submenuClass);
			DOMAssistant.$(link).addClass(linkClass);
		}else{
			// reset all children
			DOMAssistant.$(link).removeClass(linkClass);
			DOMAssistant.$(parent).removeClass(parentClass);
			DOMAssistant.$(submenu).removeClass(submenuClass);
			
			submenuParents = DOMAssistant.$(parent).getElementsByTagName("ul");
			submenuItems = DOMAssistant.$(parent).getElementsByTagName("li");
			submenuLinks = DOMAssistant.$(parent).getElementsByTagName("a");
			
			for (var i = 0; i < submenuParents.length; i++) {
				if (!DOMAssistant.$(submenuParents[i]).hasClass("current")) {
					DOMAssistant.$(submenuParents[i]).removeClass(submenuClass);	
				}
			}
			
			for (var j = 0; j < submenuItems.length; j++) {
				DOMAssistant.$(submenuItems[j]).removeClass(parentClass);
			}
			
			for (var q = 0; q < submenuLinks.length; q++) {
				DOMAssistant.$(submenuLinks[q]).removeClass(linkClass);
			}
		}
	},

    lightbox: function(e) {
       showLightbox(this)
    },
   
    addClickEventToClass: function(className, fn, useClickTarget) {
        useClickTarget = useClickTarget ? useClickTarget : false;
        this.clickEvents[className] = {fn: fn, useClickTarget: useClickTarget};
    },

    clickHandler: function (e) {
		if ((e.which && e.which != 1) || (e.button && e.button != 0)) {
			return true;
		}
        var target, original;
		target = original = tv4.getEventTarget(e);
		if (target.onclick) {
			return false;
		}
        while (target != null && target.parentNode != null) {
            if (target.className != null) {
                var classNames = target.className.split(" ");
                var functionCalled = false;
                for (var i = 0; i < classNames.length; i++) {
                    var event = tv4.clickEvents[classNames[i]];
                    if (event && event.fn) {
                        functionCalled = event.fn.call(event.useClickTarget ? original : target);
                        if (typeof functionCalled === "undefined") {
                            functionCalled = true;
                        }
                    }
                }
                if (functionCalled) {
                    DOMAssistant.preventDefault(e);
                    return false;
                }
            }
            target = DOMAssistant.$(target.parentNode);
        }
        return true;
    },

    getEventTarget: function(e) {
        e = e || window.event;
        var target = e.target || e.srcElement;
        if (target.nodeType == 3) {
            target = target.parentNode;
        }
        return DOMAssistant.$(target);
    },

    applyListHover: function() {
        var lists = this.content.elmsByClass("pic-and-text", "ul");
        var navigationItems = DOMAssistant.$(document).elmsByClass("navigation-items", "ul");
        var allItems = this.concatHTMLArrays(lists, navigationItems);
        var list;
        var listItems;
        var item;
        for (var i = 0; i < allItems.length; i++) {
            list = allItems[i];
            listItems = list.getElementsByTagName("li");
            for (var j = 0; j < listItems.length; j++) {
                item = DOMAssistant.$(listItems[j]);
				if (!item.hasClass("large")) {
	                item.addEvent("mouseover", tv4.hoverList);
	                item.addEvent("mouseout", tv4.clearHoverList);
	                if (!/tabs/i.test(list.className)) {
	                    item.addEvent("click", tv4.clickListItem);
	                }
				}
            }
        }
    },

    applyTabNavigation: function() {
        var tabLists = document.elmsByClass("tabs", "*");
        var links;
        var linkElm;
        for (var i = 0; i < tabLists.length; i++) {
            links = tabLists[i].getElementsByTagName("a");
            for (var j = 0; j < links.length; j++) {
                linkElm = DOMAssistant.$(links[j]);
                if (!/tab-index/i.test(linkElm.className)) {
                    linkElm.addClass(("tab-index-" + j));
                }
            }
        }
    },

    applyExpandContractEvents: function() {
        var links = document.elmsByClass("expand-contract", "a");
        var linkElm;
        var container;
        for (var i = 0; i < links.length; i++) {
            linkElm = DOMAssistant.$(links[i]);
            container = linkElm;
            while (!/expand-contract-container/i.test(container.className) && container.parentNode && !/body/i.test(container.nodeName)) {
                container = container.parentNode;
            }
            linkElm.container = DOMAssistant.$(container);
            linkElm.addEvent("click", tv4.expandContract);
            container.expanded = container.elmsByClass("expanded", "*");
            container.contracted = container.elmsByClass("contracted", "*");
        }
    },

    applySearchFieldFocus: function() {
        var searchField = DOMAssistant.$$("search-field");
        if (searchField) {
            searchField.addEvent("click", function() {
                this.select();
            });
        }
    },

    applySearchTypeEvents: function() {
        var searchProgram = DOMAssistant.$$("search-program");
        if (searchProgram) {
            searchProgram.addEvent("click", tv4.changeSearchBackground);
        }
        var searchSite = DOMAssistant.$$("search-site");
        if (searchSite) {
            searchSite.addEvent("click", tv4.changeSearchBackground);
        }
    },

    applyCommentCounterEvents: function() {
        var commentAreas = document.elmsByClass("comment-counter", "textarea");
        var item;
        for (var i = 0; i < commentAreas.length; i++) {
            item = DOMAssistant.$(commentAreas[i]);
            item.addEvent("keyup", tv4.commentCharactersCount);
            item.addEvent("keydown", tv4.commentCharactersCount);
        }
    },

    hoverList: function() {
        this.addClass("hover-item");
        var images = this.elmsByClass("menu-image", "img");
        var image;
        var imageSrc;
        for (var i = 0; i < images.length; i++) {
            image = images[i];
            imageSrc = image.getAttribute("src");
            if (!/-over|-selected/i.test(imageSrc)) {
                image.setAttribute("src", imageSrc.replace(/(\.(gif|jpg|png))/i, "-over$1"));
            }
        }
    },

    clearHoverList: function() {
        this.removeClass("hover-item");
        var images = this.elmsByClass("menu-image", "img");
        var image;
        var imageSrc;
        for (var i = 0; i < images.length; i++) {
            image = images[i];
            imageSrc = image.getAttribute("src");
            if (/-over/i.test(imageSrc)) {
                image.setAttribute("src", imageSrc.replace(/-over/i, ""));
            }
        }
    },

    clickListItem: function (evt) {
        var target = (typeof evt.target != "undefined")? evt.target: evt.srcElement;
		if ((evt.which && evt.which != 1) || (evt.button && evt.button != 0)) {
			return true;
		}
        if (!/a/i.test(target.nodeName)) {
            var links = this.getElementsByTagName("a");
            if (links.length > 0) {
				if (tv4.playerInstalled) {
					for (var i = 0; i < links.length; i++) {
						if (DOMAssistant.$(links[i]).hasClass("video"))	{
							tv4Player.handlePageVideos.call(links[i]);
							DOMAssistant.preventDefault(evt);
						}
					}					
				} else {
	                location.href = links[0].getAttribute("href");				
				}
            }
        }
    },

    toggle: function (forceHide) {
        var elm = null;
        var displayClass = "display-block";
        var linkTableRow = null;
        if (this.hasClass("toggle-next-elm")) {
            elm = DOMAssistant.$(this.next());
        } else if (this.hasClass("toggle-next-row")) {
            currentElm = this;
            while (!/tr/i.test(currentElm.nodeName) && currentElm.parentNode && !/body/i.test(currentElm.nodeName)) {
                currentElm = currentElm.parentNode;
            }
            if (/tr/i.test(currentElm.nodeName)) {
                linkTableRow = true;
                elm = DOMAssistant.$(DOMAssistant.$(currentElm).next());
                if (elm) {
                    linkTableRow = DOMAssistant.$(currentElm);
                    displayClass = "display-table-row";
                }
            }
        } else {
            elm = DOMAssistant.$$(this.className.replace(/.*elm-to-toggle-([\w-]+).*/, "$1"));
        }
        if (elm) {
            if (elm.hasClass(displayClass) || forceHide) {
                elm.removeClass(displayClass);
                var navLinkClass = elm.className.match(/nav-link[\w-]+/);
                if (navLinkClass) {
                    var navLink = DOMAssistant.$$(navLinkClass[0].replace(/nav-link-/, ""));
                    if (navLink) {
                        navLink.removeClass("more-selected");
                        DOMAssistant.$(navLink.parentNode).removeClass("selected");
                    }
                    elm.removeClass(navLinkClass);
                }
                this.removeClass("more-selected");
                DOMAssistant.$(this.parentNode).removeClass("selected");
                if (linkTableRow) {
                    linkTableRow.removeClass("more-selected");
                }
            } else {
                if (this.hasClass("nav-link")) {
                    if (elm.childNodes.length == 0 && this.href.length > 0) {
                        elm.load(tv4.handleLinkPulseURI(this.href));
                    }
                    elm.addClass(("nav-link-" + this.getAttribute("id")));
                }
                elm.addClass(displayClass);
                this.addClass("more-selected");
                DOMAssistant.$(this.parentNode).addClass("selected");
                if (linkTableRow) {
                    linkTableRow.addClass("more-selected");
                }
            }
        }
        if (this.hasClass("force-hide")) {
            var elmToHide = DOMAssistant.$$(this.className.replace(/.*hide-([\w-]+).*/i, "$1"));
            if (elmToHide && !forceHide) {
                tv4.toggle.call(elmToHide, true);
            }
        }
    },

    changeAdditionalItems: function () {
        var show = /show-additional-items/i.test(this.className);
        var container = this;
        while (!/additional-items-container/i.test(container.className) && container.parentNode && !/body/i.test(container.nodeName)) {
            container = container.parentNode;
        }
        var items = DOMAssistant.$(container).elmsByClass("additional-item");
        if (show) {
            for (var i = 0; i < items.length; i++) {
                DOMAssistant.$(items[i]).addClass("display-block");
            }
        } else {
            for (var j = 0; j < items.length; j++) {
                DOMAssistant.$(items[j]).removeClass("display-block");
            }
        }
        var linkToFind = (show)? "hide-additional-items": "show-additional-items";
        var hideItems = DOMAssistant.$(container).elmsByClass(linkToFind, "a");
        if (hideItems.length > 0) {
            DOMAssistant.$(hideItems[0]).addClass("display-inline");
        }
        this.removeClass("display-inline");
    },

    tabClick: function () {
        if (this.hasClass("tab-image")) {
            oThis = DOMAssistant.$(this.parentNode);
        } else {
            oThis = this;
        }
        if (oThis.className.search(/tab-index/) < 0) {
            tv4.initTabNavigation(oThis);
        }
        var tabIndex = oThis.className.replace(/.*tab-index-(\d+).*/, "$1");
        var tabContainer = oThis;
        while (!/tab-container/i.test(tabContainer.className) && tabContainer.parentNode && !/body/i.test(tabContainer.nodeName)) {
            tabContainer = tabContainer.parentNode;
        }
        tabContainer = DOMAssistant.$(tabContainer);
        var tabImages = tabContainer.elmsByClass("tab-image", "img");
        if (tabImages.length > 0) {
            var currentTabImage = tabImages[tabIndex];
            var image;
            var imageSrc;
            for (var i = 0; i < tabImages.length; i++) {
                image = tabImages[i];
                imageSrc = image.getAttribute("src");
                if (image != currentTabImage && /-selected/i.test(imageSrc)) {
                    image.setAttribute("src", imageSrc.replace(/-selected/i, ""));
                }
            }
            imageSrc = currentTabImage.getAttribute("src");
            if (!/-selected/i.test(imageSrc)) {
                currentTabImage.setAttribute("src", imageSrc.replace(/-over|(\.(gif|jpg|png))/gi, function (match, p1) {
                    return (/-over/i.test(match))? "": ("-selected" + p1);
                }));
            }
        }
        var tabContent = tabContainer.elmsByClass("tab-content", "div");
        if (tabContent.length > 0) {
            for (var j = 0; j < tabContent.length; j++) {
                DOMAssistant.$(tabContent[j]).removeClass("display-block");
            }
            tabContent[tabIndex].addClass("display-block");
        }
        oThis.blur();
    },

    initTabNavigation: function(tabElement) {
        while (!tabElement.hasClass("tabs")) {
            tabElement = DOMAssistant.$(tabElement.parentNode);
        }
        links = tabElement.getElementsByTagName("a");
        for (var j = 0; j < links.length; j++) {
            linkElm = DOMAssistant.$(links[j]);
            if (!/tab-index/i.test(linkElm.className)) {
                linkElm.addClass(("tab-index-" + j));
            }
        }
    },

    expandContract: function (evt) {
        var isExpanded = this.hasClass("expanded");
        var expandText = this.elmsByClass("expand", "span");
        var contractText = this.elmsByClass("contract", "span");
        if (isExpanded) {
            this.removeClass("expanded");
            if (expandText.length > 0) {
                expandText = DOMAssistant.$(expandText[0]);
                expandText.addClass("display-inline");
            }
            if (contractText.length > 0) {
                contractText = DOMAssistant.$(contractText[0]);
                contractText.removeClass("display-inline");
            }
        } else {
            this.addClass("expanded");
            if (expandText.length > 0) {
                expandText = DOMAssistant.$(expandText[0]);
                expandText.removeClass("display-inline");
            }
            if (contractText.length > 0) {
                contractText = DOMAssistant.$(contractText[0]);
                contractText.addClass("display-inline");
            }
        }
        var container = this.container;
        if (isExpanded) {
            for (var i = 0; i < container.expanded.length; i++) {
                DOMAssistant.$(container.expanded[i]).removeClass("display-block");
            }
            for (var j = 0; j < container.contracted.length; j++) {
                DOMAssistant.$(container.contracted[j]).addClass("display-block");
            }
        } else {
            for (var k = 0; k < container.expanded.length; k++) {
                DOMAssistant.$(container.expanded[k]).addClass("display-block");
            }
            for (var l = 0; l < container.contracted.length; l++) {
                DOMAssistant.$(container.contracted[l]).removeClass("display-block");
            }
        }
        DOMAssistant.preventDefault(evt);
        return false;
    },

    commentCharactersCount: function (evt) {
        var commentCounterContainer = this;
        var numberOfCharacters = commentCounterContainer.value.length;
        var maxNoOfCharacters = commentCounterContainer.className.replace(/.*max-characters-(\d+).*/, "$1");
        if (numberOfCharacters >= maxNoOfCharacters) {
            if (!/\b(8|35|36|37|38|39|40|46)\b/.test(evt.keyCode)) {
                DOMAssistant.preventDefault(evt);
            }
        }
        if (evt.type == "keyup") {
            while (!/comment-counter-container/i.test(commentCounterContainer.className) && commentCounterContainer.parentNode && !/body/i.test(commentCounterContainer.nodeName)) {
                commentCounterContainer = commentCounterContainer.parentNode;
            }
            var commentCounterPresentation = DOMAssistant.$(commentCounterContainer).elmsByClass("comment-counter-presentation", "span");
            if (commentCounterPresentation.length > 0) {
                commentCounterPresentation[0].innerHTML = maxNoOfCharacters - numberOfCharacters;
            }
        }
    },

    getScreenPos: function() {
        var elm = this;
        var offsetLeft = 0;
        var offsetTop = 0;
        while (elm.offsetParent) {
            offsetLeft += elm.offsetLeft;
            offsetTop += elm.offsetTop;
            if (elm.scrollTop > 0) {
                offsetTop -= elm.scrollTop;
            }
            elm = elm.offsetParent;
        }
        return [offsetLeft, offsetTop];
    },

    changeSearchBackground: function() {
        var searchType = this.value;
        var searchBox = DOMAssistant.$$("search");
        if (searchBox) {
            if (/search-site/i.test(searchType)) {
                searchBox.addClass("all-site");
            } else {
                searchBox.removeClass("all-site");
            }
        }
    },

    setCookie: function (name, value, days) {
        if (days) {
            var date = new Date();
            date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
            var expires = "; expires=" + date.toGMTString();
        } else {
            var expires = "";
        }
        document.cookie = name + "=" + value + expires + "; path=/";
    },

    getCookie: function (name) {
        var nameEQ = name + "=";
        var ca = document.cookie.split(";");
        for (var i = 0; i < ca.length; i++) {
            var c = ca[i];
            while (c.charAt(0) == " ") {
                c = c.substring(1, c.length);
            }
            if (c.indexOf(nameEQ) == 0) {
                return c.substring(nameEQ.length, c.length);
            }
        }
        return null;
    },

    increaseText: function() {
        tv4.updateText(tv4.textSizes.length - tv4.currentTextSize - 1, 1);
    },

    decreaseText: function() {
        tv4.updateText(tv4.currentTextSize, -1);
    },

    updateText: function (limit, step) {
        if (limit > 0) {
            var articles = document.elmsByClass("article", "div");
            for (var i = 0; i < articles.length; i++) {
                articles[i] =  DOMAssistant.$(articles[i]);
                articles[i].removeClass(tv4.textSizes[tv4.currentTextSize]);
                articles[i].addClass(tv4.textSizes[tv4.currentTextSize += step]);
            }
            if (tv4.currentTextSize == 0) {
                tv4.setCookie("tv4TextSize", "", -1);
            } else {
                tv4.setCookie("tv4TextSize", tv4.currentTextSize, 365);
            }
        }
    },

    initTextSize: function() {
        var textSize = tv4.getCookie("tv4TextSize");
        if (textSize) {
            tv4.updateText(parseInt(textSize), parseInt(textSize));
        }
    },

    print: function() {
        print();
    },

    openTip: function() {
        window.open(this.href, "tip", "width=320,height=450,resizable,scrollbars").focus();
    },

    openPopup: function(href, width, height) {
        var oWidth = width ? width : 320;
        var oHeight = height ? height : 450;
        if (this.href) {
            href = this.href;
            var classWidth = this.className.replace(/.*popup-width-([\d-]+).*/i, "$1");
            if (classWidth != this.className) {
                oWidth = classWidth;
            }
            var classHeight = this.className.replace(/.*popup-height-([\d-]+).*/i, "$1");
            if (classHeight != this.className) {
                oHeight = classHeight;
            }
        }
        window.open(href, "tip", "width=" + oWidth + ",height=" + oHeight + ",resizable,scrollbars").focus();
    },

    openWindow: function() {
        window.open(this.href);
    },

    removeClasses: function(node, className) {
        var actives = DOMAssistant.$(node).elmsByClass(className);
        for (var i = 0; i < actives.length; i++) {
             DOMAssistant.$(actives[i]).removeClass(className);
        }
    },

	videorating: function() {
    	if (this.content != null) {
	    	var stars = this.content.elmsByClass("rateVideo", "label");
	        var star;
	        for (var i = 0; i < stars.length; i++) {
		        star = DOMAssistant.$(stars[i]);
		        star.addEvent("mouseout", tv4.videoratingToggle);
		        star.addEvent("mouseover", tv4.videoratingToggle);
	        }    	
    	}
	},
        
	 videoratingToggle: function() {
        var target = DOMAssistant.$$("hover-rating");
        
        if (!this.hasClass("offHover")) {
            this.addClass("offHover");
            this.addClass("starOnHover");
        }else{
            this.removeClass("offHover");
            this.removeClass("starOnHover");
        }

        if (!DOMAssistant.$$("hover-rating").hasClass("changed")) {
            DOMAssistant.$$("hover-rating").addClass("changed");
            target.innerHTML = this.getAttribute("title");
        }else{
            DOMAssistant.$$("hover-rating").removeClass("changed");
            target.innerHTML = DOMAssistant.$$("hover-rating").getAttribute("title");
        }
    },

	slideshowlinks: function() {
		var links = this.content.elmsByClass("slideshownavigate", "a");
		var link;

		for (var i = 0; i < links.length; i++) {
			link = DOMAssistant.$(links[i]);
			link.addEvent("mouseout", tv4.slideshowlinkstoggle);
			link.addEvent("mouseover", tv4.slideshowlinkstoggle);
		}
	},

	slideshowPageHandler: function () {
		var el = this;
		while (el.tagName != "A" && el.parentNode) {
			el = el.parentNode;	
		}
		if (el && el.href) {
			//$$("slideshow").load(el.href + "&popup=true&ajax=true&random=" + (new Date()).getTime());
            $$("slideshow").load(tv4.handleLinkPulseURI(el.href) + "&popup=true&ajax=true&random=" + (new Date()).getTime());
		}
	},

	slideshowlinkstoggle: function(e) {
		var child = this.childNodes[0];
		var background = $(child).getStyle("background-image");
		var newBackground;

		if (!/-over/i.test(background)) {
			newBackground = $$(child).style.backgroundImage.replace(/(\.(gif|jpg|png))/i, "-over$1");
			$$(child).style.backgroundImage = newBackground;
		}else{
			newBackground =  $$(child).style.backgroundImage.replace(/-over/i, "");
			$$(child).style.backgroundImage = newBackground;
		}
	},

    concatHTMLArrays: function(array1, array2) {
        for (var i = 0; i < array2.length; i++) {
            array1.push(array2[i]);
        }
        return array1;
    },

    handleLinkPulseURI: function(sourceURL){
        var linkpulseURI = "http://";
        var targetURL = sourceURL;
        //http://go.tv4.se/go/e/main_menu_1;siteId=199/http://tv4se.webutv.tv4.se:8080/1.225700?popup=true
        if(sourceURL.indexOf(linkpulseURI) != sourceURL.lastIndexOf(linkpulseURI)){
            targetURL = sourceURL.substring(sourceURL.lastIndexOf("http://"));
        }
        return targetURL;
    },

    submitForm: function(formId, id, url, callback) {
        var formData = "";
        var oForm;
        if (typeof formId == "string") {
            oForm = (document.getElementById(formId) || document.forms[formId]);
        } else if(typeof formId == "object") {
            oForm = formId;
        } else{
            return;
        }
        var oElement, oName, oValue, oDisabled;
        var hasSubmit = false;
        for (var i=0; i < oForm.elements.length; i++){
            oElement = oForm.elements[i];
            oDisabled = oForm.elements[i].disabled;
            oName = oForm.elements[i].name;
            oValue = oForm.elements[i].value;
            if (!oDisabled && oName) {
                switch (oElement.type) {
                    case "select-one":
                    case "select-multiple":
                        for (var j = 0; j < oElement.options.length; j++) {
                            if (oElement.options[j].selected) {
                                if (window.ActiveXObject) {
                                    formData += encodeURIComponent(oName) + "=" + encodeURIComponent(oElement.options[j].attributes["value"].specified?oElement.options[j].value:oElement.options[j].text) + "&";
                                } else {
                                    formData += encodeURIComponent(oName) + "=" + encodeURIComponent(oElement.options[j].hasAttribute("value")?oElement.options[j].value:oElement.options[j].text) + "&";
                                }
                            }
                        }
                        break;
                    case "radio":
                    case "checkbox":
                        if (oElement.checked){
                            formData += encodeURIComponent(oName) + "=" + encodeURIComponent(oValue) + "&";
                        }
                        break;
                    case "file":
                        break;
                    case undefined:
                        break;
                    case "reset":
                        break;
                    case "button":
                        break;
                    case "submit":
                        if (hasSubmit === false) {
                            formData += encodeURIComponent(oName) + "=" + encodeURIComponent(oValue) + "&";
                        }
                        hasSubmit = true;
                        break;
                    default:
                        formData += encodeURIComponent(oName) + "=" + encodeURIComponent(oValue) + "&";
                }
            }
        }
        formData = formData.substr(0, formData.length - 1);

        if (!url || url == null) {
            url = oForm.action;
        }
        if (url.indexOf("?") < 0) {
            url = url + "?" + formData;
        } else {
            url = url + "&" + formData;
        }
        if (id && id != null) {
            url += "&random=" + (new Date()).getTime();
            DOMAssistant.$$(id).load(url, callback);
        } else {
            DOMAssistant.AJAX.post(url, callback);
        }
		this.logger.log();
    }
}
tv4.prepare();


// Logger
tv4.logger = {
    // default variables
    default_rsCI: "tv4-se",	 /* client ID */
    default_rsCG: "0",	 /* content group */
    default_rsDN: "http://secure-dk.imrworldwide.com/",	 /* data node */
    default_rsCC: 0,	 /* to turn on whether to check for existing cookie, 0=off 1=on */
    default_rsIP: 1,	 /* to turn on 'invisible pixel' option, 0=off 1=on */
    default_rsSI: "UrlJavascriptAction", /* page name or url */

    log: function(contentGroup, clickDest) {
        // setting defaults to page variables (if any)
        if (typeof(_rsCI) !== "undefined") {
            this.default_rsCI = _rsCI;
        }
        if (typeof(_rsCG) !== "undefined") {
            this.default_rsCG = _rsCG;
        }
        if (typeof(_rsDN) !== "undefined") {
            this.default_rsDN = _rsDN;
        }
        if (typeof(_rsCC) !== "undefined") {
            this.default_rsCC = _rsCC;
        }
        if (typeof(_rsIP) !== "undefined") {
            this.default_rsIP = _rsIP;
        }

        // using default if none was passed
        if (typeof(contentGroup) == "undefined") {
            contentGroup = this.default_rsCG;
        }
        if (typeof(clickDest) == "undefined") {
             clickDest = this.default_rsSI;
        } else {
            clickDest = escape(clickDest);
        }

        var _pixelSrc = this.default_rsDN + "cgi-bin/m?rnd=" + (new Date()).getTime();
        _pixelSrc  = _pixelSrc + "&ci=" + this.default_rsCI;
        _pixelSrc  = _pixelSrc + "&cg=" + escape(contentGroup);
        _pixelSrc  = _pixelSrc + "&cc=" + this.default_rsCC;
        _pixelSrc  = _pixelSrc + "&si=" + clickDest;
        _pixelSrc  = _pixelSrc + "&rp=" + escape(window.location);
        var _pixel  = new Image(1,1);
        _pixel.src = _pixelSrc;
    }
}
// ---
