/**
 * Cartoonito 2.0
 * JavaScript file containing as much common js resources as possible
 */
 
 
 
/**
 * Single top-level script entry for all dom-dependant functions.
 */ 
function CNDomReady(){
	try {
		// Run initial sIFR(eplacement)
		CNsIFR();
		// intialize accordians in content filters
		if( document.getElementById('accordion') ){
			var options = { resizeSpeed: 8 };
			var searchAccordion = new accordion('accordion', options );
		}
		/*/ Back button referrer fix 
		var elLnk = document.getElementById('backButton');
		var home = location.protocol+'//'+location.hostname;
		var sameDomain = document.referrer.indexOf(home) === 0;
		if( sameDomain ){
			elLnk.onclick = function(){
				history.go(-1);
				return false;
			}
			elLnk.onmouseover = function(){
				window.status = document.referrer;
			}
			elLnk.onmouseout = function(){
				window.status = '';
			}
		}
		else {
			//elLnk.style.display = 'none';
		}
		//*/
	}
	catch( Er ){
		//alert( Er.message );
	}
} 





/**
 * Simple rollover closure
 */
 function CNRollOver( elLink, overURL ){
 	try {
	 	if( ! overURL ){
	 		return ;
	 	}
	 	var elImg = elLink.getElementsByTagName('img')[0];
	 	if( ! elImg ){
	 		return;
	 	}
	 	if( ! elImg.onmouseout ){
	 		var outURL = elImg.src;
	 		elImg.onmouseout = function(){
	 			this.src = outURL;
	 		}
	 	}
	 	elImg.src = overURL;
	 }
	 catch( Er ){
	 	//alert( Er.message );
	 }
 }



/**
 * Submit send-to-friend form.
 * With Ajax if possible; else submit form in regular fashion.
 */
function CNSendFriend( formId, responseId ){
	try {
		var elForm = document.getElementById(formId);
		var data = {
			location: window.location.href.split('#')[0]
		};
		var fields = {
			your_name:   'your name',
			their_name:  'your friend\'s name',
			your_email:  'your email address',
			their_email: 'your friend\'s email address'
		};
		for( var s in fields ){
			data[s] = elForm[s].value;
			if( ! data[s] ){
				throw new Error('Please enter '+fields[s]);
			}
		}
		if( ! CNValidEmail(data.your_email) || ! CNValidEmail(data.their_email) ){
			throw new Error('That is not a valid email address');
		}
		if( ! CNInitSimpleAjaxRequest( elForm, data, responseId ) ){
			elForm.submit();
		}
		// else request pending
		var elDiv = document.getElementById(responseId);
		elDiv.innerHTML = '<p>Sending...</p>';
	}
	catch( Er ){
		alert( Er.message );
	}
}


/**
 * Submit competition entry.
 * With Ajax if possible; else submit form in regular fashion.
 */
function CNEnterComp( formId, responseId ){
	try {
		var elForm = document.getElementById(formId);
		var data = {
			'entry[comp_id]': elForm['entry[comp_id]'].value,
			'entry[answer]': null
		};
		var error = '';
		var radioList = elForm['entry[answer]'];
		for( var i = 0; i < radioList.length; i++ ){
			if( radioList[i].checked ){
				data['entry[answer]'] = radioList[i].value;
				break;
			}
		}
		if ( data['entry[answer]'] == null ) {
			error += 'Select an answer\n';
		}
		for( var i = 0; i < elForm.elements.length; i++ ){
			var elField = elForm.elements[i];
			if( elField.type === 'text' || (elField.type === 'checkbox' && elField.checked) ){
				data[ elField.name ] = elField.value;
			}
		}
		var required_fields = {
			name:      'Full name', 
			address_1: 'Address', 
			address_2: 'City', 
			address_3: 'Post code'
		};
		for( var name in required_fields ){
			var value = elForm['entry['+name+']'].value;
			if ( ! value || /^\s*$/.test(value) ) {
				error += 'Fill in the ' + required_fields[name] + ' field\n';
			}
		}
		var elTerms = elForm['legal[terms]'];
		if ( ! elTerms.checked ) {
			error += 'You have to read and agree to the Terms and Conditions';
		}
		data['legal[terms]'] = '1';
		if ( error ) {
			throw new Error( 'Please complete your entry:\n'+error );
		}
	}
	catch ( Er ){
		alert( Er.message );
		return false;
	}
	// attempt to post as Ajax ....
	try {
		if( ! CNInitSimpleAjaxRequest( elForm, data, responseId ) ){
			return true;
		}
		// else request pending
		var elDiv = document.getElementById(responseId);
		elDiv.innerHTML = '<p>Sending...</p>';
		return false;
	}
	catch( Er ){
		return true;
	}
}



