/*
 * netjay javascript functions
 */

// swtich to account page from an ajax call intercepted by acegi
function loginForm() {
    //alert("failure redirect to login");
    //window.location.href="accountPage"
}


function shiftLeft(ele, width, max) {
    var e = document.getElementById(ele);
    var pager = document.getElementsByName('pager');
    //var e = $(te);
    //var leftPos = e.getStyle('left');
    var leftPos = e.style.left;
    if (!leftPos || leftPos == "auto") {
        leftPos = 0;
    } else {
        leftPos = leftPos.toInt();
    }
    if (leftPos > -(width * (max - 1))) {
        //alert(leftPos + width);
        var myFx = new Fx.Tween(e);
        var pos = leftPos - parseInt(width)
        myFx.start('left', pos);
        if (pager) {
            setCheckedValue(pager, pos);
        }
    }
    return false;
}

function shiftRight(ele, width) {
    var e = document.getElementById(ele);
    var pager = document.getElementsByName('pager');
    //var e = $(ele);
    //var leftPos = e.getStyle('left');
    var leftPos = e.style.left;
    if (!leftPos || leftPos == "auto") {
        leftPos = 0;
    } else {
        leftPos = leftPos.toInt();
    }
    if (leftPos < 0) {
        //alert(leftPos + width);
        var myFx = new Fx.Tween(e);
        var pos = leftPos + parseInt(width)
        myFx.start('left', pos);
        if (pager) {
            setCheckedValue(pager, pos);
        }
    }
    return false;
}

function setHorizontal(ele, pos, immediately) {
    var x = document.getElementById(ele);
    var myFx = new Fx.Tween(x);
    if (immediately) {
        myFx.set('left', pos);
    } else {
        myFx.start('left', pos);
    }

}

function shiftUp(ele, height, num) {
    //var log = $('log');
    var e = document.getElementById(ele);
    //var e = $(ele);
    //var topPos = e.getStyle('top');
    var topPos = e.style.top;
    if (!topPos || topPos == "auto") {
        topPos = 0;
    } else {
        topPos = topPos.toInt();
    }
    if (!num) {
        num = 1
    }

    if (topPos < 0) {
        //log.innerHTML = '' + topPos + " " + height;
        var myFx = new Fx.Tween(e, { 'link': 'chain' });
        myFx.start('top', topPos + (parseInt(height) * num));
    }
    return false;
}


function shiftDown(ele, height, max, num) {
    //var log = $('log');
    var e = document.getElementById(ele);
    //var e = $(ele);
    //var topPos = e.getStyle('top');
    var topPos = e.style.top;
    if (!topPos || topPos == "auto") {
        topPos = 0;
    } else {
        topPos = topPos.toInt();
    }
    if (!num) {
        num = 1
    }

    if (topPos > -(height * (max - 1))) {
        //log.innerHTML = '' + topPos + " " + height;
        var myFx = new Fx.Tween(e, { 'link': 'chain' });
        myFx.start('top', topPos - (parseInt(height) * num));
    }
    return false;
}

function setVPos(ele, height, pos) {
    var e = $(ele);
    e.setStyle('top', -(height * pos));
}

function doLink(ele) {
    if (ele.value == "0") {
        return false;
    }
    window.location.href = ele.value
    return false;
}

function setSlider(id, value) {
    if (value == null) {
        value = 0;
    }
    var mySliderEle = document.getElementById('slider_' + id);
    var myKnobEle = document.getElementById('knob_' + id);
    var slider = new Slider(mySliderEle, myKnobEle, {
        steps: 100,  // Steps from 0 to 100
        wheel: true, // Using the mousewheel is possible too
        onChange: function() {
            // Based on the Slider values set an RGB value in the color array
            document.getElementById('result_' + id).value = this.step;
            document.getElementById('show_' + id).innerHTML = this.step + '%';
        }
    }).set(value);
    return slider;
}

