// String object prototypes
String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}

function isValidEmailAddress(emailaddress) {
    var patt = /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/;
    return (emailaddress.search(patt) != -1);
}

function isValidFlickID(emailaddress) {
    var patt = /^[A-Z0-9]+@[A-Z0-9]+$/;
    return (emailaddress.search(patt) != -1);
}

function highlight(obj) {
	var el = document.getElementById(obj);
	el.style.backgroundColor = '#666666';
	el.style.backgroundImage="url(/images/edit_this.gif)";
	el.style.backgroundPosition="left";
	el.style.backgroundRepeat="repeat";

}

function unhighlight(obj) {
	var el = document.getElementById(obj);
	el.style.backgroundColor = '#FFFFFF';
	el.style.backgroundImage="none";
}
		

function getStyleObject(objectId) {
  // checkW3C DOM, then MSIE 4, then NN 4.
  //
  if(document.getElementById && document.getElementById(objectId)) {
		return document.getElementById(objectId).style;
   }
   else if (document.all && document.all(objectId)) {  
		return document.all(objectId).style;
   } 
   else if (document.layers && document.layers[objectId]) { 
		return document.layers[objectId];
   } else {
		return false;
   }
}

function changeObjectVisibility(objectId, newVisibility) {
	// first get a reference to the cross-browser style object 
	// and make sure the object exists
	var styleObject = getStyleObject(objectId);
	if(styleObject) {
		styleObject.display = newVisibility;
		return true;
	} else {
		// we couldn't find the object, so we can't change its visibility
		return false;
	}
}

function getBaseLocationUrl()
{
    var baseurl = window.location.href;
    if(window.location.search.length > 0) {
      baseurl = baseurl.substr(0, baseurl.length - window.location.search.length);
    }
    return baseurl;
}

function switchDiv(div_id, value)
{
    var style_sheet = getStyleObject(div_id);
    if (style_sheet)
    {
        changeObjectVisibility(div_id,value);
    }
    else 
    {
        alert("sorry, you need the latest version of internet explorer or firefox");
    }
}

function toggleLayer( whichLayer )
{
    var elem, vis;
    if( document.getElementById ) // this is the way the standards work
        elem = document.getElementById( whichLayer );
    else if( document.all ) // this is the way old msie versions work
        elem = document.all[whichLayer];
    else if( document.layers ) // this is the way nn4 works
        elem = document.layers[whichLayer];
    vis = elem.style;
    // if the style.display value is blank we try to figure it out here
    if(vis.display==''&&elem.offsetWidth!=undefined&&elem.offsetHeight!=undefined)
        vis.display = (elem.offsetWidth!=0&&elem.offsetHeight!=0)?'block':'none';
    vis.display = (vis.display==''||vis.display=='block')?'none':'block';
}

function mySqlDateToDate(mySqlDate) {
    // mySQL dates are in the form yyyy-mm-dd
    var ukDate = '';
    if(mySqlDate.length >= 10) {
        ukDate = mySqlDate.substr(8,2) + '/' + mySqlDate.substr(5,2) + '/' + mySqlDate.substr(0,4);
    }
    return ukDate;
}

function formatDate(dateStr, includeTime){
    // Defaults
    includeTime = (includeTime == null) ? true : includeTime;
    
	// date can be in msec or in a format recognized by Date.parse()
	var d = new Date(dateStr);
	return d.toDateString();
	
	var days_of_week = Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
	var day_of_week = days_of_week[d.getDay()];
	
	var year = d.getFullYear();
	var months = Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
	var month = months[d.getMonth()];
	var day = d.getDate();
	
	var date_formatted = '';
	if(!includeTime) {
	    date_formatted = day_of_week+' '+month+' '+day+' '+year;
	} else {
	    var hour = d.getHours();
	    var minute = d.getMinutes();
	    var am_pm = 'am';
    	
	    if(hour == 0) {
		    hour = 12;
	    } else if (hour == 12) {
		    am_pm = 'pm';
	    } else if (hour > 12) {
		    hour -= 12;
		    am_pm = 'pm';
	    }
	    if(minute < 10) { minute = '0'+minute; };
    	
	    date_formatted = day_of_week+' '+month+' '+day+' '+year+' '+hour+':'+minute+am_pm;
	}
	return date_formatted;
}

function getCSSRule(ruleName, deleteFlag) {
   ruleName=ruleName.toLowerCase();
   if (document.styleSheets) {
      for (var i=0; i<document.styleSheets.length; i++) {
         var styleSheet=document.styleSheets[i];
         var ii=0;
         var cssRule=false;
         do {
            if (styleSheet.cssRules) {
               cssRule = styleSheet.cssRules[ii];
            } else {
               cssRule = styleSheet.rules[ii];
            }
            if (cssRule)  {
               if (cssRule.selectorText.toLowerCase()==ruleName) {
                  if (deleteFlag=='delete') {
                     if (styleSheet.cssRules) {
                        styleSheet.deleteRule(ii);
                     } else {
                        styleSheet.removeRule(ii);
                     }
                     return true;
                  } else {
                     return cssRule;
                  }
               }
            }
            ii++;
         } while (cssRule)
      }
   }
   return false;
}

function killCSSRule(ruleName) {
   return getCSSRule(ruleName,'delete');
}

function addCSSRule(ruleName) {
   if (document.styleSheets) {
      if (!getCSSRule(ruleName)) {
         if (document.styleSheets[0].addRule) {
            document.styleSheets[0].addRule(ruleName, null,0);
         } else {
            document.styleSheets[0].insertRule(ruleName+' { }', 0);
         }
      }
   }
   return getCSSRule(ruleName);
}

