﻿var pathToAjaxLoadingImage = siteUrl + "/layout/thickbox/loadingAnimation.gif";

function Vote(url) {
    var rbgAnswers = document.getElementsByName("PollAnswers");
    var checkedAnswerId;
    for (i = 0; i < rbgAnswers.length; i++) {
        if (rbgAnswers[i].checked) {
            checkedAnswerId = rbgAnswers[i].value;
            break;
        }
    }
    MM_openBrWindow(url + '&a=' + checkedAnswerId, 'anketa', 'scrollbars=yes,width=620,height=620');
}


//===========================================================================
// Provides a Dictionary object for client-side java scripts
//===========================================================================

function Lookup(key) {
    return (this[key]);
}


function Delete() {
    for (c = 0; c < Delete.arguments.length; c++) {
        this[Delete.arguments[c]] = null;
    }
    // Adjust the keys (not terribly efficient)
    var keys = new Array()
    for (var i = 0; i < this.Keys.length; i++) {
        if (this[this.Keys[i]] != null)
            keys[keys.length] = this.Keys[i];
    }
    this.Keys = keys;
}

function Add() {
    for (c = 0; c < Add.arguments.length; c += 2) {
        // Add the property
        this[Add.arguments[c]] = Add.arguments[c + 1];
        // And add it to the keys array
        this.Keys[this.Keys.length] = Add.arguments[c];
    }
}

function Dictionary() {
    this.Add = Add;
    this.Lookup = Lookup;
    this.Delete = Delete;
    this.Keys = new Array();
}



var initializedMaps = new Dictionary();
var mapFunctions = new Dictionary();
var mapFunction = null;

function OnMapLocationTabClicked(id) {
    var a = initializedMaps.Lookup(id);
    var b = mapFunctions.Lookup(id);
    if (b && !a) {
        mapFunction = b;
        setTimeout("InitializeMap('" + id + "')", 100);
    }
}

function InitializeMap(id) {

    mapFunction.apply();
    initializedMaps.Add(id, mapFunction);
}