function setNewSlider(id) {
    $("#slider_" + id).slider(
    {
        slide: function(event, ui) {
            $("#sliderval_" + id).html(ui.value);
            $("#result_" + id).html(ui.value);
        }

    }
            );
}

function updateSelect(e, elemId) {
    // The response comes back as a bunch-o-JSON
    var values = eval("(" + e.responseText + ")") // evaluate JSON

    if (values) {
        updateSelectFromJSON(values, elemId);
    }
}

function updateSelectFromJSON(values, elemId) {
    var rselect = document.getElementById(elemId)
    // 	Clear all previous options
    rselect.options.length = 0

    // Rebuild the select
    for (var i = 0; i < values.length; i++) {
        var opt = document.createElement('option');
        opt.text = values[i].name
        opt.value = values[i].id
        try {
            rselect.add(opt, null) // standards compliant; doesn't work in IE
        } catch(ex) {
            rselect.add(opt) // IE only
        }
    }
}

function updateFieldsFromJSON(values) {
    for (var key in values) {
        var ele = $('#json_' + key);
        if (ele) {
            ele.html(values[key]);
        }
    }
}

function openLogin(extern) {
    //alert("vote failure. redirect to account page");
    if (extern && extern != 'default' && extern != 'partner' && extern != 'middle' && extern != 'simple' && extern != 'wide') {
        //window.open('/fanorakel/accountPage/index','blank');
        window.location.href = '/fanorakel/login/auth' + extern;
    } else {
        window.location.href = '/fanorakel/accountPage/index';
    }
}

function handleObjRelationFields(ele, i) {
    // handle the visibility of the relevant fields depending on the selected object type
    var obj = ele.value;
    $$('.relations_' + i).setStyle('display', 'none');
    if (!obj || obj == "") {
        return true;
    }
    var relationname = 'relation_' + i + '_' + obj;
    var relationEle = $(relationname);
    if (!relationEle) {
        relationEle = $('relation_' + i + '_Default');
    }
    if (relationEle) {
        relationEle.setStyle('display', 'block');
    }
    return true;

}

function handleObjMiscFields(ele, i) {
    var obj = ele.value;
    if (!obj || obj == "") {
        $$('.selects_' + i).setStyle('display', 'none');
        $$('.assigns_' + i).setStyle('display', 'none');
    } else {
        $$('.selects_' + i).setStyle('display', 'block');
        $$('.assigns_' + i).setStyle('display', 'block');
    }
    return true;
}
function handleObjFilters(ele, i) {
    var obj = ele.value;
    $$('.filters_' + i).setStyle('display', 'none');
    if (!obj || obj == "") {
        return true;
    }
    var filtername = 'filter_' + i + '_' + obj;
    var filterEle = $(filtername);
    if (!filterEle) {
        filterEle = $('filter_' + i + '_Default');
    }
    if (filterEle) {
        filterEle.setStyle('display', 'block');
    }
    return true;
}

function handleObjBlocks(ele, i) {
    return true;

}

function handleObjFields(ele, i) {
    handleObjRelationFields(ele, i);
    handleObjFilters(ele, i);
    handleObjMiscFields(ele, i);
    handleObjBlocks(ele, i);
    return true;
}

function switchColorClass(ele, id) {
    var val = ele.value;
    var myEle = $('#' + id);
    if (myEle) {
        myEle.removeClass();
        myEle.addClass('bgwhite ' + val);
    }
    return true;
}

function toggleDiv(id, off, on) {
    var ele = document.getElementById('toggle_' + id);
    var img = document.getElementById('toggleimg_' + id);
    if (ele) {
        var display = ele.style.display;
        switch (display) {
            case 'block':
                ele.style.display = 'none';
                if (img) {
                    img.src = off;
                }
                break;
            case 'none':
                ele.style.display = 'block';
                if (img) {
                    img.src = on;
                }
                break;
            default:
                ele.style.display = 'block';
                if (img) {
                    img.src = on;
                }
        }
    }
    return false;
}

