﻿addEvent('domready', addMissingFeatures);

function addMissingFeatures(event){
	handleFormInputs();
}

function handleFormInputs(){
	var hasCheckValidity = document.forms[0].checkValidity;
	
	//Check for Chrome's broken checkValidity implementation
	if (hasCheckValidity) {
		var testForm = document.createElement('form');
		var testInput = [];
		var addTestWidget = function(i) {
			testInput[i] = document.createElement('input');
			testInput[i].type = 'radio';
			testInput[i].required = 'required';
			testInput[i].name = 'radio_validity_test';
			testInput[i].value = i;
			testForm.appendChild(testInput[i]);
		}
		addTestWidget(0);
		addTestWidget(1);
		testInput[0].checked = true;
		hasCheckValidity = testInput[1].checkValidity();
	}
	
	if (document.forms[0] && !hasCheckValidity){
		var handleInput = function(widget){
			if (widget.get('tag') == 'textarea')
				widget.checkValidity = checkTextValidity;
			else
				switch (widget.get('type')){
					case 'date':
						widget.checkValidity = checkDateValidity;
						break;
						
					case 'text':
						widget.checkValidity = checkTextValidity;
						break;
						
					case 'email':
						widget.checkValidity = checkEmailValidity;
						break;
						
					case 'radio':
						widget.checkValidity = checkRadioValidity;
						break;
						
					case 'checkbox':
						widget.checkValidity = function(){ return true; };
						break;
						
					default:
						alert(widget.type);
				}
		}
		$$('input').each(handleInput);
		$$('textarea').each(handleInput);
		
		var forms = $$(document.forms);
		addCheck = function(form){
			form.checkValidity = checkFormValidity;
		}
		forms.each(addCheck);
		
		fireEvent('checkValidityAdded');
	}
}

function checkFormValidity(){
	var valid = true;
	var tested = [];
	var widgets = $(this).getElements('input, select, textarea');
	
	for (var i = 0; i < widgets.length; i++){
		if (tested.indexOf(widgets[i].name) == -1){
			tested.push(widgets[i].name);
			
			if (widgets[i].checkValidity)
				valid = widgets[i].checkValidity() ? valid : false;
			if (!valid){
				widgets[i].fireEvent('invalid', {'target': widgets[i]});
				break;
			}
		}
	}
	
	return valid;
}

function checkDateValidity(){
	if (!this.get('required') && this.value == '')
		return true;
		
	
	var regEx = /^20\d{2}-[0|1]\d-[0-3]\d$/
	var validDate = regEx.test(this.value);

	this.set('title', 'Please choose a valid date in the format 2008-12-31.');
	
	if (validDate){
		if (this.get('max') && this.value > this.get('max')){
			this.set('title', 'Please choose a date before '+this.get('max')+'.');
			validDate = false;
			
		} if (this.get('min') && this.value < this.get('min')){
			this.set('title', 'Please choose a date after '+this.get('min')+'.');	
			validDate = false;	
		} 
	}
	
	return validDate;
}

function checkTextValidity(){
	if (!this.get('required') && this.value == '')
		return true;
	else if (this.get('pattern')){
		return this.value.test(this.get('pattern'));
	} else
		return !(this.value == '');
}

function checkEmailValidity(){
	if (!this.get('required') && this.value == '')
		return true;
		
	var regEx = /^[a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,4}$/i;
	return (regEx.test(this.value) && fromGoodDomain(this.value));
}

function checkRadioValidity(){
	if (!this.get('required'))
		return true;
		
	var radioButtons = document.getElementsByName(this.name);
	for (var i = 0; i < radioButtons.length; i++){
		if (radioButtons[i].checked){
			return true
		}
	}
	return false;
}

