	function createRequest() {
		try {
			req = new XMLHttpRequest();
		} catch (trymicrosoft) {
			try {
				req = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (othermicrosoft) {
				try {
					req = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (failed) {
					req = false;
				}
			}
		}
	
		if (!req) {
			alert("Error initializing XMLHttpRequest!");
		}
		return req;
	}
	
	function loadXMLDoc(url, params) {
		beforLoad ();
		req = createRequest();
		if (req) {
			req.onreadystatechange = processReqChange;
			req.open("POST", url, true);
			req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			req.send(params);
		}
	}
	
	function processReqChange () {
	    if (req.readyState == 4) {
	        if (req.status == 200) {
	        	afterLoad ();
	        	if (getRespond (req) == 'OK') {
	        		document.getElementById('htmlcode').value = '<a href="http://toolbar.google.com/buttons/add?url='+getDomain ( document.getElementById ('url').value)+'/button.xml">Add my site button to Your Google Toolbar</a>';
					document.getElementById('outputform').className = '';
					document.getElementById('fbut').className = 'hidden';
					
					document.getElementById('done').innerHTML = 'DONE!';
					document.getElementById('done').className = '';
					document.getElementById('subbut2').disabled = false;
					document.getElementById('subbut').disabled = false;
					document.getElementById('subbut').value = 'Get The Code!';
					
	        	} else {
	        		alert('Error on Button generation, try again later');
					
					document.getElementById('done').innerHTML = 'ERROR!';
					document.getElementById('done').className = 'wait';
					document.getElementById('subbut2').disabled = false;
					document.getElementById('subbut').disabled = false;
					document.getElementById('subbut').value = 'Get The Code!';
	        	}
	         } else {
	            alert("There was a problem retrieving the XML data:\n" +
	                req.statusText + " " + req.status);
				document.getElementById('done').innerHTML = 'ERROR!';
				document.getElementById('done').className = 'wait';
				document.getElementById('subbut2').disabled = false;
				document.getElementById('subbut').disabled = false;
				document.getElementById('subbut').value = 'Get The Code!';
	         }
	    }
	}


	function showXMLFeeds () {
		document.getElementById('xmlfeeds').className='';
		document.getElementById('others').className='';
		document.getElementById('subbut').className='';		
	}
	
	function hideXMLFeeds () {
		document.getElementById('xmlfeeds').className='hidden';
	}
	
	
	function showSimple(){
		document.getElementById('others').className='';
		document.getElementById('subbut').className='';
		document.getElementById('rssfeed').className='hidden';
		document.getElementById('simplebut').className='hidden';
	}
	
	function formValidate () {
		var formObj = document.getElementById('inputform');
		var re = new RegExp ( '^http://.*');
		if (!isUrl(formObj.elements['url'].value)) {
			alert( 'Enter Valid URL');
			formObj.elements['url'].focus();
			return false;
		}
		
		if (formObj.elements['title'].value.length < 3) {
			alert( 'Enter Valid Title');
			formObj.elements['title'].focus();
			return false;
		}
		
		if (formObj.elements['description'].value.length < 3) {
			alert( 'Enter Valid Description');
			formObj.elements['description'].focus();
			return false;
		}
		
		var subbutObj = document.getElementById('subbut');
		subbutObj.disabled = true;
		subbutObj.value='Please wait...';
		loadXMLDoc('create.xml', makeParams ());
		
		document.getElementById('subbut2').disabled = true;
		
		document.getElementById('htmlcode').value = '';
		
		document.getElementById('done').innerHTML = 'Please wait...';
		document.getElementById('done').className = 'wait';
		
		
		
		return false;
	}
	
	function makeParams () {
		var ress = new Array ();
		var fields = { 'url': 'url',  'title': 'title', 'description': 'description', 'favicon': 'favicon'};
		var i = 0;
		for (var key in fields) {
			ress[i] = key + '=' + encodeURIComponent( document.getElementById(fields[key]).value);
			i++;
		}
		if (document.getElementById('feed').value != '') {
			var fields2 = { 'feed': 'feed',  'feed-refresh': 'feed-refresh', 'feed-icon': 'feed-icon', 'feed-description': 'feed-description'};
			for (var key in fields2) {
				ress[i] = key + '=' + encodeURIComponent( document.getElementById(fields2[key]).value);
				i++;
			}
			
		}
		return ress.join('&');
	}
	
	function getDomain ( url) {
		var url = new String ( url);
		myRE = new RegExp("http://(.*?)/", "i")
		results = url.match(myRE);
		if (results) {
			return 'http://'+results[1];
		}
		return url;
	}
	
	
	function favIcon(srcObj,customIcon){
		var trgtObj=document.getElementById('url');
		var lblObj=document.getElementById('favcheckLbl');
		var cstObj=document.getElementById('customFavIcon');
		if(trgtObj.value.indexOf('www.example.com',0)!=-1)return false;
		customIcon=(customIcon || '');

		if(srcObj.checked){
			trgtObj.className='withicon';
			if(isUrl(customIcon) && isUrlExist (customIcon)){
						trgtObj.style.backgroundImage='url('+customIcon+')';
						lblObj.style.backgroundImage='url('+customIcon+')';
						cstObj.className='something';
						return ;			
			}else{
				if (isUrl(trgtObj.value)){
					var url = getDomain ( trgtObj.value);
					url = url + '/favicon.ico';
					if (isUrlExist ( url)) {
						trgtObj.style.backgroundImage='url('+url+')';
						lblObj.style.backgroundImage='url('+url+')';
						cstObj.className='something';
						document.getElementById('favicon').value=url;
						return ;
					}
				}
			}
		} else {
			document.getElementById('favicon').value='';
		}
		trgtObj.className='n';
		if (isUrl(trgtObj.value)){
			trgtObj.style.backgroundImage='none';
			lblObj.style.backgroundImage='none';
		}
		cstObj.className='hidden';			
	}
	
	function isUrl(urlStr){
		var re = new RegExp ( '^http://.*');
		if (urlStr.length < 11 || !urlStr.match(re)) {
			return false;
		}
		return true;
	}
	
	window.onload=function(){
		document.getElementById('favcheck').onclick=function(){
			favIcon(document.getElementById('favcheck'))
		}
		document.getElementById('url').onblur=function(){
			favIcon(document.getElementById('favcheck'))
		}
		
		document.getElementById('favicon').onblur=function(){
			favIcon(document.getElementById('favcheck'),document.getElementById('favicon').value);
		}		
		document.getElementById('rssfeed').onclick=function(){
			showSimple();
			showXMLFeeds();
		}
		document.getElementById('simplebut').onclick=showSimple;
		document.getElementById('url').onfocus=function(){
			clearInputs(this)
		}
		document.getElementById('title').onfocus=function(){
			clearInputs(this)
		}
		document.getElementById('description').onfocus=function(){
			clearInputs(this)
		}	
		document.getElementById('rssfeed2').onclick=function(){
			document.getElementById('outputform').className='hidden';
			showXMLFeeds();
			document.getElementById('fbut').className='submitbutt';
		}
	}
	
	function clearInputs(obj){
		if(obj.title==obj.value)obj.value='';
		obj.select();
	}
	
	function isUrlExist ( url) {
		beforLoad ();
		// branch for native XMLHttpRequest object
		req = createRequest ();
		if (req) {
        	req.open("GET", 'check.xml?url=' + escape( url), false);
	        req.send(null);
		    afterLoad ();
	    	if (req.readyState == 4) {
	        	if (req.status == 200) {
	        		if (getRespond (req) == 'OK') {
	        			return true;
	        		}
	        	}
	    	}
		}
	    return false;
	}
	
	function getRespond (req) {
		return req.responseXML.getElementsByTagName("respond")[0].firstChild.nodeValue;
	}
	
	function beforLoad () {
		document.getElementById('loading').className = '';
	}
	
	function afterLoad () {
		document.getElementById('loading').className = 'hidden';
	}