/**
 * Very simple AJAX function. posts a form and dumps the response back into specified DIV as innerHTML
 */
function CNInitSimpleAjaxRequest( elForm, data, responseId ){
	try {
		var Req = CNGetHttpRequest();
		if( ! Req ){
			return false;
		}
		Req.onreadystatechange = function(){
			try {
				// "this !== Req" in IE6 
				if( Req.readyState == 4 ){
					var elDiv = document.getElementById(responseId);
					elDiv.innerHTML = Req.responseText;
				}
			}
			catch( Er ){
				//alert( Er.message );
			}
		}
		Req.open( elForm.method, elForm.action, true );
		Req.setRequestHeader('Content-Type','application/x-www-form-urlencoded');	
		data.ajax = '1';
		Req.send( CNEncodePostData(data) );
		return true;
	}
	catch( Er ){
		// alert( Er.message );
	}
	return false;
}


/**
 * Simple post data encoder
 */
function CNEncodePostData( data ){
	var pairs = [];
	for( var s in data ){
		pairs.push( encodeURIComponent(s) +'='+encodeURIComponent(data[s]) );
	}
	return pairs.join('&');
}



/**
 * Get a handle on a cross-browser XMLHTTPRequest object
 */
function CNGetHttpRequest(){
	var Req = null;
	try { // to get the standards-compliant XMLHttpRequest Object
        Req = new XMLHttpRequest();
		if( Req == null ){ throw 'no XMLHttpRequest'; } 
    }
	catch( e ){
        try { // to get MS HTTP request Object
            Req = new ActiveXObject("Msxml2.XMLHTTP.4.0");
			if( Req == null ){ throw 'no Msxml2.XMLHTTP.4.0'; } 
        }
		catch( e ){
            try { // to get MS HTTP request Object
                Req = new ActiveXObject("Msxml2.XMLHTTP");
				if( Req == null ){ throw 'no Msxml2.XMLHTTP'; } 
            }
			catch( e ){
                try { // to get the old MS HTTP request Object
                    Req = new ActiveXObject("microsoft.XMLHTTP"); 
					if( Req == null ){ throw 'no microsoft.XMLHTTP'; } 
                }
				catch( e ){
					// ignore
                }
            }    
        }
    }
    return Req;
}






/**
 * Test an email address is valid.
 */	
