// 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);
}