var Class = {
	create: function() {
		return function() {
			this.initialize.apply(this, arguments);
		}
	}
};

Object.extend = function(destination, source) {
	for (var property in source) destination[property] = source[property];
	return destination;
};

Function.prototype.bind = function(object) {
	var __method = this;
	return function() {
		return __method.apply(object, arguments);
	}
};

if (!Array.prototype.forEach){
	Array.prototype.forEach = function(fn, bind){
		for(var i = 0; i < this.length ; i++) fn.call(bind, this[i], i);
	};
}

Array.prototype.each = Array.prototype.forEach;

String.prototype.camelize = function(){
	return this.replace(/-\D/gi, function(match){
		return match.charAt(match.length - 1).toUpperCase();
	});
};

var $A = function(iterable) {
	var nArray = [];
	for (var i = 0; i < iterable.length; i++) nArray.push(iterable[i]);
	return nArray;
};

function $() {
	if (arguments.length == 1) return get$(arguments[0]);
	var elements = [];
	$c(arguments).each(function(el){
		elements.push(get$(el));
	});
	return elements;

	function get$(el){
		if (typeof el == 'string') el = document.getElementById(el);
		return el;
	}
};

if (!window.Element) var Element = {};

Object.extend(Element, {
	  hide: function(element) {
		$(element).style.display = 'none';
		return element;
	  },
	
	  show: function(element) {
		$(element).style.display = '';
		return element;
	  },
	remove: function(element) {
		element = $(element);
		element.parentNode.removeChild(element);
	},

	hasClassName: function(element, className) {
		element = $(element);
		return !!element.className.match(new RegExp("\\b"+className+"\\b"));
	},

	addClassName: function(element, className) {
		element = $(element);
		if (!Element.hasClassName(element, className)) element.className = (element.className+' '+className);
	},

	removeClassName: function(element, className) {
		element = $(element);
		if (Element.hasClassName(element, className)) element.className = element.className.replace(className, '');
	}
});

document.getElementsByClassName = function(className){
	var elements = [];
	var all = document.getElementsByTagName('*');
	$A(all).each(function(el){
		if (Element.hasClassName(el, className)) elements.push(el);
	});
	return elements;
};

//AJAX FUNCTIONS
//based on prototype's ajax class
//to be used with prototype.lite, moofx.mad4milk.net.

ajax = Class.create();
ajax.prototype = {
	initialize: function(url, options){
		this.transport = this.getTransport();
		this.postBody = options.postBody || '';
		this.method = options.method || 'post';
		this.onComplete = options.onComplete || null;
		this.update = $(options.update) || null;
		this.request(url);
	},

	request: function(url){
		this.transport.open(this.method, url, true);
		this.transport.onreadystatechange = this.onStateChange.bind(this);
		if (this.method == 'post') {
			this.transport.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
			if (this.transport.overrideMimeType) this.transport.setRequestHeader('Connection', 'close');
		}
		this.transport.send(this.postBody);
	},

	onStateChange: function(){
		if (this.transport.readyState == 4 && this.transport.status == 200) {
			if (this.onComplete) 
				setTimeout(function(){this.onComplete(this.transport);}.bind(this), 10);
			if (this.update)
				setTimeout(function(){this.update.innerHTML = this.transport.responseText;}.bind(this), 10);
			this.transport.onreadystatechange = function(){};
		}
	},

	getTransport: function() {
		if (window.ActiveXObject) return new ActiveXObject('Microsoft.XMLHTTP');
		else if (window.XMLHttpRequest) return new XMLHttpRequest();
		else return false;
	}
};




function validateEmail(str){    var testresults    var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i    if (filter.test(str))        testresults=true    else    {        testresults=false    }    return (testresults)}

function validateRadio(radio) {
	myOption = -1;
	for (i=radio.length-1; i > -1; i--) {
		if (radio[i].checked) {
			myOption = i; i = -1;
		}
	}
	if (myOption == -1) {
		alert("You must select a subject");
		return false;
	}
	
	return true
}



function checkSignupForm(cform) {    if (cform.name.value == "" )    {		errmsg = 'Enter your name!';		alert(errmsg);        cform.name.focus();        return false;    }
    
    		if (cform.email.value != "" )    {		if(!validateEmail(cform.email.value)) {			errmsg = 'Enter valid e-mail!';			alert(errmsg);			cform.email.focus();			return false;						}	    }
    else
    {
    	errmsg = 'Enter valid e-mail!';		alert(errmsg);		cform.email.focus();		return false;	
    }
    
    if (cform.subject1.checked == false &&
	    cform.subject2.checked == false &&
	    cform.subject3.checked == false &&
	    cform.subject4.checked == false &&	    	    
	    cform.subject5.checked == false)
		{
			alert ('Please choose a subject!');
			return false;
		}
    
    processSignup(cform);
    
    return false;}


function clearForm(oForm) {
	var elements = oForm.elements;
  	oForm.reset();

  for(i=0; i<elements.length; i++) {
     
  field_type = elements[i].type.toLowerCase();
 
  switch(field_type) {
 
    case "text":
    case "password":
    case "textarea":
          case "hidden":  
     
      elements[i].value = "";
      break;
       
    case "radio":
    case "checkbox":
        if (elements[i].checked) {
          elements[i].checked = false;
      }
      break;

    case "select-one":
    case "select-multi":
                elements[i].selectedIndex = -1;
      break;

    default:
      break;
  }
    }
}

function processSignup(cform)
{
	var subject1 = 0;
	var subject2 = 0;
	var subject3 = 0;
	var subject4 = 0;
	var subject5 = 0;			
		

	if (cform.subject1.checked == true)
	 	var subject1 = 1;
	if (cform.subject2.checked == true)
	 	var subject2 = 1;
	 if (cform.subject3.checked == true)
	 	var subject3 = 1;		 	
	if (cform.subject4.checked == true)
	 	var subject4 = 1;
	if (cform.subject5.checked == true)
	 	var subject5 = 1;	 		 	
	 
		postBody = 'ajax=1&name='+cform.name.value+'&email='+cform.email.value+'&subject1='+subject1+'&subject2='+subject2+'&subject3='+subject3+'&subject4='+subject4+'&subject5='+subject5;
		new ajax ('/signup.php', {postBody: postBody, onComplete: TINY.box.show("Thanks for your interest in Kinofest NYC,<br />we’ll get in touch with you shortly!<p><a href='#' onclick='TINY.box.hide(); clearForm(document.signupform); return false;'>Close</a></p>",0,300,60,1)});
	return false;
} 
