var dom_timer;
var ajaxRequest;

if (!window.console) {
	var console = {
		log: function(msg) {
				alert(msg);
			},
		info: function(msg) {
				alert(msg);
			},
		error: function(msg) {
				alert(msg);
			}
	};
}

/**
 * addEventListener
 * cross browser event listener.
 */
function addEventListener(el, et, h, c) {
	if (el.addEventListener) {
		el.addEventListener(et, h, c);
	}
	else if (el.attachEvent) {
		el['on' + et] = h;
	}
}

/**
 * removeEventListener
 * cross browser event listener removal.
 */
function removeEventListener(el, et, c) {
	if (el.addEventListener) {
		el.removeEventListener(et, arguments.callee, c);
	}
	else if (el.attachEvent) {
		el['on' + et] = function() {};
	}
}

/**
 * doAjax
 */
 
function doAjax(url, params, actions) {
	if (window.XMLHttpRequest) {
		ajaxRequest = new XMLHttpRequest(); // IE7, Firefox, Mozilla, etc.
	} else if (window.ActiveXObject) {
		ajaxRequest = new ActiveXObject('Microsoft.XMLHTTP'); // IE5 & IE6
	}
	
	if (ajaxRequest !== null) {
		ajaxRequest.open('POST', url, true);
		ajaxRequest.onreadystatechange = actions;
		ajaxRequest.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
		
		if (window.ActiveXObject) {
			ajaxRequest.setRequestHeader('Content-length', params.length);
			ajaxRequest.setRequestHeader('Connection', 'close');
		}
		
		ajaxRequest.send(params);
	}
	else {
		alert('Your browser does not support XMLHttpRequests.');
	}
	return ajaxRequest;
}

/**
 * getElementsByClass
 * gets elements by their class name.
 */
function getElementsByClass(needle, area) {
	area = area || document;
	var my_array = area.getElementsByTagName('*');
	var retvalue = [];
	var j = 0;

	for (var i = 0; i < my_array.length; i++) {
		var c = ' ' + my_array[i].className + ' ';
		if (c.indexOf(' ' + needle + ' ') !== -1) {
			retvalue[j++] = my_array[i];
		}
	}
	
	return retvalue;
}

/**
 * hasClass
 * check if an element has a specified class.
 */
function hasClass(el, str) {
	var rx = new RegExp('(^|\\s)' + str + '(\\s|$)');
	return (el.className && el.className.match(rx));
}

function addClass(el, str) {
	el = el || document;
	var exists = hasClass(el, str);
	
	if (!exists) {
		el.className += ((el.className) ? ' ' : '') + str;
	}
}


function removeClass(el, str) {
	el = el || document;
	
	var k = 0;
	var ecn = el.className.split(' ');
	var rcn = [];
	
	for (var i = 0; i < ecn.length; i++) {
		if (ecn[i] !== str) {
			rcn[k] = ecn[i];
			k++;
		}
	}
		
	el.className = rcn.join(' ');
}

/**
 * toggleClass
 * toggle the prescence of a class in a specific element.
 */
function toggleClass(el, str) {
	el = el || document;
	var exists = hasClass(el, str);
	
	if (exists) {
		removeClass(el, str);
	} else {
		el.className += ((el.className) ? ' ' : '') + str;
	}
}

/**
 * toggleDisabled
 * toggle the prescence of the 'disabled' element in a specific element.
 */
function toggleDisabled(el) {
	el = el || document;
	
	if (el.hasAttribute('disabled')) {
		el.removeAttribute('disabled');
	} else {
		el.setAttribute('disabled', 'disabled');
	}
}

/**
 * toggleAllDisabled
 * toggle the prescence of the 'disabled' for all form elements within a specified element.
 */
function toggleAllDisabled(el, exclude) {
	el = el || document;
	
	var c = el.getElementsByTagName('*');
	
	for (var i=0;i<c.length;i++) {
		
		switch (c[i].nodeName.toLowerCase()) {
			case 'input':
			case 'textarea':
			case 'select':
				if (c[i] !== exclude) {
					toggleDisabled(c[i]);
				}
				break;
		}
	}
}

/**
 * getEmptyFields
 * returns details on empty fields on a form.
 */
function getEmptyFields(frm) {
	var fields = getElementsByClass('mandatory', frm);
	var mandatory_txt;
				
	if (fields.length > 0) {
		mandatory_txt = ' mandatory';
	} else {
		fields = frm.getElementsByTagName('*');
		mandatory_txt = '';
	}
	
	var empty = 0;
	
	for (var f = 0; f < fields.length; f++) {
		if (fields[f].value === '' && fields[f].nodeName !== 'LI' && !fields[f].disabled == true) {
			if ( (mandatory_txt !== '' && hasClass(fields[f], 'mandatory')) || (mandatory_txt === '' && !hasClass(fields[f], 'mandatory')) ) {
				empty++;
			}
		}
	}
	
	return {'count':empty, 'mandatory_txt':mandatory_txt};
}

/**
 * checkFormFields
 * quick client-side validation to check that no fields on a form are left empty.
 */

function checkFormFields(byClass, area) {
	area = area || 'core';
	var forms = getElementsByClass(byClass, document.getElementById(area));
	
	if (forms.length > 0) {
		for (var i = 0; i < forms.length; i++) {
			addEventListener(forms[i], 'submit', function(e) {
				e = (e) ? e : window.event;
				
				var empty = getEmptyFields(this);
				
				if (empty.count>0) {
					alert('Please fill out all' + empty.mandatory_txt + ' fields on the form.');
					
					if (e.stopPropagation) {
						e.stopPropagation();
					}
					
					if (e.preventDefault) {
						e.preventDefault();
					} else {
						e.returnValue = false;
					}
				}
			}, false);
		}
	}
}

function checkED(value) {
	var pattern = new RegExp('(19|20)[0-9]{2}(0|1)[0-9][0-3][0-9]');
	return (value.match(pattern));
}

/**
 * get_html_translation_table
 * ref: http://phpjs.org/functions/get_html_translation_table
 */
