/**
 * Resource      Elsevier.CacheSet.CSM.9
 * Source        Local
 **/


csm = {
    _articleUrl: '/article/json_articles.aspx',

    /* Generic Functions */
    _createTransport: function() {
        if (typeof XMLHttpRequest != "undefined") {
            return new XMLHttpRequest();
        }
        else if (typeof ActiveXObject != "undefined") {
            var http = null;
            try {
                http = new ActiveXObject("MSXML2.XmlHttp.6.0");
                return http;
            }
            catch (ex) {
                try {
                    http = new ActiveXObject("MSXML2.XmlHttp.3.0");
                    return http;
                }
                catch (ex2) {
                    throw Error("Cannot create XHR object");
                }
            }
        }
    },

    _getCachedValue: function(cid) {
        var cobj = $('__polymer.cache.' + cid);

        if (cobj == null)
            return null;
        else
            return cobj.value;
    },

    _saveCacheValue: function(v, cid) {
        var cid = '__polymer.cache.' + cid;

        var cin = document.createElement('input');
        cin.id = cid;
        cin.value = v;
        cin.style.position = 'absolute';
        cin.style.top = '-2000px';
        cin.style.display = 'none';

        document.body.appendChild(cin);
    },

    /* Bookmarking */
    social: function(bookmarkurl) {
        var feats = 'directories=0,height=420,location=0,menubar=0,status=0,titlebar=0,toolbar=0,width=840';

        window.open(bookmarkurl, null, feats, false);
        return false;
    },

    /*Events section*/
    _eventsUrl: '/events/_getEvents.aspx',
    _monthsUrl: '/events/_getMonths.aspx',
    _yearsUrl: '/events/_getYears.aspx',

    _pnlEventsId: 'pnlEvents',
    _pnlEvents: null,

    _pnlLoadingId: 'pnlLoading',
    _pnlLoading: null,

    _datePickerMonth: null,
    _datePickerYear: null,
    _thisYear: null,

    _availableMonths: null,
    _availableYears: null,

    _btnMonths: null,
    _btnPrevYear: null,
    _btnNextYear: null,

    _delay: 1000,    /* 750 milliseconds seems to be the minimum delay necessary */

    /* Only works with contiguous years */
    eventsInit: function(containerId, month, year) {
        var datePicker = $(containerId);
        datePicker.style.display = 'block';
        var links = datePicker.getElementsByTagName('a');

        csm._pnlEvents = $(csm._pnlEventsId);
        csm._pnlLoading = $(csm._pnlLoadingId);
        if (csm._pnlLoading) csm._pnlLoading.style.display = 'block';

        csm._datePickerMonth = month;
        csm._datePickerYear = year;
        csm._thisYear = year;

        csm._btnMonths = new Array();
        var monthsCounter = 0;

        for (var i = 0; i < links.length; i++) {
            var link = links[i];

            if (link.className.indexOf('prevYear') != -1) {
                csm._btnPrevYear = link;
                csm._btnPrevYear.onclick = csm._clickPrevYear;
            }

            if (link.className.indexOf('nextYear') != -1) {
                csm._btnNextYear = link;
                csm._btnNextYear.onclick = csm._clickNextYear;
            }

            if (link.className.indexOf('Year') == -1) {
                csm._btnMonths[monthsCounter] = link;
                csm._btnMonths[monthsCounter].onclick = csm._clickMonth;
                monthsCounter++;
            }
        }

        /*csm._availableYears = new Array();*/
        /*csm._availableMonths = new Array();*/

        csm._getYears();
        csm._getMonths(csm._datePickerYear);

        setTimeout(function() {
            csm._selectPrevYear();
            csm._selectNextYear();
            csm._checkMonth();
        }, csm._delay);

        /* The following depend on _checkMonth */
        setTimeout(function() {
            csm._selectMonth(false);
            csm.getEvents(csm._datePickerMonth, csm._datePickerYear);
        }, csm._delay * 1.5);
    },

    _checkMonth: function() {
        if (!csm._inArray(csm._availableMonths, csm._datePickerMonth)) {
            if (csm._datePickerMonth < 12) {
                csm._datePickerMonth++;
            } else {
                csm._datePickerMonth = 1;
            }

            this._checkMonth();
        } else {
            return;
        }
    },

    _selectMonth: function(onClick) {
        for (var i = 0; i < csm._btnMonths.length; i++) {
            var month = csm._btnMonths[i];

            month.className = '';

            if (csm._inArray(csm._availableMonths, month.id)) {
                if (month.id == csm._datePickerMonth && !onClick)
                    month.className = 'active';
            } else {
                month.className = 'disabled';
            }
        }
    },

    _clickMonth: function() {
        if (this.className.indexOf('disabled') == -1) {
            if (csm._pnlLoading) {
                csm._pnlLoading.style.display = 'block';
                csm._pnlEvents.style.display = 'none';
            }

            csm._datePickerMonth = this.id;

            csm._selectMonth(true);
            csm.getEvents(csm._datePickerMonth, csm._datePickerYear);

            this.className = 'active';

            return false;
        } else {
            return false;
        }
    },

    _selectPrevYear: function() {

        if (csm._inArray(csm._availableYears, parseInt(csm._datePickerYear) - 1) &&
                csm._datePickerYear != csm._thisYear) {
            csm._btnPrevYear.id = parseInt(csm._datePickerYear) - 1;
            csm._btnPrevYear.className = 'prevYear';    /* Set class to 'prevYear' only */
        } else {
            csm._btnPrevYear.id = csm._datePickerYear;
            csm._btnPrevYear.className += ' disabled';  /* Add class 'disabled' to 'prevYear' */
        }

        csm._btnPrevYear.lastChild.nodeValue = '< ' + csm._btnPrevYear.id;
    },

    _clickPrevYear: function() {
        if (this.className.indexOf('disabled') == -1) {
            if (csm._pnlLoading) {
                csm._pnlLoading.style.display = 'block';
                csm._pnlEvents.style.display = 'none';
            }

            csm._datePickerYear = parseInt(this.id);

            this.id = parseInt(this.id) - 1;

            csm._selectPrevYear();
            csm._selectNextYear();

            csm._getMonths(csm._datePickerYear);

            setTimeout('csm._checkMonth()', csm._delay);

            setTimeout(function() {
                csm._selectMonth(false);
                csm.getEvents(csm._datePickerMonth, csm._datePickerYear);
            }, csm._delay * 1.5);

            return false;
        } else {
            return false;
        }
    },

    _selectNextYear: function() {
        if (csm._inArray(csm._availableYears, parseInt(csm._datePickerYear) + 1)) {
            csm._btnNextYear.id = parseInt(csm._datePickerYear) + 1;
            csm._btnNextYear.className = 'nextYear';        /* Set class to 'nextYear' only */
        } else {
            csm._btnNextYear.id = csm._datePickerYear;
            csm._btnNextYear.className += ' disabled';      /* Add class 'disabled' to 'nextYear' */
        }

        csm._btnNextYear.lastChild.nodeValue = csm._btnNextYear.id + ' >';
    },

    _clickNextYear: function() {
        if (this.className.indexOf('disabled') == -1) {
            if (csm._pnlLoading) {
                csm._pnlLoading.style.display = 'block';
                csm._pnlEvents.style.display = 'none';
            }

            csm._datePickerYear = parseInt(this.id);
            csm._datePickerMonth = 1;

            this.id = parseInt(this.id) + 1;

            csm._selectNextYear();
            csm._selectPrevYear();

            csm._getMonths(csm._datePickerYear);

            setTimeout('csm._checkMonth()', csm._delay);

            setTimeout(function() {
                csm._selectMonth(false);
                csm.getEvents(csm._datePickerMonth, csm._datePickerYear);
            }, csm._delay * 1.5);

            return false;
        } else {
            return false;
        }
    },

    _getYears: function() {
        var url = csm._yearsUrl;

        var transport = csm._createTransport();
        transport.open('get', url, true);
        transport.onreadystatechange = function() {
            if (transport.readyState == 4) {
                if (transport.status == 200) {
                    csm._storeYears(transport.responseText);
                } else {
                    alert('error');
                }
            }
        };
        transport.send(null);
    },

    _storeYears: function(response) {
        var json = eval('(' + response + ')');

        csm._availableYears = new Array();
        csm._availableYears.length = 0;

        for (var i = 0; i < json.length; i++) {
            csm._availableYears[i] = json[i].value;
        }
    },

    _getMonths: function(year) {
        var url = csm._monthsUrl + '?year=' + year;

        var transport = csm._createTransport();
        transport.open('get', url, true);
        transport.onreadystatechange = function() {
            if (transport.readyState == 4) {
                if (transport.status == 200) {
                    csm._storeMonths(transport.responseText);
                } else {
                    alert('error');
                }
            }
        };
        transport.send(null);
    },

    _storeMonths: function(response) {
        var json = eval('(' + response + ')');

        csm._availableMonths = new Array();
        csm._availableMonths.length = 0;

        for (var i = 0; i < json.length; i++) {
            csm._availableMonths[i] = json[i].month;
        }
    },

    getEvents: function(month, year) {
        var url = csm._eventsUrl + '?month=' + month + '&year=' + year;

        var transport = csm._createTransport();
        transport.open('get', url, true);
        transport.onreadystatechange = function() {
            if (transport.readyState == 4) {
                if (transport.status == 200) {
                    csm._displayEvents(transport.responseText);
                } else {
                    alert('error');
                }
            }
        };
        transport.send(null);
    },

    _displayEvents: function(response) {
        var json = eval('(' + response + ')');

        var months = ['0', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];

        var html = '';

        html += '<h3>' + months[csm._datePickerMonth] + ' ' + csm._datePickerYear + '</h3>';

        for (var i = 0; i < json.length; i++) {
            var event = json[i];
            html += '<div class="hr"></div>';

            if (event.ImageFn != '') {
                html += '<a href="' + event.Website + '" title="' + event.Website + '" target="_blank" class="logo-image"><img src="/_virtual/event-images/' + event.ImageFn + '" alt="' + event.EventName + '" /></a>';
            }

            html += '<h4><a href="' + event.Website + '" title="' + event.Website + '" target="_blank">' + event.EventName + '</a></h4>';
            html += '<p><span class="date">' + event.DateStart + ' - ' + event.DateEnd + '</span></p>';
            if (event.Description != '')
                html += '<p>' + event.Description + '</p>';
            html += '<p>' + event.Location + '<br />';
            html += '<a href="' + event.Website + '" title="' + event.Website + '" target="_blank">' + event.Website + '</a></p>';

        }

        if (csm._pnlLoading) {
            csm._pnlLoading.style.display = 'none';
            csm._pnlEvents.style.display = 'block';
        }

        csm._pnlEvents.innerHTML = html;
    },

    _inArray: function(array, value) {
        var length = (array != null ? array.length : 0);
        var counter = 0;
        var inArray = false;

        do {
            if (array[counter] == value) {
                inArray = true;
                break;
            }
            counter++;
        } while (counter < array.length);

        return inArray;
    },

    _checkProgress: function() {
        if (!csm._availableYears) {
            this._checkProgress();
        } else {
            return;
        }
    }
}