function MyUnescape(s) {
    var out = "";
    if (s == null) return;
    var l = s.length;
    for (var i = 0; i < l; i++) {
        var ch = s.charAt(i);
        if (ch == '&') {
            var semicolonIndex = s.indexOf(';', i + 1);
            if (semicolonIndex > 0) {

                var entity = s.substring(i + 1, semicolonIndex);
                if (entity.length > 1 && entity.charAt(0) == '#') {
                    if (entity.charAt(1) == 'x' || entity.charAt(1) == 'X')
                        ch = String.fromCharCode(eval('0' + entity.substring(1)));
                    else
                        ch = String.fromCharCode(eval(entity.substring(1)));
                }
                else {
                    switch (entity) {
                        case 'quot': ch = String.fromCharCode(0x0022); break;
                        case 'amp': ch = String.fromCharCode(0x0026); break;
                        case 'lt': ch = String.fromCharCode(0x003c); break;
                        case 'gt': ch = String.fromCharCode(0x003e); break;
                        case 'nbsp': ch = String.fromCharCode(0x00a0); break;
                        case 'iexcl': ch = String.fromCharCode(0x00a1); break;
                        case 'cent': ch = String.fromCharCode(0x00a2); break;
                        case 'pound': ch = String.fromCharCode(0x00a3); break;
                        case 'curren': ch = String.fromCharCode(0x00a4); break;
                        case 'yen': ch = String.fromCharCode(0x00a5); break;
                        case 'brvbar': ch = String.fromCharCode(0x00a6); break;
                        case 'sect': ch = String.fromCharCode(0x00a7); break;
                        case 'uml': ch = String.fromCharCode(0x00a8); break;
                        case 'copy': ch = String.fromCharCode(0x00a9); break;
                        case 'ordf': ch = String.fromCharCode(0x00aa); break;
                        case 'laquo': ch = String.fromCharCode(0x00ab); break;
                        case 'not': ch = String.fromCharCode(0x00ac); break;
                        case 'shy': ch = String.fromCharCode(0x00ad); break;
                        case 'reg': ch = String.fromCharCode(0x00ae); break;
                        case 'macr': ch = String.fromCharCode(0x00af); break;
                        case 'deg': ch = String.fromCharCode(0x00b0); break;
                        case 'plusmn': ch = String.fromCharCode(0x00b1); break;
                        case 'sup2': ch = String.fromCharCode(0x00b2); break;
                        case 'sup3': ch = String.fromCharCode(0x00b3); break;
                        case 'acute': ch = String.fromCharCode(0x00b4); break;
                        case 'micro': ch = String.fromCharCode(0x00b5); break;
                        case 'para': ch = String.fromCharCode(0x00b6); break;
                        case 'middot': ch = String.fromCharCode(0x00b7); break;
                        case 'cedil': ch = String.fromCharCode(0x00b8); break;
                        case 'sup1': ch = String.fromCharCode(0x00b9); break;
                        case 'ordm': ch = String.fromCharCode(0x00ba); break;
                        case 'raquo': ch = String.fromCharCode(0x00bb); break;
                        case 'frac14': ch = String.fromCharCode(0x00bc); break;
                        case 'frac12': ch = String.fromCharCode(0x00bd); break;
                        case 'frac34': ch = String.fromCharCode(0x00be); break;
                        case 'iquest': ch = String.fromCharCode(0x00bf); break;
                        case 'Agrave': ch = String.fromCharCode(0x00c0); break;
                        case 'Aacute': ch = String.fromCharCode(0x00c1); break;
                        case 'Acirc': ch = String.fromCharCode(0x00c2); break;
                        case 'Atilde': ch = String.fromCharCode(0x00c3); break;
                        case 'Auml': ch = String.fromCharCode(0x00c4); break;
                        case 'Aring': ch = String.fromCharCode(0x00c5); break;
                        case 'AElig': ch = String.fromCharCode(0x00c6); break;
                        case 'Ccedil': ch = String.fromCharCode(0x00c7); break;
                        case 'Egrave': ch = String.fromCharCode(0x00c8); break;
                        case 'Eacute': ch = String.fromCharCode(0x00c9); break;
                        case 'Ecirc': ch = String.fromCharCode(0x00ca); break;
                        case 'Euml': ch = String.fromCharCode(0x00cb); break;
                        case 'Igrave': ch = String.fromCharCode(0x00cc); break;
                        case 'Iacute': ch = String.fromCharCode(0x00cd); break;
                        case 'Icirc': ch = String.fromCharCode(0x00ce); break;
                        case 'Iuml': ch = String.fromCharCode(0x00cf); break;
                        case 'ETH': ch = String.fromCharCode(0x00d0); break;
                        case 'Ntilde': ch = String.fromCharCode(0x00d1); break;
                        case 'Ograve': ch = String.fromCharCode(0x00d2); break;
                        case 'Oacute': ch = String.fromCharCode(0x00d3); break;
                        case 'Ocirc': ch = String.fromCharCode(0x00d4); break;
                        case 'Otilde': ch = String.fromCharCode(0x00d5); break;
                        case 'Ouml': ch = String.fromCharCode(0x00d6); break;
                        case 'times': ch = String.fromCharCode(0x00d7); break;
                        case 'Oslash': ch = String.fromCharCode(0x00d8); break;
                        case 'Ugrave': ch = String.fromCharCode(0x00d9); break;
                        case 'Uacute': ch = String.fromCharCode(0x00da); break;
                        case 'Ucirc': ch = String.fromCharCode(0x00db); break;
                        case 'Uuml': ch = String.fromCharCode(0x00dc); break;
                        case 'Yacute': ch = String.fromCharCode(0x00dd); break;
                        case 'THORN': ch = String.fromCharCode(0x00de); break;
                        case 'szlig': ch = String.fromCharCode(0x00df); break;
                        case 'agrave': ch = String.fromCharCode(0x00e0); break;
                        case 'aacute': ch = String.fromCharCode(0x00e1); break;
                        case 'acirc': ch = String.fromCharCode(0x00e2); break;
                        case 'atilde': ch = String.fromCharCode(0x00e3); break;
                        case 'auml': ch = String.fromCharCode(0x00e4); break;
                        case 'aring': ch = String.fromCharCode(0x00e5); break;
                        case 'aelig': ch = String.fromCharCode(0x00e6); break;
                        case 'ccedil': ch = String.fromCharCode(0x00e7); break;
                        case 'egrave': ch = String.fromCharCode(0x00e8); break;
                        case 'eacute': ch = String.fromCharCode(0x00e9); break;
                        case 'ecirc': ch = String.fromCharCode(0x00ea); break;
                        case 'euml': ch = String.fromCharCode(0x00eb); break;
                        case 'igrave': ch = String.fromCharCode(0x00ec); break;
                        case 'iacute': ch = String.fromCharCode(0x00ed); break;
                        case 'icirc': ch = String.fromCharCode(0x00ee); break;
                        case 'iuml': ch = String.fromCharCode(0x00ef); break;
                        case 'eth': ch = String.fromCharCode(0x00f0); break;
                        case 'ntilde': ch = String.fromCharCode(0x00f1); break;
                        case 'ograve': ch = String.fromCharCode(0x00f2); break;
                        case 'oacute': ch = String.fromCharCode(0x00f3); break;
                        case 'ocirc': ch = String.fromCharCode(0x00f4); break;
                        case 'otilde': ch = String.fromCharCode(0x00f5); break;
                        case 'ouml': ch = String.fromCharCode(0x00f6); break;
                        case 'divide': ch = String.fromCharCode(0x00f7); break;
                        case 'oslash': ch = String.fromCharCode(0x00f8); break;
                        case 'ugrave': ch = String.fromCharCode(0x00f9); break;
                        case 'uacute': ch = String.fromCharCode(0x00fa); break;
                        case 'ucirc': ch = String.fromCharCode(0x00fb); break;
                        case 'uuml': ch = String.fromCharCode(0x00fc); break;
                        case 'yacute': ch = String.fromCharCode(0x00fd); break;
                        case 'thorn': ch = String.fromCharCode(0x00fe); break;
                        case 'yuml': ch = String.fromCharCode(0x00ff); break;
                        case 'OElig': ch = String.fromCharCode(0x0152); break;
                        case 'oelig': ch = String.fromCharCode(0x0153); break;
                        case 'Scaron': ch = String.fromCharCode(0x0160); break;
                        case 'scaron': ch = String.fromCharCode(0x0161); break;
                        case 'Yuml': ch = String.fromCharCode(0x0178); break;
                        case 'fnof': ch = String.fromCharCode(0x0192); break;
                        case 'circ': ch = String.fromCharCode(0x02c6); break;
                        case 'tilde': ch = String.fromCharCode(0x02dc); break;
                        case 'Alpha': ch = String.fromCharCode(0x0391); break;
                        case 'Beta': ch = String.fromCharCode(0x0392); break;
                        case 'Gamma': ch = String.fromCharCode(0x0393); break;
                        case 'Delta': ch = String.fromCharCode(0x0394); break;
                        case 'Epsilon': ch = String.fromCharCode(0x0395); break;
                        case 'Zeta': ch = String.fromCharCode(0x0396); break;
                        case 'Eta': ch = String.fromCharCode(0x0397); break;
                        case 'Theta': ch = String.fromCharCode(0x0398); break;
                        case 'Iota': ch = String.fromCharCode(0x0399); break;
                        case 'Kappa': ch = String.fromCharCode(0x039a); break;
                        case 'Lambda': ch = String.fromCharCode(0x039b); break;
                        case 'Mu': ch = String.fromCharCode(0x039c); break;
                        case 'Nu': ch = String.fromCharCode(0x039d); break;
                        case 'Xi': ch = String.fromCharCode(0x039e); break;
                        case 'Omicron': ch = String.fromCharCode(0x039f); break;
                        case 'Pi': ch = String.fromCharCode(0x03a0); break;
                        case ' Rho ': ch = String.fromCharCode(0x03a1); break;
                        case 'Sigma': ch = String.fromCharCode(0x03a3); break;
                        case 'Tau': ch = String.fromCharCode(0x03a4); break;
                        case 'Upsilon': ch = String.fromCharCode(0x03a5); break;
                        case 'Phi': ch = String.fromCharCode(0x03a6); break;
                        case 'Chi': ch = String.fromCharCode(0x03a7); break;
                        case 'Psi': ch = String.fromCharCode(0x03a8); break;
                        case 'Omega': ch = String.fromCharCode(0x03a9); break;
                        case 'alpha': ch = String.fromCharCode(0x03b1); break;
                        case 'beta': ch = String.fromCharCode(0x03b2); break;
                        case 'gamma': ch = String.fromCharCode(0x03b3); break;
                        case 'delta': ch = String.fromCharCode(0x03b4); break;
                        case 'epsilon': ch = String.fromCharCode(0x03b5); break;
                        case 'zeta': ch = String.fromCharCode(0x03b6); break;
                        case 'eta': ch = String.fromCharCode(0x03b7); break;
                        case 'theta': ch = String.fromCharCode(0x03b8); break;
                        case 'iota': ch = String.fromCharCode(0x03b9); break;
                        case 'kappa': ch = String.fromCharCode(0x03ba); break;
                        case 'lambda': ch = String.fromCharCode(0x03bb); break;
                        case 'mu': ch = String.fromCharCode(0x03bc); break;
                        case 'nu': ch = String.fromCharCode(0x03bd); break;
                        case 'xi': ch = String.fromCharCode(0x03be); break;
                        case 'omicron': ch = String.fromCharCode(0x03bf); break;
                        case 'pi': ch = String.fromCharCode(0x03c0); break;
                        case 'rho': ch = String.fromCharCode(0x03c1); break;
                        case 'sigmaf': ch = String.fromCharCode(0x03c2); break;
                        case 'sigma': ch = String.fromCharCode(0x03c3); break;
                        case 'tau': ch = String.fromCharCode(0x03c4); break;
                        case 'upsilon': ch = String.fromCharCode(0x03c5); break;
                        case 'phi': ch = String.fromCharCode(0x03c6); break;
                        case 'chi': ch = String.fromCharCode(0x03c7); break;
                        case 'psi': ch = String.fromCharCode(0x03c8); break;
                        case 'omega': ch = String.fromCharCode(0x03c9); break;
                        case 'thetasym': ch = String.fromCharCode(0x03d1); break;
                        case 'upsih': ch = String.fromCharCode(0x03d2); break;
                        case 'piv': ch = String.fromCharCode(0x03d6); break;
                        case 'ensp': ch = String.fromCharCode(0x2002); break;
                        case 'emsp': ch = String.fromCharCode(0x2003); break;
                        case 'thinsp': ch = String.fromCharCode(0x2009); break;
                        case 'zwnj': ch = String.fromCharCode(0x200c); break;
                        case 'zwj': ch = String.fromCharCode(0x200d); break;
                        case 'lrm': ch = String.fromCharCode(0x200e); break;
                        case 'rlm': ch = String.fromCharCode(0x200f); break;
                        case 'ndash': ch = String.fromCharCode(0x2013); break;
                        case 'mdash': ch = String.fromCharCode(0x2014); break;
                        case 'lsquo': ch = String.fromCharCode(0x2018); break;
                        case 'rsquo': ch = String.fromCharCode(0x2019); break;
                        case 'sbquo': ch = String.fromCharCode(0x201a); break;
                        case 'ldquo': ch = String.fromCharCode(0x201c); break;
                        case 'rdquo': ch = String.fromCharCode(0x201d); break;
                        case 'bdquo': ch = String.fromCharCode(0x201e); break;
                        case 'dagger': ch = String.fromCharCode(0x2020); break;
                        case 'Dagger': ch = String.fromCharCode(0x2021); break;
                        case 'bull': ch = String.fromCharCode(0x2022); break;
                        case 'hellip': ch = String.fromCharCode(0x2026); break;
                        case 'permil': ch = String.fromCharCode(0x2030); break;
                        case 'prime': ch = String.fromCharCode(0x2032); break;
                        case 'Prime': ch = String.fromCharCode(0x2033); break;
                        case 'lsaquo': ch = String.fromCharCode(0x2039); break;
                        case 'rsaquo': ch = String.fromCharCode(0x203a); break;
                        case 'oline': ch = String.fromCharCode(0x203e); break;
                        case 'frasl': ch = String.fromCharCode(0x2044); break;
                        case 'euro': ch = String.fromCharCode(0x20ac); break;
                        case 'image': ch = String.fromCharCode(0x2111); break;
                        case 'weierp': ch = String.fromCharCode(0x2118); break;
                        case 'real': ch = String.fromCharCode(0x211c); break;
                        case 'trade': ch = String.fromCharCode(0x2122); break;
                        case 'alefsym': ch = String.fromCharCode(0x2135); break;
                        case 'larr': ch = String.fromCharCode(0x2190); break;
                        case 'uarr': ch = String.fromCharCode(0x2191); break;
                        case 'rarr': ch = String.fromCharCode(0x2192); break;
                        case 'darr': ch = String.fromCharCode(0x2193); break;
                        case 'harr': ch = String.fromCharCode(0x2194); break;
                        case 'crarr': ch = String.fromCharCode(0x21b5); break;
                        case 'lArr': ch = String.fromCharCode(0x21d0); break;
                        case 'uArr': ch = String.fromCharCode(0x21d1); break;
                        case 'rArr': ch = String.fromCharCode(0x21d2); break;
                        case 'dArr': ch = String.fromCharCode(0x21d3); break;
                        case 'hArr': ch = String.fromCharCode(0x21d4); break;
                        case 'forall': ch = String.fromCharCode(0x2200); break;
                        case 'part': ch = String.fromCharCode(0x2202); break;
                        case 'exist': ch = String.fromCharCode(0x2203); break;
                        case 'empty': ch = String.fromCharCode(0x2205); break;
                        case 'nabla': ch = String.fromCharCode(0x2207); break;
                        case 'isin': ch = String.fromCharCode(0x2208); break;
                        case 'notin': ch = String.fromCharCode(0x2209); break;
                        case 'ni': ch = String.fromCharCode(0x220b); break;
                        case 'prod': ch = String.fromCharCode(0x220f); break;
                        case 'sum': ch = String.fromCharCode(0x2211); break;
                        case 'minus': ch = String.fromCharCode(0x2212); break;
                        case 'lowast': ch = String.fromCharCode(0x2217); break;
                        case 'radic': ch = String.fromCharCode(0x221a); break;
                        case 'prop': ch = String.fromCharCode(0x221d); break;
                        case 'infin': ch = String.fromCharCode(0x221e); break;
                        case 'ang': ch = String.fromCharCode(0x2220); break;
                        case 'and': ch = String.fromCharCode(0x2227); break;
                        case 'or': ch = String.fromCharCode(0x2228); break;
                        case 'cap': ch = String.fromCharCode(0x2229); break;
                        case 'cup': ch = String.fromCharCode(0x222a); break;
                        case 'int': ch = String.fromCharCode(0x222b); break;
                        case 'there4': ch = String.fromCharCode(0x2234); break;
                        case 'sim': ch = String.fromCharCode(0x223c); break;
                        case 'cong': ch = String.fromCharCode(0x2245); break;
                        case 'asymp': ch = String.fromCharCode(0x2248); break;
                        case 'ne': ch = String.fromCharCode(0x2260); break;
                        case 'equiv': ch = String.fromCharCode(0x2261); break;
                        case 'le': ch = String.fromCharCode(0x2264); break;
                        case 'ge': ch = String.fromCharCode(0x2265); break;
                        case 'sub': ch = String.fromCharCode(0x2282); break;
                        case 'sup': ch = String.fromCharCode(0x2283); break;
                        case 'nsub': ch = String.fromCharCode(0x2284); break;
                        case 'sube': ch = String.fromCharCode(0x2286); break;
                        case 'supe': ch = String.fromCharCode(0x2287); break;
                        case 'oplus': ch = String.fromCharCode(0x2295); break;
                        case 'otimes': ch = String.fromCharCode(0x2297); break;
                        case 'perp': ch = String.fromCharCode(0x22a5); break;
                        case 'sdot': ch = String.fromCharCode(0x22c5); break;
                        case 'lceil': ch = String.fromCharCode(0x2308); break;
                        case 'rceil': ch = String.fromCharCode(0x2309); break;
                        case 'lfloor': ch = String.fromCharCode(0x230a); break;
                        case 'rfloor': ch = String.fromCharCode(0x230b); break;
                        case 'lang': ch = String.fromCharCode(0x2329); break;
                        case 'rang': ch = String.fromCharCode(0x232a); break;
                        case 'loz': ch = String.fromCharCode(0x25ca); break;
                        case 'spades': ch = String.fromCharCode(0x2660); break;
                        case 'clubs': ch = String.fromCharCode(0x2663); break;
                        case 'hearts': ch = String.fromCharCode(0x2665); break;
                        case 'diams': ch = String.fromCharCode(0x2666); break;
                        default: ch = ''; break;
                    }
                }
                i = semicolonIndex;
            }
        }
        out += ch;
    }
    return out;
}