function get_html_translation_table(table, quote_style) {
    var entities = {}, hash_map = {}, decimal = 0, symbol = '';
    var constMappingTable = {}, constMappingQuoteStyle = {};
    var useTable = {}, useQuoteStyle = {};
    
    // Translate arguments
    constMappingTable[0]      = 'HTML_SPECIALCHARS';
    constMappingTable[1]      = 'HTML_ENTITIES';
    constMappingQuoteStyle[0] = 'ENT_NOQUOTES';
    constMappingQuoteStyle[2] = 'ENT_COMPAT';
    constMappingQuoteStyle[3] = 'ENT_QUOTES';

    useTable       = !isNaN(table) ? constMappingTable[table] : table ? table.toUpperCase() : 'HTML_SPECIALCHARS';
    useQuoteStyle = !isNaN(quote_style) ? constMappingQuoteStyle[quote_style] : quote_style ? quote_style.toUpperCase() : 'ENT_COMPAT';

    if (useTable !== 'HTML_SPECIALCHARS' && useTable !== 'HTML_ENTITIES') {
        throw new Error("Table: "+useTable+' not supported');
        // return false;
    }

    entities['38'] = '&amp;';
    if (useTable === 'HTML_ENTITIES') {
        entities['160'] = '&nbsp;';
        entities['161'] = '&iexcl;';
        entities['162'] = '&cent;';
        entities['163'] = '&pound;';
        entities['164'] = '&curren;';
        entities['165'] = '&yen;';
        entities['166'] = '&brvbar;';
        entities['167'] = '&sect;';
        entities['168'] = '&uml;';
        entities['169'] = '&copy;';
        entities['170'] = '&ordf;';
        entities['171'] = '&laquo;';
        entities['172'] = '&not;';
        entities['173'] = '&shy;';
        entities['174'] = '&reg;';
        entities['175'] = '&macr;';
        entities['176'] = '&deg;';
        entities['177'] = '&plusmn;';
        entities['178'] = '&sup2;';
        entities['179'] = '&sup3;';
        entities['180'] = '&acute;';
        entities['181'] = '&micro;';
        entities['182'] = '&para;';
        entities['183'] = '&middot;';
        entities['184'] = '&cedil;';
        entities['185'] = '&sup1;';
        entities['186'] = '&ordm;';
        entities['187'] = '&raquo;';
        entities['188'] = '&frac14;';
        entities['189'] = '&frac12;';
        entities['190'] = '&frac34;';
        entities['191'] = '&iquest;';
        entities['192'] = '&Agrave;';
        entities['193'] = '&Aacute;';
        entities['194'] = '&Acirc;';
        entities['195'] = '&Atilde;';
        entities['196'] = '&Auml;';
        entities['197'] = '&Aring;';
        entities['198'] = '&AElig;';
        entities['199'] = '&Ccedil;';
        entities['200'] = '&Egrave;';
        entities['201'] = '&Eacute;';
        entities['202'] = '&Ecirc;';
        entities['203'] = '&Euml;';
        entities['204'] = '&Igrave;';
        entities['205'] = '&Iacute;';
        entities['206'] = '&Icirc;';
        entities['207'] = '&Iuml;';
        entities['208'] = '&ETH;';
        entities['209'] = '&Ntilde;';
        entities['210'] = '&Ograve;';
        entities['211'] = '&Oacute;';
        entities['212'] = '&Ocirc;';
        entities['213'] = '&Otilde;';
        entities['214'] = '&Ouml;';
        entities['215'] = '&times;';
        entities['216'] = '&Oslash;';
        entities['217'] = '&Ugrave;';
        entities['218'] = '&Uacute;';
        entities['219'] = '&Ucirc;';
        entities['220'] = '&Uuml;';
        entities['221'] = '&Yacute;';
        entities['222'] = '&THORN;';
        entities['223'] = '&szlig;';
        entities['224'] = '&agrave;';
        entities['225'] = '&aacute;';
        entities['226'] = '&acirc;';
        entities['227'] = '&atilde;';
        entities['228'] = '&auml;';
        entities['229'] = '&aring;';
        entities['230'] = '&aelig;';
        entities['231'] = '&ccedil;';
        entities['232'] = '&egrave;';
        entities['233'] = '&eacute;';
        entities['234'] = '&ecirc;';
        entities['235'] = '&euml;';
        entities['236'] = '&igrave;';
        entities['237'] = '&iacute;';
        entities['238'] = '&icirc;';
        entities['239'] = '&iuml;';
        entities['240'] = '&eth;';
        entities['241'] = '&ntilde;';
        entities['242'] = '&ograve;';
        entities['243'] = '&oacute;';
        entities['244'] = '&ocirc;';
        entities['245'] = '&otilde;';
        entities['246'] = '&ouml;';
        entities['247'] = '&divide;';
        entities['248'] = '&oslash;';
        entities['249'] = '&ugrave;';
        entities['250'] = '&uacute;';
        entities['251'] = '&ucirc;';
        entities['252'] = '&uuml;';
        entities['253'] = '&yacute;';
        entities['254'] = '&thorn;';
        entities['255'] = '&yuml;';
    }

    if (useQuoteStyle !== 'ENT_NOQUOTES') {
        entities['34'] = '&quot;';
    }
    if (useQuoteStyle === 'ENT_QUOTES') {
        entities['39'] = '&#39;';
    }
    entities['60'] = '&lt;';
    entities['62'] = '&gt;';


    // ascii decimals to real symbols
    for (decimal in entities) {
        symbol = String.fromCharCode(decimal);
        hash_map[symbol] = entities[decimal];
    }
    
    return hash_map;
}

/**
 * html_entity_decode
 * ref: http://phpjs.org/functions/html_entity_decode
 */
function html_entity_decode( string, quote_style ) {
    var hash_map = {}, symbol = '', tmp_str = '', entity = '';
    tmp_str = string.toString();
    
    if (false === (hash_map = this.get_html_translation_table('HTML_ENTITIES', quote_style))) {
        return false;
    }

    for (symbol in hash_map) {
        entity = hash_map[symbol];
        tmp_str = tmp_str.split(entity).join(symbol);
    }
    tmp_str = tmp_str.split('&#039;').join("'");
    
    return tmp_str;
}


/* start of calendar */
/* --- Swazz Javascript Calendar ---
/* --- v 1.0 3rd November 2006
By Oliver Bryant
http://calendar.swazz.org

Edits for Code Blue by Andy Thomas (10/07/2009) */

