﻿/*
    must be included in every page, both public and private.
    contains only generic methods that are always and certainly needed in (almost) every page.
    SINCE PRIVATE PAGES DO NOT INCLUDE JS FRAMEWORKS, THE $ FUNCTION IS NOT DEFINED HERE AND SHOULDN'T BE USED
*/

/* GOOGLE ANALYTICS */

function IncludeGA() {
    var scriptGA = document.createElement('script');
    scriptGA.type = 'text/javascript';
    scriptGA.src = 'http://www.google-analytics.com/urchin.js';   
    document.getElementsByTagName('head')[0].appendChild(scriptGA);
    
    try {
        tbInit(1);
    } catch (e) {
        //
    }
}

function tryGA(Path) {
    Path = Path || '';
    setTimeout('doGA(\'' + Path + '\')', 100);
}

function doGA(Path) {
    try {
        _uacct = 'UA-1833604-1';
        urchinTracker(Path);
    } catch(e) {
        //
    }
}

/* ADSERVER */

var AdsDivempty = '';

function DecodeAds(htmltodisplay, divtowrite) {
    if (htmltodisplay == '' || htmltodisplay == null) {
        switch (divtowrite) {
            case 'divLeaderboard':
                AdsDivempty = 'divLeaderboard';
                break;
            case 'divLeftBanner':
                if (AdsDivempty != '') {
                    document.getElementById('divLeaderboard').innerHTML = '';
                    document.getElementById('divLeftBanner').innerHTML = '';
                    document.getElementById('divTopBanner').style.display = 'none';
                    AdsDivempty = '';
                } else {
                    showAd(9, 'divLeftBanner', '', 'divAds2');
                    document.getElementById('divTopBanner').style.display = 'block';
                }
                break;
            case 'divSkyScraper':
                document.getElementById(divtowrite).innerHTML = htmltodisplay;
                break;
        }
    } else {
        if (divtowrite == 'divLeftBanner' && AdsDivempty != '') {
            showAd(5, 'divLeaderboard', '', 'divAds1');
            AdsDivempty = '';
        }
        document.getElementById(divtowrite).innerHTML = htmltodisplay;
        if (divtowrite != 'divSkyScraper')
            document.getElementById('divTopBanner').style.display = 'block';
    }   
    if (divtowrite == 'divLeaderboard')
        onAdsUpdate.fire();
}

function showAd(zoneId, destDiv, channel, divApp) {
    var m3_u = (location.protocol == 'https:' ? 'https://ads.ciaobelli.com/www/delivery/ajs.php' : 'http://ads.ciaobelli.com/www/delivery/ajs.php');
    var m3_r = Math.floor(Math.random() * 99999999999);
    if (!document.MAX_used)
        document.MAX_used = ',';
    var src = m3_u + '?zoneid=' + zoneId + '&cb=' + m3_r + '&source=' + channel + '&destdiv=' + destDiv + '&loc=' + escape(window.location);    
    if (document.MAX_used != ',')
        src += '&exclude=' + document.MAX_used;
    if (document.referrer)
        src += '&referer=' + escape(document.referrer);
    if (document.context)
        src += '&context=' + escape(document.context);
    if (document.mmm_fo)
        src += '&mmm_fo=1';
    var scriptAd = document.createElement('SCR' + 'IPT');
    scriptAd.type = 'text/javascript';
    scriptAd.src = src;
    document.getElementById(divApp).innerHTML = '';
    document.getElementById(divApp).appendChild(scriptAd);
}

function handlePageAds(banners, channel) {
    channel = channel || '';
    if (banners.leader) {
        if (banners.sky)
            onAdsUpdate.subscribe(function(type, args) { showAd(7, 'divSkyScraper', channel, 'divAds3'); });
        if (banners.small)
            onAdsUpdate.subscribe(function(type, args) { showAd(8, 'divLeftBanner', channel, 'divAds2'); });
        showAd(6, 'divLeaderboard', channel, 'divAds1');
    } else {
        if (banners.sky)
            showAd(7, 'divSkyScraper', channel, 'divAds3');
        if (banners.small)
            showAd(8, 'divLeftBanner', channel, 'divAds2');
    }
}

/* ARRAY */

Array.prototype.append = function(arrayToAppend) {
	for (var i = 0; i < arrayToAppend.length; i++)
	    this.push(arrayToAppend[i]);
}

Array.prototype.appendAt = function(arrayToAppend, firstIndex) {
	for (var i = 0; i < arrayToAppend.length; i++)
	    this[firstIndex + i] = arrayToAppend[i];
}

/* STRINGS */

