/*
Plugin Name: Skinnytip Tooltips
Plugin URI: http://www.ebrueggeman.com/skinnytip
Description: Простой генератор всплывающих подсказок. Полный перевод на русский - <a href="http://blogav.ru" target="_blank">GAV</a>
Version: 1.03
Author: Elliott Brueggeman
Author URI: http://www.ebrueggeman.com
*/

//Call mouse capture handler function on page load
captureMouse();

//CUSTOM VARS - Initialized below
var v_divname;
var v_text;
var v_title;
var v_xoffset;
var v_yoffset;
var v_backcolor;
var v_bordercolor;
var v_textcolor;
var v_titletextcolor;
var v_width;
var v_border;
var v_title_padding;
var v_content_padding;
var v_fontface;
var v_fontsize;
var v_titlefontsize;

//INTERNAL VARIABLES
var v_xcoordinate = 0;
var v_ycoordinate = 0;
var v_visible = 0;
var v_havemouse = 0;
var v_layer = null;

function tooltip(displaytext, title, commands) {
//Reset variables for this tool tip
init_tooltip();

//Title and Text
v_title=title;
v_text=displaytext;

//Parse commands if any
parseCommands(commands);


if (v_layer) { 
v_layer=getLayer(v_divname); 
}

if (!(v_layer=createDivContainer())) { 
return false;
}

mainMethod();
}

function init_tooltip() {

v_divname = 'tiplayer';
v_text = 'Default Text';
v_title = '';

//UI Variables
v_xoffset = 15;
v_yoffset = 15;
v_backcolor = '#FFFFFF';
v_bordercolor = '#a5a5a5';
v_textcolor = '#555';
v_titletextcolor = '#000000';
v_width = 200;

v_border = 1;
v_title_padding = '1px';
v_content_padding = '1px 3px';

v_fontface = 'Arial, Helvetica, Sans-Serif';
v_fontsize = 14;
v_titlefontsize = 14;

//SYSTEM VARIABLES
v_visible = 0;
v_layer = null;
}

function parseCommands(commands) {
if (commands != null) {
var comArray = commands.split(',');
for (var i = 0; i < comArray.length; i++) {
var args = comArray[i].split(':');
eval('v_' + trimWhitespace(args[0]) + '="' + trimWhitespace(args[1]) + '"');
}
}
}

// Clears popups if appropriate
function hideTip() {
if (v_visible == 1) {
if (v_layer != null) {
v_layer.style.visibility = 'hidden';
v_visible = 0;
}
}
return true;
}

function mainMethod() {
v_visible = 0;

var html = makeHTML(v_text, v_title);
createPopup(html);

//if we have mouse coordinates, position layer and make visible
if (v_havemouse == 1) {
positionLayer();
v_visible = 1;
v_layer.style.visibility = 'visible';
}
}

function makeHTML(text, title) {

var container_style = 'width:' + v_width + 'px;';
container_style += 'border:' + v_border + 'px solid ' + v_bordercolor + ';';
container_style += 'background-color:' + v_backcolor + ';';
container_style += 'font-family:' + v_fontface + ';';
container_style += 'font-size:' + v_fontsize + 'px;';

var title_style = 'background-color:' + v_bordercolor + ';';
title_style += 'padding:' + v_title_padding + ';';
title_style += 'color:' + v_titletextcolor + ';';

var content_style = 'padding:' + v_content_padding + ';';
content_style += 'color:' + v_textcolor + ';';

var txt = '<div id="skinnytip_container" style="-moz-border-radius: 11px;-webkit-border-radius: 11px;border-radius: 11px; border-color:#c2c2c2; color:#303030;	padding:3px;' + container_style + '">';
if (title!=null && title.length>0) {
txt += '<div id="skinnytip_title" style="' + title_style + '">' + title + '</div>';
}
txt += '<div id="skinnytip_content" style="' + content_style + '">' + text + '</div>';
txt += '</div>';

return txt;
}

//Positions popup according to mouse input
function positionLayer() {

var placeX = 300;
var placeY = 300;

//get final placement
placeX = horizontalPlacement();
placeY = verticalPlacement();

//Move the object
v_layer.style.left = placeX + 'px';
v_layer.style.top = placeY + 'px';
}

//called when the mouse moves
//sets mouse related variables
function mouseMoveHandler(e) {
if (!e) {
e = event;
}
if (e.clientX) {
 //if there is an x pos property
 //GET MOUSE LOCATION
v_xcoordinate = mouseX(e);
v_ycoordinate = mouseY(e);
v_havemouse = 1;
}
if (v_visible == 1) { 
positionLayer();
}
}

//get mouse x coordinate
function mouseX(evt) {
if (evt.pageX) return evt.pageX;
else if (evt.clientX) {
   return evt.clientX + (document.documentElement.scrollLeft ?
   document.documentElement.scrollLeft :
   document.body.scrollLeft);
}
else {
return null;
}
}

//get mouse y coordinate
function mouseY(evt) {
if (evt.pageY) { 
return evt.pageY; 
}
else if (evt.clientY) {
   return evt.clientY + (document.documentElement.scrollTop ?
   document.documentElement.scrollTop :
   document.body.scrollTop);
}
else { 
return null;
}
}

//Set mouse handler
function captureMouse() {
document.onmousemove = mouseMoveHandler;
}

//Creates the popup
function createPopup(input) {

var popupwidth = v_width;
var text;
var zindex;

text =  createBackLayer(popupwidth,zindex++);
text += '<div style="position: absolute; top: 0; left: 0; width: ' + popupwidth + 'px; z-index: ' + zindex + ';">' + input + '</div>';

if (typeof v_layer.innerHTML != 'undefined') {
v_layer.innerHTML = text;
} 

//After writing html measure height of backlayer to set height of iframe
var backlayer=self.document.getElementById("backdrop");
var container=self.document.getElementById("skinnytip_container");
backlayer.height = container.offsetHeight;
}

//Back layer prevents forms from showing through popups
function createBackLayer(width, Z) {
//Create backdrop with 0 height
return '<iframe id="backdrop" frameborder="0" scrolling="no" width="' + width + '" height="0" style="z-index: ' + Z + '; filter: Beta(Style=0,Opacity=0);"><p></iframe>';
}

//get horizontal box placement
function horizontalPlacement() {
placeX = v_xcoordinate + v_xoffset;
return placeX;
}

//get vertical box placement
function verticalPlacement() {
return v_ycoordinate + v_yoffset;
}

// create the div container for popup content if it doesn't exist
function createDivContainer() {
var divContainer = self.document.getElementById(v_divname);
return divContainer;
}

function trimWhitespace(str) {  
while(str.charAt(0) == (" ") ) {  
str = str.substring(1);
}
while(str.charAt(str.length-1) == " " ) {  
str = str.substring(0,str.length-1);
}
return str;
}