function getObj(objID) {
    if (document.getElementById) {return document.getElementById(objID);}
    else if (document.all) {return document.all[objID];}
    else if (document.layers) {return document.layers[objID];}
}

function checkClick(e, id) {
	e?evt=e:evt=event;
	CSE=evt.target?evt.target:evt.srcElement;
	if (getObj(id))
		if (!isChild(CSE,getObj(id)))
			getObj(id).style.display='none';
}

function isChild(s,d) {
	while(s) {
		if (s==d) 
			return true;
		s=s.parentNode;
	}
	
	return false;
}

function Left(obj) {
	var curleft = 1;
	
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	} else if (obj.x) {
		curleft += obj.x;
	}
	
	return curleft;
}

function Top(obj) {
	var curtop = 0;
	
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	} else if (obj.y) {
		curtop += obj.y;
	}
	
	return curtop;
}

function addDatePicker() {
	var datepicker 		= document.createElement('div');
	datepicker.id		= 'date-picker';
	var dpMarkup 		= 	'<table id="fc" style="position:absolute;border-collapse:collapse;background:#FFFFFF;border:1px solid #ABABAB;display:none" cellpadding=2>' +
							'<tr><td style="cursor:pointer" onclick="csubm()">&lt;&lt;</td><td colspan=5 id="mns" align="center" style="font:bold 13px Arial"></td><td align="right" style="cursor:pointer" onclick="caddm()">&gt;&gt;</td></tr>' +
							'<tr><td align=center style="background:#ABABAB;font:12px Arial">S</td><td align=center style="background:#ABABAB;font:12px Arial">M</td><td align=center style="background:#ABABAB;font:12px Arial">T</td><td align=center style="background:#ABABAB;font:12px Arial">W</td><td align=center style="background:#ABABAB;font:12px Arial">T</td><td align=center style="background:#ABABAB;font:12px Arial">F</td><td align=center style="background:#ABABAB;font:12px Arial">S</td></tr>';
	
	for(var kk=1;kk<=6;kk++) {
		dpMarkup += '<tr>';
		for(var tt=1;tt<=7;tt++) {
			num=7 * (kk-1) - (-tt);
			dpMarkup += '<td id="v' + num + '" style="width:18px;height:18px">&nbsp;</td>';
		}
		dpMarkup += '</tr>';
	}
	dpMarkup += '</table>';
	
	datepicker.innerHTML = dpMarkup; 
	
	document.body.appendChild(datepicker);
	
	document.all?document.attachEvent('onclick',checkClickFC=function(e){checkClick(e, 'fc')}):document.addEventListener('click',checkClickFC=function(e){checkClick(e, 'fc')},false);
	
	// document.all?document.attachEvent('onfocus',checkClick):document.addEventListener('focus',checkClick,false);
}

function getCustomerAutoSuggest(str, parent) {
	var i;
	
	if (ajaxRequest) {
		ajaxRequest.abort();
	}
	
	doAjax(
		'./?ajax-call=customer-auto-suggest&ajax-format=json',
		'customername=' + escape(str),
		function() {
			if (ajaxRequest) {
				// loading
				if (ajaxRequest.readyState >= 0 && ajaxRequest.readyState <= 3) {
					addClass(parent, 'ajax-loading');
				}
					
				// completed successfully
				if (ajaxRequest.readyState === 4 && ajaxRequest.status === 200) {
					var result = eval('(' + ajaxRequest.responseText + ')');
					var ddbox = document.getElementById(parent.id);
					var ddbox_exists = document.getElementById(parent.id + '-dropdown');
					
					if (result) {
						
						if (result.length > 0) {
							var ddbContent = '';
							
							for (i=0;i<result.length;i++) {
								ddbContent += '<li>' + result[i].n + '</li>\n';
							}
							
							if (!ddbox_exists) {
								var ddbox = document.createElement('ul');
								ddbox.id = parent.id + '-dropdown';
								
								ddbox.innerHTML = ddbContent;
								
								ddbox.style.left = Left(parent) + 'px';
								ddbox.style.top = Top(parent) + parent.offsetHeight + 'px';
								ddbox.style.display = 'block';
								ddbox.style.width = (parent.offsetWidth-2) + 'px';
								
								document.body.appendChild(ddbox);
								document.all?document.attachEvent('onclick',checkClickDDB=function(e){checkClick(e, parent.id + '-dropdown');parent.focus();}):document.addEventListener('click',checkClickDDB=function(e){checkClick(e, parent.id + '-dropdown');parent.focus();},false);
							} else {
								ddbox_exists.innerHTML = ddbContent;
								ddbox_exists.style.display = 'block';
							}
							
							if (result.length > 0) {
								var ddbopts = document.getElementById(parent.id + '-dropdown').getElementsByTagName('li');
								
								for (i=0;i<ddbopts.length;i++) {
									addEventListener(ddbopts[i],'click',function(e) {
										e = (e) ? e : window.event;
										
										var input = document.getElementById(this.parentNode.id.substring(0, this.parentNode.id.length-9));
										
										input.value = html_entity_decode(this.innerHTML);
										
										this.parentNode.style.display = 'none';
										
										if (e.stopPropagation)
											e.stopPropagation();
										else
											e.returnValue = false;
									},false);
									
									addEventListener(ddbopts[i],'mouseover',function(e) {
										e = (e) ? e : window.event;
										
										var opts = this.parentNode.getElementsByTagName('li');
										var ddbox = document.getElementById(parent.id);
											
										for(var i = 0;i < opts.length; i++) {
											if (opts[i] == this) {
												ddbox.selectedOpt = i;
												addClass(opts[i], 'selected');
											} else {
												removeClass(opts[i], 'selected');
											}
										}
										
										if (e.stopPropagation)
											e.stopPropagation();
										else
											e.returnValue = false;
									},false);
								}
							}
						} else {
							
							if (ddbox_exists) {
								ddbox_exists.style.display = 'none';
							}
							
						}
						
					} else {
						alert('No result found.');
					}
					
					removeClass(parent, 'ajax-loading');
				}
					
				// not found
				if (ajaxRequest.readyState === 4 && ajaxRequest.status === 404) {
					removeClass(parent, 'ajax-loading');
					alert('No result found.');
				}
			}
		}
	);
}