String.prototype.rtrim = function(chars) {
    chars = chars || '\\s';
    return this.replace(new RegExp('[' + chars + ']+$', 'g'), '');
}

String.prototype.ltrim = function(chars) {
    chars = chars || '\\s';
    return this.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

String.prototype.trim = function(chars) {
    return this.ltrim(chars).rtrim(chars);
}

function semicoloUrlEncode(message) {
    return message.replace(/;/g,'%3B');
}

function getLocation() {
    var loc = window.location.href;
    loc = loc.replace(window.location.pathname, '');
    loc = loc.replace(window.location.hash, '');
    loc = loc.replace(window.location.search, '');
    return loc;
}

/* JS FIXED LAYER */

function FixedLayerManager(id) {
	this.id = id;
	this.timeout = null;
	this.layers = new Array();
}
FixedLayerManager.prototype.addLayers = function() {
	if (arguments.length == 0)
		return;
	var args = (arguments[0] instanceof Array) ? arguments[0] : arguments;
	for (var i = 0; i < args.length; i++) {
		var domLayer = (typeof(args[i]) == 'object') ? args[i] : document.getElementById(args[i]);
		if (!domLayer)
			return;
		var layer = new Array();
		layer['domLayer'] = domLayer;
		layer['originalTop'] = parseInt(domLayer.style.top);
		this.layers.push(layer);
	}
}
FixedLayerManager.prototype.init = function() {
	if (navigator.userAgent.match(/msie 6\.0/i) == null)
		return false;
	window.onscroll = new Function(this.id + '.onScrollHandler();');
	this.addLayers.apply(this, arguments);
	return true;
}
FixedLayerManager.prototype.onScrollHandler = function() {
	for (i = 0; i < this.layers.length; i++) {
		this.layers[i].domLayer.style.top = this.layers[i].originalTop + getPageScrollTop();
	}
	document.getElementById('sfondoFreeze').style.height = Math.max(document.documentElement.clientHeight, document.documentElement.scrollHeight);
	document.getElementById('sfondoFreeze').style.top = document.body.scrollTop;
}
function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function() {
            if (oldonload)
                oldonload();
            func();
        }
    }
}
flm = new FixedLayerManager('flm');
function enableDisableFixedLayers(enable) {
    if (enable) {
		if (document.getElementById('sfondoFreeze') != null)
	        addLoadEvent(function() {
	            flm.init('newPopupPanel', 'panelPopupPhotoUpload', 'menuNavigazione', 'panelPopupA');
	        });
    } else {
        flm.layers = new Array();
    }
}
enableDisableFixedLayers(true);

/* EFFECTS */

function popupFixScroll(div, open) {
    if (open && div.style.position != 'absolute' && div.offsetHeight + 90 > document.documentElement.clientHeight) {
        div.style.position = 'absolute';
        enableDisableFixedLayers(false);
        div.style.top = parseInt(getPageScrollTop() + 90) + 'px';
    }
    if (!open && div.style.position == 'absolute') {
        div.style.position = '';
        enableDisableFixedLayers(true);
        div.style.top = '90px';
    }
}
function getTextWidth(node, text, createCopy) {
    var textWidth = 0;
    if (createCopy) {
        var nodeCopy = node.cloneNode(false);
        nodeCopy.id = 'textwidthappo';
        nodeCopy.style.visibility = 'hidden';
        nodeCopy.innerHTML = text;
        node.parentNode.appendChild(nodeCopy);
        textWidth = parseInt(nodeCopy.offsetWidth);
        node.parentNode.removeChild(nodeCopy);
        nodeCopy = null;
    } else {
        node.innerHTML = text;
        textWidth = parseInt(node.offsetWidth);
    }
    return textWidth;
}

var fx_trans = typeof(Fx) === 'undefined' ? null : new Fx.Transition(Fx.Transitions.Circ.easeOut);
var fx_duration = 600;
var fx_fps = 60;

var commonfxScroll = typeof(Fx) === 'undefined' ? null : new Fx.Scroll(window, {transition: fx_trans, duration: fx_duration, fps: fx_fps});

function enableSoftScroll(idarray) {
    if (!idarray || idarray.length == 0)
        return;
    var objarray = new Array();
    for (var i = 0; i < idarray.length; i++) {
        if (!document.getElementById(idarray[i]))
            continue;
        objarray.push(document.getElementById(idarray[i]));
    }
    new SmoothScroll({links: objarray, transition: fx_trans, duration: fx_duration, fps: fx_fps});
}

var collapsers = new Array;