function toggleDisplay(id) {
    var ele = $('#' + id);
    if (ele) {
        var display = ele.css('display');
        switch (display) {
            case 'block':
                ele.css('display', 'none');
                break;
            case 'none':
                ele.css('display', 'block');
                break;
            default:
                ele.css('display', 'block');
        }
    }
    return false;
}

// set the radio button with the given value as being checked
// do nothing if there are no radio buttons
// if the given value does not exist, all the radio buttons
// are reset to unchecked
function setCheckedValue(radioObj, newValue) {
    if (!radioObj)
        return;
    var radioLength = radioObj.length;
    if (radioLength == undefined) {
        radioObj.checked = (radioObj.value == newValue.toString());
        return;
    }
    for (var i = 0; i < radioLength; i++) {
        radioObj[i].checked = false;
        if (radioObj[i].value == newValue.toString()) {
            radioObj[i].checked = true;
        }
    }
}

function checkAll(obj, name) {
    var flag = obj.checked;
    var checkboxes = $("input[name='" + name + "']");
    var checkboxesLength = checkboxes.length;
    for (var i = 0; i < checkboxesLength; i++) {
        if (flag) {
            checkboxes[i].checked = true;
        } else {
            checkboxes[i].checked = false;
        }
    }
    return false;
}

function cleanHTML(id) {
    var obj = $('#' + id);
    obj.empty();
}

function setHTML(id, val) {
    var obj = $('#' + id);
    obj.html(val);
}

function checkEmptyValue(name) {
    var obj = $("select[name='" + name + "']");
    alert("obj = " + obj);
    if (obj.val().length > 0) {
        alert("is was drin");
        return true;
    }
    alert("is nix drin");
    return false;
}

function confirmMessageAction(actionfield) {
    var obj = $('select[name="' + actionfield + '"]');
    var action = obj.val();
    var str = '';
    switch (action) {
        case 'read': // we mark as read
            str = 'als gelesen markieren';
            break;
        case 'unread': // we mark as unread
            str = 'als ungelesen markieren';
            break;
        case 'delete': // we want to delete
            str = 'löschen';
            break;
        default:
            str = '';
    }
    return confirm("Bist Du Sicher, dass Du die markierten Nachrichten " + str + " willst?");

}

/* Offset position of tooltip */
var x_offset_tooltip = 5;
var y_offset_tooltip = 0;

/* Don't change anything below here */


var ajax_tooltipObj = false;
var ajax_tooltipObj_iframe = false;

var ajax_tooltip_MSIE = false;
if (navigator.userAgent.indexOf('MSIE') >= 0)ajax_tooltip_MSIE = true;


var currentTooltipObject = false;