function getNumberAutoSuggest(range, number, parent) {
	var i;
	
	if (ajaxRequest) {
		ajaxRequest.abort();
	}
	
	if ( (range=='118' && number.length < 3) || (range!='118' && number.length < 7) ) {
		doAjax(
			'./?ajax-call=number-search&ajax-format=json',
			'range=' + escape(range) + '&number=' + escape(number),
			function() {
				if (ajaxRequest) {
					// loading
					if (ajaxRequest.readyState >= 0 && ajaxRequest.readyState <= 3) {
						addClass(parent, 'ajax-loading');
					}
						
					// completed successfully
					if (ajaxRequest.readyState === 4 && ajaxRequest.status === 200) {
						var result = eval('(' + ajaxRequest.responseText + ')');
						var ddbox = document.getElementById(parent.id);
						var ddbox_exists = document.getElementById(parent.id + '-dropdown');
						
						if (result) {
							
							if (result.length > 0) {
								var ddbContent = '';
								
								for (i=0;i<result.length;i++) {
									ddbContent += '<li>' + result[i].n + '</li>\n';
								}
								
								if (!ddbox_exists) {
									var ddbox = document.createElement('ul');
									ddbox.id = parent.id + '-dropdown';
									
									ddbox.innerHTML = ddbContent;
									
									ddbox.style.left = Left(parent) + 'px';
									ddbox.style.top = Top(parent) + parent.offsetHeight + 'px';
									ddbox.style.display = 'block';
									ddbox.style.width = (parent.offsetWidth-2) + 'px';
									
									document.body.appendChild(ddbox);
									//document.all?document.attachEvent('onclick',checkClickDDB=function(e){checkClick(e, parent.id + '-dropdown');parent.focus();}):document.addEventListener('click',checkClickDDB=function(e){checkClick(e, parent.id + '-dropdown');parent.focus();},false);
								} else {
									ddbox_exists.innerHTML = ddbContent;
									ddbox_exists.style.display = 'block';
								}
								
								if (result.length > 0) {
									var ddbopts = document.getElementById(parent.id + '-dropdown').getElementsByTagName('li');
									
									for (i=0;i<ddbopts.length;i++) {
										addEventListener(ddbopts[i],'click',function(e) {
											e = (e) ? e : window.event;
											
											var input = document.getElementById(this.parentNode.id.substring(0, this.parentNode.id.length-9));
											
											input.value = html_entity_decode(this.innerHTML);
											
											var number_autosuggest_range	= document.getElementById('range');
											var number_autosuggest_number	= document.getElementById('number');
											
											var range	= number_autosuggest_range.options[number_autosuggest_range.selectedIndex].value;
											var number	= input.value;
											
											getNumberAutoSuggest(range, number, input);
											
											this.parentNode.style.display = 'none';
											
											if (e.stopPropagation)
												e.stopPropagation();
											else
												e.returnValue = false;
										},false);
										
										addEventListener(ddbopts[i],'mouseover',function(e) {
											e = (e) ? e : window.event;
											
											var opts = this.parentNode.getElementsByTagName('li');
											var ddbox = document.getElementById(parent.id);
												
											for(var i = 0;i < opts.length; i++) {
												if (opts[i] == this) {
													ddbox.selectedOpt = i;
													addClass(opts[i], 'selected');
												} else {
													removeClass(opts[i], 'selected');
												}
											}
											
											if (e.stopPropagation)
												e.stopPropagation();
											else
												e.returnValue = false;
										},false);
									}
								}
							} else {
								
								if (ddbox_exists) {
									ddbox_exists.style.display = 'none';
								}
								
							}
							
						} else {
							alert('No result found.');
						}
						
						removeClass(parent, 'ajax-loading');
					}
						
					// not found
					if (ajaxRequest.readyState === 4 && ajaxRequest.status === 404) {
						removeClass(parent, 'ajax-loading');
						alert('No result found.');
					}
				}
			}
		);
	}
}

// Calendar script
var now = new Date;
var sccm=now.getMonth();
var sccy=now.getFullYear();
var ccm=now.getMonth();
var ccy=now.getFullYear();

var ed;
var edy=2008;
var edm=12;
var edd=1;

var updobj;
function lcs(ielem) {
	updobj=ielem;
	getObj('fc').style.left=Left(ielem) + 'px';
	getObj('fc').style.top=Top(ielem)+ielem.offsetHeight + 'px';
	getObj('fc').style.display='';
	
	// Check if an earliest date has been set in the className ( 'ed' + YYYYMMDD )
	ed = ielem.className.split(' ');
	
	// set to defaults
	edy = 2008;
	edm = 12;
	edd = 1;
	
	for (var i=0;i<ed.length;i++) {
		if (ed[i].length == 10 && ed[i].substring(0,2) == 'ed' && checkED(ed[i].substring(2,10))) {
			edy = parseInt(ed[i].substring(2,6), 10);
			edm = parseInt(ed[i].substring(6,8), 10);
			edd = parseInt(ed[i].substring(8,10), 10);
			break;
		}
	}
	
	// First check date is valid
	curdt=ielem.value;
	curdtarr=curdt.split('/');
	isdt=true;
	for(var k=0;k<curdtarr.length;k++) {
		if (isNaN(parseInt(curdtarr[k])))
			isdt=false;
	}
	if (isdt&(curdtarr.length==3)) {
		ccm=curdtarr[1]-1;
		ccy=curdtarr[2];
		prepcalendar(curdtarr[0],curdtarr[1]-1,curdtarr[2]);
	}
	
}

function evtTgt(e)
{
	var el;
	if(e.target)el=e.target;
	else if(e.srcElement)el=e.srcElement;
	if(el.nodeType==3)el=el.parentNode; // defeat Safari bug
	return el;
}
function EvtObj(e){if(!e)e=window.event;return e;}
function cs_over(e) {
	evtTgt(EvtObj(e)).style.background='#FFCC66';
}
function cs_out(e) {
	evtTgt(EvtObj(e)).style.background='#C4D3EA';
}
function cs_click(e) {
	var temp_value=calvalarr[evtTgt(EvtObj(e)).id.substring(1,evtTgt(EvtObj(e)).id.length)];
	temp_value = temp_value.split('/');
	
	temp_value[0] = (temp_value[0]<10) ? '0' + temp_value[0] : temp_value[0];
	temp_value[1] = (temp_value[1]<10) ? '0' + temp_value[1] : temp_value[1];
	
	updobj.value=temp_value[0] + '/' + temp_value[1] + '/' + temp_value[2];
	getObj('fc').style.display='none';
	
}