function createCollapsers(objarray) {
    for (var i = 0; i < objarray.length; i++) {
        collapsers.push({id: objarray[i].ControlId, trans: new Fx.Slide(objarray[i].ControlId + '_content', {duration: 400, transition: new Fx.Transition(Fx.Transitions.Sine.easeInOut)})});
        if (objarray[i].StartCollapsed)
            collapsers[collapsers.length - 1].trans.hide();
        eval('document.getElementById(objarray[' + i + '].ControlId + \'_title\').onclick = function(e) { doCollapse(this, e, ' + (collapsers.length - 1) + '); };');
    }
}

function getCollapserTransition(id) {
    for (var i = 0; i < collapsers.length; i++) {
        if (collapsers[i].id == id)
            return collapsers[i].trans;
    }
    return null;
}

function resetCollapser(id) {
    var ct = getCollapserTransition(id);
    if (!ct) return;
    ct.show();
}

function doCollapse(obj, e, i) {
    e = new Event(e);
    collapsers[i].trans.toggle();
    var arw = obj.getElementsByTagName('DIV')[0];
    arw.className = (collapsers[i].trans.open ? 'arrow_right' : 'arrow_down');
    var hid1 = document.getElementById(obj.id.replace('_title', '_show'));
    var hid2 = document.getElementById(obj.id.replace('_title', '_hide'));
    var hid3 = document.getElementById(obj.id.replace('_title', '_label'));
    if (hid1 != null && hid2 != null && hid3 != null)
        document.getElementById(hid3.value).innerHTML = (collapsers[i].trans.open ? hid1 : hid2).value;
    e.stop();
    var hid4 = document.getElementById(obj.id.replace('_title', '_eval'));
    if (hid4 != null)
        eval(hid4.value.replace('{0}', (collapsers[i].trans.open ? 'true' : 'false')));
}

// nasconde gli oggetti flash/java, a meno che non abbiano l'attributo "rel" settato a "nohide"
function showHideFlashObjects(show) {
    var objs = document.getElementsByTagName('OBJECT');
    var embs = document.getElementsByTagName('EMBED')
    for (var i = 0; i < objs.length; i++) {
        if (!objs[i])
            continue;
        if (objs[i].getAttribute('rel') == 'nohide')
            continue;
        objs[i].style.visibility = (show ? 'visible' : 'hidden');
    }
    for (var i = 0; i < embs.length; i++) {
        if (!embs[i])
            continue;
        if (embs[i].getAttribute('rel') == 'nohide')
            continue;
        embs[i].style.visibility = (show ? 'visible' : 'hidden');
    }
}

function setOverFlowY(obj, value) {
    var navi = navigator.userAgent.toLowerCase();
    if ((navi.indexOf('safari') != -1) && (navi.indexOf('mac') != -1))
        obj.style.overflow = value;
    else
        obj.style.overflowY = value;
}

function PreloadImages() {
    var d = document;
    if (d.images) {
        if (!d.MM_p) d.MM_p = new Array();
        var i, j = d.MM_p.length, a = PreloadImages.arguments;
        for(i = 0; i < a.length; i++)
        if (a[i].indexOf("#") != 0) {
            d.MM_p[j] = new Image;
            d.MM_p[j++].src = a[i];
        }
    }
}

function handleEnter(event, controllo, reload) {
    var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
    if (keyCode == 13) {
        ctl = document.getElementById(controllo);
        if (ctl.getAttributeNode("onclick").value != null) {
            if (typeof(ctl.onclick) === 'function')
                ctl.onclick();
            else
                eval(ctl.getAttributeNode("onclick").value); // qui non dovrebbe passare, ma non si sa mai
        }
        return reload;
    }
    return true;
}

function SetFocus(controllo) {
    document.getElementById(controllo).focus();
}

function setPageTitle(title) {
    document.title = title;
}

function showHideLayers() {
    var isToolTip = false;
    var i, p, v, obj, args = showHideLayers.arguments;
    for (i = 0; i < (args.length - 2); i += 3) {
        if (args[i] == 'toolTip') isToolTip = true;
        with (document)
        if (getElementById && ((obj = getElementById(args[i])) != null)) {
            v = args[i + 2];
            if (obj.style) {
                obj = obj.style;
                v = (v == 'show') ? 'visible' : ((v == 'hide') ? 'hidden' : v);
            }
            obj.visibility = v;
        }
    }
    if (!isToolTip)
        if (document.getElementById('sfondoFreeze').style.visibility == 'visible') {
            var altezza = 0;
            if (document.documentElement.clientHeight > document.documentElement.scrollHeight)
                altezza = document.documentElement.clientHeight;
            else
                altezza = document.documentElement.scrollHeight;
            document.getElementById('sfondoFreeze').style.height = altezza;
            window.onscroll = function () {
                document.getElementById('sfondoFreeze').style.top = document.body.scrollTop;
            };
            document.getElementById('sfondoFreeze').style.top = document.body.scrollTop;
        }
}