function PopulateSelectedFilterValues() {
    var values = "";
    var guidRegExp = new RegExp("^(\{{0,1}([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}\}{0,1})$");
    jQuery("#advancedFilter select option:selected").each(function() {
        if (jQuery(this).val().match(guidRegExp))
            values += jQuery(this).val() + ",";
    });
    jQuery("#advancedFilter input:radio:checked").each(function() {
        values += jQuery(this).val() + ",";
    });
    jQuery("#advancedFilter input:checkbox:checked").each(function() {
        values += jQuery(this).val() + ",";
    });
    jQuery("#ctl00_hfPropertyValuesIds").val(values);

    var expandedList = "";
    jQuery("h3.expand.close").each(function() {
        expandedList += jQuery(this).attr("id") + ' ';
    });
    jQuery.trim(expandedList);
    jQuery.cookie("ExpandedLists", expandedList, { path: '/' });
}

function ExpandFilterLists() {
    var values = jQuery("#ctl00_hfExpandedListsIds").val().split(",");
    var cookieValues = jQuery.cookie("ExpandedLists");
    if (cookieValues != null) {
        values = values.concat(cookieValues.split(' '));
    }
    for (var i = 0; i <= values.length; i++) {
        var element = jQuery("#" + values[i]);
        element.removeClass("open").removeClass("close");
        element.addClass("close");
        element.next("ul.show_hide").show();
    }
}