var mn=new Array('JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC');
var mnn=new Array('31','28','31','30','31','30','31','31','30','31','30','31');
var mnl=new Array('31','29','31','30','31','30','31','31','30','31','30','31');
var calvalarr=new Array(42);

function f_cps(obj) {
	obj.style.background='#C4D3EA';
	obj.style.font='10px Arial';
	obj.style.color='#333333';
	obj.style.textAlign='center';
	obj.style.textDecoration='none';
	obj.style.border='1px solid #6487AE';
	obj.style.cursor='pointer';
}

function f_cpps(obj) {
	obj.style.background='#C4D3EA';
	obj.style.font='10px Arial';
	obj.style.color='#ABABAB';
	obj.style.textAlign='center';
	obj.style.textDecoration='line-through';
	obj.style.border='1px solid #6487AE';
	obj.style.cursor='default';
}

function f_hds(obj) {
	obj.style.background='#FFF799';
	obj.style.font='bold 10px Arial';
	obj.style.color='#333333';
	obj.style.textAlign='center';
	obj.style.border='1px solid #6487AE';
	obj.style.cursor='pointer';
}

// day selected
function prepcalendar(hd,cm,cy) {
	now=new Date();
	sd=now.getDate();
	td=new Date();
	td.setDate(1);
	td.setFullYear(cy);
	td.setMonth(cm);
	cd=td.getDay();
	getObj('mns').innerHTML=mn[cm]+ ' ' + cy;
	marr=((cy%4)==0)?mnl:mnn;
	for(var d=1;d<=42;d++) {
		f_cps(getObj('v'+parseInt(d)));
		if ((d >= (cd -(-1))) && (d<=cd-(-marr[cm]))) {
			
			// dip = clickable date finder - set to dec 2008 -> yesterday
			// dip = ( (cy<2008) || ((cm<11)&&(cy==2008)) || ((d-cd+1 > sd)&&(cm==sccm)&&(cy==sccy)) || ((cm>sccm)&&(cy>=sccy)) );
			dip = ( (cy<edy) || ((cm<edm-1)&&(cy==edy)) || ((d-cd<edd)&&(cm==edm-1)&&(cy==edy)) || ((d-cd+1 > sd)&&(cm==sccm)&&(cy==sccy)) || ((cm>sccm)&&(cy==sccy)) || (cy>sccy));
			htd=((hd!='')&&(d-cd==hd));
			
			if (dip)
				f_cpps(getObj('v'+parseInt(d)));
			else if (htd)
				f_hds(getObj('v'+parseInt(d)));
			else
				f_cps(getObj('v'+parseInt(d)));

			getObj('v'+parseInt(d)).onmouseover=(dip)?null:cs_over;
			getObj('v'+parseInt(d)).onmouseout=(dip)?null:cs_out;
			getObj('v'+parseInt(d)).onclick=(dip)?null:cs_click;
			
			getObj('v'+parseInt(d)).innerHTML=d-cd;	
			calvalarr[d]=''+(d-cd)+'/'+(cm-(-1))+'/'+cy;
		}
		else {
			getObj('v'+d).innerHTML='&nbsp;';
			getObj('v'+parseInt(d)).onmouseover=null;
			getObj('v'+parseInt(d)).onmouseout=null;
			getObj('v'+parseInt(d)).style.cursor='default';
			}
	}
}

function caddm() {
	marr=((ccy%4)==0)?mnl:mnn;
	
	ccm+=1;
	if (ccm>=12) {
		ccm=0;
		ccy++;
	}
	//cdayf();
	prepcalendar('',ccm,ccy);
}

function csubm() {
	marr=((ccy%4)==0)?mnl:mnn;
	
	ccm-=1;
	if (ccm<0) {
		ccm=11;
		ccy--;
	}
	//cdayf();
	prepcalendar('',ccm,ccy);
}

function cdayf() {
if ((ccy>sccy)|((ccy==sccy)&&(ccm>=sccm)))
	return;
else {
	ccy=sccy;
	ccm=sccm;
	cfd=scfd;
	}
}

/* end of calendar */

/* sortable tables */

/*
Table sorting script  by Joost de Valk, check it out at http://www.joostdevalk.nl/code/sortable-table/.
Based on a script from http://www.kryogenix.org/code/browser/sorttable/.
Distributed under the MIT license: http://www.kryogenix.org/code/browser/licence.html .

Copyright (c) 1997-2007 Stuart Langridge, Joost de Valk.

Version 1.5.7
*/

