
var Map = new Class({

    options: {
        markers: [],
        tabLabels: ['Details', 'Directions', 'Send', 'Text Msg']
    },

    initialize: function(ct, options) {
        this.setOptions(options);

        this.map = this.createMap($(ct));
        this.map.addControl(new GLargeMapControl());

        this.points = [];
        this.markers = [];
        for (var i = 0, l = this.options.markers.length; i < l; i++)
            this.markers.push(this.createTabbedMarker(this.options.markers[i]));

        this.map.setCenter(this.points[0], 13);

        for (var i = 0, l = this.markers.length; i < l; i++)
          this.map.addOverlay(this.markers[i]);
    },

    createMap: function(mapDiv) {
        var map;

        if (! GMap2) alert('Error loading GMap2!');

        if (GBrowserIsCompatible()) {
            map = new GMap2(mapDiv);
        } else {
            alert('browser not compatible with Google Maps');
        }

        return map;
    },

    createTabbedMarker: function(data) {
        var point = new GLatLng(data['latitude'], data['longitud']);
        this.points.push(point);

        var marker = new GMarker(point);
        var labels = this.options.tabLabels;
        var htmls = [];

        var vid = data['detailsTab']['video'];
        if (vid)
          data['detailsTab']['video'] = this.convertYoutubeUrl(vid);
        htmls.push(this.substitute(this.detailsTpl, data['detailsTab']));

        htmls.push(this.substitute(this.dirsTpl, data['directionsTab']));

        htmls.push(this.substitute(this.friendTpl, data['friendTab']));

        htmls.push(this.substitute(this.smsTpl, data['smsTab']));

        GEvent.addListener(marker, "click", function() {
            // adjust the width so that the info window is large enough for this many tabs
            if (htmls.length > 2) {
                for (var i = 0, l = htmls.length; i < l; i++)
                    htmls[i] = '<div style="width:'+(60+htmls.length*88)+'px">' + htmls[i] + '</div>';
            }
            var tabs = [];
            for (var i=0; i<htmls.length; i++) {
                tabs.push(new GInfoWindowTab(labels[i],htmls[i]));
            }
            marker.openInfoWindowTabsHtml(tabs);
        });

        return marker;
    },

    convertYoutubeUrl: function(url) {
        return url.replace(/watch\?v=(.*)/, "v/$1");
    },

    substitute: function(str, object) {
        return str.replace((/\\?\{([^}]+)\}/g), function(match, name) {
            if (match.charAt(0) == '\\') return match.slice(1);
                return (object[name] != undefined) ? object[name] : '';
        });
    },


    detailsTpl: '\
        <div id="div_hotel"> \
          <table align="center" width="410" height="240" border="0" cellpadding="0" cellspacing="1" bgcolor="#EAEAEA"> \
            <tr> \
              <td height="16" colspan="2" align="center" class="maptxt"> \
                <h2 id="attname" class="txt">{name}</h2> \
              </td> \
            </tr> \
            <tr> \
              <td width="165" align="center" valign="top" class="maptxt"> \
                <br/>{address}<br/><br/> \
                {phone1}<br/> \
                {phone2}<br/><br/> \
                {description} \
              </td> \
              <td width="229" align="center" valign="top"> \
                <div id="div_video"> \
                  <object width="200" height="165"> \
                    <param value="{video}&rel=0&autoplay=1" name="movie"/> \
                    <param value="transparent" name="wmode"/> \
                    <embed width="200" height="165" wmode="transparent" type="application/x-shockwave-flash" src="{video}&rel=0&autoplay=1"/> \
                  </object> \
                </div> \
              </td> \
            </tr> \
          </table> \
        </div>',

    dirsTpl: '\
        <div> \
          <table align="center" width="410" height="220" border="0" cellpadding="0" cellspacing="4" bgcolor="#EAEAEA"> \
            <tr> \
              <td valign="top" class="maptxt"> \
                <h2 class="txt">Enter Address</h2><br> \
                <input type="hidden" id="__dirmainaddr" name="mainaddr" value="{mainAddress}" /> \
                <span class="maptxt" ><b>Address</b><br/></span> \
                <input type="text" maxlength="40" size="30" id="__diraddress" name="googleAddress" value="{address}"><br/><br/> \
                <span class="maptxt"><b>City, State or Zip</b><br/></span> \
                <input type="text" maxlength="40" size="30" id="__dirstate" name="googleCSZ" value="{state}"><br/><br/> \
                <input type="button" name="btnMap" value="Direction To"  onclick="Map.show_google_dirs(1);"> \
                &nbsp;<br/><br/> \
                <input type="button" name="btnMap" value="Direction From" onclick="Map.show_google_dirs(2);"> \
              </td> \
            </tr> \
          </table> \
        </div>',

    friendTpl: '\
        <div> \
          <form id="__frnsend" action="mailfriend.php" method="post" onsubmit="return Map.validate_friend_form()"> \
            <table align="center" width="410" height="220" border="0" cellpadding="0" cellspacing="1" bgcolor="#EAEAEA"> \
              <tr> \
                <td id="__frnsent_msg" colspan="2" align="center"> \
                </td> \
              </tr> \
              <tr> \
                <td class="maptxt">Your Name:</td> \
                <td> \
                  <input type="text" name="name" id="__frnname" maxlength="50" style="width:200px;"/> \
                  </td> \
                </tr> \
              <tr> \
                <td class="maptxt">Your Email:</td> \
                <td> \
                  <input type="text" name="email" id="__frnemail" maxlength="60" style="width:200px;"/> \
                </td> \
              </tr> \
              <tr> \
                <td class="maptxt">Friend&#39;s Name:</td> \
                <td> \
                  <input type="text" name="friendname" id="__frnfriendname" maxlength="50" style="width:200px;"/> \
                </td> \
              </tr> \
              <tr> \
                <td class="maptxt">Friend&#39;s Email:</td> \
                <td> \
                  <input type="text" name="friendemail" id="__frnfriendemail" maxlength="50" style="width:200px;"/> \
                </td> \
              </tr> \
              <tr> \
                <td class="maptxt" valign="top">Message:<br />(optional)</td> \
                <td> \
					  <textarea cols="30" rows="3" name="message" id="__frnmessage" style="width: 200px;"></textarea> \
                </td> \
              </tr> \
              <tr> \
                <td colspan="2"> \
                  <br/> \
                  <input type="submit" name="submit" value="Send to a friend" /> \
                </td> \
              </tr> \
            </table> \
          </form> \
        </div>',

    smsTpl: '\
        <div> \
			<form id="__smssending_form" action="http://www.google.com/sendtophone" method="post" target="blank" onsubmit="return Map.validate_sms_form()"> \
			<input type="hidden" name="gl" value="US" /> \
			<input type="hidden" name="hl" value="en" /> \
			<input type="hidden" name="client" value="navclient-ffsms" /> \
			<input type="hidden" name="text" value="test" /> \
			<input type="hidden" name="from" value="" /> \
			<input type="hidden" name="source" value="" /> \
			<input type="hidden" name="c" value="1" /> \
			<input type="hidden" name="ec" value="on" /> \
			<input type="hidden" name="subject" value="Plantationinn.com" /> \
            <table align="center" width="410" height="220" border="0" cellpadding="0" cellspacing="1" bgcolor="#EAEAEA"> \
              <tr> \
                <td id="__smssent_msg" colspan="2" align="center"> \
                </td> \
              </tr> \
              <tr> \
                <td class="maptxt">Phone number:</td> \
                <td> \
					<input type="text" name="mobile_user_id" id="__smsmobile_user_id" value="" maxlength="50" style="width:200px;"/> \
                  </td> \
                </tr> \
              <tr> \
              <tr> \
                <td class="maptxt">Carrier:</td> \
                <td> \
                	<select name="carrier" id="__smscarrier" style="width:200px;"> \
					  <option  value="">Select your carrier</option> \
					  <option  value="AIRPEAK_US">Airpeak</option> \
					  <option  value="ACS">Alaska Communications Systems</option> \
					  <option  value="ALASKA_WIRELESS_US">Alaska Wireless</option> \
					  <option  value="ALLTEL">Alltel</option> \
					  <option  value="APPALACHIAN_WIRELESS">Appalachian Wireless</option> \
					  <option  value="ATT">AT&amp;T</option> \
					  <option  value="BLUECELL_US">Bluegrass Cellular</option> \
					  <option  value="BOOST_MOBILE_US">Boost Mobile</option> \
					  <option  value="CAROLINA_WEST">Carolina West</option> \
					  <option  value="CELLCOM_US">Cellcom</option> \
					  <option  value="CELLULAR_ONE_NEPA_US">Cellular One NEPA</option> \
					  <option  value="SLO_CELLULAR_US">Cellular One of San Luis Obispo</option> \
					  <option  value="CELL_SOUTH">Cellular South</option> \
					  <option  value="CELLULARONE">CellularOne</option> \
					  <option  value="CENTENNIAL">Centennial Wireless</option> \
					  <option  value="CINCINNATI_BELL">Cincinnati Bell</option> \
					  <option  value="COPPER_VALLEY_US">Copper Valley</option> \
					  <option  value="CORR_WIRELESS_US">Corr Wireless</option> \
					  <option  value="EDGE">Edge Wireless</option> \
					  <option  value="EINSTEIN_WIRELESS_US">einstein wireless</option> \
					  <option  value="FARMERS">Farmers Wireless</option> \
					  <option  value="GOLDEN_STATE_CELLULAR_US">Golden State Cellular</option> \
					  <option  value="HELIO">Helio</option> \
					  <option  value="IVCELLULAR_US">Illinois Valley Cellular</option> \
					  <option  value="IMMIX">Immix Wireless</option> \
					  <option  value="INLAND_CELLULAR_US">Inland Cellular</option> \
					  <option  value="METROPCS">MetroPCS</option> \
					  <option  value="MIDWEST_WIRELESS">Midwest Wireless</option> \
					  <option  value="MTA_WIRELESS_US">MTA Wireless</option> \
					  <option  value="NEXTEL">Nextel</option> \
					  <option  value="NTELOS_US">nTelos</option> \
					  <option  value="PIONEER_CELLULAR_US">Pioneer Cellular</option> \
					  <option  value="PLATEAU_US">Plateau Wireless</option> \
					  <option  value="QWEST">Qwest</option> \
					  <option  value="SOUTHERNLINC_US">SouthernLINC Wireless</option> \
					  <option  value="SPRINT">Sprint</option> \
					  <option  value="SRT_US">SRT WIRELESS</option> \
					  <option  value="SUNCOM">SunCom Wireless</option> \
					  <option  value="SUREWEST_US">SureWest</option> \
					  <option  value="TMOBILE">T-Mobile</option> \
					  <option  value="RCC">Unicel</option> \
					  <option  value="USCELLULAR">US Cellular</option> \
					  <option  value="USAMOBILITY">USAMobility</option> \
					  <option  value="VERIZON">Verizon</option> \
					  <option  value="VIRGIN">Virgin Mobile</option> \
					  <option  value="WEST_CENTRAL_US">West Central Wireless</option> \
					  <option  value="WESTERN_WIRELESS">Western Wireless</option> \
					 </select> \
                  </td> \
                </tr> \
              <tr> \
                <td class="maptxt">Message:</td> \
                <td> \
					<textarea name="text" cols="30" rows="3" style="width:200px;">Check out www.plantationinn.com - 352-795-4211</textarea> \
                  </td> \
                </tr> \
              <tr> \
                <td colspan="2"> \
                  <br/> \
                  <input type="submit" name="send_button" value="Send" /> \
                </td> \
              </tr> \
                <tr> \
                  <td colspan="2"  style="color: darkblue;font-size:x-small"> \
	                  This information may be logged. See <a href="http://www.google.com/intl/en/privacy.html" target="_blank">Privacy Policy</a>. \
                  </td> \
                </tr> \
            </table> \
          </form> \
        </div>'
});
Map.implement(new Options);


