Validator = {
	
	//Different Validation Regular Expressions 
	alphaRegxp 		: /^([-A-Za-z ]+)$/,
	nameRegxp 		: /^([-A-Za-z\-\_ ]+)$/,
	uriRegxp		: /^([0-9A-Za-z\_]+)$/,
	alphaNumRegxp 	: /^([0-9A-Za-z ]+)$/,
	numRegxp 		: /^([0-9 ]+)$/,
	emailRegxp 		: /^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$/,
	passwordRegxp	: /^([a-zA-Z0-9@*#]{6,15})$/,
	regexUse		: '',
	/**
	 * The errors array stores the amount of current errors
	 */
	errors 			: [],
	/**
	 * Add a Validation to a field
	 * @param {string} field - Id of the Field Name to Validate
	 * @param {string} testType - Type of Event ( blur, change, keyup, focus etc.. )
	 * @param {string} errorMsg - The message you would like to display to the user
	 */
	addValidation : function ( field, type, errorMsg, eventType ){
		var errorOccurred;
		if( eventType == '' ) {
			eventType = 'blur';		
		} 
		Event.observe(field, 'blur', function(e){
			var target = e.target;
			var fieldValue = target.value;
			regExp =  Validator.getRegex( type );
			if( regExp.test(fieldValue) ) {
				$(field).style.borderColor= 'Silver';
				$(target.id + '_errorMsg').innerHTML = '';
				Validator.errors.splice( Validator.errors.indexOf( target.id ),  1 );			
			} else {
				$(target.id + '_errorMsg').innerHTML = errorMsg;
				$(field).style.borderColor= 'Red';
				Validator.errors.push( target.id );
				this.errors = this.errors.uniq();			
			}
		});
	
	},
	/**
	 * Validate a field VIA Ajax request, the codes should be returned in JSON
	 * 
	 * ie( {"success":1,"message":"Message Here!"} ) 
	 * @param {String} field
	 * @param {String} url
	 * @param {String} type
	 * @param {Boolean} persistant would you like it to keep updating?
	 */
	validateJSON : function ( field, url, type, persistant){
		
	
		var errorOccurred;
		Event.observe( field, type, function(e){
			var target = e.target;	
				new Ajax.Request(url, {
				  method: 'post',
				  parameters: { string: target.value },
				  onSuccess: function(res) {	
					var response = eval('(' + res.responseText + ')');
	
					if( response.success == 1 ) {
						$(field).style.borderColor= 'Silver';
						$(target.id + '_errorMsg').innerHTML = response.message;
						Validator.errors.splice( Validator.errors.indexOf( target.id ),  1 );
					}
					if( response.success == 0 ) {
						$(field).style.borderColor= 'Red';
						$(target.id + '_errorMsg').innerHTML = response.message;
						Validator.errors.push( target.id );
						this.errors = this.errors.uniq();		
					}
				}
			});		
		});		
	},
	/**
	 * Give this function two fields, this will validate that they match
	 * 
	 * @param {String} field1
	 * @param {String} field2
	 * @param {String} type
	 */
	mustMatch : function( field1, field2, type ){
		Event.observe( field1, type, function( e ){ 
			var target = e.target;
			if( $(field2).value == target.value ) {
				$(field1).style.borderColor= 'Silver';
				$(field2).style.borderColor= 'Silver';				
				$(target.id + '_errorMsg').innerHTML = '';
				Validator.errors.splice( Validator.errors.indexOf( target.id ),  1 );
			} else {
				$(field1).style.borderColor= 'Red';
				$(field2).style.borderColor= 'Red';				
				$(target.id + '_errorMsg').innerHTML = 'Fields must match!';
				Validator.errors.push( target.id );
				this.errors = this.errors.uniq();
			}
			
		});
			
	},
	/**
	 * Private Function returns the regular expression you need
	 * 
	 * @param {String} type
	 */
	getRegex : function ( type ){
			switch( type ) {
			case 'alpha'	: 	return this.alphaRegxp; break;
			case 'uri'		:	return this.uriRegxp;   break;			
			case 'num'		: 	return this.numRegxp;	break;
			case 'name'		:	return this.nameRegxp;	break;
			case 'alphaNum'	:	return this.alphaNumRegxp; break;
			case 'email'	:	return this.alphaNumRegxp; break;
			case 'password'	:	return this.passwordRegxp; break;
			}
	},
	/**
	 * Will validate that there are no errors on the page
	 * 
	 */
	validateErrors : function ( ){
		this.errors = this.errors.uniq();					
		if( this.errors.length <= 0 ) {
			return true;	
		} else {
			return false;
		}
	}
};


	/**
	 * This is for the accounts.orgslist.php template
	 *
	 */


var orgs = {
    validateForm:function(){
        var errorsOnPage = Validator.validateErrors();

        var newErrors = false;
        if (errorsOnPage == true) {
            if( $F('name') == '' || ($('name_errorMsg').innerHTML == 'That name is already registered.'))
            {
                newErrors = true; $('name').style.borderColor='Red';
            }
            /*if (document.forms['addorg'].orgname.value.length < 1) {
                newErrors = true;
                document.forms['addorg'].orgname.style.borderColor = 'Red';
            }*/

            if ($('add_myorg').address.value.length < 1) {
                newErrors = true;
                $('add_myorg').address.style.borderColor = 'Red';
            }

            if ($('add_myorg').city.value.length < 1) {
                newErrors = true;
                $('add_myorg').city.style.borderColor = 'Red';
            }
            var iSelect1 = $('add_myorg').country.options[$('add_myorg').country.selectedIndex].value;
            if (iSelect1 == 0) {
                newErrors = true;
                $('add_myorg').country.style.borderColor = 'Red';
            }
            if (iSelect1 == 840 || iSelect1 == 826 || iSelect1 == 124 || iSelect1 == 36) {
                var iSelect = $('add_myorg').state.options[$('add_myorg').state.selectedIndex].value;
                if (iSelect == 0) {
                    newErrors = true;
                    $('add_myorg').state.style.borderColor = 'Red';
                }
            }

            var typeselected=false;

            var mylist=document.getElementById("addorgtd");
            for (i=0; i<mylist.childNodes.length; i++){

                if (mylist.childNodes[i].type=='checkbox' && mylist.childNodes[i].checked)
                {
                    typeselected=true;
                }
            }
            if (!typeselected){
                newErrors=true;
            }
            if (newErrors == true) {
                alert("There are some fields missing, please fill out all fields");
                return false;
            }
            else {

               // document.getElementById('addorg').submit();
                return true;
            }

        }
        else {
            alert("There were errors");
            return false;
        }
    },
    removeMe:function(element){
        splitsVille = element.split("_");
        org_id=splitsVille[1];

        new Ajax.Request('/Ajax/removeUserOrg', {
            method: 'post',
            parameters: {
                org_id : org_id
            },
            onSuccess: function(res){
                $(element).remove();
                $('orgs_auto1').style.display='block';
            }
        });
    },

    addOrg:function(org_id,org_uri, org_name){
        if ($('add_orgs').getElementsByTagName('li').length==20){
            $('orgs_auto1').style.display="none";
        }

        var duplicate = false;
        var addElements = $('add_orgs').select('[class="org_ids"]').pluck("id");
        var rowclass;

        if ((document.getElementById('add_orgs').getElementsByTagName('li').length%2)==0)
        {
            rowclass=0;
        } else {
            rowclass=1;
        }
        //LIMIT 5
        for (i = 0; i <= addElements.length - 1; i++) {
            splitsVille = addElements[i].split("_");
            if (splitsVille[1] == org_id) {
                return 0;
                var duplicate = true;
            }
        }
        if (org_id != 'none' && duplicate == false) {
            orgs.tagNewOrg(org_id,org_uri,org_name,rowclass,1);

        }
        else {
            alert("Please Pick a Organization First");
        }
    },


       appendDomWizard:function(text, li){
        var org_id = li.id;
        new Ajax.Request('/Ajax/GetOrgName', {
            method: 'post',
            parameters: {
                org_id: org_id
            },
            onSuccess: function(res){
                var response = eval('(' + res.responseText + ')');
                org_name = response.org_name;
                org_city = response.org_city;
                org_uri = response.org_uri;
                orgs.addOrg(org_id, org_uri,org_name);
                $('orgs_auto1').value = '';
            }
        });
    },


    tagNewOrg:function(orgid,orguri,orgname,rowclass){
        var newNode=document.createElement("LI");
        newNode.setAttribute("id", "org_" + orgid);
        var myCls = document.createAttribute("class");
        myCls.value="org_ids";
        newNode.setAttributeNode(myCls);
        newNode.innerHTML = '<div style="float:left"><input type="hidden" name="orgs_tagged[]" value="'+orgid+'"><a class="venues_tagged_orgs'+rowclass+'" href="/'+orguri+'">' + orgname +'</a></div>  ' + '<div style="float: right"><a href="javascript:;" onclick="orgs.removeMe(\'org_'+orgid+'\')"> Remove </a></div> <div style="clear: both;">';
        $('add_orgs').appendChild(newNode);
    }


};



