// Missing Validate numeric function
  var numbers=".0123456789";
  function isNumeric(x) {

    // is x a String or a character?
    if(x.length>1) {
      // remove negative sign
      x=Math.abs(x)+"";
      for(j=0;j<x.length;j++) {
        // call isNumeric recursively for each character
        number=isNumeric(x.substring(j,j+1));
        if(!number) return number;
      }
      return number;
    }
    else {
      // if x is number return true
      if(numbers.indexOf(x)>=0) return true;
      return false;
    }
  }


function validateNumeric(n){


	if (isNumeric(n.value))
	{
		return true;
	}
	else
	{
		n.select();
		n.className='error';
		alert("value "+n.value+" is not numeric")
		n.select();
		return false;
	}
}

// setup shortcuts to the YAHOO libruary
var Connect = YAHOO.util.Connect;
var DS_XHR = YAHOO.widget.DS_XHR;
var Dom = YAHOO.util.Dom;
var Event = YAHOO.util.Event;


// table to grid
// setup variables used globally
var bodyEl

// iniate the page layout
framesHelper = {
	config : {
		body : {
			marginTop : 1,
			marginRight : 1,
			marginBottom : 0,
			marginLeft : 0
		},
		pW : {
			el : null
		},
		pWP : {
			el : null,	
			paddingTop:4,
			paddingRight:4,
			paddingBottom:4,
			paddingleft:4
		},
		pC : {
			el : null
		},
		pB : {
			el : null
		},
		tTG : {
			el : null
		},
		viewport : {
			w : 0,
			h : 0
		}
	},
	init : function(e){
		
		htmlEl = document.getElementsByTagName("html")[0];
		bodyEl = document.getElementsByTagName("body")[0];
		
	
		
		if(Dom.hasClass(bodyEl,"iframed")){
			autofitIframe("external_project_iframe");
			return false;
		}
		
		htmlEl.style.overflow = "hidden";
		bodyEl.style.overflow = "hidden";

		if(BrowserDetect.browser!="Explorer") {
			Dom.addClass(bodyEl,"nonIE");
		}else{
			Dom.addClass(bodyEl,"IE");
		}
		
		pW = document.getElementById("panelW");
		
		if(pW){
			bodyEl.style.margin = framesHelper.config.body.marginTop  + "px " + framesHelper.config.body.marginRight + "px " + framesHelper.config.body.marginBottom + "px " + framesHelper.config.body.marginLeft + "px";

			// listen to viewport resizes
			resizeListener.add(
					function(){
						framesHelper.resize(null,"resize",{})
					}
				)
				
			framesHelper.config.pW.el = pW;
			pW.style.overflow = "hidden";
			
			pWP = document.getElementById("panelWP");
			framesHelper.config.pWP.el = pWP;
			pWP.style.overflow = "hidden";
			pWPConfig = framesHelper.config.pWP;
			pWPConfig.paddingTop = parseInt(Dom.getStyle(pWP,"padding-top").split("px")[0]);
			pWPConfig.paddingRight = parseInt(Dom.getStyle(pWP,"padding-right").split("px")[0]);
			pWPConfig.paddingBottom = parseInt(Dom.getStyle(pWP,"padding-bottom").split("px")[0]);
			pWPConfig.paddingLeft = parseInt(Dom.getStyle(pWP,"padding-left").split("px")[0]);
			
			framesHelper.config.pWP = pWPConfig;
			
			pC = document.getElementById("panelC");
			framesHelper.config.pC.el = pC;
			pC.style.overflow = "auto";
			
			pB = document.getElementById("panelB");
			framesHelper.config.pB.el = pB;
			
		//	alert((Dom.getY(pB)-Dom.getViewportHeight())+parseInt(Dom.getStyle(pWP,"padding-top").split("px")[0]));

			/*
			try{
				tableToGrid.init(0);
			}catch(err){}
			*/
			// dummy content
			/*
			dummyText = "<p>some dummy text to take up room</p>";
			for(i=0;i<10;i++){
				pC.innerHTML += dummyText;
			}
	*/
			// -- //
			framesHelper.resize(e,"init");
		}
	},
	resize : function(e,trigger){
		// get height and width of the viewport
		vW = framesHelper.config.viewport.w = Dom.getViewportWidth();
		vH = framesHelper.config.viewport.h = Dom.getViewportHeight();
		
		
		
			pC = framesHelper.config.pC.el;

			pB = framesHelper.config.pB.el;
			if(pB!=null){
				pBH = pB.offsetHeight;
			}else{
				pBH = 0;
			}
		
			diffH = 0;
			

			// calculate the height of the content panel
			pCPosY = Dom.getY(pC);
			try{
				pC.style.height = ((((((vH-pCPosY)-(framesHelper.config.body.marginBottom)))-pWPConfig.paddingBottom)-pBH)+diffH) + "px";
			}catch(err){/*alert("An error occured whist trying to resize #panelC")*/}
			
		//	pC.style.overflowX = "hidden";
			//pC.style.width = "100%";
			
		
			if((vW-(framesHelper.config.pWP.paddingRight+framesHelper.config.pWP.paddingLeft))>0)		
				pC.style.width = (vW-(framesHelper.config.pWP.paddingRight+framesHelper.config.pWP.paddingLeft)) + "px";
			
			
			
			// IE specific resizing
			if(BrowserDetect.browser=="Explorer"){
				
			}
			
			/*
				tTg = framesHelper.config.tTG.el;
				if(tTG){
					// fix width if height is greater than available space (ie. pC has to scroll vertically)
					if(BrowserDetect.browser=="Explorer"){
						if(tTG.offsetHeight > pC.offsetHeight){
							tTG.style.width = (pC.offsetWidth-18) + "px";
						}else{
							tTG.style.width = (pC.offsetWidth) + "px";
						}
					}
				}
			*/
			

			// resize img-panels
			imgPanels = Dom.getElementsByClassName("img-panel","div");
			for(imgPanel_i=0;imgPanel_i<imgPanels.length;imgPanel_i++){
				imgPanel = imgPanels[imgPanel_i];
				imgPanel.style.width = ((((pC.offsetWidth-pWPConfig.paddingLeft)-pWPConfig.paddingRight)-Dom.getX(imgPanel))-20) + "px";
			}
	
	
			//if(trigger="init"){
			/*
				try{
						setTimeout(tableToGrid.resize,300);
				}catch(err){}
				*/
			//}
		}
}
// ********* ARRAY FUNCTIONS start ********** //
	function isArray(obj){
		if(isNaN(obj.size)){
			return true;
		}else if(obj.size == 0){
			return false;
		}
	}	
	Array.prototype.getIndex = function(str){
		for(i=0;i<this.length;i++){
			if(this[i]==str){
				return i;
			}
		}
		return null;
	}
	if(Array.prototype.push == null){
		Array.prototype.push = function(){
			for(var i = 0; i < arguments.length; i++){
				this[this.length] = arguments[i];
			};
			return this.length;
		};
	};
