﻿jQuery.fn.exists = function () { return jQuery(this).length > 0; }

jQuery(document).ready(
	function () {
	    jQuery("button, input:button, input:submit, input:reset, a.button").button();
	    jQuery('input:text, input:password').addClass('text');
	    jQuery('input.focus').focus();

	    if (jQuery('#ListingTermsForm').exists()) {
	        jQuery('#ListingTermsForm').submit(
                function () {
                    var accept = jQuery('#EcomOrderCustomerAccepted').is(':checked');
                    if (!accept) alert('For at fortsætte skal du acceptere betingelserne.');
                    return accept;
                }
            );
	    }

	    if (jQuery('#ListingForm').exists()) {

	        jQuery('textarea').each(
                function () {
                    $this = jQuery(this);
                    var maxlength = $this.attr('maxlength');
                    if (maxlength && maxlength > 0) {
                        var $charsleft = jQuery('<p><span></span></p>');
                        $charsleft.addClass('clearfix charsleft').addClass('charsleft-' + $this.attr('id')).find('span').text(maxlength);

                        $this.keyup(function () {
                            $textarea = jQuery(this);
                            var currentLength = $textarea.val().length;
                            var currentMaxlength = parseInt($textarea.attr('maxlength'));
                            $textareaCharsleft = jQuery('.charsleft-' + $textarea.attr('id')).find('span');
                            $textareaCharsleft.text(currentMaxlength - currentLength);
                        });
                        $this.after($charsleft);
                    }
                }
            );

	        jQuery('input[name="ListingPaymentRequired"]').click(function () { jQuery('#payment-details').toggle(jQuery('input[name="ListingPaymentRequired"]').is(':checked')); });
	        jQuery('#payment-details').toggle(jQuery('input[name="ListingPaymentRequired"]').is(':checked'));

	        jQuery("#ListingTime_overlay").dialog({
	            autoOpen: false,
	            title: 'Tilføj et tidspunkt',
	            modal: true,
	            buttons: [{ text: "Ok", click: function () { addDateFromInput(); jQuery(this).dialog("close"); } }, { text: "Annuller", click: function () { jQuery(this).dialog("close"); } }]
	        });

	        jQuery("#ListingTime_overlay_opener").click(function () {
	            jQuery("#ListingTime_overlay").dialog("open");
	            return false;
	        });

	        jQuery('#ListingTime_from, #ListingTime_to').datetimepicker({
	            firstDay: 1,
	            timeText: 'Kl.',
	            hourText: 'Time',
                minuteText: 'Minut',
	            dateFormat: "dd. MM yy",
	            timeFormat: "hh:mm",
	            dayNames: ['Søndag', 'Mandag', 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag'],
	            dayNamesShort: ['Søn', 'Man', 'Tir', 'Ons', 'Tor', 'Fre', 'Lør'],
	            dayNamesMin: ['Sø', 'Ma', 'Ti', 'On', 'To', 'Fr', 'Lø'],
	            monthNames: ['januar', 'februar', 'marts', 'april', 'maj', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'december'],
	            monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec'],
	            showOn: "both",
	            closeText: "Ok",
	            buttonText: "Vælg",
	            buttonImage: '/files/templates/designs/aarhusfestuge/js/datetimepicker.gif',
	            buttonImageOnly: false,
	            minDate: new Date(2011, 8 - 1, 25),
	            maxDate: new Date(2011, 9 - 1, 5),
	            defaultDate: new Date(2011, 8 - 1, 25),
	            onSelect: function (selectedDate) {
	            }
	        });

	        if (jQuery('#ListingTime').val().length > 0) {
	            var entries = jQuery('#ListingTime').val().split('\n');
	            for (var i = 0; i < entries.length; i++) {
	                var times = entries[i].split(';');
	                var fromDate = parseISO8601(times[0]);
	                var toDate = parseISO8601(times[1]);
	                addDateFormatted(fromDate, toDate);
	            }
	        }

	        jQuery('.upload').uploadify({
	            'uploader': '/files/templates/designs/aarhusfestuge/js/uploadify.swf',
	            'script': '/uploadhandler.ashx',
	            'cancelImg': '/files/templates/designs/aarhusfestuge/js/cancel.png',
	            'buttonText': 'Gennemse...',
	            'folder': 'annoncer',
	            'auto': true,
	            'onError': function (event, ID, fileObj, errorObj) {
	                var errors = { "File Size": "Filen er større end tilladt" };
	                var errorText = errors[errorObj.type];
	                if (errorText == undefined) errorText = errorObj.type + ' ' + errorObj.info;

	                jQuery("#" + jQuery(event.target).attr('id') + ID).find('.percentage').text(" - FEJL: " + errorText);
	                jQuery("#" + jQuery(event.target).attr('id') + ID).find('.uploadifyProgress').hide();
	                jQuery("#" + jQuery(event.target).attr('id') + ID).removeClass('info').addClass('error');
	                return false;
	            },
	            'onComplete': function (event, ID, fileObj, response, data) {
	                var result = response.split(":");
	                var filepath = result[1];

	                jQuery("#" + jQuery(event.target).attr('id') + ID).removeClass('info').addClass('success');
	                var $img = jQuery(event.target).closest('fieldset').find('.uploadedimage');
	                var width = $img.attr('width');
	                var height = $img.attr('height');
	                $img.attr('src', 'admin/public/getimage.aspx?Format=png&Width=' + width + '&Height=' + height + '&Crop=5&Image=/Files/Billeder/' + filepath);
	                var $hiddenField = jQuery(event.target).closest('fieldset').find('.uploadedimagehidden');
	                $hiddenField.val(filepath);
	                return false;
	            },
	            'onSelect': function (event, ID, fileObj) {
	                var uid = jQuery(event.target).attr('id');
	                jQuery(event.target).uploadifySettings('scriptData', { 'FileID': ID });
	            },
	            'onOpen': function (event, ID, fileObj) {
	                jQuery("#" + jQuery(event.target).attr('id') + ID).addClass('info');
	            },
	            'removeCompleted': false,
	            'sizeLimit': 1024 * 1024 * 150,
	            'fileDesc': 'Billeder',
	            'fileExt': '*.jpg;*.jpeg;*.gif;*.png'
	        });

	        initializeMap();
	    }
	}
);

var geocoder;
var mapcenter = new google.maps.LatLng(56.15832, 10.20808);
var marker;
var map;
function initializeMap() {
    geocoder = new google.maps.Geocoder();
    map = new google.maps.Map(document.getElementById("map_canvas"), { zoom: 14, mapTypeId: google.maps.MapTypeId.HYBRID, center: mapcenter });
    
    marker = new google.maps.Marker({
        map: map,
        draggable: true,
        animation: google.maps.Animation.DROP,
        position: mapcenter
    });

    setMarkerPosition();

    google.maps.event.addListener(marker, 'click', toggleBounce);
    google.maps.event.addListener(marker, 'dragend', function (event) {
        var pos = event.latLng; 
        jQuery("#ListingLatitude").val(pos.lat());
        jQuery("#ListingLongitude").val(pos.lng());
    });
}

function setMarkerPositionFromAddress() {
    var address = new Array(jQuery("#EcomOrderDeliveryAddress").val(), jQuery("#EcomOrderDeliveryCity").val(), jQuery("#EcomOrderDeliveryZip").val()).join(',');
    geocoder.geocode({ 'address': address, region: 'dk' }, function (results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            var pos = results[0].geometry.location;
            map.panTo(pos);
            map.setZoom(18);
            marker.setPosition(pos);
            jQuery("#ListingLatitude").val(pos.lat());
            jQuery("#ListingLongitude").val(pos.lng());
        } else {
            alert("Kunne ikke finde placering ud fra adressen. Klik på markøren og træk den hen på den rette placering.");
        }
    });
}