/**
* Elsevier Commercial Sales Magazines
* Public Site
* Search
*
* @requires    csm.js
* @namespace   csm.search
* @version     1
*
*/

csm_search = {};

csm_search._searchFocused = false;

csm_search.defaultValue = 'Enter your search term';

csm_search.txtSearch = null;
csm_search.btnSearch = null;

csm_search.init = function() {
    this.txtSearch = $(arguments[0]);
    this.btnSearch = $(arguments[1]);

    this.txtSearch.onfocus = function() {
        csm_search._searchFocused = true;

        var _value = csm_search.txtSearch.value;
        if (_value == csm_search.defaultValue) {
            csm_search.txtSearch.value = '';
            csm_search.txtSearch.style.color = 'black';
            csm_search.txtSearch.style.background = '#eee';
        }
    };

    this.txtSearch.onkeydown = function() {
        csm_search._searchFocused = true;
    };

    this.txtSearch.onblur = function() {

        setTimeout(function() {
            csm_search._searchFocused = false;
        }, 250);

        var _value = csm_search.txtSearch.value;
        if (_value == '') {
            csm_search.txtSearch.value = csm_search.defaultValue;
            csm_search.txtSearch.style.color = '#6C6C6C';
            csm_search.txtSearch.style.background = '#BEBEBE';
        }
    };

    document.body.onkeyup = this.onKeyUp;
};

csm_search.onKeyUp = function() {
    var evtobj = (window.event ? event : arguments[0]);
    var uniCode = (evtobj.charCode ? evtobj.charCode : evtobj.keyCode);

    if (csm_search._searchFocused) {
        if (uniCode == 13) {
            if (csm_search.txtSearch.value != '' && csm_search.txtSearch.value != csm_search.defaultValue)
                window.location = '/search/default.aspx?query=' + csm_search.txtSearch.value;
        }
    }
};

csm_search.btnPress = function() {
    if (csm_search.txtSearch.value != '' && csm_search.txtSearch.value != csm_search.defaultValue)
        window.location = '/search/default.aspx?query=' + csm_search.txtSearch.value;
};

csm_search.submitForm = function() {
    return (!csm_search._searchFocused ? true : false);
};