/* You can change these values */ /*
var image_path = "http://www.joostdevalk.nl/code/sortable-table/";
var image_up = "arrowup.gif";
var image_down = "arrowdown.gif";
var image_none = "arrownone.gif";
var europeandate = 1;

/* Don't change anything below this unless you know what you're doing */ /*
// addEvent(window, "load", sortables_init);

var SORT_COLUMN_INDEX;
var thead = false;

function sortables_init() {	
	var tbl = document.getElementById('tbl-summary');
	
	if (tbl) {
		ts_makeSortable(tbl);
	}
}

function ts_makeSortable(t) {
	if (t.rows && t.rows.length > 0) {
		if (t.tHead && t.tHead.rows.length > 0) {
			var firstRow = t.tHead.rows[t.tHead.rows.length-1];
			thead = true;
		} else {
			var firstRow = t.rows[0];
		}
	}
	
	if (!firstRow) return;
	
	// We have a first row: assume it's the header, and make its contents clickable links
	for (var i=0;i<firstRow.cells.length;i++) {
		var cell = firstRow.cells[i];
		var txt = ts_getInnerText(cell);
		if (cell.className != "unsortable" && cell.className.indexOf("unsortable") == -1) {
			cell.innerHTML = '<a href="#" class="sortheader" onclick="ts_resortTable(this, '+i+');return false;">'+txt+'<span class="sortarrow">&nbsp;&nbsp;<img src="'+ image_path + image_none + '" alt="&darr;"/></span></a>';
		}
	}
}

function ts_getInnerText(el) {
	if (typeof el == "string") return el;
	if (typeof el == "undefined") { return el };
	if (el.innerText) return el.innerText;	//Not needed but it is faster
	var str = "";
	
	var cs = el.childNodes;
	var l = cs.length;
	for (var i = 0; i < l; i++) {
		switch (cs[i].nodeType) {
			case 1: //ELEMENT_NODE
				str += ts_getInnerText(cs[i]);
				break;
			case 3:	//TEXT_NODE
				str += cs[i].nodeValue;
				break;
		}
	}
	return str;
}

function ts_resortTable(lnk, clid) {
	var span;
	for (var ci=0;ci<lnk.childNodes.length;ci++) {
		if (lnk.childNodes[ci].tagName && lnk.childNodes[ci].tagName.toLowerCase() == 'span') span = lnk.childNodes[ci];
	}
	var spantext = ts_getInnerText(span);
	var td = lnk.parentNode;
	var column = clid || td.cellIndex;
	var t = getParent(td,'TABLE');
	// Work out a type for the column
	if (t.rows.length <= 1) return;
	var itm = "";
	var i = 0;
	while (itm == "" && i < t.tBodies[0].rows.length) {
		var itm = ts_getInnerText(t.tBodies[0].rows[i].cells[column]);
		itm = trim(itm);
		if (itm.substr(0,4) == "<!--" || itm.length == 0) {
			itm = "";
		}
		i++;
	}
	
	if (itm == '')
		return; 
		
	sortfn = ts_sort_caseinsensitive;
	
	if (itm.match(/^\d\d[\/\.-][a-zA-z][a-zA-Z][a-zA-Z][\/\.-]\d\d\d\d$/))
		sortfn = ts_sort_date;
		
	if (itm.match(/^\d\d[\/\.-]\d\d[\/\.-]\d\d\d{2}?$/))
		sortfn = ts_sort_date;
		
	if (itm.match(/^-?[£$€Û¢´]\d/))
		sortfn = ts_sort_numeric;
		
	if (itm.match(/^-?(\d+[,\.]?)+(E[-+][\d]+)?%?$/))
		sortfn = ts_sort_numeric;
		
	SORT_COLUMN_INDEX = column;
	
	var firstRow = new Array();
	var newRows = new Array();
	
	for (k=0;k<t.tBodies.length;k++) {
		for (i=0;i<t.tBodies[k].rows[0].length;i++) { 
			firstRow[i] = t.tBodies[k].rows[0][i]; 
		}
	}
	
	for (k=0; k<t.tBodies.length; k++) {
		if (!thead) {
			// Skip the first row
			for (j=1;j<t.tBodies[k].rows.length;j++) { 
				newRows[j-1] = t.tBodies[k].rows[j];
			}
		} else {
			// Do NOT skip the first row
			for (j=0;j<t.tBodies[k].rows.length;j++) { 
				newRows[j] = t.tBodies[k].rows[j];
			}
		}
	}
	
	console.log('Sorting by: ' + sortfn);
	newRows.sort(sortfn);
	
	if (span.getAttribute("sortdir") == 'down') {
			ARROW = '&nbsp;&nbsp;<img src="'+ image_path + image_down + '" alt="&darr;"/>';
			newRows.reverse();
			span.setAttribute('sortdir','up');
	} else {
			ARROW = '&nbsp;&nbsp;<img src="'+ image_path + image_up + '" alt="&uarr;"/>';
			span.setAttribute('sortdir','down');
	} 
    // We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones
    // don't do sortbottom rows (updated to do 'tbl-trd-total' instead)
    for (i=0; i<newRows.length; i++) { 
		// if (!newRows[i].className || (newRows[i].className && (newRows[i].className.indexOf('sortbottom') == -1))) {
		if (!newRows[i].className || (newRows[i].className && (newRows[i].className.indexOf('tbl-trd-total') == -1))) {
			t.tBodies[0].appendChild(newRows[i]);
		}
	}
    // do sortbottom rows only
    for (i=0; i<newRows.length; i++) {
		//if (newRows[i].className && (newRows[i].className.indexOf('sortbottom') != -1)) 
		if (newRows[i].className && (newRows[i].className.indexOf('tbl-trd-total') != -1)) 
			t.tBodies[0].appendChild(newRows[i]);
	}
	// Delete any other arrows there may be showing
	var allspans = document.getElementsByTagName("span");
	for (var ci=0;ci<allspans.length;ci++) {
		if (allspans[ci].className == 'sortarrow') {
			if (getParent(allspans[ci],"table") == getParent(lnk,"table")) { // in the same table as us?
				allspans[ci].innerHTML = '&nbsp;&nbsp;<img src="'+ image_path + image_none + '" alt="&darr;"/>';
			}
		}
	}		
	span.innerHTML = ARROW;
}

function getParent(el, pTagName) {
	if (el == null) {
		return null;
	} else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase()) {
		return el;
	} else {
		return getParent(el.parentNode, pTagName);
	}
}

function sort_date(date) {	
	// y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
	dt = "00000000";
	if (date.length == 11) {
		mtstr = date.substr(3,3);
		mtstr = mtstr.toLowerCase();
		switch(mtstr) {
			case "jan": var mt = "01"; break;
			case "feb": var mt = "02"; break;
			case "mar": var mt = "03"; break;
			case "apr": var mt = "04"; break;
			case "may": var mt = "05"; break;
			case "jun": var mt = "06"; break;
			case "jul": var mt = "07"; break;
			case "aug": var mt = "08"; break;
			case "sep": var mt = "09"; break;
			case "oct": var mt = "10"; break;
			case "nov": var mt = "11"; break;
			case "dec": var mt = "12"; break;
			// default: var mt = "00";
		}
		dt = date.substr(7,4)+mt+date.substr(0,2);
		return dt;
	} else if (date.length == 10) {
		if (europeandate == false) {
			dt = date.substr(6,4)+date.substr(0,2)+date.substr(3,2);
			return dt;
		} else {
			dt = date.substr(6,4)+date.substr(3,2)+date.substr(0,2);
			return dt;
		}
	} else if (date.length == 8) {
		yr = date.substr(6,2);
		if (parseInt(yr) < 50) { 
			yr = '20'+yr; 
		} else { 
			yr = '19'+yr; 
		}
		if (europeandate == true) {
			dt = yr+date.substr(3,2)+date.substr(0,2);
			return dt;
		} else {
			dt = yr+date.substr(0,2)+date.substr(3,2);
			return dt;
		}
	}
	return dt;
}

function ts_sort_date(a,b) {
	dt1 = sort_date(ts_getInnerText(a.cells[SORT_COLUMN_INDEX]));
	dt2 = sort_date(ts_getInnerText(b.cells[SORT_COLUMN_INDEX]));
	
	if (dt1==dt2) {
		return 0;
	}
	if (dt1<dt2) { 
		return -1;
	}
	return 1;
}

function ts_sort_numeric(a,b) {
	var aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
	aa = clean_num(aa);
	var bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
	bb = clean_num(bb);
	return compare_numeric(aa,bb);
}
function compare_numeric(a,b) {
	var a = parseFloat(a);
	a = (isNaN(a) ? 0 : a);
	var b = parseFloat(b);
	b = (isNaN(b) ? 0 : b);
	return a - b;
}
function ts_sort_caseinsensitive(a,b) {
	aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).toLowerCase();
	bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).toLowerCase();
	if (aa==bb) {
		return 0;
	}
	if (aa<bb) {
		return -1;
	}
	return 1;
}
function ts_sort_default(a,b) {
	aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
	bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
	if (aa==bb) {
		return 0;
	}
	if (aa<bb) {
		return -1;
	}
	return 1;
}

function clean_num(str) {
	str = str.replace(new RegExp(/[^-?0-9.]/g),"");
	return str;
}

function trim(s) {
	return s.replace(/^\s+|\s+$/g, "");
}

*/ /* end of sortable tables */