jQuery(document).ready(function() {
    ExpandFilterLists()
});


jQuery(document).ready(function() {
    if (jQuery.cookie('AdvancedFilterExpanded') == 'true') {
        jQuery("div.advanced").show();
    }
    else {
        jQuery("div.advanced").hide();
    }

});



// ----- DatePicker specifics -------------------------------------------------------//

var calendarLocalization = new Array();

calendarLocalization['HR'] = {
    days: ['Nedjelja', 'Ponedjeljak', 'Utorak', 'Srijeda', 'Četvrtak', 'Petak', 'Subota'],
    daysShort: ['Ned', 'Pon', 'Uto', 'Sri', 'Čet', 'Pet', 'Sub'],
    daysMin: ['Ne', 'Po', 'Ut', 'Sr', 'Če', 'Pe', 'Su'],
    months: ['Siječanj', 'Veljača', 'Ožujak', 'Travanj', 'Svibanj', 'Lipanj', 'Srpanj', 'Kolovoz', 'Rujan', 'Listopad', 'Studeni', 'Prosinac'],
    monthsShort: ['Sij', 'Velj', 'Ožu', 'Tra', 'Svi', 'Lip', 'Srp', 'Kol', 'Ruj', 'Lis', 'Stu', 'Pro'],
    weekMin: 'tj'
}