function ajax_showTooltip(e, controller, action, id, inputObj) {
    currentTooltipObject = inputObj;
    //window.onresize = function(e) { ajax_positionTooltip(e); } ;
    if (document.all)e = event;


    if (!ajax_tooltipObj)    /* Tooltip div not created yet ? */
    {
        ajax_tooltipObj = document.createElement('DIV');
        ajax_tooltipObj.style.position = 'absolute';
        ajax_tooltipObj.id = 'ajax_tooltipObj';

        document.body.appendChild(ajax_tooltipObj);


        var leftDiv = document.createElement('DIV');
        /* Create arrow div */
        leftDiv.className = 'ajax_tooltip_arrow';
        leftDiv.id = 'ajax_tooltip_arrow';
        ajax_tooltipObj.appendChild(leftDiv);

        var contentDiv = document.createElement('DIV');
        /* Create tooltip content div */
        contentDiv.className = 'ajax_tooltip_content span-3';
        ajax_tooltipObj.appendChild(contentDiv);
        contentDiv.id = 'ajax_tooltip_content';
        contentDiv.style.marginBottom = '15px';

        // Creating button div
        //var buttonDiv = document.createElement('DIV');
        //buttonDiv.style.cssText = 'position:absolute;left:50%;bottom:20px;text-align:center;background-color:#FFF;font-size:0.8em;height:15px;z-index:10000000';
        //buttonDiv.innerHTML = '<a href="#" onclick="ajax_hideTooltip();return false">Close</a>';
        //ajax_tooltipObj.appendChild(buttonDiv);

        if (ajax_tooltip_MSIE) {    /* Create iframe object for MSIE in order to make the tooltip cover select boxes */
            ajax_tooltipObj.style.cursor = 'move';
            ajax_tooltipObj_iframe = document.createElement('<IFRAME frameborder="0">');
            ajax_tooltipObj_iframe.style.position = 'absolute';
            ajax_tooltipObj_iframe.border = '0';
            ajax_tooltipObj_iframe.frameborder = 0;
            ajax_tooltipObj_iframe.style.backgroundColor = '#FFF';
            ajax_tooltipObj_iframe.src = 'about:blank';
            contentDiv.appendChild(ajax_tooltipObj_iframe);
            ajax_tooltipObj_iframe.style.left = '0px';
            ajax_tooltipObj_iframe.style.top = '0px';
        }
    }
    // Find position of tooltip
    ajax_tooltipObj.style.display = 'block';
    //ajax_loadContent('ajax_tooltip_content',externalFile);
    jQuery.ajax({type:'POST',data:{'key1': controller,'key2': action}, url:'/fanorakel/help/showtt/' + id,success:function(data, textStatus) {
        jQuery('#ajax_tooltip_content').html(data);
    },error:function(XMLHttpRequest, textStatus, errorThrown) {
    }});

    //jQuery.ajax({type:'POST', url:'/fanorakel/help/showtt',success:function(data,textStatus){jQuery('#ajax_tooltip_content').html(data);},error:function(XMLHttpRequest,textStatus,errorThrown){}});
    if (ajax_tooltip_MSIE) {
        ajax_tooltipObj_iframe.style.width = ajax_tooltipObj.clientWidth + 'px';
        ajax_tooltipObj_iframe.style.height = ajax_tooltipObj.clientHeight + 'px';
    }


    ajax_positionTooltip(e, inputObj);
    return false;
}

function ajax_positionTooltip(e, inputObj) {
    if (!inputObj)inputObj = currentTooltipObject;
    if (inputObj) {
        var leftPos = (ajaxTooltip_getLeftPos(inputObj) + inputObj.offsetWidth);
        var topPos = ajaxTooltip_getTopPos(inputObj);
    } else {
        var leftPos = e.clientX;
        var topPos = e.clientY;
    }
    var tooltipWidth = document.getElementById('ajax_tooltip_content').offsetWidth + document.getElementById('ajax_tooltip_arrow').offsetWidth;
    ajax_tooltipObj.style.left = leftPos + 'px';
    ajax_tooltipObj.style.top = topPos + 'px';
}

function ajax_hideTooltip() {
    ajax_tooltipObj.style.display = 'none';
}

function ajaxTooltip_getTopPos(inputObj) {
    var returnValue = inputObj.offsetTop;
    while ((inputObj = inputObj.offsetParent) != null) {
        if (inputObj.tagName != 'HTML')returnValue += inputObj.offsetTop;
    }
    return returnValue;
}

function ajaxTooltip_getLeftPos(inputObj) {
    var returnValue = inputObj.offsetLeft;
    while ((inputObj = inputObj.offsetParent) != null) {
        if (inputObj.tagName != 'HTML')returnValue += inputObj.offsetLeft;
    }
    return returnValue;
}

function refreshTeaser(pid, id, cid, key, category, slots, mode, height) {
    jQuery.ajax({type:'POST',data:{'pid': pid, 'id': id, 'cid':cid,'key':key,'category':category,'slots': slots, 'mode':mode, 'height':height }, url:'/fanorakel/teaserView/index',success:function(data, textStatus) {
        jQuery('#teaser').html(data);
    },error:function(XMLHttpRequest, textStatus, errorThrown) {
    }});
}

function refreshBanner(cat) {
    jQuery.ajax({type:'POST',data:{'cat':cat}, url:'/fanorakel/banner/index',success:function(data, textStatus) {
        jQuery('#' + cat).html(data);
    },error:function(XMLHttpRequest, textStatus, errorThrown) {
    }});
}

