var isMobile = {
    Android: function() {
        return navigator.userAgent.match(/Android/i);
    },
    BlackBerry: function() {
        return navigator.userAgent.match(/BlackBerry/i);
    },
    iOS: function() {
        return navigator.userAgent.match(/iPhone|iPad|iPod/i);
    },
    Opera: function() {
        return navigator.userAgent.match(/Opera Mini/i);
    },
    Windows: function() {
        return navigator.userAgent.match(/IEMobile/i);
    },
    any: function() {
        return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows());
    }
};

function powerpage(l,k){
  var u = '';  
  u = document.activeElement.href;
  if(u != ''){
    window.location.href=u;
  } 
}
function powerpagemobile(l,k){   
  var u = '';  
  u = document.activeElement.href;
  if(u != ''){
    window.location.href=u;
  } 
}

function customerInfo(l,k){
  var u = '';  
  u = document.activeElement.href;
  if(u != ''){
    window.location.href=u;
  } 
}

function cmContact(customerNo, marketPlaceUrl, tlg, lg, details) {
	if (details == undefined) {
		details = '';
	}

	if (!tlg) {
		tlg='de';
	}
	if (!lg) {
		lg=0;
	}

	var mydetails=details;

	if (mydetails!='') {
		mydetails='&details='+escape(details);
		mydetails=mydetails.replace(/%u20AC/,"EUR");
	}

	kontaktwin=open('' + marketPlaceUrl + '/city/kontakt?tlg=' + tlg + '&lg=' + lg + '&kundennummer=' + customerNo + mydetails, 'contactwindow','width=580,height=540,scrollbars=yes');
}

function cmModuls(type, customerNo, marketplaceUrl, lg) {
	if (type == 'presents') {
		type = 'gutschein';
	}
	type = type.toLowerCase();
	var url='' + marketplaceUrl + '/home/' + type + '/' + customerNo + lg + '.html';
	gtwin=open(url, 'gutscheinwin', 'width=680,height=480,toolbar=yes,scrollbars=yes');
}


function makeIconsClickable() {
	var lists;
	var hrefs;
	var hrefSplit;
	lists = document.getElementById('mainAreaContentPadding').getElementsByTagName('li');

	for(var listNumber = 0; listNumber < lists.length; listNumber++) {
		hrefs = lists[listNumber].getElementsByTagName('a');
		if (hrefs.length == 1) {
			hrefSplit = hrefs[0].href.split(':');
			if (hrefSplit[0] == 'javascript') {
				document.getElementsByTagName('li')[listNumber].onclick = new Function('', hrefSplit[1]);
			} else {
				if (hrefs[0].target == '') {
					document.getElementsByTagName('li')[listNumber].onclick = new Function('', 'document.location.href=\'' + hrefs[0].href + '\'');
				} else {
					document.getElementsByTagName('li')[listNumber].onclick = new Function('', 'window.open(\'' + hrefs[0].href + '\', \'' + hrefs[0].target + '\');');
				}
			}
			document.getElementsByTagName('li')[listNumber].getElementsByTagName('a')[0].onclick = new Function('', 'return false;');
			document.getElementsByTagName('li')[listNumber].style.cursor = 'pointer';
		}
	}
}

/**
 * Texte für die Anzeige von Vorschauen zu Elementen.
 */
if (window.cm_Preview_Texts === undefined) {
    var cm_Preview_Texts = {
        title:           '%1$s',
        screenshotTitle: '%1$s',
        loading:         '',
        unavailable:     '',
        footerTitle:     ''
    };
}

/**
 * Klasse zum Anzeigen von Vorschauen zu Elementen.
 */
