var Fuzzy = window.Fuzzy || {};
Fuzzy.Element = {
	Height : function(id){
		var oHeight;
		if(document.getElementById){
			oHeight = document.getElementById(id).offsetHeight;
		}else if (document.layers){
			oHeight = document.layers[id].clip.height;
		}
		return oHeight;
	},
	Width : function(id){
		var oWidth;
		if(document.getElementById){
			oWidth = document.getElementById(id).offsetWidth;
		}else if (document.layers){
			oWidth = document.layers[id].clip.width;
		}
		return oWidth;
	},
	Top : function(id){
		var oTop;
		if(document.getElementById){
			oTop = document.getElementById(id).offsetTop;
		}else if (document.layers){
			oTop = document.layers[id].clip.top;
		}
		return oTop;
	},
	Left : function(id){
		var oLeft;
		if(document.getElementById){
			oLeft = document.getElementById(id).offsetLeft;
		}else if (document.layers){
			oLeft = document.layers[id].clip.left;
		}
		return oLeft;
	}
}

Fuzzy.Page = {
	Height : function(){
		var  browseHeight;
		if(document.layers||(document.getElementById&&!document.all)){
		   browseHeight=window.innerHeight;
		}else if(document.all){
		   browseHeight=document.body.clientHeight;
		}
		return browseHeight;
	},
	Width : function(){
		var browseWidth;
		if(document.layers||(document.getElementById&&!document.all)){
		   browseWidth=window.outerWidth;
		}else if(document.all){
		   browseWidth=document.body.clientWidth;
		}
		return browseWidth;
	}
}

Fuzzy.DropShadow = {
	n : null,
	dsLeft : null,
	dsTop : null,
	dsContainer : null,
	dsWidth : null,
	dsHeight : null,
	Start : function(){
		var el = getElementsByClass('dropShadow',document);
		for(var i=0;i<el.length;i++){
			this.dsLeft = null;this.dsTop = null;
			this.dsWidth = null;this.dsHeight = null;
			this.add(el[i].id);
		}
	},
	add : function(id,colour,offsetX,offsetY,opacity){
		if(this.n==null){
			offsetX = ((offsetX==null) ? 3 : (offsetX/2));
			offsetY = ((offsetY==null) ? 3 : (offsetY/2));
			opacity = ((opacity==null) ? 90 : opacity);
			colour = ((colour==null) ? "black" : colour);
			this.dsWidth = ((this.dsWidth==null) ? Fuzzy.Element.Width(id)-12 : this.dsWidth);
			this.dsHeight = ((this.dsHeight==null) ? Fuzzy.Element.Height(id)-12 : this.dsHeight);
			
			document.getElementById(id).style.zIndex = 120;
			this.dsContainer =  id +"_dropshadow"
			var frmEle = document.createElement('div');
			frmEle.setAttribute('id',this.dsContainer);
			frmEle.style.position = 'absolute';
			frmEle.style.top=0;
			frmEle.style.left=0;
			frmEle.innerHTML+= "&nbsp;"
			frmEle.style.zIndex = 119;
			document.body.appendChild(frmEle);
		
			this.dsLeft = Fuzzy.Element.Left(id);
			this.dsTop = Fuzzy.Element.Top(id);
	
			this.n=0;
		}
		dsID = this.dsContainer + this.n
		var parentDiv = document.getElementById(id);
		//parentDiv.style.zIndex = 50
		var frmEle = document.createElement('div');
		frmEle.setAttribute('id',dsID);

		frmEle.style.position = 'absolute';
		frmEle.style.backgroundColor=colour;
		frmEle.style.MozOpacity=(opacity/100);
		frmEle.style.opacity = (opacity / 100);
		frmEle.style.filter = "alpha(opacity=" + opacity + ")"; 
		frmEle.style.zIndex = parentDiv.style.zIndex - 1;

		frmEle.style.width = this.dsWidth + (this.n*2) + 'px';
		frmEle.style.height = this.dsHeight + (this.n*2) + 'px';

		frmEle.style.top = this.dsTop+ (offsetY) +(6-this.n)+'px';
		frmEle.style.left = this.dsLeft + (offsetX) +(6-this.n) +'px';
		document.getElementById(this.dsContainer).appendChild(frmEle);
	
		document.getElementById(dsID).innerHTML+= "&nbsp;";
		var modifier =9;
		if(this.n==0){
			for(this.n=1;this.n<12;this.n++){
				this.add(dsID,colour,offsetX,offsetY,opacity-(modifier*this.n));
			}
		}
	},
	remove : function(id){
		if(document.getElementById(id +"_dropshadow")!=null)document.body.removeChild(document.getElementById(id +"_dropshadow"));
	}
}
Fuzzy.loader = function (func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}