function showLogin() {
    $('#ajaxLogin').css('display', 'block');
}
function hideLogin() {
    $('#ajaxLogin').css('display', 'none');
}

function onSuccessfulLogin() {
    hideLogin();
}

function authAjax() {
    $('#loginMessage').html('Sending request ...');
    $('#loginMessage').css('visibility', 'visible');

    var form = $('#ajaxLoginForm');
    var params = form.serialize() + '&spring-security-redirect=/login/ajaxSuccess';
    // Form.disable(form);

    jQuery.ajax({
        type:'POST',
        data: params,
        datatype: 'json',
        url: 'fanorakel/j_spring_security_check',
        success: function(data, textStatus) {
            var resp = data.parseJSON();
            if (resp.success) {
                alert("ja login");
                onSuccessfulLogin();
            } else {
                alert("no login" + resp.error);
                $('#loginMessage').html(resp.error);
            }
        }
    }

            );
}

function loadStats(sid, update) {
    var ele = $('#' + update);
    if (!ele.html()) {
        jQuery.ajax({type:'POST',data:{'sid': sid}, url:'/fanorakel/statementView/statssingle',success:function(data, textStatus) {
            jQuery('#' + update).html(data);
        },error:function(XMLHttpRequest, textStatus, errorThrown) {
        }});
    }
}

function callSetMenu(menuId) {
    jQuery.ajax({type:'POST',data:{'menuId': menuId}, url:'/fanorakel/navigation/setMenu',success:function(data, textStatus) {
        jQuery('#update').html(data);
    },error:function(XMLHttpRequest, textStatus, errorThrown) {
    }});
}

function register(ele) {
    //jQuery.ajax({type:'POST',data:jQuery(ele).serialize(), url:'/fanorakel/register/save',success:function(data,textStatus){jQuery('#register').html(data);captcha();},error:function(XMLHttpRequest,textStatus,errorThrown){}});
    jQuery.ajax({type:'POST',data:jQuery(ele).serialize(), url:'/fanorakel/register/save',success:function(data, textStatus) {
        jQuery('#register').html(data);
        jQuery('#auth').css('display', 'none');
    },error:function(XMLHttpRequest, textStatus, errorThrown) {
    },complete:function(XMLHttpRequest, textStatus) {
        captcha();
    }});
}

function captcha() {
    var x = $('#captchaImg');
    x.html('<img src="/fanorakel/captcha/index" align="absmiddle"/>');
    //x.html('blabla');
}

function doVote(id, critid, result, template, partner, ele) {
    ele.disabled = true;
    jQuery.ajax({type:'POST',data:{'id': id,'critId': critid,'result': result,'template': template,'partner': partner}, url:'/fanorakel/statementView/vote',success:function(data, textStatus) {
        jQuery('#u_' + id + '_' + template).html(data);
    },error:function(XMLHttpRequest, textStatus, errorThrown) {
        openLogin(template + partner);
        ;
    }});
    return false;
}


var selectwidth = 0;

function expandSELECT(sel) {
    var isIE = /MSIE/;
    if (isIE.exec(navigator.userAgent)) {
        selectwidth = sel.style.width;
        sel.style.width = 'auto';
    }
}


function contractSELECT(sel) {
    var isIE = /MSIE/;
    if (isIE.exec(navigator.userAgent)) {
        sel.style.width = selectwidth;
    }
}

function selectLocal(ele) {
    var localanchor = $(ele).val();
    window.location.href = "#" + localanchor;
}

function getMatchGroups(ele) {
    var tournamentEle = $(ele);
    var tournamentVal = tournamentEle.val();
    jQuery.ajax({type:'POST',data:{'tournament':tournamentVal}, url:'/fanorakel/liveContext/getMatchGroups',success:function(data, textStatus) {
        jQuery('#matchgroups').html(data);
    },error:function(XMLHttpRequest, textStatus, errorThrown) {
    }});
    return false;
}