// ********* ARRAY FUNCTIONS end ********** //
// ********* DOM FUNCTIONS start ********** //

$ = function(ele) {
	return(document.getElementById(ele));
}
$t = function(s,t,p) {
	if(!s)s=document;
	if(p==undefined)p=false;
	if(!p){
		return(s.getElementsByTagName(t));
	}else{
		objArr = [];
		childObjs = $t(s,t,false);
		for(i=0;i<childObjs.length;i++){
			tempObj = childObjs[i];
			if(tempObj.parentNode==s){
				objArr.push(tempObj);
			}
		}
		return objArr;
	}
}
Ele = {
	findEventEle : function(e,t,cl) {
	if(t==undefined){
		t = "body";
	}else{
		t = t.toLowerCase();
	}
	curEle = Event.getTarget(e);
	if(!curEle || curEle==undefined) return;
		do {
			try{
				obj = curEle.tagName;
				if(obj) obj = obj.toLowerCase();
				if(obj==t) {
					if(cl && Dom.hasClass(curEle,cl) || cl==null || !cl){
						return(curEle);
					}
					break;
				}else{
					m=0;
					curEle = curEle.parentNode;
				}	
			}catch(err){};
		
		}while(obj!=t && curEle.tagName)
	},
	findRootEle : function(s,rp){
		if(!s)return false;
		if(!rp)return false;
		// ascend the tree until the root obj's parent = rp
		tmpObj = s;
		if(tmpObj!=rp){
			do{
				if(tmpObj.parentNode!=rp){
					tmpObj = tmpObj.parentNode;
				}
			}while(tmpObj.parentNode!=rp || tmpObj.parentNode==document)
		}
		return tmpObj;
	},
	setSelectable:function(el,tg){
		if(tg!=true){
			el.onselectstart = function() {
	    	return false;
	    };
	    el.unselectable = "on";
	    el.style.MozUserSelect = "none";
	    el.style.cursor = "default";
	  }else{
	  	el.onselectstart = function(){};
	    el.unselectable = "off";
	    el.style.MozUserSelect = "";
	    el.style.cursor = "";
		}
  }
}
// ********* DOM FUNCTIONS end ********** //