// cmsObj object to help manipulate some common DOM and event manipulations
;(function(){
    this.cmsObj = {
    
        onLoadHandlers: null,
        
        event: function(e) {
            var eObj = new Object();
            eObj.event = (window.event ? window.event : e);
            eObj.target = (window.event) ? window.event.srcElement : e.target;
            eObj.relatedTarget = (window.event ? (window.event.type == 'mouseover' ? window.event.fromElement : window.event.toElement) : e.relatedTarget);

            eObj.cancel = function (){
                if(window.event) { this.event.cancelBubble=true; } else { this.event.stopPropagation(); }
            }
            return eObj;
        },
        
        isChildOf: function(parent, child) {
            if(parent == undefined || child == undefined) return false;
            for(p = this.getParent(child); this.getParent(p); p = this.getParent(p)) {
                if(p.id == parent.id) return(true);
            }
            return(false);
        },
        
        isImmediateChild: function(parent, child) {
            if(parent == undefined || child == undefined) return false;
            return(this.getParent(child).id == parent.id);
        },
        
        getParent: function(elem) {
            return(elem.parentElement ? elem.parentElement : (elem.parentNode ? elem.parentNode : null));
        },
        
        addWindowOnload: function (handler) {
            if(window.onLoadHandlers == undefined) window.onLoadHandlers = new Array();
            window.onLoadHandlers.push(handler);
            window.onload = function() {
                for(h=0; h<window.onLoadHandlers.length; h++) {
                    window.onLoadHandlers[h]();
                }
            };
        }
    }
})();

// cmsMenus object to manage popup menus
;(function(){
    this.cmsMenus = {
        
        activeMenuList: [],
        
        initPopupMenu: function (menu_id, css_property, show_value, hide_value) {
            var ulMenu = document.getElementById(menu_id);
            //cmsMenus._setHoverMenuEvents(ulMenu, css_property, show_value, hide_value);
            cmsMenus._setClickMenuEvents(ulMenu, css_property, show_value, hide_value);
            document.onclick = function(e) {
                var eventObj = cmsObj.event(e);
                for(i = cmsMenus.activeMenuList.length - 1; i >= 0; i--) {
                    if(!cmsObj.isChildOf(cmsMenus.activeMenuList[i], eventObj.target)) {
                        p = cmsMenus.activeMenuList.pop();
                        p.style[css_property] = hide_value;
                    }
                }
            }
        },
        
        getULChild: function(elem) {
            var ulObj = null;
            if(elem != undefined && elem != null) {
                var ulSubItems = elem.getElementsByTagName("UL");
                if(ulSubItems.length > 0) {
                    var ulObj = ulSubItems[0];
                }
            }
            return ulObj;
        },
        
        _setClickMenuEvents: function (ulMenuObj, css_property, show_value, hide_value) {
            if(ulMenuObj) {
                for (var i=0; i<ulMenuObj.childNodes.length; i++) {
                    var liNode = ulMenuObj.childNodes[i];
                    if (liNode.nodeName=="LI") {
                        liNode.onclick = function(e) {
                            var eventObj = cmsObj.event(e);
                            var ulChild = cmsMenus.getULChild(this);
                            if(!cmsObj.isImmediateChild(this, eventObj.target)) {
                                return true;
                            }
                            if(ulChild == null) {
                                while(cmsMenus.activeMenuList.length > 0) {
                                    p = cmsMenus.activeMenuList.pop();
                                    p.style[css_property] = hide_value;
                                }
                                return(true);
                            }
                            for(i = cmsMenus.activeMenuList.length - 1; i >= 0; i--) {
                                if(!cmsObj.isChildOf(cmsMenus.activeMenuList[i], this)) {
                                    p = cmsMenus.activeMenuList.pop();
                                    p.style[css_property] = hide_value;
                                }
                            }
                            ulChild.style[css_property] = show_value;
                            cmsMenus.activeMenuList.push(ulChild);
                            eventObj.cancel();
                            return(false);
                        }
                        
                        var ulChild = cmsMenus.getULChild(liNode);
                        if(ulChild != null) {
                            cmsMenus._setClickMenuEvents(ulChild, css_property, show_value, hide_value);
                        }
                    }
                }
            }
        },
            
        _setHoverMenuEvents: function (ulMenuObj, css_property, show_value, hide_value) {
            if(ulMenuObj) {
                for (var i=0; i<ulMenuObj.childNodes.length; i++) {
                    var liNode = ulMenuObj.childNodes[i];
                    if (liNode.nodeName=="LI") {
                        var ulChild = cmsMenus.getULChild(liNode);
                        if(ulChild != null) {
                            liNode.onmouseover = function(e) {
                                var eventObj = cmsObj.event(e);
                                var ulObj = cmsMenus.getULChild(this);
                                ulObj.style[css_property] = show_value;
                                eventObj.cancel();
                                return(false);
                            }
                            liNode.onmouseout = function(e) {
                                var eventObj = cmsObj.event(e);
                                if(!cmsObj.isChildOf(this, eventObj.relatedTarget)) {
                                    var ulObj = cmsMenus.getULChild(this);
                                    ulObj.style[css_property] = hide_value;
                                } else {
                                    eventObj.cancel();
                                    return(false);
                                }
                            }
                            cmsMenus._setHoverMenuEvents(ulChild, css_property, show_value, hide_value);
                        }
                    }
                }
            }
        }
    }
})();

