

function imageMap(options) {
    this.img = options.imgID?$('#'+options.imgID):false;
    this.imgID = options.imgID?options.imgID:false;
    this.hidden = options.hiddenID?$('#'+options.hiddenID):false;
    this.dots = [];
    this.dotSrc = options.dotSrc || false;
    this.dotOffset = options.dotOffset || false;
    this.wrapper = options.wrapperID?$('#'+options.wrapperID):false;
    this.options = options;
    
    this.initialHTML=(this.wrapper)?this.wrapper.html():false;

    this.mode = options.mode || 'show';
    this.addCallback = options.addCallback?options.addCallback:false;
    this.maxDots = options.maxDots?options.maxDots:1000;
    extendImageMap(this);
}

function extendImageMap(o) {

    o.setSize = function () {
        o.wrapper.css('display','block');
        o.wrapper.css('width', o.wrapper.width()+'px');
        if (o.options.css) o.wrapper.css(o.options.css);
    }

    o.initialize = function() {
        o.img.show();
        if (o.mode=='show') return false;
        o.img.css('cursor','crosshair');
        o.img.bind('click', o.clickEvent);
        o.loadDots();
    }

    o.saveDots = function () {
        var str='';
        for (var i = 0; i<o.dots.length; i++) {
            if (i>0) str+=';';
            str+=o.dots[i].x+':'+o.dots[i].y;    
        }
        o.hidden.attr('value',str);
    }

    o.loadDots = function() {
        var str=o.hidden.attr('value');
        if (!str) return false;
        var arr = str.split(';');
        for (var i = 0; i < arr.length; i++) {
            var arr2=arr[i].split(':');
            o.addDot(arr2[0],arr2[1]);
        }
    }

    o.addDot = function(x,y,url,title,src) {
        if (!x || !y) return false;
        if (o.dots.length == o.maxDots) return false;
        if (o.dotOffset) { x=parseInt(x)+o.dotOffset.x; y=parseInt(y)+o.dotOffset.y; }
        var dot = {x:x,y:y}
        var len = o.dots.length+1;
        var id = o.wrapper.attr('id');
        o.wrapper.append('<img id=\''+id+'_'+len+'\' src='+(src ? src : o.dotSrc)+'>');
        var img = $('#'+id+'_'+len) 
        img.css({position:'absolute',left:dot.x, top:dot.y, zIndex:900});
        if (url) { 
            img.css('cursor','pointer')
            img.css('cursor','hand')
            img.click(function() {window.location.href=url})
        }
        if (title) img.attr('title',title).attr('alt',title);
        dot.img = img.get();
        o.dots.push(dot);
    }

    o.clickEvent = function(ev) {
        if (o.dots.length == o.maxDots) return false;
        var evData = jQuery.eventData(ev);
        o.addDot(evData.mouseOffsetX,evData.mouseOffsetY);
    }

    o.removeAllDots = function () {
        o.dots=[];
        o.wrapper.html(o.initialHTML);
        o.img = $('#'+o.imgID);
        if (o.hidden) o.hidden.attr('value','');
        o.initialize();
    }

    o.wrapper.css({display:'none'});
    o.img.css({display:'none'});

    $(document).ready( function () {
        o.setSize();
        o.initialize();
        //$(window).bind('resize',function() {o.setSize(); o.showDots();});
    });
}