//Event.addListener(window,"resize",function(e){framesHelper.resize(e,"resize")});
// ******* Custom Resize Listener ******************** //
// resize fix for IE
resizeListener = {
	list : [],
	add : function(fn,o){
		if(typeof fn != "function")return false;	
		if(typeof o != "object")o={};
		o.ev = "resize";
		resizeListener.list.push({fn:fn,o:o});
	},
	start : function(){
		if(BrowserDetect.browser=="Explorer"){
			resizeListener.interval = setInterval(resizeListener.check,500);
		}else{
			Event.addListener(window,"resize",resizeListener.exe);
		}
		resizeListener.updateVd();
	},
	stop : function(){
		try{clearInterval(resizeListener.interval);}catch(e){};
	},
	check : function(){
		//alert("check");
		if(resizeListener.vW!=Dom.getViewportWidth() || resizeListener.vH!=Dom.getViewportHeight()){
			resizeListener.updateVd();
			resizeListener.exe();
		}
	},
	updateVd : function(){
		resizeListener.vW = Dom.getViewportWidth();
		resizeListener.vH = Dom.getViewportHeight();
	},
	exe : function(){
		lis = resizeListener.list;
		for(li_i=0;li_i<lis.length;li_i++){
			li = lis[li_i];
			fn = li.fn;
			o = li.o;
			if(typeof fn == "function"){
				fn(o);
			}
		}
	}
};

// ******* BrowserDetect ***************************** //
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();

// add listeners
Event.addListener(window,"load",resizeListener.start);
Event.addListener(
				window,
				"load",
				function(e){
					framesHelper.init(e,"init");
				}
			);
			
			
			
	removeHtml = function(data){
		if(!data)return "";
		regex = /(\< *[^\>]*\>|\&nbsp\;\s)/g;
		data = data.replace(regex, "");
		data = data.replace("&amp;","&")
		return(data);
	}
	
	getTimeStamp = function(){
		
		return timestamp;
	}


function autofitIframe(id){
	return false;
	if(id!=""){
		var tmpiframe = parent.document.getElementById(id);
	}else{
		var tmpiframe = parent.document.getElementsByTagName("iframe")[0];
	}
	if(tmpiframe!=undefined && tmpiframe!=null){
		tmpiframe.style.height=YAHOO.util.Dom.getDocumentHeight()+"px";
	}
} 

	checkUncheckAll = function(theElement) {
     var theForm = theElement.form, z = 0;
		 for(z=0; z<theForm.length;z++){
	      if(theForm[z].type == 'checkbox' && theForm[z].name != 'checkall'){
		  		theForm[z].checked = theElement.checked;
		  	}
     }
   }
