/**
 * mapper.js 2.4 (10-Aug-2010) (c) by Christian Effenberger 
 * All Rights Reserved. Source: mapper.netzgesta.de
 * Distributed under Netzgestade Software License Agreement.
 * This license permits free of charge use on non-commercial 
 * and private web sites only under special conditions. 
 * Read more at... http://www.netzgesta.de/cvi/LICENSE.html	
 * Commercial licenses available via... cvi[at]netzgesta[dot]de	
**/

var canvascheck = document.createElement('canvas');
var isIE = window.navigator.systemLanguage&&(!document.documentMode||document.documentMode<9)?1:0;
var isVM = isIE && document.namespaces? 1:0;
var isJG = 0;
var isCV = canvascheck.getContext? 1:0;
var jg = new Array();

if(isVM) {
	if(document.namespaces['v']==null) {
		var e=["shape","shapetype","group","background","path","formulas","handles","fill","stroke","shadow","textbox","textpath","imagedata","line","polyline","curve","roundrect","oval","rect","arc","image"],s=document.createStyleSheet(); 
		for(var i=0; i<e.length; i++) {s.addRule("v\\:"+e[i],"behavior: url(#default#VML); antialias: true;");} document.namespaces.add("v","urn:schemas-microsoft-com:vml");
	} 
}

// amazing function
function showCoords(map,ele,x,y,w,h) {}

// read
function getClasses(classes, string){
	var temp = '';
	for(var j = 0; j < classes.length; j++){
		if(classes[j] != string){
			if(temp){temp += ' '; }
			temp += classes[j];
		}
	}
	return temp;
}

// read
// int value of class in format like "iradius16"
// example getClassValue("random_class1 iradius16 random_class2", "iradius") returns 16 
function getClassValue(classes, string){
	var temp = 0;
    var pos = string.length;
	for(var j = 0; j < classes.length; j++){
		if(classes[j].indexOf(string) == 0){
			temp = Math.min(classes[j].substring(pos),100);
			break;
		}
	}
	return Math.max(0,temp);
}