/**
 * init()
 * initialise JS when DOM loaded (quicker than window.onload for Moz/Webkit/IE/Opera9+)
 * ref: http://dean.edwards.name/weblog/2006/06/again/#comment5338
 **/

function init() {
	if (arguments.callee.done) {
		return;
	}
	
	arguments.callee.done = true;
	
	if (dom_timer) {
		clearInterval(dom_timer);
	}
	
	// sortable tables
	//sortables_init();
	
	// add datepicker to inputs with 'datepicker' class
	var date_inputs = getElementsByClass('datepicker');
	var date_field;
	
	if (date_inputs) {
		addDatePicker();
		
		prepcalendar('',ccm,ccy);
		
		for (var i = 0; i < date_inputs.length; i++) {
			var date_inputs_children = date_inputs[i].getElementsByTagName('input');
			date_field = date_inputs_children[0];
			
			date_field.parentNode.className = 'date-picker';
		
			addEventListener(date_field,'focus',function(e) {
				e = (e) ? e : window.event;
				
				this.select();
				lcs(this);
				
				if (e.stopPropagation)
					e.stopPropagation();
				else
					e.returnValue = false;
					
			},false);
			
			addEventListener(date_field,'click',function(e) {
				e = (e) ? e : window.event;
				
				var target = this.getElementsByTagName('input');
				
				this.select();
				lcs(this);
				
				if (e.stopPropagation)
					e.stopPropagation();
				else
					e.returnValue = false;
			},false);
			
			addEventListener(date_field.parentNode,'focus',function(e) {
				e = (e) ? e : window.event;
				
				var target = this.getElementsByTagName('input');
				
				this.target[0].select();
				lcs(this.target[0]);
				
				if (e.stopPropagation)
					e.stopPropagation();
				else
					e.returnValue = false;
			},false);
			
			addEventListener(date_field.parentNode,'click',function(e) {
				e = (e) ? e : window.event;
				
				var target = this.getElementsByTagName('input');
				
				this.target[0].select();
				lcs(this.target[0]);
				
				if (e.stopPropagation)
					e.stopPropagation();
				else
					e.returnValue = false;
			},false);
		}
	}
	
	// add customer autosuggest
	var customer_autosuggest = document.getElementById('frm-customersearch-name');
	
	if (customer_autosuggest) {
		customer_autosuggest.setAttribute('autocomplete', 'off');
		
		this.selectedOpt = -1;
		this.lastValue = this.value;
		
		addEventListener(customer_autosuggest,'keyup',function(e) {
			e = (e) ? e : window.event;
			
			var ddbox = document.getElementById(this.id + '-dropdown');
			
			if ( !( e.keyCode < 7 || (e.keyCode >= 9 && e.keyCode <= 31) || (e.keyCode >= 33 && e.keyCode <= 45) || (e.keyCode >= 112 && e.keyCode <= 123)) ) {
				if (this.value.length > 0) {
					getCustomerAutoSuggest(this.value, this);
					this.selectedOpt = -1;
				} else {
					
					if (ddbox) {
						ddbox.style.display = 'none';
						ddbox.innerHTML = '';
					}
					
					this.selectedOpt = -1;
				}
				
				this.lastValue = this.value;
			}
		},false);
		
		addEventListener(customer_autosuggest,'keydown',function(e) {
			e = (e) ? e : window.event;
			
			var ddbox = document.getElementById(this.id + '-dropdown');
			
			if (ddbox) {
				var opts = ddbox.getElementsByTagName('li');
				
				if ( ddbox.style.display == 'block' && (e.keyCode == 38 || e.keyCode == 40) ) {
					
					switch(e.keyCode) {
						// up arrow
						case 38:
							this.selectedOpt = (this.selectedOpt == -1) ? (opts.length-1) : this.selectedOpt - 1;
							
							break;
							
						// down arrow
						case 40:
							this.selectedOpt = (this.selectedOpt == (opts.length-1)) ? -1 : this.selectedOpt + 1;
							
							break;
					}
					
					this.value = (this.selectedOpt == -1) ? this.lastValue : html_entity_decode(opts[this.selectedOpt].innerHTML);
					
					for(var i = 0;i < opts.length; i++) {
						if (i == this.selectedOpt) {
							addClass(opts[i], 'selected');
						} else {
							removeClass(opts[i], 'selected');
						}
					}
					
				}
				
				if ( ddbox.style.display == 'none' && (e.keyCode == 40) ) {
					ddbox.style.display = 'block';
					
					for(var i = 0;i < opts.length; i++) {
						if (html_entity_decode(opts[i].innerHTML) == this.value) {
							this.selectedOpt = i;
							addClass(opts[i], 'selected');
						} else {
							removeClass(opts[i], 'selected');
						}
					}
				}
				
				if ( ddbox.style.display == 'block' && (e.keyCode == 27) ) {
					ddbox.style.display = 'none';
				}
				
				if ( ddbox.style.display == 'block' && (e.keyCode == 39) ) {
					this.value = html_entity_decode(opts[this.selectedOpt].innerHTML);
					ddbox.style.display = 'none';
				}
			}
		},false);
	}
	
	// add number autosuggest
	var number_autosuggest_range	= document.getElementById('range');
	var number_autosuggest_number	= document.getElementById('number');
	
	if (number_autosuggest_range && number_autosuggest_number) {
		
		if (number_autosuggest_range) {
			addEventListener(number_autosuggest_range,'change',function(e) {
				e = (e) ? e : window.event;
				
				var number_input = document.getElementById('number');
				
				var ddbox = document.getElementById(number_input.id + '-dropdown');
				
				if (ddbox) {
					ddbox.style.display = 'none';
					ddbox.innerHTML = '';
				}
				
				number_input.value = ''
				
				number_input.selectedOpt = -1;
				number_input.lastValue = number_input.value;
				number_input.focus();
				
				getNumberAutoSuggest(this.options[this.selectedIndex].value, '', number_input);
				
			},false);
		}
		
		if (number_autosuggest_number) {
			number_autosuggest_number.setAttribute('autocomplete', 'off');
			
			this.selectedOpt = -1;
			this.lastValue = this.value;
			
			addEventListener(number_autosuggest_number,'click',function(e) {
				e = (e) ? e : window.event;
				
				var ddbox = document.getElementById(this.id + '-dropdown');
				var range = document.getElementById('range').value;
				
				if ( this.value.length == 0 || !ddbox ) {
					getNumberAutoSuggest(range, this.value, this);
					this.selectedOpt = -1;
				}
				
				this.lastValue = this.value;
			},false);
			
			addEventListener(number_autosuggest_number,'keyup',function(e) {
				e = (e) ? e : window.event;
				
				var ddbox = document.getElementById(this.id + '-dropdown');
				var range = document.getElementById('range').value;
				
				if ( !( e.keyCode < 7 || (e.keyCode >= 9 && e.keyCode <= 31) || (e.keyCode >= 33 && e.keyCode <= 45) || (e.keyCode >= 112 && e.keyCode <= 123)) ) {
					if ( (this.value.length > 0) && ( (range=='118' && this.value.length < 3) || (range!='118' && this.value.length < 7) ) ) {
						getNumberAutoSuggest(range, this.value, this);
						this.selectedOpt = -1;
					} else {
						
						if (ddbox) {
							ddbox.style.display = 'none';
							ddbox.innerHTML = '';
						}
						
						this.selectedOpt = -1;
					}
					
					this.lastValue = this.value;
				}
			},false);
			
			addEventListener(number_autosuggest_number,'keydown',function(e) {
				e = (e) ? e : window.event;
				
				var ddbox = document.getElementById(this.id + '-dropdown');
				
				if (ddbox) {
					var opts = ddbox.getElementsByTagName('li');
					
					if ( ddbox.style.display == 'block' && (e.keyCode == 38 || e.keyCode == 40) ) {
						
						switch(e.keyCode) {
							// up arrow
							case 38:
								this.selectedOpt = (this.selectedOpt == -1) ? (opts.length-1) : this.selectedOpt - 1;
								
								break;
								
							// down arrow
							case 40:
								this.selectedOpt = (this.selectedOpt == (opts.length-1)) ? -1 : this.selectedOpt + 1;
								
								break;
						}
						
						this.value = (this.selectedOpt == -1) ? this.lastValue : html_entity_decode(opts[this.selectedOpt].innerHTML);
						
						for(var i = 0;i < opts.length; i++) {
							if (i == this.selectedOpt) {
								addClass(opts[i], 'selected');
							} else {
								removeClass(opts[i], 'selected');
							}
						}
						
					}
					
					if ( ddbox.style.display == 'none' && (e.keyCode == 40) ) {
						ddbox.style.display = 'block';
						
						for(var i = 0;i < opts.length; i++) {
							if (html_entity_decode(opts[i].innerHTML) == this.value) {
								this.selectedOpt = i;
								addClass(opts[i], 'selected');
							} else {
								removeClass(opts[i], 'selected');
							}
						}
					}
					
					if ( ddbox.style.display == 'block' && (e.keyCode == 27) ) {
						ddbox.style.display = 'none';
					}
					
					if ( ddbox.style.display == 'block' && (e.keyCode == 39) ) {
						this.value = html_entity_decode(opts[this.selectedOpt].innerHTML);
						ddbox.style.display = 'none';
						getNumberAutoSuggest(
							document.getElementById('range').value,
							this.value,
							this
						);
						
						this.lastValue = this.value;
						this.selectedOpt = -1;
					}
				}
			},false);
		}
	}
	
	// add enable/disable to edit customer fieldset checkboxes
	var customer_details = document.getElementById('customer-details');
	
	if (customer_details) {
	
		checkFormFields('frm-customerdetails');
		
		var editcustlegend	= customer_details.getElementsByTagName('legend');
		
		if (editcustlegend) {
			for(var i = 0;i < editcustlegend.length; i++) {
				if (editcustlegend[i].firstChild.nodeName == 'LABEL') {
					if (!editcustlegend[i].firstChild.firstChild.checked)
						toggleAllDisabled(editcustlegend[i].parentNode, editcustlegend[i].firstChild.firstChild);
					
					addEventListener(editcustlegend[i].firstChild.firstChild, 'click', function(e) {
						e = (e) ? e : window.event;
						
						toggleAllDisabled(this.parentNode.parentNode.parentNode, this);
						
					}, false);
				}
			}
		}
		
	}
}

if (document.addEventListener) {
	document.addEventListener("DOMContentLoaded", init, false);
}

/*@cc_on @*/
/*@if (@_win32)
	document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
	var script = document.getElementById("__ie_onload");
	script.onreadystatechange = function() {
		if (this.readyState == "complete") {
			init();
		}
	};
/*@end @*/

if (/WebKit/i.test(navigator.userAgent)) {
	dom_timer = setInterval(function() {
		if (/loaded|complete/.test(document.readyState)) {
			init();
		}
	}, 10);
}

window.onload = init;