calendarLocalization['EN'] = {
    days: ['Sundy', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
    daysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
    daysMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
    months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
    monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
    weekMin: 'wk'
}

calendarLocalization['IT'] = {
    days: ['Domenica', 'Luned&#236', 'Marted&#236', 'Mercoled&#236', 'Gioved&#236', 'Venerd&#236', 'Sabato'],
    daysShort: ['Dom', 'Lun', 'Mar', 'Mer', 'Gio', 'Ven', 'Sab'],
    daysMin: ['Do', 'Lu', 'Ma', 'Me', 'Gio', 'Ve', 'Sa'],
    months: ['Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre'],
    monthsShort: ['Gen', 'Feb', 'Mar', 'Apr', 'Mag', 'Giu', 'Lug', 'Ago', 'Set', 'Ott', 'Nov', 'Dic'],
    weekMin: 'sm'
}

calendarLocalization['DE'] = {
    days: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'],
    daysShort: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
    daysMin: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
    months: ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'],
    monthsShort: ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],
    weekMin: 'wo'
}

Array.prototype.intersect =
  function() {
      if (!arguments.length)
          return [];
      var a1 = this;
      var a = a2 = null;
      var n = 0;
      while (n < arguments.length) {
          a = [];
          a2 = arguments[n];
          var l = a1.length;
          var l2 = a2.length;
          for (var i = 0; i < l; i++) {
              for (var j = 0; j < l2; j++) {
                  if (CompareDates(a1[i], a2[j]) == 0)
                      a.push(a1[i]);
              }
          }
          a1 = a;
          n++;
      }
      return a;
  };

