﻿var clxWidgetUrl;
var head = document.getElementsByTagName("head")[0];
var clxJsNode;
var clxCssNode;
var clxCssNode2;
var clxWidgetNode;
var clxGoogleCX;
var clxGoogleCOF = 'FORID:9';
var clxGoogleIE = 'UTF-8';
var clxWidgetTargetUrl;
var clxCountry;
var clxSearchTxt;

function ClxSwitchSkin() {
    //append default CSS
    clxCssNode = document.createElement('link');
    clxCssNode.type = 'text/css';
    clxCssNode.rel = 'stylesheet';
    clxCssNode.href = clxWidgetUrl + widgetConfig.model + '/clxWidget_' + widgetConfig.size + '.css';
    head.appendChild(clxCssNode);

    if (window.ActiveXObject) {
        clxCssNode.onload = function() {
            clxRenderWidget();
        }
    }

    return clxCssNode;
}

function ClxInject() {
    if (document.getElementById('clxReferrerLink').href.indexOf('http://web2.cylex.de') > -1)
    {
        clxCountry = 'D';
    }
    else if (document.getElementById('clxReferrerLink').href.indexOf('http://www.cylex-uk.co.uk') > -1)
    {
        clxCountry = 'GB';
    }
    else if (document.getElementById('clxReferrerLink').href.indexOf('http://www.cylex-tudakozo.hu') > -1)
    {
        clxCountry = 'HU';
    }
    else if (document.getElementById('clxReferrerLink').href.indexOf('http://www.cylex-romania.ro') > -1)
    {
        clxCountry = 'RO';
    }
    else if (document.getElementById('clxReferrerLink').href.indexOf('http://www.cylex.it') > -1)
    {
        clxCountry = 'I';
    }
    else if (document.getElementById('clxReferrerLink').href.indexOf('http://www.cylex-france.fr') > -1
        || document.getElementById('clxReferrerLink').href.indexOf('http://localhost') > -1)
    {
        clxCountry = 'F';
    }

    switch (clxCountry) {
        case 'D':
            clxWidgetUrl = 'http://webmastertools.cylex.de/widget/';
            clxWidgetTargetUrl = clxWidgetUrl + 'result.aspx';
            clxGoogleCX = '016729864569533560013:5agkikkhevy';
            clxSearchTxt = 'Suche';
            break;
        case 'GB':
            clxWidgetUrl = 'http://webmastertools.cylex-uk.co.uk/widget/';
            clxWidgetTargetUrl = clxWidgetUrl + 'result.aspx';
            clxGoogleCX = '014790016622746884844:dvf5wa9puzu';
            clxSearchTxt = 'Search';
            break;
        case 'HU':
            clxWidgetUrl = 'http://webmastertools.cylex-tudakozo.hu/widget/';
            clxWidgetTargetUrl = clxWidgetUrl + 'result.aspx';
            clxGoogleCX = '014790016622746884844:npqaty6zqic';
            clxSearchTxt = 'Keresés';
            break;
        case 'RO':
            clxWidgetUrl = 'http://webmastertools.cylex-romania.ro/widget/';
            clxWidgetTargetUrl = clxWidgetUrl + 'result.aspx';
            clxGoogleCX = '014790016622746884844:vn8wmm28zg0';
            clxSearchTxt = 'Căutare';
            break;
        case 'I':
            clxWidgetUrl = 'http://webmastertools.cylex.it/widget/';
            clxWidgetTargetUrl = clxWidgetUrl + 'result.aspx';
            clxGoogleCX = '014790016622746884844:lmgdfxjangs';
            clxSearchTxt = 'Cerca';
            break;
        case 'F':
            clxWidgetUrl = 'http://webmastertools.cylex-france.fr/widget/';
            clxWidgetTargetUrl = clxWidgetUrl + 'result.aspx';
            clxGoogleCX = '014790016622746884844:xaqommhtx6i';
            clxSearchTxt = 'Recherche';
            break;
        default:
            clxWidgetUrl = 'http://webmastertools.cylex.de/widget/';
            clxWidgetTargetUrl = clxWidgetUrl + 'result.aspx';
            clxGoogleCX = '016729864569533560013:5agkikkhevy';
            clxSearchTxt = 'Suche';
            break;
    }
    
    clxE = document.createElement('div')
    clxE.id = 'CylexWidgetNode';
    clxWidgetNode = clxE;    
    clxP = document.getElementById('clxReferrerLink');

    clxP.parentNode.appendChild(clxE);
    //append JavaScript
    clxJsNode = document.createElement('script');
    clxJsNode.type = 'text/javascript';
    
    //when ready:
    if (window.ActiveXObject && document.documentMode != 88) {
        clxJsNode.onreadystatechange = function() {
			if (clxJsNode.readyState == 'complete' || clxJsNode.readyState == 'loaded') {
                ClxSwitchSkin();
            }
        }
    }
	clxJsNode.src = clxWidgetUrl + 'widget_' + widgetConfig.language + '.js';
	head.appendChild(clxJsNode);
}