function getMatchis(ele) {
    var matchgroupEle = $(ele);
    var matchgroupVal = matchgroupEle.val();
    jQuery.ajax({type:'POST',data:{'matchgroup':matchgroupVal}, url:'/fanorakel/liveContext/getMatches',success:function(data, textStatus) {
        jQuery('#matches').html(data);
    },error:function(XMLHttpRequest, textStatus, errorThrown) {
    }});
    return false;
}

function setMatchId(ele) {
    var matchEle = $(ele);
    var matchVal = matchEle.val();
    $('#matchId').val(matchVal);
}

function openWindow(url, windowname, width, height) {
    window.open(url, windowname, 'resizeable=no,dependent=yes,status=no,location=no,scrollbars=yes,height=' + height + ',width=' + width);
    return false;
}

function filterStats(ele, statementid, statid, statidx, level, totalVotes, force) {
    var filter = '';
    if ((typeof ele) == 'string') {
        filter = ele;
    } else {
        filter = $(ele).val();
    }
    if (filter == '') {
        return false;
    }
    if (!force) {
        force = 0
    }
    $('#statsdetail_' + statid).html('<center><img src="/fanorakel/images/spinner.gif"/></center>');
    $('#statsdetail_' + statid + '_tr').css('display', 'table-row');
    jQuery.ajax({type:'POST',data:{'force':force,'filter':filter,'statementid': statementid,'statid': statid,'statidx': statidx,'level':level,'totalVotes':totalVotes}, url:'/fanorakel/stats/filter',success:function(data, textStatus) {
        jQuery('#statsdetail_' + statid).html(data);
    },error:function(XMLHttpRequest, textStatus, errorThrown) {
    }});
}

function closeSubStats(ele) {
    var container = $('#statsdetail_' + ele + '_tr');
    var select = $('#filter_' + ele);
    container.css('display', 'none');
    select.val('');
}

function setIphoneBirthDate() {
    var now = new Date();
    var days = { };
    var years = { };
    var months = { 1: 'Jan', 2: 'Feb', 3: 'Mar', 4: 'Apr', 5: 'May', 6: 'Jun', 7: 'Jul', 8: 'Aug', 9: 'Sep', 10: 'Oct', 11: 'Nov', 12: 'Dec' };

    for (var i = 1; i < 32; i += 1) {
        days[i] = i;
    }

    for (i = now.getFullYear() - 100; i < now.getFullYear() + 1; i += 1) {
        years[i] = i;
    }

    SpinningWheel.addSlot(years, 'right', 1999);
    SpinningWheel.addSlot(months, '', 4);
    SpinningWheel.addSlot(days, 'right', 12);

    SpinningWheel.setCancelAction(iphoneBirthDateCancel);
    SpinningWheel.setDoneAction(iphoneBirthDateDone);

    SpinningWheel.open();
}

function iphoneBirthDateDone() {
    var results = SpinningWheel.getSelectedValues();
    var year = results.values[0];
    var month = results.values[1];
    var day = results.values[2];
    alert("result " + day + "." + month + "." + year)
    SpinningWheel.close();
    var x = $('#birthdate');
    $('#birthdate').val(day + "." + month + "." + year);
}

function iphoneBirthDateCancel() {
    // do nothing
    SpinningWheel.close();
}

function openPopup(ele, width, height) {
    var url = $(ele).attr('href');
    var id = $(ele).attr('id');
    if (!width) {
        width = 1000;
    }
    if (!height) {
        height = 800;
    }
    $(ele).colorbox({href:url,iframe:true,width:width + "px",height:height + "px"});
    return false;
}

function setDate(type, source, target) {
    //alert("type = " + type + ", source = " + source + ", target = " + target);
    var datevals = document.getElementById(source).value;
    var targetele = document.getElementById(target + '_value');
    //alert("datevals = " + datevals);
    var datearr = datevals.split('|');
    var date = new Date(datearr[type]);
    //alert("date = " + date);
    targetele.value = date.format("dd.mm.yyyy HH:MM"); // date.getDate() + "." + (date.getMonth() + 1) + "." + date.getFullYear() + " " + date.getHours() + ":" + date.getMinutes();
    dateUpdate(target, date);

}