function CNValidEmail( s ){
	var bits = s.split('@');
	if( bits.length !== 2 ){
		return false;
	}
	var user = bits[0];
	var host = bits[1];
	// validate local part
	// fail if single illegal character found.
	if( /[^\!#\$%&'\*\+-\/\=\?\^_`\{\|\}~a-zA-Z0-9\.]/.test(user) ){ //' 
		return false;
	} 
	// "." not allowed as first or last character
	if( user.substr(0,1) === '.' || user.substr(user.length-1,1)  === '.' ){
		return false;
	}
	// validate domain part
	var names = host.split('.');
	for( var n = 0; n < names.length; n++ ){
		switch(  names[n].substr(0,1) ){
		case '-':
			// may not start with a hyphen
			return false;
		}
		if(  names[n].length < 2 ){
			// minimum length of 2 characters
			return false;
		}
	}
	if( /[^-\.a-z0-9]/i.test(host) ){
		// bad character found
		return false;
	}
	// all tests passed
	return true;
}



 
 
 
/**
 * Initialize dynamic info panel
 */
function CNOpenPanel( panelId, openButId, closeButId ){
	try {
		// pre-empt sIFR because hiding DIVs breaks it!
		CNsIFR();
		var elDiv = document.getElementById(panelId);
		elDiv.style.display = 'none';
		// Apply opening action.
		var elBut = document.getElementById(openButId);
		// hack to prevent anchor jump for top info links only
		var openRet = elBut.href.indexOf('#topInnerLink') === -1;
		elBut.onclick = function( event ){
			event || ( event = window.event );
			// @todo animate open
			elDiv.style.display = 'block';
			return openRet;
		}
		// Apply closing actions
		elBut = document.getElementById(closeButId);
		elBut.onclick = function( event ){
			event || ( event = window.event );
			// @todo animate close
			elDiv.style.display = 'none';
			return false;
		}
	}
	catch( Er ){
		//alert( Er.message );
		return false;
	}
} 




/**
 * Run sIFR 
 */
function CNsIFR(){
	if( typeof sIFR !== "function" ) {
		return;
	}
	switch( pageClass ){
		case 'purple':
			sIFR.replaceElement(".purple .contentSection h2", "/swf/syntaxltultrablack.swf", "#79329e", "#79329e", "#FFFFFF", "#FFFFFF", 0, 0, 0, 0 , null , null , "transparent");
			break;
		case 'blue':
			sIFR.replaceElement(".blue .contentSection h2", "/swf/syntaxltultrablack.swf", "#1c5da7", "#1c5da7", "#FFFFFF", "#FFFFFF", 0, 0, 0, 0, null , null , "transparent");
			break;
		case 'orange':
			sIFR.replaceElement(".orange .contentSection h2", "/swf/syntaxltultrablack.swf", "#fbb115", "#fbb115", "#FFFFFF", "#FFFFFF", 0, 0, 0, 0, null , null , "transparent");
			sIFR.replaceElement(".orange #gameContent h2", "/swf/syntaxltultrablack.swf", "#fbb115", "#fbb115", "#FFFFFF", "#FFFFFF", 0, 0, 0, 0, null , null , "transparent");
			break;
		case 'pink':
			sIFR.replaceElement(".pink .contentSection h2", "/swf/syntaxltultrablack.swf", "#f368df", "#f368df", "#FFFFFF", "#FFFFFF", 0, 0, 0, 0, null , null , "transparent");
			break;
		case 'red':
			sIFR.replaceElement(".red .contentSection h2", "/swf/syntaxltultrablack.swf", "#bb2726", "#bb2726", "#FFFFFF", "#FFFFFF", 0, 0, 0, 0, null , null , "transparent");
			
			sIFR.replaceElement(".red #videoContent h1", "/swf/syntaxltultrablack.swf", "#bb2726", "#bb2726", "#FFFFFF", "#FFFFFF", 0, 0, 0, 0, null , null , "transparent");
			sIFR.replaceElement(".red #videoContent h2", "/swf/syntaxltultrablack.swf", "#bb2726", "#bb2726", "#FFFFFF", "#FFFFFF", 0, 0, 0, 0, null , null , "transparent");
			break;
		//case 'lightblue://not used
		//	sIFR.replaceElement(".lightblue .contentSection h2", "/swf/syntaxltultrablack.swf", "#c2f3ff", "#c2f3ff", "#FFFFFF", "#FFFFFF", 0, 0, 0, 0, null , null , "transparent");
		// break;
		case 'green':
			sIFR.replaceElement(".green .contentSection h2", "/swf/syntaxltultrablack.swf", "#9ccc00", "#9ccc00", "#FFFFFF", "#FFFFFF", 0, 0, 0, 0, null , null , "transparent");
			break;
		// Run default skin if no class is referenced
		default:
			sIFR.replaceElement(".contentSection h2", "/swf/syntaxltultrablack.swf", "#1C5DA7", "#1C5DA7", "#FFFFFF", "#FFFFFF", 0, 0, 0, 0 , null , null , "transparent");
	}
}