function ClxApplyConfig() {
    //try!
    if (typeof (clxCssNode2) == 'object') {
        head.removeChild(clxCssNode2);
    }

    //set CSS values from config
    style = 'form#clxPreview { color:' + widgetConfig.fontColor + ';background-color:' + widgetConfig.backgroundColor + '; }\n' +
            'form#clxPreview .clxFont { color:' + widgetConfig.fontColor + '; }\n' +
            'form#clxPreview a.clxLeft, a.clxRight { color:' + widgetConfig.fontColor2 + '; }\n' +
            'form#clxPreview a.clxLeft:hover, a.clxRight:hover { color:' + widgetConfig.fontColor + '; }\n' +
            'form#clxPreview a.clxActive { color:' + widgetConfig.fontColor + '; }\n' +
            'form#clxPreview input.clxSubmit { color:' + widgetConfig.fontColor + '; }\n';

    //hide phonebook for non-german widgets
    if (clxWidgetUrl != 'http://webmastertools.cylex.de/widget/')
    {
        style += 'form#clxPreview #ClxPhonebook { display:none; }';
        style += 'form#clxPreview #clxLabelPhonebook { display:none; }';        
    }
    
    clxCssNode2 = document.createElement('style');
    clxCssNode2.type = 'text/css';
    if (clxCssNode2.styleSheet) {
        //IE only
        clxCssNode2.styleSheet.cssText = style;        
    } else {
        //W3C
        var clxCssNode2Content = document.createTextNode(style);
        clxCssNode2.appendChild(clxCssNode2Content);
    }
    head.appendChild(clxCssNode2);
}

function ClxSuche() {
    var routing = document.getElementById('clxRouting');
    var suche = document.getElementById('clxSearch');
    if (routing.className == "clxOpen") {
        routing.className = "";
        suche.className = "clxOpen";
        ClxHideandShow();
    } else {
        routing.className = "clxOpen";
        suche.className = "";
    }
}

function ClxHideandShow() {
    if ((document.getElementById('ClxSitesearch').checked == true) || (document.getElementById('ClxWeb').checked == true)) {
        document.getElementById('clxSearchField').className = 'clxLarge';
        document.getElementById('clxCity').style.display = 'none';
        document.getElementById('clxCityLabel').style.display = 'none';
    } else {
        document.getElementById('clxSearchField').className = 'clxSmall';
        document.getElementById('clxCity').style.display = 'inline';
        document.getElementById('clxCity').className = 'clxSmall';
        document.getElementById('clxCityLabel').style.display = 'inline';
    }
}

