﻿//Premium
Date.format = 'yyyy-mm-dd';
var oneYearFromNow;

$(document).ready(function() {
    oneYearFromNow = new Date();
    oneYearFromNow.setDate(oneYearFromNow.getDate() + 355);

    $().ajaxStart($.blockUI).ajaxStop($.unblockUI);
    reactivate();
});

function reactivate() {
    try {
        try { if (Cufon) Cufon.refresh(); } catch (e) { }

        scrollIntoView($('.validationError:visible').parentsUntil('.premiumBoxContent, #Page').last().parent().add($('a[name=premiumTop]')).add($('.excessSelect')).last().get(0));

        $('a.helpLink, a.helpLinkInline, a.helpLinkInlineSimple, a.helpLinkNoImage').click(toggleHelp);
		$('a.infoWarningLink').click(toggleHelp2);

        $('.datePicker').datePicker({ endDate: oneYearFromNow.asString() });

        $('p.moreInfo').hide();
        $('span.expand').removeClass('hidden');
        $('div.excessDescription').hide();

        $('span.expand').live("click", toggle);
//        $('span.expandExcess').live("click", toggleExcess);
        $('span.expandExcess').click(toggleExcess);
        $('.fancyDropdown').selectbox({
            containerClass: 'selectBox',
            inputClass: 'selectInput'
        });

        if (typeof (customScript) == 'function') {
            customScript();
        }

        // Button text blink.
        var o = $('.premiumButtonOverlayText');
        try {
            infiniteFadeToggle(o);
        }
        catch (e) {
            // Catches an exception caused by a Chrome (Webkit) bug.
        }
        $('.premiumButtonOverlayText').click(function() {
            $('.premiumButtonBehindOverlayText').trigger('click');
        });
    }
    catch (e) {
        alert(e.Message);
    }
}

// Button text blink support function.
function infiniteFadeToggle(o) {
    if (o.length > 0) {
        o.fadeTo(800, 0.3);
        o.fadeTo(800, 1);
        setTimeout(function() { infiniteFadeToggle(o) }, 200);
    }
}

function toggleHelp(e) {
    e.preventDefault();
    $(this).siblings('.helpText').modal();
}


function toggleHelp2(e) {
    e.preventDefault();
    $(this).siblings('.helpText2').modal();
}

function toggle() {
    $(this).siblings('p.moreInfo').slideToggle(500);
    var link = $(this).find('a');
    if (link.hasClass('minus')) {
        link.removeClass('minus');
        link.addClass('plus');
    } else {
        link.removeClass('plus');
        link.addClass('minus');
    }
}

function toggleExcess() {
    $(this).siblings('div.excessDescription').slideToggle(500);
    var link = $(this).find('a');
    if (link.hasClass('minus')) {
        link.removeClass('minus');
        link.addClass('plus');
    } else {
        link.removeClass('plus');
        link.addClass('minus');
    }
    return false;
}


// ************** part of common.js **************
function scrollIntoView(e) {
    if (e.length != 0) {
        var docViewTop = $(window).scrollTop();
        var docViewBottom = docViewTop + $(window).height();
        var eTop = $(e).offset().top;
        var eBottom = eTop + $(e).height();

        if (!((eBottom >= docViewTop) && (eTop <= docViewBottom))) {
            $.scrollTo(e, { duration: 1200 });
        }
    }
}

function Validate_Date(source, arguments) {
    try {
        var date = new GetDate(arguments.Value);
        arguments.IsValid = date.valid;

        // update with correct format
        if ((date.valid) && (source) && (source.controltovalidate)) {
            $('#' + source.controltovalidate).val(date.value);
        }
    }
    catch (e) {
        arguments.IsValid = false;
    }
}

function GetDate(value) {
    this.valid = false;

    // yyyy-mm-dd
    if (value.match(/^(\d{2,4})[- ]*(0[1-9]|1[0-2])[- ]*([12]\d|0[1-9]|3[01])$/)) {
        this.year = ((RegExp.$1.length == 2) ? '20' : '') + RegExp.$1;
        this.month = RegExp.$2;
        this.day = RegExp.$3;
        this.value = this.year + '-' + this.month + '-' + this.day;
        this.valid = true;
    }
    else {
        // dd/mm/yyyy
        if (value.match(/^([12]\d|0[1-9]|3[01])[\/ ]*(0[1-9]|1[0-2])[\/ ]*(\d{2,4})$/)) {
            this.year = ((RegExp.$3.length == 2) ? '20' : '') + RegExp.$3;
            this.month = RegExp.$2;
            this.day = RegExp.$1;
            this.value = this.year + '-' + this.month + '-' + this.day;
            this.valid = true;
        }
    }
}

function Validate_Personnummer(source, arguments) {
    try {
        var pn = new Personnummer(arguments.Value);
        arguments.IsValid = pn.valid;

        // update with correct format
        if ((pn.valid) && (source) && (source.controltovalidate)) {
            $('#' + source.controltovalidate).val(pn.value);
        }
    }
    catch (e) {
        arguments.IsValid = false;
    }
}

function Personnummer(value) {
    if (!value.match(/^(\d{2})?(\d{2})(\d{2})(\d{2})[- ]*(\d{4})$/)) {
        this.valid = false;
        return;
    }

    this.century = RegExp.$1;
    this.year = RegExp.$2;

    if (this.century == '') {
        var currentYear = new Date().getFullYear();
        this.century = parseInt(currentYear / 100) - (((currentYear % 100) < this.year) ? 1 : 0);
    }

    this.month = RegExp.$3;
    this.day = RegExp.$4;
    this.controldigits = RegExp.$5;
    this.sex = parseInt(this.controldigits.substring(2, 3)) % 2;

    var nr = this.year + this.month + this.day + this.controldigits;
    var nn = '';

    for (var n = 0; n < nr.length; n++) {
        nn += ((((n + 1) % 2) + 1) * nr.substring(n, n + 1));
    }

    this.checksum = 0;

    for (var n = 0; n < nn.length; n++) {
        this.checksum += 1 * nn.substring(n, n + 1);
    }

    this.valid = (this.checksum % 10 == 0) ? true : false;
    this.value = this.century + this.year + this.month + this.day + this.controldigits;
}

function Validate_PostalCode(source, arguments) {
    try {
        var pc = new PostalCode(arguments.Value);
        arguments.IsValid = pc.valid;

        // update with correct format
        if ((pc.valid) && (source) && (source.controltovalidate)) {
            $('#' + source.controltovalidate).val(pc.value);
        }
    }
    catch (e) {
        arguments.IsValid = false;
    }
}

function PostalCode(value) {
    if (!value.match(/^(\d{3})[- ]*(\d{2})$/)) {
        this.valid = false;
        return;
    }

    this.f = RegExp.$1;
    this.s = RegExp.$2;
    this.value = this.f + this.s;
    this.valid = true;
}