var cancelFade = false;

function FadeObjB(ObjId, InOut, Time, Steps, FinalOpacity) {
    cancelFade = false;
    DoFadeOneB(ObjId, InOut.toLowerCase(), Math.round(Time / Steps), 0, Steps, FinalOpacity);
}

function DoFadeOneB(ObjId, InOut, TimeOut, Step, Steps, FinalOpacity) {
    if (Step < Steps && !cancelFade) {
        if (InOut == 'in') {
            SetOpacity(ObjId, Step * Math.round(FinalOpacity / Steps));
        } else {
            SetOpacity(ObjId, (Steps - Step) * Math.round(FinalOpacity / Steps));
        }
        Step++;
        setTimeout('DoFadeOneB(\'' + ObjId + '\', \'' + InOut + '\', ' + TimeOut + ', ' + Step + ', ' + Steps + ', ' + FinalOpacity + ')', TimeOut);
    } else {
        SetOpacity(ObjId, (InOut == 'in' ? FinalOpacity : 0));
        cancelFade = false;
    }
}

function FadeObj(ObjId, InOut, Time, Steps) {
    cancelFade = false;
    DoFadeOne(ObjId, InOut.toLowerCase(), Math.round(Time / Steps), 0, Steps);
}

function DoFadeOne(ObjId, InOut, TimeOut, Step, Steps) {
    if (Step < Steps && !cancelFade) {
        if (InOut == 'in') {
            SetOpacity(ObjId, Step * Math.round(100 / Steps));
        } else {
            SetOpacity(ObjId, (Steps - Step) * Math.round(100 / Steps));
        }
        Step++;
        setTimeout('DoFadeOne(\'' + ObjId + '\', \'' + InOut + '\', ' + TimeOut + ', ' + Step + ', ' + Steps + ')', TimeOut);
    } else {
        SetOpacity(ObjId, (InOut == 'in' ? 100 : 0));
        cancelFade = false;
    }
}

function FadeObjs(OldObjId, NewObjId, Time, Steps) {
    cancelFade = false;
    DoFade(OldObjId, NewObjId, Math.round(Time / Steps), 0, Steps);
}

function DoFade(OldObjId, NewObjId, TimeOut, Step, Steps) {
    if (Step < Steps && !cancelFade) {
        SetOpacity(OldObjId, (Steps - Step) * Math.round(100 / Steps));
        SetOpacity(NewObjId, Step * Math.round(100 / Steps));
        Step++;
        setTimeout('DoFade(\'' + OldObjId + '\', \'' + NewObjId + '\', ' + TimeOut + ', ' + Step + ', ' + Steps + ')', TimeOut);
    } else {
        SetOpacity(OldObjId, 0);
        SetOpacity(NewObjId, 100);
        ResetAfterFade();
        cancelFade = false;
    }
}

function SetOpacity(ObjId, Value) {
    var Obj = document.getElementById(ObjId);
    if (!Obj) return;
    Obj.style.filter = 'alpha(opacity=' + Value + ')';
    Obj.style.MozOpacity = Value / 100;
    Obj.style.opacity = Value / 100;
}

var browser = navigator.appName;
var agt = navigator.userAgent.toLowerCase();

/*
    NOTA
    - ParentIds può essere un Id oppure un'array di Id.
    - In ParentIds può essere specificato anche 'document'.
*/
function ToggleNastyObjectsForIE(ParentIds, Action) {
    if (agt.indexOf('msie 6.') != -1 && browser == 'Microsoft Internet Explorer') {
        if (!isArray(ParentIds)) {
            var tmpStr = ParentIds;
            ParentIds = new Array();
            ParentIds[0] = tmpStr;
        }
        var i;
        switch (Action.toUpperCase()) {
            case 'H':
            case 'HIDE': {
                for (i = 0; i < ParentIds.length; i++)
                    HideElems(ParentIds[i], 'SELECT');
                break;
            }
            case 'S':
            case 'SHOW': {
                for (i = 0; i < ParentIds.length; i++)
                    ShowElems(ParentIds[i], 'SELECT');
                break;
            }
        }
    }
}

function isArray() {
    if (typeof arguments[0] == 'object') {
        var criterion = arguments[0].constructor.toString().match(/array/i);
        return (criterion != null);
    }
    return false;
}

