﻿// Animated Text for Carousel Title Bar - added KS 09/12/09 - uses AJAX to get content

var http_request = false;
var size;
var speed_between_messages;
var text;
var done = 0;
var s = 0;
var change = 0;
var pulse = 0;
var loop = 0;
var time = 0;
var stop = false;

// get the page name in lower case without extension 
// note UNESCAPE removes %20 etc
var curpath = unescape(window.location.pathname);
var curpage = curpath.substring(curpath.lastIndexOf('/') + 1);
if (curpage == '' || curpage == null)
    curpage = 'default';
else
    curpage = curpage.split(".")[0].toLowerCase();

// remove spaces
// NOTE this only replaces FIRST occurrence
// curpage = curpage.replace(' ', '');
// we need to use regex to replace ALL
curpage = curpage.replace(/ /g, '');

var root = document.location.protocol + '//' + document.location.host;
var pn = document.location.pathname;
pn = pn.substring(0, pn.indexOf('/', 1));

// KS 15/02/10 in real life we dont want path name
// alert(root + pn);
if(document.location.host=="localhost") root = root + pn; 

function startcarouseltitle() {
    //if (!document.all) return // seems to be an IE-only thing - remove to make work in others
    // get page-specific text
    var p = root + '/carousel/titletext.xml';
    //alert(p);
    makeRequest(p, '');
}

function makeRequest(url, parameters) {
    http_request = false;

    if (window.XMLHttpRequest) { // Mozilla, Safari,...
        //alert("here1");
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {
            http_request.overrideMimeType('text/xml');
        }
    } else if (window.ActiveXObject) { // IE
        //alert("here2");
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            //alert("here3");
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {
                //alert("here4");
            }
        }
    }
    if (!http_request) {
        alert('Cannot create XMLHTTP instance');
        return false;
    }
    //alert("here5");
    http_request.onreadystatechange = process;
    http_request.open('GET', url + parameters, true);
    http_request.send(null);
}

function process() {


    if (http_request.readyState == 4) {
        if (http_request.status == 200) {

            // carousel title stuff
            // source XML looks like this...
            //  <carousel>
            //	    <pagename loop="1" delay="3000" size="16">
            //          <text value="Welcome to Gas Equipment Direct" effect="1" style="A"></text>
            //          <text value="Here you can buy anything you want" effect="2" style="B"></text>
            //          <text value="and we will beat any price" effect="3" style="C"></text>
            //          <text value="to bring you the best in fittings" effect="4" style="D"></text>
            //          <text value="Welcome to Gas Equipment Direct" effect="5" style="E"></text>
            //      </pagename>
            //  </carousel>
            var xmldoc = http_request.responseXML;

            var root = xmldoc.getElementsByTagName('carousel').item(0);
            if (root == null) {
                //alert('no root');
                return;
            }

            var section = null;
            
            if (root.getElementsByTagName(curpage) != null)
                section = root.getElementsByTagName(curpage).item(0);
                
            if (section == null) {
                //alert('no section1');
                section = root.getElementsByTagName('default').item(0);
            }
            
            if (section == null) return;

            var delay = section.getAttribute("delay");
            var fontsize = section.getAttribute("size");
            var repeat = section.getAttribute("loop");

            var rows = section.getElementsByTagName('text');
            if (rows == null) {
                //alert('no rows 1');
                return;
            }
            if (rows.length == 0) {
                //alert('no rows 2');
                return;
            }

            var arr = new Array(rows.length - 1);

            for (i = 0; i < rows.length; i++) {
                var item = rows.item(i);
                var value = item.getAttribute("value");
                arr[i] = value;
                var effect = item.getAttribute("effect");
                var style = item.getAttribute("style");
            }

            size = fontsize;
            speed_between_messages = delay;   //in miliseconds
            text = arr;
            loop = repeat;

            startmotor(0);
        }
        else {
            // KS do not show alert for now
//            alert('There was a problem with the request...state ' +
//                  http_request.readyState + ', status ' + http_request.status + ' ' + http_request.statusText + '     ' + root);
        }
    }
}

function startmotor(p) {
    if (stop == true) return;
    loop = motor(p);
    if (window.time) { clearInterval(time) }
    if (done == text[s].length) {
        if (stop != true) {
            done = 0;
            change = 1;
            pulse = 0;
            time = setTimeout("startmotor(" + (p + 1) + ")", speed_between_messages);
        }
    } else {
        time = setTimeout("startmotor(" + (p + 1) + ")", 50);
    }
}

function motor(p) {
    var output = "";
    for (w = 0; w < text[s].length - done + 1; w++) {
        q = calc(w / 2 + p, 16);
        if (q > size - 0.5)
        { done++; }
        if (q < 5) {
            pulse++;
            if (pulse > 1) {
                pulse = 0;
                if (change == 1) {
                    change = 0;
                    s++;
                    if (s == text.length) { s = 0; stop = true; return; }
                    p = 0;
                    if (window.loop) { clearInterval(loop) }
                    loop = motor();
                }
            }
        }
        output += "<font style='font-size: " + q + "pt'>" + text[s].substring(w, w + 1) + "</font>";
    }
    for (k = w; k < done + w; k++) {
        output += "<font style='font-size: " + size + "pt'>" + text[s].substring(k, k + 1) + "</font>";
    }
    try {
        idee.innerHTML = output; // TODO not working for FireFox
        //alert(curpage + "-" + idee.innerHTML);
    } catch (e) {
        // catch for e.g. FireFox
        document.getElementById('idee').innerHTML = output;
        //alert(curpage + "-" + e);
    }

}

function calc(i, length) {
    return (size * Math.abs(Math.sin(i / (length / 3.14))));
}