Fuzzy.submitForm = {
	postDataArray:null,	postData:null, name:null, value:null, form:null, url:null,
	start:function(params){
		if(params!=null && params.url!=null){
			this.postDataArray = [];
			this.name=[];
			this.value=[];
			this.form = (params.form ? params.form : 'form1');
			this.include_submits = (params.include_submits!=null ? params.include_submits : true);
			this.extras = (params.extras ? params.extras : null);
			this.url=params.url;
			this.collectAndSend();
		}else{
			alert('You must include at least a URL');
		}
		//debug(url)
	},
	collectAndSend:function(){
		this.collectData();
		this.sendData(this.returnData());
	},
	collectAndReturn:function(){
		this.collectData();
		return this.returnData();
	},
	returnCollection:function(collectionType){
		return document.getElementById(this.form).getElementsByTagName(collectionType);
	},
	collectData:function(){
		this.postDataArray.length=0;
		this.name.length=0;
		this.value.length=0;
		this.appendPostData(this.returnCollection('INPUT'),'input');
		this.appendPostData(this.returnCollection('TEXTAREA'),'textarea');
		this.appendPostData(this.returnCollection('SELECT'),'select');
	},
	returnData:function(){
		for(var n=0;n<this.name.length;n++){
			this.postDataArray[n] = this.name[n] + '=' + this.value[n];
		}
		this.postData = this.postDataArray.join('&');
		return this.postData;
	},
	formData:function(key,val) {
		var exists = false;
		if(val!=''){
			if(this.name.length>0){
				for(var n=0;n<this.name.length;n++){
					if(this.name[n]==key){
						if(val!=''){
							this.value[n] += ',' + val;
							exists = true;
						}
						break;
					}
				}
				if(!exists){
					this.value[this.name.length] = val;
					this.name[this.name.length] = key;
				}
			}else{
				this.name[0] = key;
				this.value[0] = val;	
			}
		}
	},
	appendPostData:function(els,type){
		for(var n=0;n<els.length;n++){
			switch(type){
				case 'textarea':
					this.formData(els[n].name,escape(els[n].value));
					break;
	
				case 'select':
					if(els[n].multiple){
						var options = els[n].options;
						var paramTemp= new Array;
						for(var i=0;i<options.length;i++){
							if(options[i].selected){
								paramTemp[paramTemp.length]=escape(options[i].value);
							}
						}
						this.formData(els[n].name,paramTemp.join(','));
					}else{
						this.formData(els[n].name,escape(els[n].value));
					}
					break;
				case 'input':
					switch(els[n].type){
						case 'text': case 'hidden': case 'button':
							this.formData(els[n].name,escape(els[n].value));
							break;
						case 'submit': case 'image':
							if(this.include_submits){
								alert('here')
								this.formData(els[n].name,escape(els[n].value));
							}
							break;
						case 'checkbox':
							if(els[n].checked){
								this.formData(els[n].name,escape(els[n].value));
							}
							break;
						case 'radio':
							if(els[n].checked){
								this.formData(els[n].name,escape(els[n].value));
							}
							break;
					break;
				}
			}
		}
		return els.length;
	},
	sendData:function(data){
		if(!this.saveMessage()){
			return false;
		};
		data += '&fromAjax=true&uid='+this.uid() + (this.extras ? '&' + this.extras : '');
		var xmlHttp;
		try{
		// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
		xmlHttp.overrideMimeType('text/html');
		}
		catch (e){
			// Internet Explorer
			try{
				xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch (e){
				try {
					xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch (e){
					debug("Your browser does not support AJAX!");
					return false;
				}
			}
		}
	xmlHttp.onreadystatechange=function(){
		debug('Readystate=' + xmlHttp.readyState)
		if(xmlHttp.readyState==4){
			debug('Readystate=' + xmlHttp.readyState)
			if (xmlHttp.status == 200 || xmlHttp.status == 304) {
				debug('status=' + xmlHttp.status);
				Fuzzy.submitForm.ajaxResponse(xmlHttp);
			} else if(xmlHttp.status == 404) { 
				debug('Error '+xmlHttp.status+' 404'); 
			} else if(parseInt(xmlHttp.status,10) == 5) {
				debug('Error '+xmlHttp.status+' 500');
			}
		}
	}
	xmlHttp.open("POST",this.url,true);
	xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xmlHttp.setRequestHeader("Content-length", data.length);
	//xmlHttp.setRequestHeader("Connection", "close");
	xmlHttp.send(data);
	debug(data)
},
	ajaxResponse:function(xmlHttp){
		//debug(xmlHttp.responseText);
		this.timer1 = setTimeout(function(){Fuzzy.submitForm.saved()},2000);
	},
	saveMessage:function(){
		if(document.getElementById('Saving')){
			return false;
		}		
		var h = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;
		var d = document.getElementsByTagName('BODY')[0];
		var newdiv = document.createElement('div');
		var divIdName = 'Saving';
		newdiv.setAttribute('id',divIdName);
		newdiv.style.fontFamily='arial';
		newdiv.style.fontSize='12px';
		newdiv.style.fontWeight='bold';
		newdiv.style.color='white';
		newdiv.style.width='100px';
		newdiv.style.backgroundColor='red';
		newdiv.style.textAlign='center';
		newdiv.style.position='absolute';
		newdiv.style.padding='3px';
		newdiv.style.top=(h ? h : 0)+3 + 'px' ;
		newdiv.style.right='3px';
		newdiv.innerHTML = 'Sending...';
		//newdiv.innerHTML='<img src=../images/loading.gif>';
		d.appendChild(newdiv);
		window.onscroll = function(){
			h = document.body.scrollTop || document.documentElement.scrollTop;
			newdiv.style.top=(h ? h : 0)+3 + 'px' ;
		};
		return true;
		//alert(this.uid())
	},
	saved:function(){
		if(!document.getElementById('Saving')){
			return false;
		}
		var d = document.getElementsByTagName('BODY')[0];
		var olddiv = document.getElementById('Saving');
		d.removeChild(olddiv);
		clearTimeout(this.timer1);
		return true;
	},
	uid:function(){
		var session = new String();
		session = Math.floor(Math.random() * 0xFFFFFF).toString(16);
		var dateObject = new Date();
		var uniqueId =
			dateObject.getYear() + '' +
			dateObject.getMonth() + '' +
			dateObject.getDate() + '' +
			dateObject.getHours() + '' +
			dateObject.getMinutes() + '' +
			dateObject.getSeconds();
	
		return session + Math.floor(uniqueId * 0xFFFFFF).toString(16);
	}
}
/******* Debug *******/
/*	Purpose:	Displays debug info ina  div
 *	Usage:		Debug(str)
 */
function debug(str){
	/*var h = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop;
	document.getElementById('debug').style.top=(h ? h : 0)+3 + 'px' ;
	document.getElementById('debug').innerHTML=str;
	window.onscroll = function(){
		h = document.body.scrollTop || document.documentElement.scrollTop
		document.getElementById('debug').style.top=(h ? h : 0)+3 + 'px' ;
	};*/
}


function hide(id){
	var el = document.getElementById(id);
	el.style.display = 'none';
}
    function addEvent(element, type, handler)
    {
        if (element.addEventListener)
            element.addEventListener(type, handler, false);
        else
        {
            if (!handler.$$guid) handler.$$guid = addEvent.guid++;
            if (!element.events) element.events = {};
            var handlers = element.events[type];
            if (!handlers)
            {
                handlers = element.events[type] = {};
                if (element['on' + type]) handlers[0] = element['on' + type];
                element['on' + type] = handleEvent;
            }
        
            handlers[handler.$$guid] = handler;
        }
    }
    addEvent.guid = 1;
    
    function removeEvent(element, type, handler)
    {
        if (element.removeEventListener)
            element.removeEventListener(type, handler, false);
        else if (element.events && element.events[type] && handler.$$guid)
            delete element.events[type][handler.$$guid];
    }
    
    function handleEvent(event)
    {
        event = event || fixEvent(window.event);
        var returnValue = true;
        var handlers = this.events[event.type];
    
        for (var i in handlers)
        {
            if (!Object.prototype[i])
            {
                this.$$handler = handlers[i];
                if (this.$$handler(event) === false) returnValue = false;
            }
        }
    
        if (this.$$handler) this.$$handler = null;
    
        return returnValue;
    }
    
    function fixEvent(event)
    {
        event.preventDefault = fixEvent.preventDefault;
        event.stopPropagation = fixEvent.stopPropagation;
        return event;
    }
    fixEvent.preventDefault = function()
    {
        this.returnValue = false;
    }
    fixEvent.stopPropagation = function()
    {
        this.cancelBubble = true;
    }
    
    // This little snippet fixes the problem that the onload attribute on the body-element will overwrite
    // previous attached events on the window object for the onload event
    if (!window.addEventListener)
    {
        document.onreadystatechange = function()
        {
            if (window.onload && window.onload != handleEvent)
            {
                addEvent(window, 'load', window.onload);
                window.onload = handleEvent;
            }
        }
    }
    var EventCache = function(){
        var listEvents = [];
        return {
            listEvents : listEvents,
            add : function(node, sEventName, fHandler){
                listEvents.push(arguments);
            },
            flush : function(){
                var i, item;
                for(i = listEvents.length - 1; i >= 0; i = i - 1){
                    item = listEvents[i];
                    if(item[0].removeEventListener){
                        item[0].removeEventListener(item[1], item[2], item[3]);
                    };
                    if(item[1].substring(0, 2) != "on"){
                        item[1] = "on" + item[1];
                    };
                    if(item[0].detachEvent){
                        item[0].detachEvent(item[1], item[2]);
                    };
                    item[0][item[1]] = null;
                };
            }
        };
    }();
    function $() {
        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;
    }
    function getElementsByClass(searchClass,node,tag) {
        var classElements = new Array();
        if ( node == null )
            node = document;
        if ( tag == null )
            tag = '*';
        var els = node.getElementsByTagName(tag);
        var elsLen = els.length;
        var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
        for (i = 0, j = 0; i < elsLen; i++) {
            if ( pattern.test(els[i].className) ) {
                classElements[j] = els[i];
                j++;
            }
        }
        return classElements;
    }
	
	function loader(func){
		addEvent(window,'load',func);
	}
	
	//loader(function(){imgClicks();});
	
	function imgClicks(){
		var els = getElementsByClass('cell_img',document);
			  var imgLarge = new Array();
			for(var n=0;n<els.length;n++){
				var img = els[n].getElementsByTagName('img')[0]
				var h = document.createElement('a');
				h.setAttribute('href',img.src.replace('.jpg','_large.jpg'));
				h.href=img.src.replace('.jpg','_large.jpg');
				img.setAttribute('border',0);
				img.border=0;
				imgLarge[n] = new Image;
				imgLarge[n].src = h.href;
				imgLarge[n].setAttribute('src',h.href);
				imgLarge[n].id = 'il_' + n
				imgLarge[n].setAttribute('id','il_' + n);
				i = imgLarge[n];
				addEvent(h,'click',function(){openIMG(this,i);});
				h.appendChild(img);
				els[n].appendChild(h);
		}
		var imgDIV = document.createElement('div');
		imgDIV.id = 'imgdiv'
		imgDIV.setAttribute('id','imgdiv');
		imgDIV.style.display='none'
		imgDIV.style.backgroundColor='white'
		document.getElementsByTagName('body')[0].appendChild(imgDIV);
	}
	function openIMG(h,img){
		alert(img.id)
		alert(Fuzzy.Element.Height(img.id));
		h.href='#';
		var div = document.getElementById('imgdiv');
		div.appendChild(img)
		div.style.display='block'
		div.style.height=350 + 'px';
		div.style.width=400 + 'px';
		div.style.position = 'absolute';
		div.style.top = (Fuzzy.Page.Height() - 350) / 2 + 'px';
		div.style.left = (Fuzzy.Page.Width() - 400) / 2 + 'px';
		div.style.MozOpacity=(90/100);
		div.style.opacity = (90 / 100);
		div.style.filter = "alpha(opacity=" + 90 + ")";
		return false;
	}
	function email(address){
		document.getElementById('emaillink').href="#";
		var div = document.getElementById('emailform');
		div.style.display='block'
		div.style.height=350 + 'px';
		div.style.width=400 + 'px';
		div.style.position = 'absolute';
		div.style.top = (Fuzzy.Page.Height() - 350) / 2 + 'px';
		div.style.left = (Fuzzy.Page.Width() - 400) / 2 + 'px';
		div.style.MozOpacity=(90/100);
		div.style.opacity = (90 / 100);
		div.style.filter = "alpha(opacity=" + 90 + ")";
		document.getElementById('to').value=address;
		document.getElementById('to').setAttribute('value',address);
		//Fuzzy.DropShadow.add(div.id,'#000',10,10,70);
		return false;
	}
	function sendEmail(){
		Fuzzy.submitForm.start(
			params = {
				'url' : './emailForm.asp',
				'form' : 'form1',
				'include_submits' : false
			}
		)
		hide('emailform');
	}