//read
// return string of decimal color values of class in format "iborder00aa00"
// example getClassRGBColor("random_class1 iborder00aa00 random_class2", "iborder0000ff", "0000f0") must return "0,0,255"
// but theres is bug and somehow it returns "0,0,240"
function getClassRGBColor(classes, string, color){
	var temp,
        val = color,
        pos = string.length;
	for(var j = 0; j < classes.length; j++){
		if(classes[j].indexOf(string) == 0){
			temp = classes[j].substring(pos);
			val = temp.toLowerCase();
			break;
		}
	}
	if(!val.match(/^[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)){  
        val = color||'000000';  //apply default color
    }
	if(!isCV){
        return val;
    }else{
		function hex2dec(hex){
            return(Math.max(0,Math.min(parseInt(hex,16),255)));
        }
		var cr=hex2dec(val.substr(0,2)),cg=hex2dec(val.substr(2,2)),cb=hex2dec(val.substr(4,2));
		return cr+','+cg+','+cb;
	}
}

//read
// return true or false if class is set
// example getClassAttribute("random_class1 noborder random_class2", "noborder") returns 1
function getClassAttribute(classes, string){
	var temp = 0;
    var pos = string.length;
	for(var j = 0; j < classes.length; j++){
		if(classes[j].indexOf(string) == 0){
			temp = 1;
            break;
		}
	}
	return temp;
}


//read
function getMaps(className){
	var children = document.getElementsByTagName('img'); 
	var elements = new Array(); var i = 0; var mapname = '';
	var child; var classNames; var j = 0; var mapid = '';
	for(i=0;i<children.length;i++) {
		child = children[i]; classNames = child.className.split(' ');
		for(j=0; j < classNames.length; j++) {
			if(classNames[j] == className) {
				mapname = child.useMap.split("#");
				if(mapname[1] != '' && mapname[1].length >= 1) {
					mapid = document.getElementsByName(mapname[1]);
					if(mapid) {elements.push(child); break;}
				}
			}
		}
	}
	return elements;
}

//read
function fadeCanvas(id,opac) {
	var obj = document.getElementById(id);
    if(obj.fading == 1 && opac <= 100){
		obj.style.opacity = opac/100;
        opac += 10;
		window.setTimeout("fadeCanvas('" + id + "'," + opac + ")", 10);
	}
}

//read
function setAreaOver(obj, id, bd, co, op, nb, f, z){
if(!(obj.className.indexOf('area-selected') >= 0) ||  id == 'select_canvas' ){
    // great variables
	var a, i, j, d, c, o, b, n, l, r, v, u, x, y, p, k = 0, t = '', r = obj.getAttribute('rel'), context, canvas = document.getElementById(id);

	if(r != null){
        d = r.split(",");
        v = d.unshift(obj.id);
    }else{
        d = new Array(obj.id);
    }

	function setAttr() {
		if(l.indexOf('forcegroup') != -1){
            k = getClassAttribute(u,"forcegroup");
        }else{
            k=0;
        }
		if(l.indexOf('iopacity') != -1){
            o = getClassValue(u,"iopacity")/100;
        }else{
            o=op;
        }	
		if(l.indexOf('iborder') != -1){
            b = getClassRGBColor(u,"iborder",bd);
        }else{
            b = bd;
        }
		if(l.indexOf('icolor') != -1){
            c = getClassRGBColor(u,"icolor",co);
        }else{
            c = co;
        }
		if(l.indexOf('noborder') != -1){
            n = getClassAttribute(u,"noborder");
        }else{
            n = nb;
        }
	}


	if(isVM){
		for(a = 0; a < d.length; a++){
			obj = document.getElementById(d[a]);
            if(obj){ 
			    p = '', l = obj.className, u = l.split(" "), v = obj.coords.split(",");
			if(k == 0){
                setAttr();
            } 
			if(obj.shape.toLowerCase() == 'rect'){
				t += '<v:rect strokeweight="1" filled="t" stroked="' + (n < 1?"t" : "f") + '" strokecolor="#' + b + '" style="zoom:1;margin:0;padding:0;display:block;position:absolute;left:'+parseInt(v[0])+'px;top:'+parseInt(v[1])+'px;width:'+parseInt(v[2]-v[0])+'px;height:'+parseInt(v[3]-v[1])+'px;"><v:fill color="#'+c+'" opacity="'+o+'" /></v:rect>';
			}else if(obj.shape.toLowerCase()=='circle') {
				t += '<v:oval strokeweight="1" filled="t" stroked="'+(n<1?"t":"f")+'" strokecolor="#'+b+'" style="zoom:1;margin:0;padding:0;display:block;position:absolute;left:'+parseInt(v[0]-v[2])+'px;top:'+parseInt(v[1]-v[2])+'px;width:'+(parseInt(v[2])*2)+'px;height:'+(parseInt(v[2])*2)+'px;"><v:fill color="#'+c+'" opacity="'+o+'" /></v:oval>';
			}else {
				for(j=2;j<v.length;j+=2){
                    p += parseInt(v[j])+','+parseInt(v[j+1])+',';
                }
				t += '<v:shape strokeweight="1" filled="t" stroked="'+(n<1?"t":"f")+'" strokecolor="#'+b+'" coordorigin="0,0" coordsize="'+canvas.width+','+canvas.height+'" path="m '+parseInt(v[0])+','+parseInt(v[1])+' l '+p+' x e" style="zoom:1;margin:0;padding:0;display:block;position:absolute;top:0px;left:0px;width:'+canvas.width+'px;height:'+canvas.height+'px;"><v:fill color="#'+c+'" opacity="'+o+'" /></v:shape>'; 
			}}
		}canvas.innerHTML = t;
	}else if(isCV){
		if(f < 1){
            canvas.fading = 0;
            canvas.style.opacity = 0;
        }
		context = canvas.getContext("2d");
		for(a = 0; a < d.length; a++){
			obj = document.getElementById(d[a]); 
            if(obj){
    			l = obj.className, u = l.split(" "), v = obj.coords.split(",");
			    if(k == 0){setAttr();}
                context.beginPath();
    			if(obj.shape.toLowerCase() == 'rect'){
	    			context.rect(0.5 + parseInt(v[0]), 0.5 + parseInt(v[1]), parseInt(v[2] - v[0]), parseInt(v[3] - v[1]));
                    context.closePath();
	    		}else if(obj.shape.toLowerCase() == 'circle'){
	    			context.arc(0.5 + parseInt(v[0]), 0.5 + parseInt(v[1]), parseInt(v[2]), 0, (Math.PI/180)*360, false);		
	    		}else {
	    			context.moveTo(parseInt(v[0]), parseInt(v[1]));
                    for(j = 2; j < v.length; j += 2){
                        context.lineTo(parseInt(v[j]), parseInt(v[j + 1]));
                    }
                    context.closePath();
	    		}
                context.fillStyle = 'rgba(' + c + ',' + o + ')';
                context.strokeStyle = 'rgba(' + b + ',1)';
                context.fill();
                if(n < 1){
                    context.stroke();
                }
            } //if(obj)
		}
        if(f < 1){
            canvas.fading = 1;
            fadeCanvas(id,0);
        }
	}else{
		o = op; l = obj.className; u = l.split(" ");
		if(l.indexOf('forcegroup')!=-1){
            k = getClassAttribute(u,"forcegroup");
    		if(k != 0){
                if(l.indexOf('iopacity') != -1){
                    o = getClassValue(u,"iopacity")/100;
                    k=0;
                }
            }
        }
		if(isIE){
            canvas.style.filter = "Alpha(opacity=" + (o*100) + ")";
		}else{
            canvas.style.opacity = o;
            canvas.style.MozOpacity = o;
            canvas.style.KhtmlOpacity = o;
        }
		for(a = 0; a < d.length; a++){
			obj = document.getElementById(d[a]);
            if(obj){
    			l = obj.className, u = l.split(" "), v = obj.coords.split(",");
			    if(k == 0){
    				if(l.indexOf('forcegroup') != -1){
                        k = getClassAttribute(u,"forcegroup");
                    }else{
                        k = 0;
                    }
	    			if(l.indexOf('icolor') != -1){
                        c = getClassRGBColor(u,"icolor",co);
                    }else{
                        c = co;
                    }
			    }
                jg[z].setColor("#" + c);
			    if(obj.shape.toLowerCase() == 'rect'){
    				jg[z].fillRect(parseInt(v[0]), parseInt(v[1]), parseInt(v[2] - v[0]) + 1, parseInt(v[3] - v[1]) + 1);
    			}else if(obj.shape.toLowerCase() == 'circle'){
    				jg[z].fillEllipse(parseInt(v[0] - v[2]), parseInt(v[1] - v[2]), parseInt(v[2])*2 + 1, parseInt(v[2])*2 + 1);
    			}else{
                    x = new Array();
                    y = new Array();
                    i = 0;
                    for(j = 0; j < v.length; j += 2){
                        x[i] = parseInt(v[j]);
                        y[i] = parseInt(v[j + 1]);
                        i++;
                    }
                    jg[z].fillPolygon(x, y);
			    }
                jg[z].paint();
            }
	    }
    }
}
}
//read
function setAreaOut(obj, id, f, z) {
  //  if(!(obj.className.indexOf('area-selected') >= 0)){
    	var canvas = document.getElementById(id);
    	if(isVM){
            canvas.innerHTML = '';
        }else if(isJG){
            jg[z].clear();
        }else if(isCV){
    		var context = canvas.getContext("2d");
    		context.clearRect(0, 0, canvas.width, canvas.height);
    	}
//    }
}
//read
function getCoords(e, n, a, i, x, y, w, h, pw, ph) {
	var t, o, ox, oy, ex, ey, cx, cy, px=0, py=0;

	if(!e){e = window.event; }

	if(e.pageX || e.pageY){
        px = e.pageX;
        py = e.pageY;
    }

	ex = e.clientX;
    ey = e.clientY;

	if(self.pageXOffset || self.pageYOffset){
		ox = self.pageXOffset;
        if(ox > 0 && px == ex){
            ex -= ox;
        }
		oy = self.pageYOffset;
        if(oy > 0 && py == ey){
            ey -= oy;
        }
	}else if(document.documentElement){
		ox = document.documentElement.scrollLeft; 
		oy = document.documentElement.scrollTop;
	}else if(document.body) {
		ox = document.body.scrollLeft;
        oy = document.body.scrollTop;
	} 
	if(document.body.scrollHeight != ph || document.body.scrollWidth != pw) {
		var o = document.getElementById(i);
		var t = findPosXY(o);
        x = t.x;
        y = t.y;
	}
	cx = Math.min(Math.max(ex + ox - x, 0), w); 
	cy = Math.min(Math.max(ey + oy - y, 0), h);
	showCoords(n, a, cx, cy, w, h);
}

//read
function findPosXY(ele) {
	var t;
    var d = {
        x:ele.offsetLeft,
        y:ele.offsetTop
    };

	if(ele.offsetParent){
        t = findPosXY(ele.offsetParent);
        d.x += t.x;
        d.y += t.y;
    }

	return d;
}

//read
function roundedRect(ctx, x, y, width, height, radius, nopath){
	if(!nopath) ctx.beginPath();

	ctx.moveTo(x, y + radius);
	ctx.lineTo(x, y + height - radius);
	ctx.quadraticCurveTo(x, y + height, x + radius, y + height);
	ctx.lineTo(x + width - radius,y + height);
	ctx.quadraticCurveTo(x + width, y + height, x + width, y + height - radius);
	ctx.lineTo(x + width, y + radius);
	ctx.quadraticCurveTo(x + width, y, x + width - radius, y);
	ctx.lineTo(x + radius, y);
	ctx.quadraticCurveTo(x, y, x, y + radius);

	if(!nopath) ctx.closePath();
}

//read
function getRadius(radius, width, height){
	var part = (Math.min(width, height)/100);
	radius = Math.max(Math.min(100, radius/part), 0);
	return radius + '%';
}


function redrawSelected(id, bd, co, op, nb, f, z){
	mapid = document.getElementsByTagName('map');
	for(j = 0; j < mapid[0].areas.length; j++){  //foreach areas
        if(mapid[0].areas[j].className.match(/area-selected/)){
            setAreaOver(mapid[0].areas[j], 'select_canvas', bd, co, op, nb, f, z);
        }
    }
}

function triggerSelected(element, id, bd, co, op, nb, f, z){
    if(element.className.indexOf('area-selected') >= 0){
        var classes = element.className.split(' ');
        var ind, class_string = '';        
        for(ind = 0; ind < classes.length; ind++){
            if(classes[ind] != 'area-selected'){
                class_string += classes[ind] + ' ';
            }
        }
        element.className = class_string;
        setAreaOut(element, id , f, z);
        redrawSelected(id, bd, co, op, nb, f, z);
    }else{
        if(element.className.length > 0){
            element.className += ' ';
        }
        setAreaOver(element, id, bd, co, op, nb, f, z);        
        element.className += 'area-selected';
    }
}
//read
function addMapper() {
	var themaps = getMaps('mapper');
	var image, object, bgrnd, canvas, blind, context, mapid, mname, ele, atr; 
	var classes = '', 
        newClasses = '', 
        func = '', 
        tmp, i, j, o, b, c, d, r, t, n, f, x, y, w, h, pw, ph;

	for(i=0;i<themaps.length;i++) {

		image = themaps[i];
        object = image.parentNode;

		if(image.id=='') {image.id = "gmipam_"+i;}

		object.style.position = (object.style.position=='static'||object.style.position==''?'relative':object.style.position);
		object.style.height = image.height+'px';
		object.style.width = image.width+'px';
		object.style.padding = 0+'px';
		object.style.MozUserSelect = "none";
		object.style.KhtmlUserSelect = "none"; 
		object.unselectable = "on";

        // probably, default values		
        r = 0;
        n = 0;
        f = 0;
        b = '0000ff';
        c = '000000';
        o = 33;

		if(isCV){           // canvas enabled
            canvas = document.createElement('canvas');
            select_canvas = document.createElement('canvas');   // canvas for selected items
        }else if(isVM){ //some ie stuff
		    canvas = document.createElement(['<var style="zoom:1;overflow:hidden;display:block;width:'+image.width+'px;height:'+image.height+'px;padding:0;">'].join(''));
            select_canvas = document.createElement(['<var style="zoom:1;overflow:hidden;display:block;width:'+image.width+'px;height:'+image.height+'px;padding:0;">'].join(''));
		}else{
            canvas = document.createElement('div');
            select_canvas = document.createElement('div');
        }
		canvas.id = image.id + '_canvas';
        select_canvas.id = 'select_canvas';
        

        // very informative variables setting
	    classes = image.className.split(' '); 
		r = getClassValue(classes,"iradius");
		o = getClassValue(classes,"iopacity");
		b = getClassRGBColor(classes,"iborder",'0000ff');
		c = getClassRGBColor(classes,"icolor",'000000');
		n = getClassAttribute(classes,"noborder");
		f = getClassAttribute(classes,"nofade");
		d = getClassAttribute(classes,"showcoords");

		o = o==0? 0.33 : o/100;
        r = parseInt(Math.min(Math.min(image.width/4, image.height/4), r));

		newClasses = getClasses(classes,"mapper"); // return string without class mapper
		image.className = newClasses;
        
		mname = image.useMap.split("#"); 
        mname = mname[1]; //map name

		mapid = document.getElementsByName(mname);
		if(mapid.length > 0){
			for(j = 0; j < mapid[0].areas.length; j++){  //foreach areas

				if(mapid[0].areas[j].shape.match(/(rect|poly|circle)/i)){    
					if(window.opera || mapid[0].areas[j].coords != ''){

						if(mapid[0].areas[j].id == ''){
                            mapid[0].areas[j].id = mname + '_' + j;
                        }
                        // bind events
						if(isVM || isIE) {
							func = mapid[0].areas[j].onmouseover;
                            if(func != null){
                                tmp = String(func);
                                func = (tmp.indexOf('function') >= 0? tmp.match(/\{([^}]+)\}/) : tmp);
                                func=( typeof(func) == 'object' ? func[1] : func);
                            }
							mapid[0].areas[j].onmouseover = new Function('setAreaOver(this,"' + canvas.id + '","' + b + '","' + c + '","' + o + '",' + n + ',' + f + ',' + i + ');' + func); 
							func = mapid[0].areas[j].onmouseout;
                            if(func != null){
                                tmp = String(func);
                                func = (tmp.indexOf('function') >= 0? tmp.match(/\{([^}]+)\}/) : tmp);
                                func=(typeof(func)=='object'?func[1]:func);
                            }
							mapid[0].areas[j].onmouseout = new Function('setAreaOut(this,"' + canvas.id + '",' + f + ',' + i + ');' + func); 
						}else {

							func = mapid[0].areas[j].getAttribute("onmouseover");
                            mapid[0].areas[j].setAttribute("onmouseover","setAreaOver(this,'" + canvas.id + "','" + b + "','" + c + "','" + o + "'," + n + "," + f + "," + i + ");" + func); 

							func = mapid[0].areas[j].getAttribute("onclick");
                            mapid[0].areas[j].setAttribute("onclick","triggerSelected(this,'" + select_canvas.id + "','" + b + "','" + c + "','" + o + "'," + n + "," + f + "," + i + ");" + func); 

							func = mapid[0].areas[j].getAttribute("onmouseout");
                            mapid[0].areas[j].setAttribute("onmouseout","setAreaOut(this,'" + canvas.id + "'," + f + "," + i + ");" + func); 
						}
					}
				}
			}
		}

		canvas.style.height = image.height+'px';
		canvas.style.width = image.width+'px';
		canvas.height = image.height;
		canvas.width = image.width;
		canvas.left = 0;
        canvas.top = 0;
		canvas.style.position = 'absolute';
		canvas.style.left = 0+'px';
		canvas.style.top = 0+'px';
		canvas.fading = 0;

		select_canvas.style.height = image.height+'px';
		select_canvas.style.width = image.width+'px';
		select_canvas.height = image.height;
		select_canvas.width = image.width;
		select_canvas.left = 0;
        select_canvas.top = 0;
		select_canvas.style.position = 'absolute';
		select_canvas.style.left = 0+'px';
		select_canvas.style.top = 0+'px';
		select_canvas.fading = 0;

		image.className = '';
		image.style.cssText = '';
		image.left = 0;
        image.top = 0;
		image.style.zIndex = '20';
		image.style.position = 'absolute';
		image.style.height = image.height+'px';
		image.style.width = image.width+'px';
		image.style.left = 0+'px';
		image.style.top = 0+'px';
		image.style.MozUserSelect = "none";
		image.style.KhtmlUserSelect = "none"; 
		image.unselectable = "on";

		if(isIE){
            image.style.filter = "Alpha(opacity=0)";
		}else{
            image.style.opacity = 0;
  		    image.style.MozOpacity = 0;
  		    image.style.KhtmlOpacity = 0;
        }

		if(isCV && r>0){
            bgrnd = document.createElement('canvas');
        }else if(isVM && r>0){
    		bgrnd = document.createElement(['<var style="zoom:1;overflow:hidden;display:block;width:'+image.width+'px;height:'+image.height+'px;padding:0;">'].join(''));
		}else{
            bgrnd = document.createElement('img');
            bgrnd.src = image.src;
        }

		bgrnd.id = image.id+'_image';
		bgrnd.left = 0;
        bgrnd.top = 0;
		bgrnd.style.position = 'absolute';
		bgrnd.style.height = image.height+'px';
		bgrnd.style.width = image.width+'px';
		bgrnd.style.left = 0+'px';
		bgrnd.style.top = 0+'px';

		object.insertBefore(canvas,image);
		object.insertBefore(select_canvas,image);

		blind = document.createElement('div');
		blind.id = mname+'_blind';
		blind.className = "blind_area";
		blind.left = 0;
        blind.top = 0;
		blind.style.position = 'absolute';
		blind.style.height = image.height+'px';
		blind.style.width = image.width+'px';
		blind.style.left = 0+'px';
		blind.style.top = 0+'px';
		blind.innerHTML = " ";
		object.insertBefore(blind,image);

		if(isCV){
			context = canvas.getContext("2d");
			context.clearRect(0,0,canvas.width,canvas.height);
			select_context = select_canvas.getContext("2d");
			select_context.clearRect(0,0,select_canvas.width,select_canvas.height);
		}else if(!isVM && !isCV){
            if(isIE){
    			canvas.style.filter = "Alpha(opacity="+(o*100)+")";
                select_canvas.style.filter = "Alpha(opacity="+(o*100)+")";
			}else{
                canvas.style.opacity = o;
      			canvas.style.MozOpacity = o;
                canvas.style.KhtmlOpacity = o;
                select_canvas.style.opacity = o;
      			select_canvas.style.MozOpacity = o;
  	    		select_canvas.style.KhtmlOpacity = o;
            }
			if(typeof(window['jsGraphics']) !== 'undefined') {
				jg[i] = new jsGraphics(canvas);
				jg[i+1] = new jsGraphics(select_canvas);
                isJG = 1;
			}
		}		
		object.insertBefore(bgrnd,canvas);
//		object.insertBefore(bgrnd,select_canvas);

		if(isCV && r>0){

			bgrnd.height = image.height;
            bgrnd.width = image.width;

			context = bgrnd.getContext("2d");
			context.clearRect(0, 0, bgrnd.width, bgrnd.height);
			roundedRect(context, 0, 0, bgrnd.width, bgrnd.height, r);
			context.clip();
			context.fillStyle = 'rgba(0,0,0,0)';
			context.fillRect(0, 0, bgrnd.width, bgrnd.height);
			context.drawImage(image,0,0,bgrnd.width,bgrnd.height);

		}else if(isVM && r>0){

			bgrnd.height = image.height;
            bgrnd.width = image.width;
            r = getRadius(r,bgrnd.width,bgrnd.height);		
			bgrnd.innerHTML = '<v:roundrect arcsize="'+r+'" strokeweight="0" filled="t" stroked="f" fillcolor="#ffffff" style="zoom:1;margin:0;padding:0;display:block;position:absolute;left:0px;top:0px;width:'+bgrnd.width+'px;height:'+bgrnd.height+'px;"><v:fill src="'+image.src+'" type="frame" /></v:roundrect>';

		}		
		if(d > 0){
			ele = document.getElementById(image.id);
			w = parseInt(image.width);
            h = parseInt(image.height);
			t = findPosXY(ele);
            x = t.x;
            y = t.y;
			ph = document.body.scrollHeight;
            pw = document.body.scrollWidth;
			if(isVM || isIE){
				func=image.onmousemove;
                if(func!=null){
                    tmp=String(func);
                    func = (tmp.indexOf('function') >= 0? tmp.match(/\{([^}]+)\}/) : tmp);
                    func=(typeof(func) == 'object'? func[1] : func);
                }
				image.onmousemove = new Function('getCoords(event,"' + mname + '",0,"' + image.id + '",' + x + ',' + y + ',' + w + ',' + h + ',' + pw + ',' + ph + ');' + func); 
			}else{
				func = image.getAttribute("onmousemove"); 
				image.setAttribute("onmousemove","getCoords(event,'"+mname+"',0,'"+image.id+"',"+x+","+y+","+w+","+h+","+pw+","+ph+");"+func); 
			}
			if(mapid.length > 0){
				for(j = 0; j < mapid[0].areas.length; j++){
					if(mapid[0].areas[j].shape.match(/(rect|poly|circle)/i)){ 
						if(window.opera || mapid[0].areas[j].coords != ''){
							atr = mapid[0].areas[j].id; 
							if(isVM || isIE){
								func = mapid[0].areas[j].onmousemove;
                                if(func!=null){
                                    tmp = String(func);
                                    func = (tmp.indexOf('function') >= 0? tmp.match(/\{([^}]+)\}/) : tmp);
                                    func = (typeof(func) == 'object'? func[1] : func);
                                }
								mapid[0].areas[j].onmousemove = new Function('getCoords(event,"' + mname + '","' + atr + '","' + image.id + '",' + x + ',' + y + ',' + w + ',' + h + ',' + pw + ',' + ph + ');' + func); 
							}else {
								func = mapid[0].areas[j].getAttribute("onmousemove"); 
								mapid[0].areas[j].setAttribute("onmousemove","getCoords(event,'" + mname + "','" + atr + "','" + image.id + "'," + x + "," + y + "," + w + "," + h + "," + pw + "," + ph + ");" + func); 
							}
						}
					}
				}
			}
		}
	}
}

if(window.attachEvent) window.attachEvent("onload",addMapper);
else window.addEventListener("load",addMapper,false);

