

jQuery.fn.extend({
	everyTime: function(interval, label, fn, times, belay) {
		return this.each(function() {
			jQuery.timer.add(this, interval, label, fn, times, belay);
		});
	},
	oneTime: function(interval, label, fn) {
		return this.each(function() {
			jQuery.timer.add(this, interval, label, fn, 1);
		});
	},
	stopTime: function(label, fn) {
		return this.each(function() {
			jQuery.timer.remove(this, label, fn);
		});
	}
});

jQuery.extend({
	timer: {
		guid: 1,
		global: {},
		regex: /^([0-9]+)\s*(.*s)?$/,
		powers: {
			// Yeah this is major overkill...
			'ms': 1,
			'cs': 10,
			'ds': 100,
			's': 1000,
			'das': 10000,
			'hs': 100000,
			'ks': 1000000
		},
		timeParse: function(value) {
			if (value == undefined || value == null)
				return null;
			var result = this.regex.exec(jQuery.trim(value.toString()));
			if (result[2]) {
				var num = parseInt(result[1], 10);
				var mult = this.powers[result[2]] || 1;
				return num * mult;
			} else {
				return value;
			}
		},
		add: function(element, interval, label, fn, times, belay) {
			var counter = 0;
			
			if (jQuery.isFunction(label)) {
				if (!times) 
					times = fn;
				fn = label;
				label = interval;
			}
			
			interval = jQuery.timer.timeParse(interval);

			if (typeof interval != 'number' || isNaN(interval) || interval <= 0)
				return;

			if (times && times.constructor != Number) {
				belay = !!times;
				times = 0;
			}
			
			times = times || 0;
			belay = belay || false;
			
			if (!element.$timers) 
				element.$timers = {};
			
			if (!element.$timers[label])
				element.$timers[label] = {};
			
			fn.$timerID = fn.$timerID || this.guid++;
			
			var handler = function() {
				if (belay && this.inProgress) 
					return;
				this.inProgress = true;
				if ((++counter > times && times !== 0) || fn.call(element, counter) === false)
					jQuery.timer.remove(element, label, fn);
				this.inProgress = false;
			};
			
			handler.$timerID = fn.$timerID;
			
			if (!element.$timers[label][fn.$timerID]) 
				element.$timers[label][fn.$timerID] = window.setInterval(handler,interval);
			
			if ( !this.global[label] )
				this.global[label] = [];
			this.global[label].push( element );
			
		},
		remove: function(element, label, fn) {
			var timers = element.$timers, ret;
			
			if ( timers ) {
				
				if (!label) {
					for ( label in timers )
						this.remove(element, label, fn);
				} else if ( timers[label] ) {
					if ( fn ) {
						if ( fn.$timerID ) {
							window.clearInterval(timers[label][fn.$timerID]);
							delete timers[label][fn.$timerID];
						}
					} else {
						for ( var fn in timers[label] ) {
							window.clearInterval(timers[label][fn]);
							delete timers[label][fn];
						}
					}
					
					for ( ret in timers[label] ) break;
					if ( !ret ) {
						ret = null;
						delete timers[label];
					}
				}
				
				for ( ret in timers ) break;
				if ( !ret ) 
					element.$timers = null;
			}
		}
	}
});

if (jQuery.browser.msie)
	jQuery(window).one("unload", function() {
		var global = jQuery.timer.global;
		for ( var label in global ) {
			var els = global[label], i = els.length;
			while ( --i )
				jQuery.timer.remove(els[i], label);
		}
	});


function displayMail(){
	checkInfo() ;
	$( "#mailsection" ).dialog('open');
}	
	
function checkInfo() {
		var searchDefault1 = "Your Subject";
		if  ( $("#Subject").attr("value") == searchDefault1)  {
			$("#Subject").addClass("NoEntry");		
		}
		
		var searchDefault2 = "Your Email Address";		
		if  ( $("#Reply").attr("value") == searchDefault2)  {
			$("#Reply").addClass("NoEntry");		
		}
}	


function clearVals() {
			$("#Subject").addClass("NoEntry");
			$("#Reply").addClass("NoEntry");
}
	
function SendMail(){
	$("#mailsection h1").html("STATUS: SENDING MESSAGE...");
	sendEmailRequest();	
}