function dateUpdate(field, date) {

    document.getElementById(field).value = 'struct'
    document.getElementById(field + '_year').value = date.getFullYear();
    document.getElementById(field + '_month').value = date.getMonth() + 1;
    document.getElementById(field + '_day').value = date.getDate();

    document.getElementById(field + '_hour').value = date.getHours();
    document.getElementById(field + '_minute').value = date.getMinutes();
}

var dateFormat = function () {
    var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
            timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
            timezoneClip = /[^-+\dA-Z]/g,
            pad = function (val, len) {
                val = String(val);
                len = len || 2;
                while (val.length < len) val = "0" + val;
                return val;
            };

    // Regexes and supporting functions are cached through closure
    return function (date, mask, utc) {
        var dF = dateFormat;

        // You can't provide utc if you skip other args (use the "UTC:" mask prefix)
        if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) {
            mask = date;
            date = undefined;
        }

        // Passing date through Date applies Date.parse, if necessary
        date = date ? new Date(date) : new Date;
        if (isNaN(date)) throw SyntaxError("invalid date");

        mask = String(dF.masks[mask] || mask || dF.masks["default"]);

        // Allow setting the utc argument via the mask
        if (mask.slice(0, 4) == "UTC:") {
            mask = mask.slice(4);
            utc = true;
        }

        var _ = utc ? "getUTC" : "get",
                d = date[_ + "Date"](),
                D = date[_ + "Day"](),
                m = date[_ + "Month"](),
                y = date[_ + "FullYear"](),
                H = date[_ + "Hours"](),
                M = date[_ + "Minutes"](),
                s = date[_ + "Seconds"](),
                L = date[_ + "Milliseconds"](),
                o = utc ? 0 : date.getTimezoneOffset(),
                flags = {
                    d:    d,
                    dd:   pad(d),
                    ddd:  dF.i18n.dayNames[D],
                    dddd: dF.i18n.dayNames[D + 7],
                    m:    m + 1,
                    mm:   pad(m + 1),
                    mmm:  dF.i18n.monthNames[m],
                    mmmm: dF.i18n.monthNames[m + 12],
                    yy:   String(y).slice(2),
                    yyyy: y,
                    h:    H % 12 || 12,
                    hh:   pad(H % 12 || 12),
                    H:    H,
                    HH:   pad(H),
                    M:    M,
                    MM:   pad(M),
                    s:    s,
                    ss:   pad(s),
                    l:    pad(L, 3),
                    L:    pad(L > 99 ? Math.round(L / 10) : L),
                    t:    H < 12 ? "a" : "p",
                    tt:   H < 12 ? "am" : "pm",
                    T:    H < 12 ? "A" : "P",
                    TT:   H < 12 ? "AM" : "PM",
                    Z:    utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
                    o:    (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
                    S:    ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
                };

        return mask.replace(token, function ($0) {
            return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
        });
    };
}();

// Some common format strings
dateFormat.masks = {
    "default":      "ddd mmm dd yyyy HH:MM:ss",
    shortDate:      "m/d/yy",
    mediumDate:     "mmm d, yyyy",
    longDate:       "mmmm d, yyyy",
    fullDate:       "dddd, mmmm d, yyyy",
    shortTime:      "h:MM TT",
    mediumTime:     "h:MM:ss TT",
    longTime:       "h:MM:ss TT Z",
    isoDate:        "yyyy-mm-dd",
    isoTime:        "HH:MM:ss",
    isoDateTime:    "yyyy-mm-dd'T'HH:MM:ss",
    isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
};

// Internationalization strings
dateFormat.i18n = {
    dayNames: [
        "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
        "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
    ],
    monthNames: [
        "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
        "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
    ]
};