function ClxDoSearch() {
    if (document.getElementById('clxRouting').className == "clxOpen") {
        //routing

        var path;
        var start = escape(document.clxPreview.clxFrom.value);
        var destination = escape(document.clxPreview.clxTo.value);
        //var start = encodeURI(document.clxPreview.clxFrom.value);
        //var destination = encodeURI(document.clxPreview.clxTo.value);
        switch (clxCountry) {
            case 'D':
                path = 'http://web2.cylex.de/stadtplan/routing/routing.asp?saddr=' + start + '&daddr=' + destination;
                break;
            case 'GB':
                path = 'http://www.cylex-uk.co.uk/route/routing.aspx?saddr=' + start + '&daddr=' + destination;
                break;
            case 'HU':
                path = 'http://www.cylex-tudakozo.hu/route/routing.aspx?saddr=' + start + '&daddr=' + destination;
                break;
            case 'RO':
                path = 'http://www.cylex-romania.ro/route/routing.aspx?saddr=' + start + '&daddr=' + destination;
                break;
            case 'I':
                path = 'http://www.cylex.it/route/routing.aspx?saddr=' + start + '&daddr=' + destination;
                break;
            case 'F':
                path = 'http://www.cylex-france.fr/route/routing.aspx?saddr=' + start + '&daddr=' + destination;
                break;
            default:
                break;
        }
        window.location.href = path;
    }
    else if (document.clxPreview.ClxSitesearch.checked) {
        //site search

        var name = encodeURI(document.clxPreview.clxSearchField.value.toLowerCase());
        var site;
        if (typeof (widgetConfig.site) != 'undefined' && widgetConfig.site != '') {
            site = widgetConfig.site;
        } else {
            site = document.domain.replace('www.', '');
        }
        var nn = "site:" + site + " " + name;
		var path = clxWidgetTargetUrl + "?cx=" + clxGoogleCX + "&cof=" + clxGoogleCOF + "&ie=" + clxGoogleIE + "&q=" + nn + "&sa=" + clxSearchTxt
		+ "&title=" + encodeURI(widgetConfig.title) + "&address=" + encodeURI(widgetConfig.address) + "&language=" + widgetConfig.language
		+ "&model=" + widgetConfig.model + "&bgcolor=" + escape(widgetConfig.backgroundColor) + "&color=" + escape(widgetConfig.fontColor)
		+ "&color2=" + escape(widgetConfig.fontColor2) + "&site=" + site;
		window.location.href = path;
    }
    else if (document.clxPreview.ClxWeb.checked) {
        //web search

        var name = encodeURI(document.clxPreview.clxSearchField.value.toLowerCase());

        var site;
        if (typeof (widgetConfig.site) != 'undefined' && widgetConfig.site != '') {
            site = widgetConfig.site;
        } else {
            site = document.domain.replace('www.', '');
        }
        
        var path = clxWidgetTargetUrl + "?cx=" + clxGoogleCX + "&cof=" + clxGoogleCOF + "&ie=" + clxGoogleIE + "&q=" + name + "&sa=" + clxSearchTxt
        + "&title=" + encodeURI(widgetConfig.title) + "&address=" + encodeURI(widgetConfig.address) + "&language=" + widgetConfig.language
		+ "&model=" + widgetConfig.model + "&bgcolor=" + escape(widgetConfig.backgroundColor) + "&color=" + escape(widgetConfig.fontColor)
		+ "&color2=" + escape(widgetConfig.fontColor2) + "&site=" + site;
        window.location.href = path;
    }
    else if (document.clxPreview.ClxCompany.checked)
    {
        //business directory search

        var name = document.clxPreview.clxSearchField.value != clxLanguage.inputQuery ? document.clxPreview.clxSearchField.value.toLowerCase() : '';
        var city = document.clxPreview.clxCity.value != clxLanguage.inputCity ? document.clxPreview.clxCity.value.toLowerCase() : '';
        var zip;
        name = name.replace('\r\n', '');
        name = name.replace('\n', '');
        name = name.replace('\r', '');
        name = name.replace('-', ' ');

        var regexZip = new RegExp("[0-9]{1,5}", "i");
        var regexCity = new RegExp("[a-zäöüß]+", "i");

        if (regexCity.test(city) == true && regexZip.test(city) == true) {
            // input is city and zip
            var regexSplit = /([0-9]{1,5})\w*([a-zäöüß ]+)/i;
            if (regexSplit.test(city)) {
                splitResult = regexSplit.exec(city);
                zip = splitResult[1];
                city = splitResult[2];
            } else {
                regexSplit = /^([a-zäöüß ]+)[^\w]*?([0-9]{1,5})$/i;
                splitResult = regexSplit.exec(city);
                zip = splitResult[2];
                city = splitResult[1];
            }
        } else if (regexZip.test(city) == true) {
            //input is zip code
            zip = city.replace(/^\s*|\s*$/g, "");
            zip = decodeURI(zip);
            city = "";
        }
        else {
            // input is city
            zip = "";
        }

        city = city.replace(/^\s*|\s*$/g, "");
        city = city.replace(/^[^a-zA-ZäöüÄÖÜ]*|[^a-zA-ZäöüÄÖÜß]*$/g, "");
        city = escape(city);

        name = escape(name);

        var path;
        
        switch (clxCountry)
        {
            case 'D':
                var country = 'd';
                var countryDir = "deutschland";

                city = city.replace(/ü/, "ue");
                city = city.replace(/ö/, "oe");
                city = city.replace(/ä/, "ae");
                city = city.replace(/&szlig;/, "ss");
                city = city.replace(/'/, "");
                city = city.replace(/""/, "");
                city = city.replace(/&uuml;/, "ue");
                city = city.replace(/&ouml;/, "oe");
                city = city.replace(/&auml;/, "ae");
                city = city.replace(/ß/, "ss");
                city = city.replace(/,/, "");
                city = city.replace(/;/, "");
                city = city.replace(/:/, "");
                city = city.replace(/!/, "");
                city = city.replace(/&/, "");
                city = city.replace(/#/, "");
                city = city.replace(/|/, "");
                city = city.replace(/</, "");
                city = city.replace(/>/, "");
                city = city.replace(/@/, "");
                city = city.replace(/ +/g, ' ').replace(/^\s+/g, '').replace(/\s+$/g, '');

                path = 'http://www.cylex.de/suche/' + countryDir + '/ort-' + city + '/plz-' + zip + '/l1cy1-d_ort1cy1-' + city + '-plz1cy1-' + zip + '_name1cy1-' + name + '-s1.html';
                break;
            case 'GB':
                if (city != '')
                {
                    path = 'http://www.cylex-uk.co.uk/' + city + '/' + name + '.html';
                }
                else
                {
                    path = 'http://www.cylex-uk.co.uk/' + name + '.html';
                }
                break;
            case 'HU':
                if (city != '')
                {
                    path = 'http://www.cylex-tudakozo.hu/' + city + '/' + name + '.html';
                }
                else
                {
                    path = 'http://www.cylex-tudakozo.hu/' + name + '.html';
                }
                break;
            case 'RO':
                if (city != '')
                {
                    path = 'http://www.cylex-romania.ro/' + city + '/' + name + '.html';
                }
                else
                {
                    path = 'http://www.cylex-romania.ro/' + name + '.html';
                }
                break;
            case 'I':
                if (city != '')
                {
                    path = 'http://www.cylex.it/' + city + '/' + name + '.html';
                }
                else
                {
                    path = 'http://www.cylex.it/' + name + '.html';
                }
                break;
            case 'F':
                if (city != '')
                {
                    path = 'http://www.cylex-france.fr/' + city + '/' + name + '.html';
                }
                else
                {
                    path = 'http://www.cylex-france.fr/' + name + '.html';
                }
                break;
            default:
                break;
        }
        
        window.location.href = path;
    }
    else if (document.clxPreview.ClxPhonebook.checked) {
        //phonebook (germany only)

        var country = 'deutschland';
        var dialcode = '0049';

        var name = document.clxPreview.clxSearchField.value != clxLanguage.inputQuery ? escape(document.clxPreview.clxSearchField.value.toLowerCase()) : '';
        var city = document.clxPreview.clxCity.value != clxLanguage.inputCity ? escape(document.clxPreview.clxCity.value.toLowerCase()) : '';

        name = name.replace('\n', '').replace(/\//g, '');
        city = city.replace('\n', '').replace(/\//g, '');

        var myregexp = /[a-z]/i;
        var match = new RegExp(myregexp);
        if (match.test(name) == true || name == "") {
            var path = "http://www.cylex-telefonbuch.de/telefonbuch-" + city + "/" + name + "/" + name + ".html";
            window.location.href = path;
        }
        else {
            var phonenumber = unescape(name).replace(/[^\d]/g, '');
            window.location.href = "http://www.cylex-telefonbuch.de/invers/" + phonenumber + "/s1.html";
        }
    }

}

function addLoadEvent(func)
{
    var oldonload = window.onload;
    if (typeof window.onload != 'function')
    {
        window.onload = func;
    }
    else
    {
        window.onload = function()
        {
            if (oldonload)
            {
                oldonload();
            }
            func();
        }
    }
}

addLoadEvent(ClxInject);
if (!window.ActiveXObject || document.documentMode == 88) {
    addLoadEvent(ClxSwitchSkin);
}
addLoadEvent(ClxApplyConfig);