function setMarkerPosition() {
    var lat = jQuery("#ListingLatitude").val();
    var long = jQuery("#ListingLongitude").val();

    if (lat == '' || long == '') return;

    var pos = new google.maps.LatLng(lat, long);
    map.panTo(pos);
    map.setZoom(18);
    marker.setPosition(pos);
}

function toggleBounce() {

    if (marker.getAnimation() != null) {
        marker.setAnimation(null);
    } else {
        marker.setAnimation(google.maps.Animation.BOUNCE);
    }
}

function addDateFromInput() {
    var fromDate = jQuery('#ListingTime_from').datetimepicker('getDate');
    var toDate = jQuery('#ListingTime_to').datetimepicker('getDate');
    addDate(fromDate, toDate);
}

function addDate(fromDate, toDate) {
    var val = jQuery('#ListingTime').val();

    var dates = [];
    if (val.length > 0) {
        dates = val.split('\n');
        val += '\n';
    }

    val += getDateISO6801(fromDate) + ';' + getDateISO6801(toDate);
    jQuery('#ListingTime').val(val);

    addDateFormatted(fromDate, toDate);
}

function addDateFormatted(fromDate, toDate) {
    var val = jQuery('#ListingTime').val();

    var dates = jQuery('#ListingTime_List').find('tbody tr');    

    var dateFormat = jQuery('#ListingTime_from').datepicker("option", "dateFormat");
    var timeFormat = jQuery('#ListingTime_from').datepicker("option", "timeFormat");

    var settings = { 
        dayNames: ['Søndag', 'Mandag', 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag'],
        dayNamesShort: ['Søn', 'Man', 'Tir', 'Ons', 'Tor', 'Fre', 'Lør'],
        monthNames: ['januar', 'februar', 'marts', 'april', 'maj', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'december'],
        monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec']
    };
    
    var fromDateFormatted = $.datepicker.formatDate(dateFormat, fromDate, settings) + ' ' + pad(fromDate.getHours()) + ':' + pad(fromDate.getMinutes());
    var toDateFormatted = $.datepicker.formatDate(dateFormat, toDate, settings) + ' ' + pad(toDate.getHours()) + ':' + pad(toDate.getMinutes());

    jQuery('#ListingTime_List').find('tbody').append('<tr><td>' + fromDateFormatted + '</td><td>' + toDateFormatted + '</td><td><a href="#" onclick="return remDate(' + (dates.length) + ');">Slet</a></td></tr>');
}

function remDate(index) {
    var val = jQuery('#ListingTime').val();
    var dates = val.split('\n');
    dates = jQuery.grep(dates, function (n, i) {
        return (i != index);
    });
    val = dates.join('\n');
    jQuery('#ListingTime').val(val);

    var tbody = jQuery('#ListingTime_List').find('tbody');
    var dateItems = tbody.find('tr').detach();
    dateItems = jQuery.grep(dateItems, function (n, i) {
        return (i != index);
    });

    tbody.append(dateItems);

    return false;
}

function parseISO8601(dateString) {
        var isoExp = /^\s*(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)\s*$/,
        date = new Date(NaN), month,
        parts = isoExp.exec(dateString);

        if (parts) {
            month = +parts[2];
            
            date.setFullYear(parts[1], month - 1, parts[3]);
            if (month != date.getMonth() + 1) {
                date.setTime(NaN);
                alert('crap');
            }
            date.setHours(parts[4]);
            date.setMinutes(parts[5]);
        }
        return date;
    }

function getDateISO6801(date) {
    if (date == undefined) return '';

    var curr_date = pad(date.getDate());
    var curr_month = pad(date.getMonth() + 1);
    var curr_year = date.getFullYear();
    var curr_hour = pad(date.getHours());
    var curr_min = pad(date.getMinutes());

    var formatted = curr_year + '-' + curr_month + '-' + curr_date + 'T' + curr_hour + ':' + curr_min;

    return formatted;
}

function pad(n) {
    return n < 10 ? '0' + n : n
}