var gHiddenElems = null;

function ParentIdElemTagIndex(ParentId, ElemTag, PerformInit) {
    if (gHiddenElems == null) {
        if (PerformInit) {
            gHiddenElems = new Array();
            gHiddenElems[0] = new Array();
        }
        return 0;
    } else {
        for (var j = 0; j < gHiddenElems.length; j++) {
            if (gHiddenElems[j][0] == ParentId && gHiddenElems[j][1] == ElemTag) {
                return j;
                break;
            }
        }
        if (PerformInit) {
            gHiddenElems[gHiddenElems.length] = new Array();
            return gHiddenElems.length - 1;
        } else {
            return -1;
        }
    }
}

function HideElems(ParentId, ElemTag) {
    var curId = ParentIdElemTagIndex(ParentId, ElemTag, true);
    gHiddenElems[curId][0] = ParentId;
    gHiddenElems[curId][1] = ElemTag;
    var Base = (ParentId == 'document' ? document : document.getElementById(ParentId));
    var AllElems = Base.getElementsByTagName(ElemTag);
    for (var k = 0; k < AllElems.length; k++) {
        if (!AllElems[k] || !AllElems[k].offsetParent) continue;
        if (AllElems[k].style.visibility == 'visible') {
            gHiddenElems[curId][gHiddenElems[curId].length] = AllElems[k];
            AllElems[k].style.visibility = 'hidden';
        }
    }
}

function ShowElems(ParentId, ElemTag) {
    var curId = ParentIdElemTagIndex(ParentId, ElemTag, false);
    if (curId < 0) return;
    for (var k = 2; k < gHiddenElems[curId].length; k++) {
        if (!gHiddenElems[curId][k] || !gHiddenElems[curId][k].offsetParent) continue;
        if (gHiddenElems[curId][k].style.visibility == 'hidden') {
            gHiddenElems[curId][k].style.visibility = 'visible';
        }
    }
    gHiddenElems.splice(curId, 1);
}

/* WEBMESSENGER */

function up_launchWM(userID, destinationUserID, destinationName) {
    up_localUserID = userID;
    window.open('webmessenger/wm_ads.aspx?strDestinationUserID=' + destinationUserID, 'WMWindow_' + up_replaceAlpha(userID) + '_' + up_replaceAlpha(destinationUserID), 'width=460,height=502,toolbar=0,directories=0,menubar=0,status=0,location=0,scrollbars=0,resizable=0');
}

function up_replaceAlpha(strIn) {
    var strOut = '';
    for (var i = 0; i < strIn.length; i++) {
        var cChar = strIn.charAt(i);
        if ((cChar >= 'A' && cChar <= 'Z') || (cChar >= 'a' && cChar <= 'z') || (cChar >= '0' && cChar <= '9')) {
            strOut += cChar;
        } else {
            strOut += '_';
        }
    }
    return strOut;
}

/* DOM */

function selectElementInSelect(selectId, elementValue, caseSensitive) {
    var sel = document.getElementById(selectId);
    if (!sel) return;
    if (caseSensitive == null) caseSensitive = false;
    var valMatch;
    for (var i = 0; i < sel.options.length; i++) {
        if (caseSensitive)
            valMatch = (sel.options[i].value == elementValue)
        else
            valMatch = (sel.options[i].value.toLowerCase() == elementValue.toLowerCase())
        if (valMatch) {
            sel.selectedIndex = i;
            return;
        }
    }
}

function getPageScrollTop() {
    var y1 = 0; var y2 = 0;
    if (document.documentElement)
        y1 = document.documentElement.scrollTop;
    if (document.body)
        y2 = document.body.scrollTop;
    return Math.max(y1, y2);
}

/* COOKIES */

function getCookie(name) {
    name += "=";
    var cookies = document.cookie.split(";");
    for(var i=0; i<cookies.length; i++)
    {
        var start = (cookies[i].charAt(0) == " ")? 1:0;
        var c = cookies[i].substr(start);

        if(!c.indexOf(name))
        {
                return unescape(c.substr(name.length));
                break;
        }
    }
    return null;
}

function setCookie(name, value, days) {
    if(!days) days = 365;
    var oToday = new Date();
    oToday.setTime(oToday.getTime() + (days * 24 * 60 * 60 * 1000));
    document.cookie = name + "=" + escape(value) + "; expires=" + oToday.toGMTString() + "; path=/";
}

//update session for public pages

function UpdateSessionPublic() {
    setInterval(function(){LoadControl.UpdateSession();}, 120000);
}