// For convenience...
Date.prototype.format = function (mask, utc) {
    return dateFormat(this, mask, utc);
};

function switchImg(ele, type) {
    var img = ele.src;
    var oldtype = '';
    if (type == 'on') {
        oldtype = '_off.';
    } else {
        oldtype = '_on.';
    }
    type = '_' + type + '.';
    img = img.replace(oldtype, type);
    ele.src = img;
    return false;
}

function switchBgImg(ele, type) {
    var img = ele.style.backgroundImage;
    var oldtype = '';
    if (type == 'on') {
        oldtype = '_off.';
    } else {
        oldtype = '_on.';
    }
    type = '_' + type + '.';
    img = img.replace(oldtype, type);
    ele.style.backgroundImage = img;
    return false;
}

function setButtonPreview(previewele, href, name, color, text) {
    var nameval = $('#' + name).val();
    var hrefval = $('#' + href).val();
    var colorval = $('#' + color).val();
    var textval = $('#' + text).val();
    jQuery.ajax({type:'POST',data:{'name': nameval, 'href': hrefval, 'color': colorval, 'text': textval}, url:'/fanorakel/teaser/buttonpreview',success:function(data, textStatus) {
        jQuery('#' + previewele).html(data);
    },error:function(XMLHttpRequest, textStatus, errorThrown) {
    }});
}

function showArrow(id) {
    $('#' + id).css('visibility', 'visible');
    return false;
}

function hideArrow(id) {
    $('#' + id).css('visibility', 'hidden');
    return false;
}

function switchStats(fieldname, update, type, currentTournament) {
    var offset = parseInt($('#' + fieldname).val());
    var pid = parseInt($('#pid').val());
    var currentTournament = currentTournament
    if (type == 'up') {
        offset -= 1;
        if (offset < 0) {
            return false;
        }
    } else {
        offset += 1;
    }
    jQuery.ajax({type:'POST',data:{'offset': offset,'pid':currentTournament}, url:'/fanorakel/statsView/getstats',success:function(data, textStatus) {
        jQuery('#' + update).html(data);
    },error:function(XMLHttpRequest, textStatus, errorThrown) {
    }});
    return false;
}

function jcarousel_initCallback(carousel) {
    // Disable autoscrolling if the user clicks the prev or next button.
    carousel.buttonNext.bind('click', function() {
        carousel.startAuto();
    });
    carousel.buttonNext.bind('mouseover', function(event) {
        $('.jcarousel-next').css('visibility','visible');
        $('.jcarousel-prev').css('visibility','visible');
        event.stopImmediatePropagation();

    });

    carousel.buttonPrev.bind('click', function() {
        carousel.startAuto();
    });
    carousel.buttonPrev.bind('mouseover', function(event) {
        $('.jcarousel-next').css('visibility','visible');
        $('.jcarousel-prev').css('visibility','visible');
        event.stopImmediatePropagation();
    });

    // Pause autoscrolling if the user moves with the cursor over the clip.
    carousel.clip.hover(function(event) {
        carousel.stopAuto();
        $('.jcarousel-prev').css('visibility','visible');
        $('.jcarousel-next').css('visibility','visible');
        event.stopImmediatePropagation();
    }, function(event) {
        carousel.startAuto();
        $('.jcarousel-prev').css('visibility','hidden');
        $('.jcarousel-next').css('visibility','hidden');
        event.stopImmediatePropagation();
    });
}

function setJCarousel(id,sec,num) {
    jQuery("#"+id).jcarousel({
        scroll: 1,
        wrap: 'circular',
        auto:sec,
        size:num,
        itemFallbackDimension:300,
        initCallback: jcarousel_initCallback
        // This tells jCarousel NOT to autobuild prev/next buttons
        //buttonNextHTML: null,
        //buttonPrevHTML: null
    });
    // Workaround for bug in jcarousel calculating the wrong width 
    $('#'+id).css('width',512*num);
    $('.jcarousel-prev').css('visibility','hidden');
    $('.jcarousel-next').css('visibility','hidden');
}