function fromGoodDomain(addressToTest){
	var badAddresses = ['02.org.ua', '0gift.org', '10minutemail.com', '163.com', '21cn.com', '301azn.info', '301boot.info', '301bullcup.info', '301cerpio.info', '301compact.info', '301comsin.info', '301drush.info', '301eater.info', '301fedexownsups.info', '301flush.info', '301hotland.info', '301jackal.info', '301lighter.info', '301mankkin.info', '301newegg.info', '301packert.info', '301pookart.info', '301savegame.info', '301saw4.info', '301saw5.info', '301slimjim.info', '301summer.info', '301tours.info', '301westagent.info', '5crafts.com', '6url.com', '99c.in', '9mattress9.com', 'a.com', 'abha.cc', 'abilityonline.info', 'about-britney-spears.info', 'adirect.org', 'adresamea.net', 'advertfast.com', 'agadir.cc', 'agerealty.info', 'ahrump.com', 'ahsa.ws', 'aichyna.com', 'ajiex.info', 'ajman.cc', 'ajman.us', 'ajman.ws', 'albaha.cc', 'alertonline.info', 'alex-hartmann.de', 'alex-vodopyanoff.info', 'alex4all.com', 'alexandria.cc', 'algerie.cc', 'algreatpics.net', 'alkom.com.tr', 'allbesthome.com', 'allcoolsites.info', 'allwebdrugs.info', 'alpha-direct.com', 'alriyadh.cc', 'alsado.com', 'alterego-net.info', 'altern.org', 'alternative-coding.info', 'alternative-mind.info', 'amman.cc', 'andgarden.org', 'ankyl.info', 'annecarrierarchitectes.com', 'another.com', 'anticheba.com', 'aolo.com', 'aqaba.cc', 'arar.ws', 'arcor.de', 'arrestwarrents.info', 'asdasd.ru', 'asel.udel.edu', 'aswan.cc', 'atefrog.org', 'atreyu.mozgi.be', 'au.ru', 'auto-rus.com', 'avstralia.org', 'awab.com', 'azure-stone.com', 'baalbeck.cc', 'bahraini.cc', 'bakedpotato2005.biz', 'banha.cc', 'batteriess.com', 'bazehost.info', 'berahe.info', 'best-finance.biz', 'best-ringtones-online.info', 'bestautosearch.org', 'bestbgfarm.info', 'bestboyfilms.org', 'bestcdma.net', 'bestfreemall.info', 'bestwayhealth.org', 'bestwebhostingever.de', 'bi-dating.info', 'bigfreemail.info', 'bigmir.net', 'bizerte.cc', 'bk.ru', 'bladestv.com', 'blida.info', 'bodhi.lawlita.com', 'bonbon.net', 'bookee.com', 'bot-test.info', 'brainyonline.info', 'btinternet.com', 'bugmenot.com', 'bumpymail.com', 'buraydah.cc', 'burnacouplemore.com', 'burntmail.com', 'businessvoc.com', 'camefromblue.info', 'cameroon.cc', 'caramail.com', 'cardiagnost.com', 'cash.com', 'cashette.com', 'casino-poker-web.com', 'castdate.com', 'ccxt.info', 'centermail.com', 'centermail.net', 'centrum.cz', 'chcb.info', 'checksunlimited.rsc03.com', 'clapn.info', 'codec.ro', 'cool-art.us', 'corpobox.com', 'corsa-tuning', 'cracklord.com', 'cryd.net', 'cute-boys.org', 'cute-boys.orga.cc', 'cvg8hette.com', 'cyvx.com', 'datingservices.com', 'dayloan.com', 'dejazzd.com', 'delemiter.info', 'deliquent.info', 'deo-vindice.com', 'despam.it', 'dfag.com', 'dfjldflfas.net', 'dhahran.cc', 'dhofar.cc', 'dialogchat.com', 'dir.bg', 'discardmail.com', 'discardmail.de', 'djibouti.cc', 'dodge4sale.info', 'dodgeit.com', 'dodgit.com', 'dollar-alert.com', 'domain141.com', 'domain234.com', 'domain396.com', 'domain416.com', 'domain566.com', 'dominican.cc', 'dontreg.com', 'dotfreeemail.org', 'dredge-armature-loader.com', 'drugsmarket.info', 'dygo.com', 'e-prick.com', 'e4ward.com', 'ecarta.biz', 'elite1000.org', 'email.com', 'emailias.com', 'emailmandirect.org', 'emails.cc', 'eritrea.cc', 'etradeoil.com', 'euro-investment.biz', 'europe.com', 'experthyips.com', 'faithmail.com', 'fakeinformation.com', 'falasteen.cc', 'fanaticars.info', 'fastermail.com', 'fatal-job.org', 'filki.com', 'fin-online.biz', 'finance-here.biz', 'find-love.info', 'flakkee.net', 'for-fun.info', 'formails.com', 'foteret.info', 'foxadv.com', 'free-online-blogs.info', 'free.familybrutal.com', 'freebestworld.com', 'freefreemail.info', 'freehardcorevideo.org', 'freehs.info', 'freeideasearch.info', 'freemail.info', 'freenet.de', 'freepizzamail.org', 'freepochta.info', 'freepochta.infoBigJonnyX', 'freeseriously.info', 'freeservicemail.info', 'freestufflot.com', 'freestuffo1.com', 'freestuffo2.com', 'freestuffo3.com', 'freestuffo4.com', 'freestuffo5.com', 'freestuffo6.com', 'freestuffo7.com', 'freestuffo8.com', 'freestuffo9.com', 'freewebs.com', 'fromru.com', 'fromru.ru', 'front.ru', 'front14.org', 'fujairah.cc', 'fujairah.us', 'fujairah.ws', 'gabes.cc', 'gafsa.cc', 'gala.net', 'gamebox.net', 'gawab.com', 'gawabb.com', 'gboromiro.info', 'geekmail.com', 'getamusic.com', 'getonemail.com', 'gettopdrug.info', 'ghosttexter.de', 'gishpuppy.com', 'giza.cc', 'globalsources.com', 'gmx.de', 'go.ru', 'go2.pl', 'gold-profits.info', 'gold2world.biz', 'golfilla.info', 'gomail.com.ua', 'goodideya.ru', 'googlemail.com', 'goolook.ru', 'goowyinc.org', 'goresxa.com', 'grayskies.com', 'greatemailaccount.org', 'greatvalleymail.info', 'greensloth.com', 'grifon.info', 'grinzv.com', 'guerrillamail.biz', 'guerrillamail.com', 'guinea.cc', 'guru-comestat.org', 'gurvitsnojew.org', 'hackersmail.com', 'haltospam.com', 'halyava.ru', 'hamra.cc', 'hasakah.com', 'hebron.tv', 'hip-h0p1.ru', 'homeloancourse.info', 'homs.cc', 'hoodialife.org', 'host-that.info', 'hotmail.ru', 'hotpop.com', 'housrehab.org', 'hubau.net', 'hupontek.com', 'hush.com', 'i.ua', 'ibra.cc', 'id.ru', 'iespana.es', 'ietipsandtricks.info', 'iljy.com', 'imap.cc', 'inbox.com', 'inbox.lv', 'inbox.ru', 'inetbiznesman.ru', 'infogami.com', 'informator.bpa.nu', 'inmail.ru', 'inmail24.com', 'intramal.com', 'iqsearch.org', 'irbid.ws', 'ireland.com', 'iscw.org', 'ismailia.cc', 'isuisse.com', 'itua.info', 'jadida.cc', 'jadida.org', 'java-dzen.info', 'jerash.cc', 'jetable.net', 'jetable.org', 'jizan.cc', 'jouf.cc', 'kairouan.cc', 'karak.cc', 'kasmail.com', 'kefir.000buy.com', 'khaimah.cc', 'khartoum.cc', 'khobar.cc', 'killmail.net', 'kisenfad.com', 'kloze.com', 'kmz.com', 'kors4all.com', 'kuwaiti.tv', 'kyrgyzstan.cc', 'land.ru', 'latakia.cc', 'latx.50webs.org', 'lebanese.cc', 'lenta.ru', 'limma-search.org', 'link2mail.net', 'list.ru', 'liveonlinefooty.com', 'longhorns.com', 'lopigax.com', 'lubnan.cc', 'lubnan.ws', 'lucky.starnet.md', 'mac.ro', 'madinah.cc', 'madtube.info', 'maghreb.cc', 'mail.bg', 'mail.com', 'mail.htl22.at', 'mail.misterpinball.de', 'mail.net', 'mail.ru', 'mail.svenz.eu', 'mail.uz', 'mail.zp.ua', 'mail15.com', 'mail333.com', 'mailbucket.org', 'maileater.com', 'mailexpire.com', 'mailgate.ru', 'mailin8r.com', 'mailinator.com', 'mailinator.net', 'mailinator2.com', 'maillinator.com', 'mailmoat.com', 'mailnull.com', 'mails.de', 'mailsiphon.com', 'manama.cc', 'mansoura.tv', 'marketingops.com', 'marrakesh.cc', 'mascara.ws', 'master-ok.com', 'master-x.msk.ru', 'matrix.co.ro', 'mature-bondage.com', 'medandpharm.info', 'medicinese.info', 'medicinese.org', 'mediciness.net', 'meds10site.info', 'mega-mail.com', 'megabox.ru', 'megaemail.info', 'meknes.cc', 'messagebeamer.de', 'meta.ua', 'mexicasa.com.au', 'mgmail.com', 'minelab.ru', 'mintemail.com', 'monster++++s.com', 'mortgagerefinancedot.info', 'moviesteeenss.com', 'moyareklama.ru', 'mozgi.be', 'mozhno.net', 'mp3new4u.com', 'msk.su', 'mt2009.com', 'muscat.tv', 'muscat.ws', 'muuh.info', 'mx0.wwwnew.eu', 'mymail-in.net', 'mynet.com', 'mythrashmail.net', 'mytrashmail.com', 'myway.com', 'myxost.com', 'nabeul.cc', 'nabeul.info', 'nablus.cc', 'nador.cc', 'najaf.cc', 'nakedworldcelebrities.com', 'nc.ru', 'ne-quid-nimis.info', 'neomailpro.com', 'nervmich.net', 'netaddress.ru', 'netcity.ru', 'netlawman.co.uk', 'netmails.com', 'netmails.net', 'netzidiot.de', 'newmail.ru', 'newpostcash.org', 'newsups.com', 'nextmail.ru', 'nightmail.ru', 'nil-admirari.info', 'niptoon.info', 'nm.ru', 'notmail.ru', 'nudism-8.com', 'nudists-8.com', 'nurfuerspam.de', 'o2.pl', 'octivian.com', 'ok.ru', 'ol.com', 'omani.ws', 'omdurman.cc', 'one.lt', 'online-search-casino.org', 'onlinebestplenty.org', 'onlinehealthclub.org', 'onlinehoster.com', 'onlymail2007.com', 'op.pl', 'oran.cc', 'orlymusic.com', 'oued.info', 'oued.org', 'oujda.biz', 'oujda.cc', 'outgun.com', 'oxidiser.net', 'pakistani.ws', 'palmyra.cc', 'palmyra.ws', 'paydayloan.infogami.com', 'paymailpro.com', 'paymailpro.org', 'peugeot-club.org', 'phreaker.net', 'pills-info.org', 'pingmyhobbit.info', 'pisem.net', 'plasticinbox.com', 'pleasantphoto.com', 'please-email-me.info', 'pobox.com', 'pochta.ru', 'pokushai.org', 'pookmail.com', 'pooperduperzgmail.com', 'porn.com', 'pornobilder-mal-gratis.com', 'pornoroxx.net', 'pornvideostar.org', 'portsaid.cc', 'post.su', 'posta.ro', 'powertek.info', 'pptp-service.info', 'prescrip.pl', 'privacy.net', 'privatepop3.com', 'pspdrive.net', 'punkass.com', 'putoncondoms.com', 'qassem.cc', 'qlfg.com', 'quds.cc', 'rabat.cc', 'rafah.cc', 'rai.com.ua', 'ramallah.cc', 'rambler.ru', 'rap-site.com', 'rediffmail.com', 'reg-realty.msk.su', 'reitkopf.com', 'res1.info', 'res2.info', 'res3.info', 'res4.info', 'res5.info', 'res6.info', 'res7.info', 'rogji4j40jgire.info', 'roman-petroff.biz', 'ru.ru', 'runbox.com', 'rus-shop.info', 'russ-search.info', 'russianbridesportal.net', 'russsearch.biz', 'russsearch.com', 'russsearch.info', 'russsearch.net', 'russsearch.org', 'russsearch.ru', 'safat.biz', 'safat.info', 'safat.us', 'safat.ws', 'salalah.cc', 'salmiya.biz', 'sanaa.cc', 'scris.co.ro', 'scrisoare.co.ro', 'scrisoare.net', 'scrisori.net', 'sdfs.com', 'searchproducts.info', 'seeb.cc', 'sendmail.ru', 'sexmagnet.com', 'sexy-site.org', 'sexyadultworld.com', 'seznam.cz', 'sfax.ws', 'sharm.cc', 'shop.de', 'shortmail.net', 'sibmail.com', 'sinai.cc', 'sipos.org', 'siria.cc', 'skim.com', 'skorpmax.info', 'slaskpost.se', 'slopsbox.com', 'slopsbox.net', 'slopsbox.org', 'slopsbox.se', 'smeh.info', 'smtp.ru', 'sneakemail.com', 'sniperpoint.com', 'sofort-mail.de', 'sogetthis.com', 'sousse.cc', 'spailbox.com', 'spailbox.net', 'spailbox.org', 'spam.la', 'spambob.com', 'spambob.net', 'spambob.org', 'spambog.com', 'spambog.de', 'spambox.us', 'spamday.com', 'spamex.com', 'spamfree24.com', 'spamfree24.de', 'spamfree24.eu', 'spamfree24.info', 'spamfree24.net', 'spamfree24.org', 'spamgourmet.com', 'spamh0le.com', 'spamherelots.com', 'spamhole.com', 'spaminator.de', 'spaml.com', 'spammotel.com', 'spamspot.com', 'spamtrail.com', 'specificengineering.net', 'spivare.com', 'sriaus.com', 'start.com.au', 'statistics-fund.com', 'stormfront.org', 'stsk.info', 'subversion-rep.info', 'sudanese.cc', 'suez.cc', 'super-mail.com', 'superemailfree.org', 'supermortgagerate.info', 'tabouk.cc', 'tajikistan.cc', 'tandilla.net.ru', 'tangiers.cc', 'tanta.cc', 'tayef.cc', 'teghhu.com', 'tele-vision.info', 'telegraf.by', 'tempemail.net', 'tempinbox.com', 'temporaryinbox.com', 'terra-mail.info', 'terrgfhu.com', 'terrorismisrael.org', 'terru.com', 'test.com', 'tetouan.cc', 'the-stock.info', 'the-website-designer.com', 'thecannabishunter.com', 'thishell.com', 'thisisnotmyrealemail.com', 'thrashmail.net', 'timor.cc', 'tipro.info', 'tndllc.com', 'tnoq.com', 'toonbeast.com', 'topadult20.info', 'topmeds20.org', 'topvideogalerz.info', 'totalemaildirect.org', 'toughguy.net', 'tradedoubling.co.uk', 'trash-mail.de', 'trashmail.net', 'trashymail.com', 'tunisian.cc', 'tut.by', 'ua.fm', 'ukr.net', 'ultimate-svn.info', 'urdun.cc', 'uscreditdepot.com', 'usermail.com', 'users.1go.dk', 'vansoftcorp.com', 'vaosoft.com', 'venditacase.org', 'viagram.info', 'vip2fatal.info', 'visit-it.info', 'vxaz.com', 'vxgirl.info', 'walla.com', 'wasphawk.ru', 'web.de', 'webcatalog.net.ru', 'webmailemail.net', 'weekendgossips.info', 'willhackforfood.biz', 'windows4cash', 'winter.in.ua', 'world-inform.com', 'wuzup.net', 'wwwfreemail.info', 'xatqcxox.com', 'xents.com', 'xkje.com', 'xoxma.net', 'xtoompph.com', 'xxx-search.info', 'xxxfamoustoonshentai.com', 'ya.ru', 'yanbo.cc', 'yandex.ru', 'yauo.com', 'yemeni.cc', 'yoblog.info', 'yoricksite.biz', 'youngboys.org', 'youremailsoftware.org', 'yourfarmmail.org', 'yourgamesfree.info', 'yourmedserv.info', 'yufz.com', 'yunus.cc', 'zagazig.cc', 'zambia.cc', 'zarqa.cc', 'ze.ro', 'zmail.ru', 'zoemail.com'];
	
	var domain = addressToTest.split('@')[1];
	if (badAddresses.indexOf(domain) == -1)
		return true;
	return false;
}