var cm_Preview = {
    /**
     * Objekt mit den IDs der Elemente die ausgeblendet werden und den
     * dazugehörigen Timeout IDs.
     * 
     * @type    {Object}
     */
    _elements: {},

    /**
     * Zähler für die automatisch generierten IDs.
     * 
     * @type    {Number}
     */
    _idCount: 1,

    /**
     * Objekt mit den URLs und den dazugehörigen Image Objekten.
     * 
     * @type    {Object}
     */
    _images: {},

    /**
     * Das standard Prefix für die IDs und CSS Klassen.
     * 
     * @type    {String}
     */
    defaultPrefix: 'homepage',

    /**
     * Liefert die Position des Elements im sichtbaren Bereich und die Größe des
     * sichtbaren Bereichs.
     * 
     * @param   {HTMLElement}   forElement  Das Element desen Position berechnet
     *                                      wird.
     * 
     * @return  {Object}    Der linke und obere Abstand des Elements und die
     *                      Breite und Höhe des Bereichs.
     */
    _getPosition: function(forElement) {
        /* 
         * Position im sichtbaren Bereich
         */
        var left = 0, top = 0;

        if (forElement.getBoundingClientRect !== undefined) {
            var rect = forElement.getBoundingClientRect();
            left = rect.left;
            top  = rect.top;
        } else {
            var element = forElement;
            do {
                top  += element.offsetTop  || 0;
                left += element.offsetLeft || 0;

                // Safari fix
                if (element.offsetParent == document.body) {
                    if (element.style.position == 'absolute') {
                        break;
                    }
                }

                element = element.offsetParent;
            } while (element);

            element = forElement;
            do {
                if (!window.opera || element.tagName == 'BODY') {
                    top  -= element.scrollTop  || 0;
                    left -= element.scrollLeft || 0;
                }
                element = element.parentNode;
            } while (element);
        }

        /* 
         * Größe des sichtbaren Bereichs.
         */
        var htmlElement = document.getElementsByTagName('html')[0];
        var width = htmlElement.clientWidth;
        var height = htmlElement.clientHeight;

        if (window.opera) {
            height = window.innerHeight;
            width = window.innerWidth;

            /* 
             * Scrollbar Breite abziehen
             */
            if (htmlElement.clientWidth > width) {
                height -= 16;
            }
            if (htmlElement.clientHeight > height) {
                width -= 16;
            }
        } 

        return {
            left:   left,
            top:    top,
            width:  width,
            height: height
        };
    },

    /**
     * Liefert das Prefix.
     * 
     * @param   {String}    prefix  Das übergebene Prefix.
     * 
     * @return  {String}    Das fertige Prefix.
     */
    _getPrefix: function(prefix) {
        if (prefix === undefined) {
            prefix = this.defaultPrefix;
        }
        if (prefix !== null && prefix.length !== 0) {
            prefix += '_';
        }

        return prefix;
    },

    /**
     * Blendet eine Vorschau zu einem Element ein.
     * 
     * @param   {HTMLElement}   element Das Element zu dem die Vorschau
     *                                  angezeigt wird.
     * @param   {String}        image   Die URL des Vorschau Bildes.
     * @param   {String}        url     Die URL von der die Vorschau stammt.
     * @param   {String}        prefix  Das Prefix für die IDs und CSS Klassen.
     */
    show: function(element, image, url, prefix) {
        if (image !== null && this._images[image] === undefined) {
            this._images[image] = new Image();
            this._images[image].src = image;
        }
        if (element.id === '') {
            element.id = 'cm_preview_' + this._idCount++;
        }

        if (this._elements[element.id] !== undefined) {
            window.clearTimeout(this._elements[element.id]);
            this._elements[element.id] = undefined;
        }

        prefix = this._getPrefix(prefix);

        var check = document.getElementById(prefix + 'preview_' + element.id);
        if (check !== null) {
            return false;
        }

        /* 
         * Texte für die Vorschau
         */
        var titleUrl = url;
        if (titleUrl.length > 25) {
            titleUrl = titleUrl.substr(0, 22) + '...';
        }
        var shortTitle = cm_Preview_Texts.title.replace('%1$s', titleUrl);
        var title = cm_Preview_Texts.title.replace('%1$s', url);
        var screenshotTitleText = cm_Preview_Texts.screenshotTitle.replace('%1$s', url);
        var loading = cm_Preview_Texts.loading;
        if (image === null) {
            loading = cm_Preview_Texts.unavailable;
        }
        var footerTitle = cm_Preview_Texts.footerTitle;

        /* 
         * HTML aufbauen
         */
        var outer = document.createElement('div');
        outer.id = prefix + 'preview_' + element.id;
        outer.className = prefix + 'preview';
        outer.style.visibility = 'hidden';
        outer.style.top = 0;
        outer.style.left = 0;
        element.appendChild(outer);

        var inner = document.createElement('div');
        inner.className = prefix + 'preview_inner';
        outer.appendChild(inner);

        var titleOuter =  document.createElement('div');
        titleOuter.className = prefix + 'preview_title';
        inner.appendChild(titleOuter);

        var titleInner = document.createElement('span');
        titleInner.className = prefix + 'preview_title_inner';
        titleInner.title = title;
        titleInner.innerHTML = shortTitle;
        titleOuter.appendChild(titleInner);

        var screenshotOuter = document.createElement('div');
        screenshotOuter.className = prefix + 'preview_screenshot';
        inner.appendChild(screenshotOuter);

        var screenshotInner = document.createElement('div');
        screenshotInner.className = prefix + 'preview_screenshot_inner';
        screenshotOuter.appendChild(screenshotInner);

        var screenshotTitle = document.createElement('span');
        screenshotTitle.title = screenshotTitleText;
        screenshotTitle.innerHTML = loading;
        screenshotInner.appendChild(screenshotTitle);

        var footerOuter = document.createElement('div');
        footerOuter.className = prefix + 'preview_footer';
        inner.appendChild(footerOuter);

        var footerInner = document.createElement('span');
        footerInner.className = prefix + 'preview_footer_inner';
        footerInner.title = footerTitle;
        footerInner.innerHTML = footerTitle;
        footerOuter.appendChild(footerInner);

        /* 
         * Bild anzeigen
         */
        if (image !== null) {
            var instance = this;
            var displayImage = function() {
                screenshotTitle.removeChild(screenshotTitle.firstChild);
                screenshotTitle.style.backgroundImage = 'url(\'' + instance._images[image].src + '\')';
                inner.className = prefix + 'preview_inner';
            };

            if (this._images[image].complete !== true) {
                this._images[image].onload = function() {
                    this.onload = function() {};
                    displayImage();
                };
                inner.className += ' ' + prefix + 'preview_loading';
            } else {
                displayImage();
            }
        }

        /* 
         * Position ermitteln
         */
        var position = this._getPosition(element);

        var height = outer.style.height;
        if (window.getComputedStyle !== undefined) {
            var css = window.getComputedStyle(outer, null);
            height = css ? css.height : null;
        } else if (outer.currentStyle !== undefined) {
            height = outer.currentStyle.height;
        }
        if (height === 'auto') {
            height = null;
        }
        height = parseInt(height, 10);

        if (position.top > position.height - position.top) {
            outer.className += ' ' + prefix + 'preview_top';
        }

        outer.style.visibility = '';
        outer.style.top = '';
        outer.style.left = '';
    },

    /**
     * Blendet die Vorschau wieder aus.
     * 
     * @param   {HTMLElement}   element Das Element zu dem die Vorschau
     *                                  angezeigt wird.
     * @param   {String}        prefix  Das Prefix für die IDs und CSS Klassen.
     */
    hide: function(element, prefix) {
        prefix = this._getPrefix(prefix);

        var instance = this;
        this._elements[element.id] = window.setTimeout(
            function() {
                var preview = document.getElementById(prefix + 'preview_' + element.id);
                if (preview !== null) {
                    preview.parentNode.removeChild(preview);
                }
                instance._elements[element.id] = undefined;
            },
            250
        );
    }
};