   /**
   * Validator javascript class 
   * This singleton class used to validate user input before sending request to server side script
   * @author iMediaStream
   * @copyright Copyright (c) 2007, iMediaStream
   * @version 1.0
   */
Validate={};
	/**
	* @var array contenttypes mime types arrray
	* @uses Validate.contenttypes used to hold mime types for banners 
	*/
	Validate.contenttypes=new Array();
	Validate.contenttypes['txt/plain']="txt";
	Validate.contenttypes['image/gif']="gif";
	Validate.contenttypes['image/png']="png";
	Validate.contenttypes['image/jpeg']="jpeg";
	Validate.contenttypes['image/pjpeg']="jpeg";
	Validate.contenttypes['application/x-shockwave-flash']="swf";
	/**
	* @var array language array
	* @uses Validate.lang hold some words used to display system messages and dialog box example Validate.lang['en']['t_error']="error"
	*/
	Validate.lang=new Array();
	Validate.lang['en']=new Array();
	Validate.lang['ar']=new Array();
	Validate.lang['en']['t_accept_only_numbers']="This field accept_only_numbers";
	Validate.lang['en']['t_loading']="Loading..........";
	Validate.lang['en']['t_error_choose_uploaded_file']="Error, please choose a file to upload";
	Validate.lang['en']['t_error_enter_url_name']="Error, please enter website name";
	Validate.lang['en']['t_error_choose_your_banner_sizes']="Error, please choose banner sizes your site accepts:";
	
	Validate.lang['en']['t_error_enter_url']="Error, please enter website";
	Validate.lang['en']['t_error_enter_text_ad']="Error, please enter text";
	Validate.lang['en']['t_error_enter_duration']="Error, please enter duration";
	Validate.lang['en']['t_error_enter_campaignname']="Error, please enter campaign name";
	Validate.lang['en']['t_error_enter_your_name']="Error, please enter your name";
	Validate.lang['en']['t_error_enter_your_email']="Error, please enter your email";
	Validate.lang['en']['t_invalid_email_address']="Invalid email address";
	Validate.lang['en']['t_invalid_variable_name']="Invalid variable name";	
	Validate.lang['en']['t_error_enter_url']="Error, please enter url";
	Validate.lang['en']['t_invalid_url']="Invalid url format";
	Validate.lang['en']['t_error_enter_your_address']="Error, please enter your address";
	Validate.lang['en']['t_error_enter_zone_name']="Error, please enter zone name";
	Validate.lang['en']['t_error_enter_zone_width']="Error, please enter zone width";
	Validate.lang['en']['t_error_enter_zone_height']="Error, please enter zone height";
	Validate.lang['en']['t_error_enter_movie_name']="Error, please enter movie name";
	Validate.lang['en']['t_error_enter_network_title']="Error, please enter the network title";
	Validate.lang['en']['t_error_enter_network_code']="Error, please enter the network code";
	Validate.lang['en']['bt_linked_zones']="Linked Zones";
	Validate.lang['en']['bt_linked_movies']="Linked Movies";
	Validate.lang['en']['bt_download_excel'] = "Download Plan Sheet";
	Validate.lang['en']['p_select_ad_size'] = "Size:";
	Validate.lang['en']['p_ad_width'] = "Width:";
	Validate.lang['en']['p_ad_height'] = "Height:";
	Validate.lang['en']['p_cost_info'] = "Cost:";
	Validate.lang['en']['p_auto_accept'] = "Auto accept ads";
	Validate.lang['en']['p_cpm'] = "CPM";
	Validate.lang['en']['p_movie_title'] = "Movie Title:";
	Validate.lang['en']['p_movie_duration'] = "Duration:";
	Validate.lang['en']['p_movie_url'] = "URL:";
	Validate.lang['en']['p_movie_typ'] = "Video Type:";
	Validate.lang['en']['p_ass_banner'] = " Aassociate zone with movie."
	Validate.lang['en']['p_zone_name'] = "Name:";
	Validate.lang['en']['t_error_enter_current_password']="Please enter your current password";
	Validate.lang['en']['t_error_enter_your_password']="Please enter your password";
	Validate.lang['en']['t_error_enter_new_password']="Please enter new password";
	Validate.lang['en']['t_error_enter_confirmed_password']="Please enter confiremed password";
	Validate.lang['en']['t_error_confirmed_mismatch_password']="Error, password mismatch";	
	Validate.lang['en']['t_error_enter_your_bank_info']="Please enter your bank information";	
	Validate.lang['en']['t_code_verification_error']="Error, please enter the code shown on the image";
	Validate.lang['en']['t_error_password_should_be']="password should be between 6 and 12 characters";
	Validate.lang['en']['t_invalid_phone_format']="phone should be between 9 and 14 digits";
	Validate.lang['en']['t_error_enter_ad_description']="Please enter ad description";
	Validate.lang['en']['t_error_enter_ad_title']="Please enter ad title";
	Validate.lang['en']['t_invalid_date_format']="Invalid date format";
	Validate.lang['en']['t_error_enter_start_date']="Please enter start date";
	Validate.lang['en']['t_error_enter_end_date']="Please enter end date";
	Validate.lang['en']['t_error_enter_your_phone']="Please enter your phone";
	Validate.lang['en']['t_error_enter_your_postcode']="Please enter your post code";
	Validate.lang['en']['t_error_enter_your_city']="Please enter your city";
	Validate.lang['en']['t_error_enter_your_state']="Please enter your state/province";
	Validate.lang['en']['t_state_in_us_canada']="Please enter 2 alfabitical charachters only";
	Validate.lang['en']['t_postal_code_in_us_canada']="Invalid zip / postal code";
	Validate.lang['en']['t_error_enter_your_zip_postal_code']="Please enter your zip/postal code";
	Validate.lang['en']['t_error_enter_your_minimum_check']="Please enter minimum check amount";
	Validate.lang['en']['t_error_enter_your_payee_name']="Please enter payee name";
	Validate.lang['en']['t_error_enter_tax_id']="Please enter tax id";
	Validate.lang['en']['t_error_choose_category']="Please choose a category";
	
	Validate.lang['en']['t_error_enter_your_country']="Please select your country";
	Validate.lang['en']['t_error_enter_your_likelyinterest']="Please select your likely interest";	
	Validate.lang['en']['t_error_enter_your_interest']="Please select your interest";	
	Validate.lang['en']['t_error_enter_your_hear_about']="Please select how you hear about";
	Validate.lang['en']['t_error_enter_your_monthly_budget']="Please select how you hear monthly budget";
	Validate.lang['en']['t_invalid_fax_format']="Fax should be between 9 and 14 digits";
	Validate.lang['en']['t_invalid_mobile_format']="Mobile should be between 9 and 14 digits";
	Validate.lang['en']['t_error_enter_your_company']="Please enter your company name";
	Validate.lang['en']['t_error_enter_your_company_type']="Please enter your company type";
	Validate.lang['en']['t_error_enter_your_first_name']="Please enter your first name";
	Validate.lang['en']['t_error_enter_your_last_name']="Please enter your last name";
	Validate.lang['en']['t_error_enter_your_pageviews_per_month']="Please select pageviews per month from pageviews list";
	Validate.lang['en']['t_error_enter_your_industry']="Please select industry from industries list";
	Validate.lang['en']['t_preview_thumb']="Preview";
	Validate.lang['en']['t_error_select interest']="Please select interest";
	Validate.lang['en']['t_error_enter_trackername']="Please enter tracker name";
	Validate.lang['en']['t_other_title'] = "Network title:";
	Validate.lang['en']['t_other_lable'] = "Code from other network:";
	Validate.lang['en']['t_error_enter_your_username']="Please enter your username";
	Validate.lang['en']['t_bad_username']="Username contains invalid characters.\nOnly letters, numbers and _ are allowed in this field";
	Validate.lang['en']['t_error_username_should_be']="Username should be between 5 to 25 characters";
	Validate.lang['en']['t_please_enter_company_name']="Please enter your company name";
	Validate.lang['en']['accept_from_following_advertiser']="Accept from advertiser only:";
	Validate.lang['en']['t_error_popup_properties']="Please enter your popup properties";
	Validate.lang['en']['popup_properties']="Popup properties:";
	Validate.lang['en']['popup_header_color']="Header color:";
	Validate.lang['en']['popup_header_background_color']="Header background:";
	Validate.lang['en']['popup_border_color']="Border color:";
	Validate.lang['en']['popup_background_color']="Backround:";
	Validate.lang['en']['t_update_campaign_info_thanks'] ="Your campaign info has been updated";
	Validate.lang['en']['accept_from_3rd_party']="Accept from 3rd party network";
	Validate.lang['en']['t_error_insertion_order']="Please enter insertion order";
	Validate.lang['en']['t_video_pricing']="Pricing CPV:";
	Validate.lang['en']['t_error_image_url'] = "Please enter image url";
	Validate.lang['en']['t_error_enter_contact_name'] = "Please enter your contact name";
	Validate.lang['en']['t_error_enter_company'] = "Please enter your Company/Organization";
	Validate.lang['en']['t_error_enter_how_did_here'] = "Please enter How did you here of us";
	Validate.lang['en']['t_error_choose_your_website_description']="Enter your website description";
	Validate.lang['en']['t_error_choose_your_visitors_description']="Enter your visitors Description";
	Validate.lang['en']['t_error_choose_your_unique_users']="Enter your unique users";
	Validate.lang['en']['t_error_choose_your_unique_views']="Enter your unique views";
	Validate.lang['en']['t_error_choose_your_impressions']="Enter your unique impressions";
	Validate.lang['en']['t_error_enter_your_message_subject']="Enter your message subject";
	Validate.lang['en']['t_error_enter_your_message']="Enter your message";
	Validate.lang['en']['t_error_select_zone_size']="Please select your zone size from sizes list";
	Validate.lang['en']['t_changing_banner_size']="Changing the banner size will unlink any zones that not match the new size";
	Validate.lang['en']['t_changing_video_type']="Changing video ad type will unlink any movies that not match the new type";
	Validate.lang['en']['t_changing_budget_cpm']="Changing budget will unlink any zones that not match the new budget";
	Validate.lang['en']['t_changing_budget_cpv']="Changing budget will unlink any movies that not match the new budget";
	Validate.lang['en']['t_are_you_sure']="Are you sure!";
	Validate.lang['en']['t_changing_zone_size']="Changing zone size will unlink any ads that not match the new size";
	Validate.lang['en']['t_changing_movie_type']="Changing movie type will unlink any ads video that not match the new type";
	Validate.lang['en']['t_changing_budget_cpm_zone']="Changing cost will unlink any banners that not match the new cost";
	Validate.lang['en']['t_changing_budget_cpv_movie']="Changing budget will unlink any movies that not match the new budget";
	Validate.lang['en']['t_wrong_expanding_size'] = "Wrong expanding size";
	Validate.lang['en']['t_select_campaign_category_first'] = "Please choose your campaign category first";
	Validate.lang['en']['t_fill_click_or_view'] = 'Please fill in "click window" or "view window"';
	Validate.lang['en']['t_link_tracker_to_campaign'] = 'Please link tracker to a campaign'; 
	Validate.lang['en']['t_month_validate'] = 'Please enter 2 numiral charachters between 1 and 12 only';
	Validate.lang['en']['t_year_validate'] = 'Please enter 4 numiral charachters only';
	Validate.lang['en']['t_credit_card_visamaster_validate'] = 'Please enter 16 numiral charachters only.';
	Validate.lang['en']['t_credit_card_american_express_validate'] = 'Please enter 15 numiral charachters only.';
	Validate.lang['en']['t_empty_credit_card_validate'] = 'Please select card type first.';
	Validate.lang['en']['t_choose_at_least_model'] = 'Please choose at least one model.';
	Validate.lang['en']['t_set_all_placements_cost'] = 'Please set all placements cost';
	Validate.lang['en']['t_manage_campaign'] = "Edit Campaign";
	Validate.lang['en']['t_select_at_least_category'] = "Please select at least one category";
	Validate.lang['en']['t_select_at_least_country'] = "Please select at least one country";
	/**
	* @method bool Validate.inputIsEmpty() Validate.inputIsEmpty(forminput input)  check if the form field is containig data or not 
	* @param forminput input 
	* @return bool Returns a boolean value indicating whether a variable is empty or not
	*/
	Validate.inputIsEmpty=function(input,form) {
		
		switch(input.type){
			case 'text':
			case 'textarea':
			case 'password':
				return Validate.isEmpty(input.value);				
			break;
			case 'select':
			case 'select-one':
				return !input.selectedIndex;
			break;
			case 'radio':
				return !input.checked;
			break;			
			case 'checkbox':
				if(typeof form.form.elements[input.name].length == "undefined"){
					return !input.checked;
				}
				for(obj=0; obj<form.form.elements[input.name].length ;obj++){			
					e=form.form.elements[input.name];
					if(e[obj].checked){
						return false;
					}
				}
				return true;
			break;
		}
	}
	/**
	* @method bool Validate.isEmpty() Validate.isEmpty(string str) check if the variable is empty or not
	* @param string str 
	* @return bool Returns a boolean value indicating whether a variable is empty or not
	*/
	Validate.isEmpty=function(str) {
		var regexp  = /^[\s]+$/;
		return regexp.test(str) || str=="";
	}
	Validate.isVar=function(str) {
		var regexp  = /^([_a-z]+[._a-z0-9-]*)+$/i;
		return regexp.test(str);
	}	
	/**
	* @method bool Validate.checkLength() Validate.checkLength(string str,int len) check if the str variable length is equal to len parameter or not
	* @param string str 
	* @param int len
	* @return bool Returns a true if the str variable length is equal to len parameter
	*/
	Validate.checkLength=function(str,len) {
		return str.length==len;
	}
	/**
	* @method bool Validate.checkLengthBetween() Validate.checkLengthBetween(string str,int minLen,maxLin) check if the str variable length between two ranges of length
	* @param string str 
	* @param int minLen
	* @param int maxLen
	* @return bool Returns a true if the str variable length between two ranges of length
	*/
	Validate.checkLengthBetween=function(str,minLen,maxLen) {
		return (str.length >= minLen &&  str.length <=maxLen);
	}
	/**
	* @method bool Validate.isFormat() Validate.isFormat(string str,str reg,string flag) check if the string argument matches the regular expression
	* @param string str 
	* @param string reg
	* @param string flag regular expression flag like /i for Case-insensitive 
	* @return bool This method returns a Boolean value indicating whether the given string argument matches the regular expression
	*/
	Validate.isFormat=function(str,reg,flag) {
		if(flag){
			regexp=new RegExp(reg,flag);
		}
		else{
			regexp=new RegExp(reg);
		}
		return regexp.test(str);
	}
	/**
	* @method bool Validate.prepareValidation() Validate.prepareValidation(string formName) create object hold form information
	* @param str formName form name
	* @return object This method returns form object
	*/
	Validate.prepareValidation=function(form){
		f=new Validate.formToValidate(form);
		f.pushFields();
		return f;
	}
	/**
	* @var object validationTypes enum object define validation types bitwise, so 1, 2, 4, 8, 16, etc. to check with 
	* form.element.validatorType;
	*/
	Validate.validationTypes={require:1,fixedLength:2,lengthRange:4,compareString:8,compareField:16,myRegExp:32,custom:64};
	/**
	* @var object regFormat  object hold different regular expression to check it like phone format 
	*/
	Validate.regFormat={
		'isPhone':'[0-9]{9,14}',
		'isNumeric':'^[0-9.]+$',
		'isDigit':'^[0-9]+$',
		'isURL': '^([a-z]+:\/\/){1}([^ @:])+:?$',
		'isURLNoStart': '^([._a-z0-9-]+)$',
		'isHTTPURL': '^(https?:\/\/){1}([^ @:])+:?$',
		'isEmail': '^([._a-z0-9-]+[._a-z0-9-]*)@(([a-z0-9-]+\.)*([a-z0-9-]+)(\.[a-z]{2,3}))$',
		'isUsername': '^([0-9a-z]*([-|_]?[0-9a-z]+)*)(([-|_]?)\.([-|_]?)[0-9a-z]*([-|_]?[0-9a-z]+)+)*([-|_]?)$',
		'isDate': '^((?:19|20)[0-9]{2})-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12][0-9]|3[01])$',
		'isUsCaState': '^[a-zA-Z]{2}$',
		'isUsPostal':'^([0-9]){5}(-([0-9]){4})?$',
		'isCaPostal':'^([a-zA-Z][0-9][a-zA-Z])( ([0-9][a-zA-Z][0-9]))?$',
		'isMonth':'^(0[1-9])|(1[0-2])$',
		'isCreditYear':'^20[0-9][0-9]$',
		'isVisaMaster':'^[0-9]{16}$',
		'isAmericanExpress':'^[0-9]{15}$'
	};
	/**
	* @var object regularFlag  object hold different regular expression flags to check it like phone format like /i for Case-insensitive 
	*/
	Validate.regularFlag={
		'caseInsensitive':'i',
		'global':'g',
		'caseInsensitiveGlobal':'gi'
		};
	Validate.alert=function(msg){
		if(msg){
			alert(msg);
		}	
	}
	/**
	* class Validate.formToValidate() Validate.formToValidate() create object used to hold form details to validate
	* @param document.form formName
	*/	
	Validate.formToValidate=function(form){
		/**
		* @var form form hold html form object
		*/
		this.form=form;
		/**
		* @var string serverReplyMsg message sent from server to client
		*/
		this.serverReplyMsg="";
		/**
		* @method void serverReply() serverReply(string msg) display message to user
		* @return void This method returns void
		*/
		this.serverReply=function(msg){
			this.serverReplyMsg=msg;
			if(msg){
				Validate.alert(msg);
			}	
		}
		/**
		* @var int myRegExp Validate.validationTypes.myRegExp and multiply it by 2 when user add new reqular experssion check
		*/
		this.myRegExp=Validate.validationTypes.myRegExp;
		/**
		* @var array fields hold form array element
		*/
		this.fields=new Array();
		/**
		* @var array fieldsToValidate fields array to check them before sending request to server side script
		*/
		this.fieldsToValidate=new Array();
		/**
		* @method void pushField() pushFields() push all form fields to fields array
		* @return void This method returns void
		*/
		this.pushFields=function(){
			for(i=0; i<this.form.elements.length ;i++){		
				field=this.form.elements[i];
				/**
				* @var array validatorMsg message array to display to users when error occur
				*/
				field.validatorMsg=new Array();
				/**
				* @var array validatorParams array of validation parameters like string to compare with
				*/
				field.validatorParams=new Array();
				/**
				* @var int validatorType hold validation number
				*/
				field.validatorType=0;
				field.custom=new Array();
				/**
				* @method string field.validationCheck() field.validationCheck() validate field before sending request to server side script
				* @return string if error occur this method will returns error message otherwise return null
				*/
				field.validationCheck=function(form){
					//alert(this.validatorType +'&'+ this.validatorParams['myRegExp'] + '='+this.name+'|'+this.validatorParams['regExp_'+this.validatorParams['myRegExp']]);
					if(this.validatorType & Validate.validationTypes.require && Validate.inputIsEmpty(this,form)){
						this.focus();
						return this.validatorMsg[Validate.validationTypes.require];
					}
					if(this.validatorType & Validate.validationTypes.fixedLength && !Validate.checkLength(this.value,this.validatorParams['valueMaxLength'])){
						this.focus();
						return this.validatorMsg[Validate.validationTypes.fixedLength];
					}
					if(this.validatorType & Validate.validationTypes.lengthRange && !Validate.checkLengthBetween(this.value,this.validatorParams['valueMinLength'],this.validatorParams['valueMaxLength'])){
						this.focus();
						return this.validatorMsg[Validate.validationTypes.lengthRange];
					}
					if(this.validatorType & Validate.validationTypes.compareString && this.value!=this.validatorParams['compareString']){
						this.focus();
						return this.validatorMsg[Validate.validationTypes.compareString];
					}
					if(this.validatorType & Validate.validationTypes.compareField && this.value!=this.validatorParams['compareField'].value){
						this.focus();
						return this.validatorMsg[Validate.validationTypes.compareField];
					}
					if(this.validatorType & this.validatorParams['myRegExp'] && !Validate.isFormat(this.value,this.validatorParams['regExp_'+this.validatorParams['myRegExp']],this.validatorParams['regFlag_'+this.validatorParams['myRegExp']]) && this.value!=""){
						this.focus();
						return this.validatorMsg[this.validatorParams['myRegExp']];
					}
					if(this.validatorType & Validate.validationTypes.custom){
						this.focus();
						mag=null;
						for(var ci=0;ci<this.custom.length;ci++){
							msg = eval(this.custom[ci]);
							if(msg){
								break;
							}
						}
						return msg;
						//return 
					}

					return "";					
				}
				this.fields[field.name]=field;				
			}
		}
		/**
		* @method void requriedField() requriedField(formelemnt field,string msg) push requried fields to 
		* 	fieldsToValidate array to check them before sending request to server side script
		* @param formelemnt field form element field to push into array something like "email"
		* @param string msg error message displayed when field is not valid
		* @return void This method returns void
		*/
		this.requriedField=function(field,msg) {
			this.fields[field].validatorType+=Validate.validationTypes.require;
			this.fields[field].validatorMsg[Validate.validationTypes.require]=msg			
			this.fieldsToValidate.push(this.fields[field]);
		}
		/**
		* @method void requriedFormat() requriedFormat(formelemnt field,string reg,string msg,flag) push field to string
		* 	fieldsToValidate array to check them using reg variable as regular expression pattern before sending request to server side script
		* @param formelemnt field form element field to push into array something like "email"
		* @param string reg regular expression pattern
		* @param string flag regular expression flag like /i for Case-insensitive 
		* @param string msg error message displayed when field is not valid
		* @return void This method returns void
		*/
		this.requriedFormat=function(field,str,msg,flag) {
			this.fields[field].validatorParams['myRegExp']=this.myRegExp;
			this.fields[field].validatorType+=this.fields[field].validatorParams['myRegExp'];
			this.fields[field].validatorMsg[this.myRegExp]=msg			
			this.fields[field].validatorParams['regExp_'+this.myRegExp]=str;
			this.fields[field].validatorParams['regFlag_'+this.myRegExp]=flag;
			this.fieldsToValidate.push(this.fields[field]);
			this.myRegExp=this.myRegExp*2;
		}
		this.customFunction=function(field,func){
			this.fields[field].validatorType+=Validate.validationTypes.custom;
			this.fields[field].custom.push(func);
			this.fieldsToValidate.push(this.fields[field]);
		}
		/**
		* @method void compareString() compareString(formelemnt field,string str,string msg) push compare field to string
		* 	fieldsToValidate array to check them before sending request to server side script
		* @param formelemnt field form element field to push into array something like "email"
		* @param string str string to compare with
		* @param string msg error message displayed when field is not valid
		* @return void This method returns void
		*/
		this.compareString=function(field,str,msg) {
			this.fields[field].validatorType+=Validate.validationTypes.compareString;
			this.fields[field].validatorMsg[Validate.validationTypes.compareString]=msg			
			this.fields[field].validatorParams['compareString']=str;
			this.fieldsToValidate.push(this.fields[field]);
		}
		/**
		* @method void compareField() compareField(formelemnt field,formelement fField,string msg) push compare field to another field
		* 	fieldsToValidate array to check them before sending request to server side script
		* @param formelemnt field form element field to push into array something like "email"
		* @param formelemnt fField anothedrform field compare with
		* @param string msg error message displayed when field is not valid
		* @return void This method returns void
		*/
		this.compareField=function(field,fField,msg) {
			this.fields[field].validatorType+=Validate.validationTypes.compareField;
			this.fields[field].validatorMsg[Validate.validationTypes.compareField]=msg			
			this.fields[field].validatorParams['compareField']=fField;
			this.fieldsToValidate.push(this.fields[field]);
		}
		/**
		* @method void requiredLength() requiredLength(formelemnt field,int length,string msg) push requried length fields to 
		* 	fieldsToValidate array to check them before sending request to server side script
		* @param formelemnt field form element field to push into array something like "email"
		* @param int length required length of msg variable
		* @param string msg error message displayed when field is not valid
		* @return void This method returns void
		*/
		this.requiredLength=function(field,length,msg) {
			this.fields[field].validatorType+=Validate.validationTypes.fixedLength;
			this.fields[field].validatorMsg[Validate.validationTypes.fixedLengt]=msg			
			this.fields[field].validatorParams['valueMaxLength']=length
			this.fieldsToValidate.push(this.fields[field]);
		}
		/**
		* @method void requiredLengthRange() requiredLengthRange(formelemnt field,int minLength,int maxLength,string msg) 
		* 	push required ranges length fields to fieldsToValidate to check the str variable length between two ranges of length them before sending request to server side script
		* @param formelemnt field form element field to push into array something like "email"
		* @param int minLength minimum length of msg variable
		* @param int maxLength maximum length of msg variable
		* @param string msg error message displayed when field is not valid
		* @return void This method returns void
		*/
		this.requiredLengthRange=function(field,minLength,maxLength,msg) {
			this.fields[field].validatorType+=Validate.validationTypes.lengthRange;
			this.fields[field].validatorMsg[Validate.validationTypes.lengthRange]=msg			
			this.fields[field].validatorParams['valueMinLength']=minLength;
			this.fields[field].validatorParams['valueMaxLength']=maxLength;
			this.fieldsToValidate.push(this.fields[field]);
		}
		this.ignoreField=function(field,ok){
			this.fields[field].ignore=ok;		
		}		
		/**
		* @method void validate() validate() validate form before sending request to server side script
		* @param bool submit bool flag if true then submit form other with return success flag
		* @return void This method returns void
		*/
		this.validate=function(submit){
			error=false;
			breakLoop:			
			for(i=0 ; i<this.fieldsToValidate.length ; i++){
				vField=this.fieldsToValidate[i];
				if(typeof vField.ignore=='undefined' || vField.ignore==false){
					msg=vField.validationCheck(this);
				}
				if(msg){
					alert(msg);							
					error=true;
					break breakLoop;
				}
			}
			if(!error && submit){
				this.form.submit();
			}
			else{
				return !error;
			}
		}
	}
	
	Validate.selectedCampaign = function() {
	if(document.forms['report'].elements['all'].checked) {
		document.forms['report'].elements['campaign'].disabled = true;
	} else {
		document.forms['report'].elements['campaign'].disabled = false;
	}
}