String.prototype.padLeft = function(totalWidth, paddingChar) {
    var paddedValue = new String(this);
    paddedValue = paddedValue.trim();

    while (paddedValue.length < totalWidth) {
        paddedValue = paddingChar + paddedValue;
    }

    return paddedValue;
}



String.prototype.trim = function(chars) {
    return (this.rtrim(chars)).ltrim(chars);
}

String.prototype.ltrim = function(chars) {
    chars = chars || "\\s";
    return this.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

String.prototype.rtrim = function(chars) {
    chars = chars || "\\s";
    return this.replace(new RegExp("[" + chars + "]+$", "g"), "");
}


function ValidateNumberInput(textbox) {
    var textValue = textbox.value;
    if (textValue != '') {
        for (var i = 0; i < textValue.length; i++) {
            if (!IsNumber(textValue[i])) {
                textbox.value = textValue.substring(0, i);
                break;
            }
        }
    }
}


function IsNumber(x) {
    return !isNaN(parseInt(x));
}

function CompareDates(firstDate, secondDate) {

    if (firstDate.getDate() == secondDate.getDate() && firstDate.getMonth() == secondDate.getMonth() && firstDate.getFullYear() == secondDate.getFullYear()) {
        return 0;
    }
    if (firstDate > secondDate) {
        return 1;
    }
    return -1;
}

function IsSaturdayToSaturdayInterval(dateFrom, dateTo) {
    return (dateFrom.getDay() == 6 && dateTo.getDay() == 6 && (dateTo - dateFrom) > 0)
}

function ShowBookingMessage(message) {
    jQuery("#bookingMessage").html("<ul><li>" + message + "</li></ul>");
}

function ShowBookingMessages(messages) {
    var html = "<ul>";
    for (var i = 0; i < messages.length; i++) {
        html = html + "<li>" + messages[i] + "</li>";
    }
    html = html + "</ul>";
    jQuery("#bookingMessage").html(html);
}

function GetBookingMessagesForDialog(messages) {
    var html = "";
    for (var i = 0; i < messages.length; i++) {
        html = html + messages[i] + "<br/><br/>";
    }
    return html;
}

function Initialize() {
    jQuery("td.selected").removeClass("selected").addClass("available").attr("title", statusFree);
    jQuery("#bookingMessage").html("");
}

function ConvertDateToString(date) {
    return (date.getFullYear().toString() + '-' + (date.getMonth() + 1).toString().padLeft(2, '0') + '-' + date.getDate().toString().padLeft(2, '0'));
}

function ClearDatePicker() {
    jQuery("#txtBookingPeriod").val("");
}

function UpdateCalendar() {
    Initialize(statusFree);

    var dates = jQuery("#txtBookingPeriod").DatePickerGetDate(false);
    var dateFrom = dates[0];
    var dateTo = dates[1];

    if (CompareDates(dateFrom, dateTo) >= 0) {
        ClearDatePicker();
        return;
    }
    jQuery(".datepicker").hide();

    if (isSaturdayBookingSupported && !IsSaturdayToSaturdayInterval(dateFrom, dateTo)) {
        ShowBookingMessage(saturdayBookingErrorMessage);
        ClearDatePicker();
        return;
    }


    var selectedDates = new Array();
    var dateFromCopy = new Date(dateFrom.getFullYear(), dateFrom.getMonth(), dateFrom.getDate());
    while (true) {
        var currentDate = new Date(dateFromCopy.getFullYear(), dateFromCopy.getMonth(), dateFromCopy.getDate());
        selectedDates.push(currentDate);
        if (CompareDates(currentDate, dateTo) == 0) {
            break;
        }
        dateFromCopy.setDate(dateFromCopy.getDate() + 1);
    }

    var intersectionArray = usedDates.intersect(selectedDates);
    var intersectionArrayLength = intersectionArray.length;
    if (intersectionArrayLength > 0) {
        var needToShowNotPossibleReservationMessage = false;
        var firstDay = intersectionArray[0];
        var lastDay = intersectionArray[intersectionArrayLength - 1];
        if (intersectionArrayLength > 2) {
            needToShowNotPossibleReservationMessage = true;
        }
        else if (intersectionArrayLength == 2) {
            if (!(CompareDates(firstDay, dateFrom) == 0 && CompareDates(lastDay, dateTo) == 0)) {
                needToShowNotPossibleReservationMessage = true;
            }
        }
        else if (intersectionArrayLength == 1) {
            if (!(CompareDates(firstDay, dateFrom) == 0 || CompareDates(lastDay, dateTo) == 0)) {
                needToShowNotPossibleReservationMessage = true;
            }
        }

        if (needToShowNotPossibleReservationMessage) {
            ShowBookingMessage(reservationNotPossibleMessage);
            ClearDatePicker();
            return;
        }
    }

    for (var i = 0; i < selectedDates.length; i++) {
        var date = selectedDates[i];
        var dateAsString = ConvertDateToString(date);
        if (i == 0) {
            jQuery("td.available.right:contains('" + dateAsString + "')").removeClass("available").addClass("selected").attr("title", statusSelected);
        }
        else if (i == selectedDates.length - 1) {
            jQuery("td.available.left:contains('" + dateAsString + "')").removeClass("available").addClass("selected").attr("title", statusSelected);
        }
        else {
            jQuery("td.available:contains('" + dateAsString + "')").removeClass("available").addClass("selected").attr("title", statusSelected);
        }
    }
}

function SendAccomodationUnitQuery(idAccomodationUnit) {
    var dates = jQuery("#txtBookingPeriod").DatePickerGetDate(false);
    var dateFrom = dates[0];
    var dateTo = dates[1];
    var additionalNotes = jQuery("#txtAdditionalNotes").val();
    var numberOfPersons = jQuery("#txtNumberOfPersons").val();
    var numberOfChildrenUnder2Years = jQuery("#txtNumberOfChildrenUnder2Years").val();
    var numberOfChildrenUnder4Years = jQuery("#txtNumberOfChildrenUnder4Years").val();
    var guestList = jQuery("#txtGuestList").val();
    jQuery.blockUI({ message: "<br/><h3>" + pleaseWaitMessage + "</h3><br/><img src='" + pathToAjaxLoadingImage + "' /><br/><br/>" });
    FrontEndServices.SendAccomodationUnitQuery(idAccomodationUnit, ConvertDateToString(dateFrom), ConvertDateToString(dateTo), numberOfPersons, numberOfChildrenUnder2Years, numberOfChildrenUnder4Years, additionalNotes, guestList, OnSendQuery );
}

function Purchase() {
    Page_ClientValidate();
    if (Page_IsValid) {
        jQuery.blockUI({ message: "<br/><h3>" + pleaseWaitMessage + "</h3><br/>" });
    }
}

function OnSendQuery(result) {
    jQuery.blockUI({ message: "<br/><h3>" + GetBookingMessagesForDialog(result.Messages) + "</h3><br/>" });
    ShowBookingMessages(result.Messages);
    setTimeout(jQuery.unblockUI, 3000);
}

function AddAccomodationObjectToFavorites(idAccomodationObject) {
    FrontEndServices.AddAccomodationObjectToFavorites(idAccomodationObject, OnAddAccomodationObjectToFavorites);
}

function OnAddAccomodationObjectToFavorites(result) {
    ShowBookingMessages(result.Messages);
}

function RejectOffer(idCustomerOffer, redirectionUrl) {
    jQuery.blockUI({ message: "<br/><h3>" + pleaseWaitMessage + "</h3><br/><img src='" + pathToAjaxLoadingImage + "' /><br/><br/>" });
    FrontEndServices.RejectOffer(idCustomerOffer, OnRejectOffer);
}

function OnRejectOffer(result) {
    jQuery.blockUI({ message: "<br/><h3>" + GetBookingMessagesForDialog(result.Messages) + "</h3><br/>" });
    setTimeout("jQuery.unblockUI();window.location.href=window.location.href;", 2000);
}

function PayOffer(generalPaymentUrl, creditCardPaymentUrl) {
    var paymentType = jQuery('input[name=PaymentType]:checked').val();
    var destinationUrl;
    switch (paymentType) {
        case "0":
            destinationUrl = generalPaymentUrl;
            break;
        case "1":
            destinationUrl = creditCardPaymentUrl;
            break;
    }
    window.location.href = destinationUrl;
}

function QueryString(key) {
    var queryString = window.location.search.substring(1);
    var keysAndValues = queryString.split("&");
    for (i = 0; i < keysAndValues.length; i++) {
        var value = keysAndValues[i].split("=");
        if (value[0] == key) {
            return value[1];
        }
    }
    return null;
}

function ValidateCreditCardExpirationDate(source, args) {
    var todayDate = new Date();
    todayDate = CreateDateFromData(todayDate.getFullYear(), todayDate.getMonth(), 1);
    var cardExpirationDate = CreateDateFromData(jQuery("#ctl00_cphThree_ddlExpirationYear").val(), jQuery("#ctl00_cphThree_ddlExpirationMonth").val() - 1, 1);
    args.IsValid = cardExpirationDate != null && todayDate != null && cardExpirationDate >= todayDate;
}

function CreateDateFromData(year, month, day) {
    if (year == null || month == null || day == null) {
        return null;
    }
    try {
        var date = new Date();
        date.setFullYear(year);
        date.setMonth(month, day);
        return date;
    }
    catch(exc) {
        return null;
    }
}

function ValidateCreditCardType(source, args) {

    var creditCardNumber = jQuery("#ctl00_cphThree_txtCreditCardNumber").val();
    var selectedPaymentType = jQuery('input[name=ctl00$cphThree$CreditCardType]:checked').val();
    var regEx = "";
    switch (selectedPaymentType) {
        case "AMEX":
            regEx = /^3[4,7]\d{13}$/;
            break;
        case "DINERS":
            regEx = /^3[0,6,8]\d{12}$/;
            break;
        case "MASTERCARD":
            regEx = /^5[1-5]\d{2}-?\d{4}-?\d{4}-?\d{4}$/;
            break;
        case "VISA":
            regEx = /^4\d{3}-?\d{4}-?\d{4}-?\d{4}$/;
            break;
    }
    args.IsValid = regEx == "" ? false : ValidateCreditCardNumber(creditCardNumber, regEx);
}

function ValidateCreditCardNumber(creditCardNumber, regEx) {
    if ( !ValidateNumber(creditCardNumber)) {
        return false;
    }
    if (!ValidateNumberRegEx(creditCardNumber, regEx)) {
        return false;
    }
    return ValidateMod10(creditCardNumber);
}

function ValidateMod10(creditCardNumber) {
    if (creditCardNumber.length <= 0) {
        return false;
    }
    var numberLength = creditCardNumber.length;
    var parity = numberLength % 2;
    var sum = 0;

    for (var index = 0; index < numberLength; index++) {
        if (!IsNumber(creditCardNumber.charAt(index))) {
            return false;
        }
        var digit = parseInt(creditCardNumber.charAt(index));
        if ((index % 2) == parity) {
            digit *= 2;
            if (digit > 9) {
                digit -= 9;
            }
        }
        sum += digit;
    }
    return (sum % 10) == 0;
}


function ValidateNumber(number) {
    if (number != '') {
        for (var i = 0; i < number.length; i++) {
            if (!IsNumber(number.charAt(i))) {
                return false;
            }
        }
    }
    return true;
}

function ValidateNumberRegEx(number, regEx) {
    return (number.match(regEx) != null);
}


function DoMoneyConversion() {
    var convertFromValue = jQuery("#ddlConvertFrom").val();
    var convertToValue = jQuery("#ddlConvertTo").val();
    var valueToConvert = jQuery("#txtValueToConvert").val();
    var result = (valueToConvert * convertFromValue / convertToValue).toFixed(2);
    result = result == "NaN" ? valueToConvert : result;
    jQuery("#txtConvertedValue").val(result);
}
