// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults
var ie = (document.all) ? true : false;
function add_row_to_table(table_id, row) {
    //alert("add_row_to_table:" + table_id + " row:" + row);
    new Insertion.Bottom(table_id, row);
    //alert('row inserted');
}

function remove_row_from_table(row_id) {
    //alert('row_id:' + row_id);
    Element.remove(row_id);
}

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

function initMCE() {
    if ("Safari" != BrowserDetect.browser) {
        tinyMCE.init({
    		mode : "textareas",
    		theme : "advanced",
        	theme_advanced_buttons1 : "bold,italic,underline,separator,bullist,numlist,outdent,indent,separator,undo,redo,link,unlink",
        	theme_advanced_buttons2 : "",
        	theme_advanced_buttons3 : "",
        	theme_advanced_toolbar_location : "top",
        	theme_advanced_toolbar_align : "left"
    	});
    }
}

function saveMceContent() {
    if (("Safari" != BrowserDetect.browser)) {
        // manually save the tinyMCE content for each textarea
        var tas = document.getElementsByTagName('textarea');
        for(var i = 0; i < tas.length; i++) {
            // snag the textarea
            var ta = tas[i];
            // put focus in the editor
            tinyMCE.execInstanceCommand(ta.id, 'mceFocus');
            // manually save the content
            ta.value = tinyMCE.getContent();
            //alert('tavalue:' + ta.value);
        }
    }
 }

 function removeMceBeforeAjax(editorID) {
    if (("Safari" != BrowserDetect.browser)) {
        tinyMCE.execCommand("mceRemoveControl", true, editorID);
    }
 }
  
 
 function addMceAfterAjax(editorID) {
    if (("Safari" != BrowserDetect.browser) && tinyMCE) {
        //tinyMCE.execCommand("mceAddControl", true, editorID);
        tinyMCE.execCommand("mceResetDesignMode", true, editorID);            
        tinyMCE.updateContent(editorID);
        tinyMCE.execCommand("mceFocus", true, editorID);            
    }
 }
 
 var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};

BrowserDetect.init();
var safari = ("Safari" == BrowserDetect.browser);


function validateAddress() {
  var address = document.getElementById("location_address1").value + " " +
  document.getElementById("location_address2").value + ", " +
  document.getElementById("location_postal_code").value + ", " +
  document.getElementById("location_region_id").value + ", " +      
  document.getElementById("location_ref_country_id").value;      
  var geocoder = new GClientGeocoder();

  geocoder.getLocations(address,
    function(response) {
      resolveLocation(response, onLocationResolved);
    }
  );
  return false;
}

function onLocationResolved(placemark) {
  if (placemark == null) {
    return;
  } else {
    document.getElementById("location[lattitude]").value = 
        placemark.Point.coordinates[1];
    document.getElementById("location[longitude]").value = 
        placemark.Point.coordinates[0];
    
    document.forms[0].submit();
  }
}

var onLoadActions = Array();
function registerOnLoadAction(action) {
  onLoadActions[onLoadActions.length] = action;
}
function runOnLoadActions() {
  for (var i = 0; i < onLoadActions.length; i++) {
    onLoadActions[i]();
  }
}

function addProfileMigraineResultsListener() {
    addRowHighlightListener("profileMigraineResultsTable");
}

function addMigraineResultsListener() {
    addRowHighlightListener("migraineResultsTable");
}

function addUserResultsListener () {
    addRowHighlightListener("userResultsTable");
}

function addForumResultsListener () {
    addRowHighlightListener("forum_table");
}

function addNexusResultsListener () {
    addRowHighlightListener("nexusResultsTable");
}

function addRowHighlightListener(tableId) {
    var table = $(tableId);
    if (!table) return;
    var trs = table.getElementsByTagName("tr");
    for(i=0; i<trs.length; i++) {
        trs[i].onmouseover = function(e) {    
            var source = ie? event.srcElement : e.target;
            if(getAnchorForRow(this)) {
            	source.className = source.className + " hovered";
            	this.className = this.className + " highlighted";
            }
	    }

		trs[i].onmouseout = function(e) {
			var source = ie? event.srcElement : e.target;
			if(getAnchorForRow(this)) {
                if (!safari) {
                    source.className = source.className.replace(/hovered/, "");
                    this.className = this.className.replace(/highlighted/, "");
                } else {
                    // safari workaround for replace method problems.
                    var newTrClass = removeFrom(source.className, "hovered");
                    var newTableClass = removeFrom(this.className, "highlighted");
                    source.className = "";
                    this.className = "";
                    source.className = newTrClass;
                    this.className = newTableClass;
                }    
			}
		}
				
		trs[i].onclick = function(e) {
			var source = ie? event.srcElement : e.target;
			
			if(getAnchorForRow(this)) {
        		var anchor = getAnchorForRow(this);
        		if(anchor) location.href = anchor.href;
			}
		}
	}
}

// return source string without removeString
function removeFrom(source, removeString) {
  
    if (source && source.indexOf(removeString) > -1) {
        var index = source.indexOf(removeString);
        var newVal = source.substring(0,index) + source.substring(index + removeString.length, source.length);
        return newVal;
    } else {
        return source
    }
}

function getAnchorForRow(row) {
	// go through first two columns backwards
	var cols = row.getElementsByTagName("td");
	if(cols && cols.length > 1) {
		for(i=0; i<=1; i++) {
			var anchors = cols[i].getElementsByTagName("a");
			if(anchors.length > 0) {
				return anchors[0];	
			}
		}
	}
	// the first 2 columns don't contain an anchor
	return null;
}


