/*
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.

Copyright Cylo.co.uk
Written by Graham Vincent 
Contact :: loudsphiers@gmail.com
Last Updated: 17/06/2008
*/
////////////////////////////////////
CyloUtils = new Object();
CyloUtils.DEBUG = false;
CyloUtils.replaceAll = function(str,from,to)
{ var idx = str.indexOf( from ); while ( idx > -1 ) { str = str.replace( from, to ); idx = str.indexOf( from );}
return str;}

CyloUtils.lTrim = function( value ) { var re = /\s*((\S+\s*)*)/; return value.replace(re, "$1");}
CyloUtils.rTrim = function( value ) { var re = /((\s*\S+)*)\s*/; return value.replace(re, "$1");}
CyloUtils.trim = function( value ) { return CyloUtils.lTrim(CyloUtils.rTrim(value));}

CyloUtils.drag = function(elementToDrag,event)
{
	try
	{
		//window.clearInterval(CyloDialog.CyloInterval);
		
		var brSize = CyloUtils.getBrowserSize();
		var bodyWidth = brSize[0];
		var bodyHeight = brSize[1];
		
		var startX = event.clientX, startY=event.clientY;
		var origX = elementToDrag.offsetLeft, origY=elementToDrag.offsetTop;
		var dX = startX - origX; var dY = startY - origY;
		elementToDrag.setCapture();
		elementToDrag.attachEvent("onmousemove",moveHandler);
		elementToDrag.attachEvent("onmouseup",upHandler);
		elementToDrag.attachEvent("onlosecapture",upHandler);
		event.cancelBubble = true;
		event.returnValue = false;
		function moveHandler(e)
		{
			e=window.event;
			//Stop the alert being dragged of screen
			if((e.clientX - dX) < (bodyWidth - 100) && (e.clientX - dX) > 1)
			{
				elementToDrag.style.left = (e.clientX - dX) + "px";
				CyloDialog.extra_Left = (e.clientX - dX);
			}
			if((e.clientY - dY) < (bodyHeight - 100) && (e.clientY - dY) > 1)
			{
				elementToDrag.style.top = (e.clientY - dY) + "px";	
				CyloDialog.extra_Top = (e.clientY - dY);
			}
			e. cancelBubble = true;
		}
		function upHandler(e)
		{
			e=window.event;			
			elementToDrag.detachEvent("onmousemove",moveHandler);
			elementToDrag.detachEvent("onmouseup",upHandler);
			elementToDrag.detachEvent("onlosecapture",upHandler);		
			elementToDrag.releaseCapture();
			e.cancelBubble = true; 
		}
		
	}
	catch (e)
	{ alert(e.message)
	}
}

CyloUtils.setDef = function(v,d)
{
	if(typeof(d)=="undefined" || d=="")d="";
	if(typeof(v)=="undefined" || v=="")
	return d;
	return v;
}

//////////////////////////////////////////////////////FORM CONTROLS/////////////////////////
CyloUtils.getOptionSelected = function(el,which)
{
	which = CyloUtils.setDef(which,"value");
	opt = document.getElementById(el);
	for(var i = 0;i < opt.length;i++){
		if(opt.options[i].selected == true){
			switch(which)
			{
				case "value":return opt.options[i].value;break;
				case "text":return opt.options[i].text;break;
			}
		}
	}
	return "";
}

CyloUtils.bug = function(w,overwrite)
{
	if(CyloUtils.DEBUG && document.getElementById("debug_div"))
	{
		ranspan = ""+w+"<br/>";
		if(document.getElementById("debug_cell"))
		{
			if(overwrite==true)
			{
				document.getElementById("debug_cell").innerHTML = ranspan;
			}else{
				document.getElementById("debug_cell").innerHTML += ranspan;
			}
		}
		var objDiv = document.getElementById("debug_div");
		objDiv.scrollTop = objDiv.scrollHeight;
	}
}

setTimeout("CyloUtils.setupDebug()",2000);	
//SET mq="Title=Miss&FirstName=sert&Surname=sert&MiddleName=sert&Gender=2&DateOfBirth=15 May 2008&AddressLine1=erg&AddressLine2=y4y5&County=yjd&TownCity=serg&PostCode=tfsse&FAXNumber=gweh&HomeTelephoneNumber=wefwe&MobileTelephoneNumber=fwef&WorkTelephoneNumber=ewfwe&eMailAddress=wefwe&EthnicOrigin=wefwef&Occupation=awefwef&Religion=fawef&MaritalStatus=aefa&source=&callback="