// getXMLHttpRequest object
function getXMLHttpRequestObject(){
	var xmlobj;
    // check for existing requests
    if(xmlobj!=null&&xmlobj.readyState!=0&&xmlobj.readyState!=4){
        xmlobj.abort();
    }
    try{
        // instantiate object for Mozilla, Nestcape, etc.
        xmlobj=new XMLHttpRequest();
    }
    catch(e){
        try{
            // instantiate object for Internet Explorer
            xmlobj=new ActiveXObject('Microsoft.XMLHTTP');
        }
        catch(e){
            // Ajax is not supported by the browser
            xmlobj=null;
            return false;
        }
    }
	return xmlobj;
}

// request 'sendmail.php' file - sends email message
function sendEmailRequest(){

	$(".ButtonArea").css('display','none');

	var message=document.getElementsByTagName('form')[0].elements['message'].value;
	if(message.length>1000){message=message.substring(0,1000)};
	// open socket connection
	emailXMLHttpObj.open('POST','AjaxMail/sendmail.php',true);
	// set form http header
	emailXMLHttpObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
	// get form values and send http request
   	emailXMLHttpObj.send(getFormValues(document.getElementsByTagName('form')[0]));
	emailXMLHttpObj.onreadystatechange=emailStatusChecker;
}

// check status of email requester object
function emailStatusChecker(){
    // if mail request is completed
    if(emailXMLHttpObj.readyState==4){

	
        if(emailXMLHttpObj.status==200){
			// if status == 200 display server response
			displayServerResponse();
        }
        else{
            alert('Failed to get response :'+emailXMLHttpObj.statusText);
        }
    }
}

// display server response
function displayServerResponse(){
	var status=document.getElementById('ResponseText').firstChild;
	if(!status){return};
	
	// display messages by <h1> header
	status.data=emailXMLHttpObj.responseText;
		if (status.data == "STATUS: MESSAGE WAS SENT SUCCESSFULLY") {
			$("#mailsection" ).oneTime(1000, "hide", function() {
				$(this).dialog('close');
				$(".ButtonArea").css('display','block');
			});
		}
		else {
			$(".ButtonArea").css('display','block');
		}
}

// get form values
function getFormValues(fobj){
    var str='';
    for(var i=0;i< fobj.elements.length;i++){
        str+=fobj.elements[i].name+'='+ escape(fobj.elements[i].value)+'&';
    }
    str=str.substr(0,(str.length-1));
    return str;
}
	

// check status of contact requester object
function contactStatusChecker(){
    // if request of 'contacts.xml' file is completed
    if(contactXMLHttpObj.readyState==4){
        if(contactXMLHttpObj.status==200){
			// if status == 200 display contact list
			displayContacts();
        }
        else{
            alert('Failed to get response :'+contactXMLHttpObj.statusText);
        }
    }
}
// display list of contacts
function displayContacts(){
	var cdiv=document.getElementById('contactlist')?document.getElementById('contactlist'):document.createElement('div');
	cdiv.setAttribute('id','contactlist');
	// reset contacts container
	cdiv.innerHTML='';
	// read 'contacts.xml' file
	var contacts=contactXMLHttpObj.responseXML.getElementsByTagName('contact');
	if(!contacts){return};
	var ul=document.createElement('ul');
	for(var i=0;i<contacts.length;i++){
		// create contact links
		var li=document.createElement('li');
		var a=document.createElement('a');
		// get 'email' value
		var email=contacts[i].getElementsByTagName('email')[0].firstChild.nodeValue;
		// add 'href' attribute
		a.setAttribute('href','#');
		// add 'title' attribute
		a.setAttribute('title',email);
		// add contact labels
		a.appendChild(document.createTextNode(contacts[i].getElementsByTagName('name')[0].firstChild.nodeValue));
		// fill form fields when contact is clicked on
		a.onclick=function(){fillEmailFields(this.title)};
		li.appendChild(a);
    	ul.appendChild(li);
		cdiv.appendChild(ul);
	}
	// append contact links to web document
	document.getElementById('contsection').appendChild(cdiv);
}
// fill form field with contact values
function fillEmailFields(email){
	var to=document.getElementsByTagName('form')[0].elements['to'];
	if(!to){return};
	var cc=document.getElementsByTagName('form')[0].elements['cc'];
	if(!cc){return};
	var bcc=document.getElementsByTagName('form')[0].elements['bcc'];
	if(!bcc){return};
	if(to.value=='TO: '||!to.value){to.value='TO: '+email;return};
	if(cc.value=='CC: '||!cc.value){cc.value='CC: '+email;return};
	if(bcc.value=='BCC: '||!bcc.value){bcc.value='BCC: '+email;return};
}
// initialize email client 
function intitializeEmailClient(){
	if(document.getElementById&&document.getElementsByTagName&&document.createElement){
		var sendbtn=document.getElementsByTagName('form')[0].elements['send'];
		var clearbtn=document.getElementsByTagName('form')[0].elements['clear'];
		if(!clearbtn){return};
		// assign 'onlick' event handler to 'clear message' button
		clearbtn.onclick=function(){$("#mailsection h1").html('STATUS: COMPOSING NEW MESSAGE'); clearVals()};
	}
}

