/******************************************************************

Library Calendar
(c) 2007 Websolvers, Inc.

By Michael Swain

These librarys may only be used with permission from Websolvers.

******************************************************************/

var wmBaseId = "dhtmlWM";
var wmBaseIdx = 0;
var wmBaseTag = "INPUT";
var wmApplyClass="watermark";

if(!window.getElementFor) {
function getElementFor(elm) {
	if(!elm.htmlFor) {
		return elm.getAttribute("for");
	} else {
		return elm.htmlFor;
	}
}
}

if(!(new Array()).indexOf) {
  Array.prototype.indexOf = function(search) {
    for(var i = 0; i < this.length; i++)
      if(this[i] == search)
        return i;
        
    return -1;
  }
}

if(!window.getElementStyle) {
function getElementStyle(elm) {
  if(elm.currentStyle)
    return elm.currentStyle;
  else if(document.defaultView && document.defaultView.getComputedStyle)
    return document.defaultView.getComputedStyle(elm,null);
  else
    return elm.style;
}
}
if(!window.setElementClass) {
function setElementClass(elm, className) {
  if(!elm.className && elm.className != "")
    elm.setAttribute("class", className);
  else
    elm.className = className;
}
}

if(!window.getElementClass) {
function getElementClass(elm) {
  if(!elm.className)
    return elm.getAttribute("class");
  else
    return elm.className;
}
}

if(!window.addPageLoadHandler) {
function addPageLoadHandler(func) {
	if(window.addEventListener) {
	    window.addEventListener("load", func, false);
	} else if(window.attachEvent) {
	    window.attachEvent("onload", func);
	} else if(document.getElementById) {
		if(!runPageLoadHandler.handlers)
			runPageLoadHandler.handlers = array();
		if(window.onload && window.onload != runPageLoadHandler)
			runPageLoadHandler.handlers[runPageLoadHandler.handlers.length] = window.onload;
			
	    window.onload = runPageLoadHandler;
		
		runPageLoadHandler.handlers[runPageLoadHandler.handlers.length] = func;
	}
}

function runPageLoadHandler(e) {
	var ret = true;
	
	for(var i = 0; i < runPageLoadHandler.handlers.length; i++)
		if(runPageLoadHandler.handlers[i] && !runPageLoadHandler.handlers[i](e))
			ret = false;
	
	return ret;
}
}

if(!window.applyFuncByTagClass) {
function applyFuncByTagClass(aryTagNames, aryClassNames, funcBuilder) {
	if(!funcBuilder)
		return;

	if(!aryTagNames || !aryTagNames.length)
		return;
	else if(!aryTagNames.join)
		aryTagNames = new Array(aryTagNames);
		
	if(!aryClassNames || !aryClassNames.length)
		return;
	else if(!aryClassNames.join)
		aryClassNames = new Array(aryClassNames);
		
	var aryElms = new Array();
	var tagIdx = 0;
	for(var tag = 0; tag < aryTagNames.length; tag++) {
		var aryTagElms = document.getElementsByTagName(aryTagNames[tag]);
		for(var elm = 0; elm < aryTagElms.length; elm++) {
			var classNames = getElementClass(aryTagElms[elm]);
			if(classNames && classNames.length) {
				classNames = classNames.split(' ');
				
				var match = false;
				for(var cls = 0; cls < aryClassNames.length; cls++) {
					if(match)
						break;
					for(var elmCls = 0; elmCls < classNames.length; elmCls++) {
						if((classNames[elmCls] == aryClassNames[cls])
							|| (classNames[elmCls].substring(0, aryClassNames[cls].length+1) == aryClassNames[cls]+'-')) {
							var tagElm = new Object();
							
							tagElm.match = aryClassNames[cls];
							tagElm.element = aryTagElms[elm];
							tagElm.params = classNames[elmCls].substring(aryClassNames[cls].length+1, classNames[elmCls].length).split('-'); 
							
							aryElms[aryElms.length] = tagElm;
							match = true;
							break;
						}
					}
				}
			}
		}
	}
	
	for(var elm = 0; elm < aryElms.length; elm++) {
		funcBuilder(aryElms[elm].match, aryElms[elm].element, aryElms[elm].params);
	}
}
}