CyloUtils.setupDebug = function()
{
	if(CyloUtils.DEBUG)
	{
			
		div = document.createElement("div");
		div.innerHTML="<div id='tabdrag' onMouseDown='CyloUtils.drag(this.parentNode,event);'><table border='0'><tr><td>:::::::::::::DEBUG::::::::::::::</td></tr></table></div><div id='debug_cell'></div>";
		div.id='debug_div';
		div.className='cylo_toolDebug';
		document.body.appendChild(div);
		el = CyloUtils.$("debug_div");
		el.style.display='inline';
		var brSize = CyloUtils.getBrowserSize();
		var bodyWidth = brSize[0];
		var bodyHeight = brSize[1];
		el.style.top = bodyHeight/2;
		el.style.left = bodyWidth/2;
	}
}

CyloUtils.getBrowserSize = function()
{
	var bodyWidth = document.documentElement.clientWidth;
	var bodyHeight = document.documentElement.clientHeight;
	
	var bodyWidth, bodyHeight; 
	if (self.innerHeight){ // all except Explorer 
	 
	   bodyWidth = self.innerWidth; 
	   bodyHeight = self.innerHeight; 
	}  else if (document.documentElement && document.documentElement.clientHeight) {
	   // Explorer 6 Strict Mode 		 
	   bodyWidth = document.documentElement.clientWidth; 
	   bodyHeight = document.documentElement.clientHeight; 
	} else if (document.body) {// other Explorers 		 
	   bodyWidth = document.body.clientWidth; 
	   bodyHeight = document.body.clientHeight; 
	} 
	
	return [bodyWidth,bodyHeight];		
}


CyloUtils.cancelEvent = function(e)
{
  e = e ? e : window.event;
  if(e.stopPropagation)
    e.stopPropagation();
  if(e.preventDefault)
    e.preventDefault();
  e.cancelBubble = true;
  e.cancel = true;
  e.returnValue = false;
  return false;
}

CyloUtils.hookEvent = function(element, eventName, callback)
{
  if(typeof(element) == "string")
    element = document.getElementById(element);
  if(element == null)
    return;
  if(element.addEventListener)
  {
    if(eventName == 'mousewheel')
    {
      element.addEventListener('DOMMouseScroll', 
        callback, false);  
    }
    element.addEventListener(eventName, callback, false);
  }
  else if(element.attachEvent)
    element.attachEvent("on" + eventName, callback);
}

CyloUtils.unhookEvent = function(element, eventName, callback)
{
  if(typeof(element) == "string")
    element = document.getElementById(element);
  if(element == null)
    return;
  if(element.removeEventListener)
  {
    if(eventName == 'mousewheel')
    {
      element.removeEventListener('DOMMouseScroll', 
        callback, false);  
    }
    element.removeEventListener(eventName, callback, false);
  }
  else if(element.detachEvent)
    element.detachEvent("on" + eventName, callback);
}


CyloUtils.$ = function()
{
	 //http://javascript.internet.com/snippets/prototype-dollar-function.html
  var elements = new Array();
  for (var i = 0; i < arguments.length; i++) {
    var element = arguments[i];
    if (typeof element == 'string')
      element = document.getElementById(element);
    if (arguments.length == 1)
      return element;
    elements.push(element);
  }
  return elements;
}

CyloUtils.findPosX = function(obj)
{
	try
	{
		var curleft = 0;
		if(obj.offsetParent)
		while(1) 
		{
			curleft += obj.offsetLeft;
			if(!obj.offsetParent)
			break;
			obj = obj.offsetParent;
		}
		else if(obj.x)
			curleft += obj.x;
		return curleft;
	}catch(e)
	{
		
	}
}

CyloUtils.findPosY = function(obj)
{
	try
	{
		var curtop = 0;
		if(obj.offsetParent)
		while(1)
		{
			curtop += obj.offsetTop;
			if(!obj.offsetParent)
			break;
			obj = obj.offsetParent;
		}
		else if(obj.y)
			curtop += obj.y;
		return curtop;
	}catch(e)
	{
		
	}
}

CyloUtils.GetAjaxXmlHttpObject=function(handler)
{ 
	try
	{
		var objXMLHttp=null
	if (window.XMLHttpRequest) { // Mozilla, Safari, ...
           objXMLHttp = new XMLHttpRequest();
            if (objXMLHttp.overrideMimeType) {
                objXMLHttp.overrideMimeType('text/xml');
                // See note below about this line
            }
        } else if (window.ActiveXObject) { // IE
            try {
                objXMLHttp = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    objXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
       }
		return objXMLHttp
	}catch(e)
	{
		alert(e.message);
	}
}
CyloUtils.className = function(el,className,bool)
{
	try
	{
		var cn=el.className;
		if(bool==true)
		{
			if(typeof(cn)=="undefined" || cn=="")
			{
				el.className=className;
			}else{
				el.className=CyloUtils.trim(cn + " " +className);
			}
			
		}else{
			cn=" "+cn+" ";
			cn=CyloUtils.replaceAll(cn," "+className+" "," ");
			el.className=CyloUtils.trim(cn);
		}
	}catch(e)
	{
		alert(e.message);
	}
}