// instantiate email XMLHttpRequest object
var emailXMLHttpObj=getXMLHttpRequestObject();
// instantiate contact XMLHttpRequest object
var contactXMLHttpObj=getXMLHttpRequestObject();
// instantiate insert XMLHttpRequestObject
var insertXMLHttpObj=getXMLHttpRequestObject();
window.onload=intitializeEmailClient;

function SetTextarea() {
			$(" .textarea").css("display","none");
			$(".MainTextarea").removeClass("ProductText");
			if($("#ContactSelect").val() == "Con"  ) {
				$(".Con").css("display","block"); 
				$("#mailsection .ButtonArea").css("display","none");
			}
			else if($("#ContactSelect").val() == "Retail" ) {
				$(".Retail").css("display","block"); 
				$("#mailsection .ButtonArea").css("display","none");
			}
			else if($("#ContactSelect").val() == "Product" ) {
				$(".ProductMail").css("display","block"); 		
				$(".MainTextarea").css("display","block"); 
				$(".MainTextarea").addClass("ProductText");
				$("#mailsection .ButtonArea").css("display","block");
				
			}
			else {
				$(".MainTextarea").css("display","block"); 
				$("#mailsection .ButtonArea").css("display","block");
			}
}

$(document).ready(function(){	

		SetTextarea() ;

		$("#ContactSelect").change(function(){
			SetTextarea() ;
		});

		$( "#mailsection" ).dialog({
			title: '<img class="WyrdLogo" src="Images/Logo-Wyrd.png" /><span class="Title">Contact Us</span>',
			height: 485,
			width: 350,
			modal: true,
			autoOpen: false,
			resizable: false,
			hide: 'fade',
			show: 'fade'
		});

	var searchBox1 = $("#Subject");
	var searchDefault1 = "Your Subject";

		if($("#Subject").attr("value") == "" || $("#Subject").attr("value") == searchDefault1) {
			$("#Subject").attr("value", searchDefault1);
			$("#Subject").addClass("NoEntry");
		}
	
	searchBox1.focus(function(){
				$(this).addClass("active");
		if($(this).attr("value") == searchDefault1) $(this).attr("value", "");
		$(this).removeClass("NoEntry");
	});
	searchBox1.blur(function(){
				$(this).removeClass("active");
		if($(this).attr("value") == "") {
			$(this).attr("value", searchDefault1);
			$(this).addClass("NoEntry");
		}
	});	

	var searchBox2 = $("#Reply");
	var searchDefault2 = "Your Email Address";
		if($("#Reply").attr("value") == "" || $("#Reply").attr("value") == searchDefault2) {
			$("#Reply").attr("value", searchDefault2);
			$("#Reply").addClass("NoEntry");
		}
	
	searchBox2.focus(function(){
				$(this).addClass("active");
		if($(this).attr("value") == searchDefault2) $(this).attr("value", "");
		$(this).removeClass("NoEntry");
	});
	searchBox2.blur(function(){
				$(this).removeClass("active");
		if($(this).attr("value") == "") {
			$(this).attr("value", searchDefault2);
			$(this).addClass("NoEntry");
		}
	});	
	
	var searchBox3 = $("#YourName");
	var searchDefault3 = "Your Name";

	if($("#YourName").attr("value") == "" || $("#YourName").attr("value") == searchDefault3) {
		$("#YourName").attr("value", searchDefault3);
		$("#YourName").addClass("NoEntry");
	}
	
	searchBox3.focus(function(){
		$(this).addClass("active");
		if($(this).attr("value") == searchDefault3) $(this).attr("value", "");
		$(this).removeClass("NoEntry");
	});
	searchBox3.blur(function(){
				$(this).removeClass("active");
		if($(this).attr("value") == "") {
			$(this).attr("value", searchDefault3);
			$(this).addClass("NoEntry");
		}
	});	

	
		
});
