$(function () {
var stateNames = new Array();
var stateURLs = new Array();
var stateModes = new Array();
var stateColors = new Array();
var stateOverColors = new Array();
var stateClickedColors = new Array();
var stateText = new Array();
var pinText = new Array();
var pinNames = new Array();
var pinUrls = new Array();
var pinX = new Array();
var pinY = new Array();
var pinColors = new Array();
var pinOverColors = new Array();
var pinClickedColors = new Array();
var offColor,
strokeColor,
offStrokeColor,
abbrColor,
mapWidth,
mapHeight,
useText,
useTextAtBottom,
textAreaWidth,
textAreaPadding,
win,
winWidth,
r,
ratio,
isMobile,
pinSize,
responsive,
useParameterInUrl;
var mouseX = 0;
var mouseY = 0;
var current = null;
var isPin = false;
// Detect if the browser supports ajax.
var hasAjax = jQuery.support.ajax;
$.ajax({
type: 'GET',
url: '/portals/31/Features/ngbgomo/xml/usaMapSettings.xml',
dataType: hasAjax ? 'xml' : 'text',
success: function (data) {
var xml;
if (!hasAjax) {
xml = new ActiveXObject('Microsoft.XMLDOM');
xml.async = false;
xml.loadXML(data);
} else {
xml = data;
}
var $xml = $(xml);
offColor = '#' + $xml.find('mapSettings').attr('offColor');
strokeColor = '#' + $xml.find('mapSettings').attr('strokeColor');
offStrokeColor = '#' + $xml.find('mapSettings').attr('offStrokeColor');
abbrColor = '#' + $xml.find('mapSettings').attr('abbreviationColor');
mapWidth = $xml.find('mapSettings').attr('mapWidth');
mapHeight = $xml.find('mapSettings').attr('mapHeight');
useText = $xml.find('mapSettings').attr('useText');
useTextAtBottom = $xml.find('mapSettings').attr('useTextAtBottom') == "true" ? true : false;
textAreaWidth = $xml.find('mapSettings').attr('textAreaWidth');
textAreaPadding = $xml.find('mapSettings').attr('textAreaPadding');
textAreaHeight = $xml.find('mapSettings').attr('textAreaHeight');
pinSize = $xml.find('mapSettings').attr('pinSize');
responsive = $xml.find('mapSettings').attr('responsive') == "true" ? true : false;
useParameterInUrl = $xml.find('mapSettings').attr('useParameterInUrl') == "true" ? true : false;
ratio = mapWidth/mapHeight;
oMapWidth = mapWidth;
if (useText == 'true') {
if(useTextAtBottom){
$("#text").css({
'width': parseFloat(mapWidth, 10) - parseFloat(textAreaPadding, 10)*2 + 'px',
'height': textAreaHeight + 'px',
'marginTop': (parseFloat(mapHeight, 10) + 20) + 'px',
'padding': textAreaPadding + 'px'
});
}
else{
mapWidth = parseFloat(mapWidth, 10) - (parseFloat(textAreaWidth) - parseFloat(textAreaPadding * 2));
oMapWidth = mapWidth;
mapHeight = mapWidth/ratio;
$("#text").css({
'width': (parseFloat(textAreaWidth) - parseFloat(textAreaPadding * 2)) + 'px',
'height': (parseFloat(mapHeight) - parseFloat(textAreaPadding * 2)) + 'px',
'display': 'inline',
'float': 'right',
'padding': textAreaPadding + 'px'
});
}
$('#text').html($xml.find('defaultSideText').text());
}
//Parse xml
$xml.find('stateData').each(function (i) {
var $node = $(this);
stateText.push($node.text());
stateNames.push($node.attr('stateName'));
stateURLs.push($node.attr('url'));
stateModes.push($node.attr('stateMode'));
stateColors.push('#' + $node.attr('initialStateColor'));
stateOverColors.push('#' + $node.attr('stateOverColor'));
stateClickedColors.push('#' + $node.attr('stateSelectedColor'));
});
$xml.find('pinData').each(function (i) {
var $node = $(this);
pinText.push($node.text());
pinNames.push($node.attr('pinName'));
pinUrls.push($node.attr('url'));
pinX.push($node.attr('pinX'));
pinY.push($node.attr('pinY'));
pinColors.push('#' + $node.attr('initialPinColor'));
pinOverColors.push('#' + $node.attr('pinOverColor'));
pinClickedColors.push('#' + $node.attr('pinSelectedColor'));
});
win = $(window);
winWidth = win.width();
createMap();
createPins();
}
});
function createPins() {
for (var i = 0; i').addClass('point'));
$('.point').html(pinNames[id]).css({
left: mouseX - 50,
top: mouseY - 70
}).fadeIn();
});
pin.mouseout(function (e) {
var id = $(this.node).attr('id');
//Animate if not already the current state
if (this != current) {
this.animate({
fill: pinColors[id]
}, 500);
}
$('#map').next('.point').remove();
});
pin.mouseup(function (e) {
var id = $(this.node).attr('id');
//Reset scrollbar
var t = $('#text')[0];
t.scrollLeft = 0;
t.scrollTop = 0;
//Animate previous state out
if (current) {
var curid = $(current.node).attr('id');
current.animate({
fill: isPin ? pinColors[curid] : stateColors[curid]
}, 500);
}
isPin = true;
//Animate next
this.animate({
fill: pinClickedColors[id]
}, 500);
current = this;
if (useText == 'true') {
$('#text').html(pinText[id]);
} else {
//change "_self" to "_blank" if using in WP iframe
if(useParameterInUrl){
window.open(pinText[id], '_self');
}
else{
window.open(pinUrls[id], '_self');
}
}
});
}
}
function createMap() {
var shapeAr = [];
//start map
r = new ScaleRaphael('map', 930, 590),
attributes = {
fill: '#d9d9d9',
cursor: 'pointer',
stroke: strokeColor,
'stroke-width': 1,
'stroke-linejoin': 'round',
'font-family': 'Verdana',
'font-size': '19px',
'font-weight': 'bold'
},
arr = new Array();
var usa = {};
usa.alabama = r.set();
usa.alaska = r.set();
usa.arizona = r.set();
usa.arkansas = r.set();
usa.california = r.set();
usa.colorado = r.set();
usa.connecticut = r.set();
usa.delaware = r.set();
usa.dc = r.set();
usa.florida = r.set();
usa.georgia = r.set();
usa.guam = r.set();
usa.hawaii = r.set();
usa.idaho = r.set();
usa.illinois = r.set();
usa.indiana = r.set();
usa.iowa = r.set();
usa.kansas = r.set();
usa.kentucky = r.set();
usa.louisiana = r.set();
usa.maine = r.set();
usa.maryland = r.set();
usa.massachusetts = r.set();
usa.michigan = r.set();
usa.minnesota = r.set();
usa.mississippi = r.set();
usa.missouri = r.set();
usa.montana = r.set();
usa.nebraska = r.set();
usa.nevada = r.set();
usa.newHampshire = r.set();
usa.newJersey = r.set();
usa.newMexixo = r.set();
usa.newYork = r.set();
usa.northCarolina = r.set();
usa.northDakota = r.set();
usa.ohio = r.set();
usa.oklahoma = r.set();
usa.oregon = r.set();
usa.pennsylvenia = r.set();
usa.puertorico = r.set();
usa.rhodeIsland = r.set();
usa.southCarolina = r.set();
usa.southDakota = r.set();
usa.tennessee = r.set();
usa.texas = r.set();
usa.utah = r.set();
usa.vermont = r.set();
usa.virginia = r.set();
usa.virginislands = r.set();
usa.washington = r.set();
usa.westVirginia = r.set();
usa.wisconsin = r.set();
usa.wyoming = r.set();
var boxattrs = {
'cursor': 'pointer',
'fill': "#fff"
};
var i = 0;
for (var state in usamappaths) {
//Create obj
var obj = usa[state];
obj.attr(attributes);
if (stateModes[i] == 'OFF') {
boxattrs = {
'cursor': 'default',
'fill': offColor,
stroke: offStrokeColor
};
} else {
boxattrs = {
'cursor': 'pointer',
'fill': stateColors[i],
stroke: strokeColor,
'id': i
};
}
obj.push(r.path(usamappaths[state].path).attr(boxattrs));
obj.push(r.text(usamappaths[state].textX, usamappaths[state].textY, usamappaths[state].text).attr({
"font-family": "Arial, sans-serif",
"font-weight": "bold",
"font-size": "14",
"fill": abbrColor,
'cursor': 'pointer',
'z-index': 1000
}));
if (stateModes[i] == 'OFF') {
obj.toFront();
}
obj[0].node.id = i;
//obj[0].toBack();
obj[1].toFront();
shapeAr.push(obj[0]);
var hitArea = r.path(usamappaths[state].path).attr({
fill: "#f00",
"stroke-width": 0,
"opacity" : 0,
'cursor': stateModes[i] == 'OFF' ? 'default' : 'pointer'
});
hitArea.node.id = i;
hitArea.mouseover(function (e) {
e.stopPropagation();
var id = $(this.node).attr('id');
if (stateModes[id] != 'OFF') {
//Animate if not already the current state
if (shapeAr[id] != current) {
shapeAr[id].animate({
fill: stateOverColors[id]
}, 500);
}
//tooltip
$('#map').next('.point').remove();
$('#map').after($('
').addClass('point'));
$('.point').html(stateNames[id]).css({
left: mouseX - 50,
top: mouseY - 70
}).fadeIn();
}
});
hitArea.mouseout(function (e) {
var id = $(this.node).attr('id');
if (stateModes[id] != 'OFF') {
//Animate if not already the current state
if (shapeAr[id] != current) {
shapeAr[id].animate({
fill: stateColors[id]
}, 500);
}
$('#map').next('.point').remove();
}
});
hitArea.mouseup(function (e) {
var id = $(this.node).attr('id');
if (stateModes[id] != 'OFF') {
//Reset scrollbar
var t = $('#text')[0];
t.scrollLeft = 0;
t.scrollTop = 0;
//Animate previous state out
if (current) {
var curid = $(current.node).attr('id');
current.animate({
fill: isPin ? pinColors[curid] : stateColors[curid]
}, 500);
}
isPin = false;
//Animate next
shapeAr[id].animate({
fill: stateClickedColors[id]
}, 500);
current = shapeAr[id];
if (useText == 'true') {
$('#text').html(stateText[id]);
} else {
//change "_self" to "_blank" if using in WP iframe
if(useParameterInUrl){
window.open(stateText[id], '_self');
}
else{
window.open(stateURLs[id], '_self');
}
}
}
});
i++;
}
if(responsive){
responsiveResize();
$(window).resize(function() {
responsiveResize();
});
}
else{
resizeMap(r);
}
}
// Set up for mouse capture
if (document.captureEvents && Event.MOUSEMOVE) {
document.captureEvents(Event.MOUSEMOVE);
}
// Main function to retrieve mouse x-y pos.s
function getMouseXY(e) {
var scrollTop = $(window).scrollTop();
if (e && e.pageX) {
mouseX = e.pageX;
mouseY = e.pageY - scrollTop;
} else {
mouseX = event.clientX + document.body.scrollLeft;
mouseY = event.clientY + document.body.scrollTop;
}
// catch possible negative values
if (mouseX < 0) {
mouseX = 0;
}
if (mouseY < 0) {
mouseY = 0;
}
$('#map').next('.point').css({
left: mouseX - 50,
top: mouseY - 70
})
}
// Set-up to use getMouseXY function onMouseMove
document.body.onmousemove = getMouseXY;
function resizeMap() {
r.changeSize(mapWidth, mapHeight, true, false);
if (useText == 'true') {
if(useTextAtBottom){
$(".mapWrapper").css({
'width': parseFloat(mapWidth, 10) + 'px',
'height': mapHeight + 'px'
});
}
else{
if (winWidth >= 768) {
$(".mapWrapper").css({
'width': (parseFloat(mapWidth, 10) + parseFloat(textAreaWidth, 10)) + 'px',
'height': mapHeight + 'px'
});
}
else{
$(".mapWrapper").css({
'width': parseFloat(mapWidth, 10) + 'px',
'height': mapHeight + 'px'
});
}
}
} else {
$(".mapWrapper").css({
'width': mapWidth + 'px',
'height': mapHeight + 'px'
});
}
}
function responsiveResize(){
winWidth = win.width();
if (winWidth >= 960) {
mapWidth = oMapWidth;
mapHeight = mapWidth/ratio;
resizeMap();
}
else if (winWidth < 960 && winWidth >= 768) {
mapWidth = useTextAtBottom ? 728 : 728 - (parseFloat(textAreaWidth) - parseFloat(textAreaPadding * 2));
mapHeight = mapWidth/ratio;
resizeMap();
}
else if (winWidth < 480) {
mapWidth = 280;
mapHeight = mapWidth/ratio;
resizeMap();
}
else if (winWidth < 768 && winWidth > 480) {
mapWidth = 400;
mapHeight = mapWidth/ratio;
resizeMap();
}
if(useTextAtBottom){
$("#text").css({
'width': parseFloat(mapWidth, 10) - parseFloat(textAreaPadding, 10)*2 + 'px',
'marginTop': (parseFloat(mapHeight, 10) + 20) + 'px'
});
}
else{
if (winWidth >= 768) {
$("#text").css({
'width': (parseFloat(textAreaWidth) - parseFloat(textAreaPadding * 2)) + 'px',
'height': (parseFloat(mapHeight) - parseFloat(textAreaPadding * 2)) + 'px',
'display': 'inline',
'float': 'right',
'padding': textAreaPadding + 'px',
'marginTop': 0
});
}
else{
$("#text").css({
'width': parseFloat(mapWidth, 10) - parseFloat(textAreaPadding, 10)*2 + 'px',
'marginTop': (parseFloat(mapHeight, 10) + 20) + 'px'
});
}
}
}
});