function watermark_hasValue(watermark) {
    return (watermark.field.value) && (watermark.field.value.length > 0);
}

function watermark_show(watermark) {
    watermark.text.innerHTML = watermark.field.title;
    watermark.style.visibility = "visible";
}

function watermark_hide(watermark) {
    watermark.style.visibility = "hidden";
}

function watermark_fieldOnfocus(e) {
    if(this._wm_onfocus)
        return this._wm_onfocus(e);
        
    return true;
}

function watermark_fieldOnblur(e) {
    if(!watermark_hasValue(this.watermark))
        watermark_show(this.watermark);
    else
        watermark_hide(this.watermark);

    if(this._wm_onblur)
        return this._wm_onblur(e);
        
    return true;
}

function watermark_fieldOnkeyup(e) {
    if(!watermark_hasValue(this.watermark))
        watermark_show(this.watermark);
    else
        watermark_hide(this.watermark);

    if(this._wm_onkeyup)
        return this._wm_onkeyup(e);
        
    return true;
}

function watermark_onclick(e) {
    this.field.focus();
}

function watermark_fieldValueWatch(prop, oldval, newval) {
    if(!newval || !newval.length)
        watermark_show(this.watermark);
    else
        watermark_hide(this.watermark);
        
    return newval;
}

function watermark_fieldOnpropchange(e) {
    var elm = event.srcElement;
    if(event.propertyName == "value") {
        if(!watermark_hasValue(this.watermark))
            watermark_show(this.watermark);
        else
            watermark_hide(this.watermark);
    }
    
    if(this._wm_onpropchange)
        return this._wm_onpropchange(e);
        
    return true;
}

function buildWMField(classMatch, element, parameters) {
	var watermark = document.createElement("DIV");
	var wmClass = "watermark";

	if(parameters && parameters.length) {
		for(var param = 0; param < parameters.length; param++) {
			watermark["P_" + parameters[param].toLowerCase()] = 1;
		}
	}

	var matchParam = classMatch.split('-');
	if(matchParam.length > 1) {
		wmClass = matchParam[matchParam.length-1];
	}
	
	watermark.id = wmBaseId+(wmBaseIdx++);
	
	element.watermark = watermark;
	watermark.field = element;

    watermark.text = document.createElement("SPAN");
    watermark.appendChild(watermark.text);

	setElementClass(watermark, wmClass);

	watermark.style.position = 'absolute';
	watermark.style.visibility = 'hidden';

    var container = document.createElement("SPAN");
    container.style.position = "relative";
    container.id = wmBaseId+(wmBaseIdx)+"Container";
    element.parentNode.insertBefore(container, element);
    container.appendChild(element);
    container.appendChild(watermark);
    
    watermark.style.width = container.offsetWidth + "px";
    watermark.style.height = container.offsetHeight + "px";

	element._wm_onfocus = element.onfocus;
	element.onfocus = watermark_fieldOnfocus;
	element._wm_onblur = element.onblur;
	element.onblur = watermark_fieldOnblur;
	element._wm_onkeyup = element.onkeyup;
	element.onkeyup = watermark_fieldOnkeyup;
	
	if(element.watch) {
	    element.watch("value", watermark_fieldValueWatch);
	} else {
	    element._wm_onpropchange = element.onpropertychange;
	    element.onpropertychange = watermark_fieldOnpropchange;
	}
	
	watermark.onclick = watermark_onclick;
	
	if(!watermark_hasValue(watermark)) {
	    watermark_show(watermark);
	}
}

function initLibWatermark() {
    applyFuncByTagClass(wmBaseTag, "apply-" + wmApplyClass, buildWMField);
}

addPageLoadHandler(initLibWatermark);