Map.validate_empty = function(el, msg) {
  var obj = document.getElementById(el);

  if (obj.value.replace(' ','') == '') {
	    alert(msg);
	    obj.focus();
	    return false;
  }

  return true;
};

Map.validate_email = function(el, msg) {
  var obj = document.getElementById(el);
  var myregexp = new RegExp("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
	
  if (obj.value.replace(' ','') == '')
	    return true;
		
  if (myregexp.exec(obj.value) == null) {
      alert(msg);
	    obj.focus();	
	    return false;
  }
	
  return true;	
};

Map.validate_drop = function(el, msg, initialValue) {
    var obj=document.getElementById(el);
    if (obj==null)
      return true;

	  if (obj.value.trim()==initialValue){		
		  alert(msg);
		  try { obj.focus(); } catch(e){msg='';}
		  return false;
	  }
	
	  return true;
};

Map.show_google_dirs = function(d) {
    if(!Map.validate_empty('__dirstate','Please, enter city, state or zip.')) {
      return false;
    }

    var mainAddr = document.getElementById('__dirmainaddr').value;
    var uri = "";		
    // d = 1: To directions
    if (d == 1) {
	    uri = "http://maps.google.com/maps?saddr=" + document.getElementById('__diraddress').value + "%2c+" + document.getElementById('__dirstate').value + "&daddr=" + mainAddr;
    }
    else {
    // d = 2: From directions
	    uri = "http://maps.google.com/maps?daddr=" + document.getElementById('__diraddress').value + "%2c+" + document.getElementById('__dirstate').value + "&saddr=" + mainAddr;
    }
    
    window.open(uri, "googlemap");

};

Map.validate_friend_form = function() {
    if(!Map.validate_empty('__frnname','Please, enter name.')){return false;}
    if(!Map.validate_empty('__frnemail','Please, enter email.')){return false;}
    if(!Map.validate_empty('__frnfriendname','Please, enter friend\'s name.')){return false;}
    if(!Map.validate_empty('__frnfriendemail','Please, enter friend\'s email.')){return false;}
    
    if(!Map.validate_email('__frnemail','Please, enter valid email.')){return false;}
    if(!Map.validate_email('__frnfriendemail','Please, enter valid friend\'s email.')){return false;}
   
$('__frnsend').send( {'events': {'success': function ( request ) { console.info( request ); } } });

    document.getElementById('__frnsent_msg').innerHTML = 'Email sent!';
    setTimeout(function() {document.getElementById('__frnsent_msg').innerHTML = '';}, 3000);

    document.getElementById('__frnname').value = '';
    document.getElementById('__frnemail').value = '';
    document.getElementById('__frnfriendname').value = '';
    document.getElementById('__frnfriendemail').value = ''; 
    document.getElementById('__frnmessage').value = '';
    return false;
};

Map.validate_sms_form = function() {
    if(!Map.validate_empty('__smsmobile_user_id','Please enter mobile phone number.')){return false;}
    if(!Map.validate_drop('__smscarrier','Please select your carrier from the list.','')){return false;}

    $('__smssending_form').send();

    document.getElementById('__smssent_msg').innerHTML = 'Text message sent!';
    setTimeout(function() {document.getElementById('__smssent_msg').innerHTML = '';}, 3000);

    document.getElementById('__smsmobile_user_id').value = '';
    document.getElementById('__smscarrier').value = '';
    return true;
};

