var SPINNER = "<img src='/img/ajax-loader.gif' />";
var DO_LOGOUT = 2;
var LOGIN_MENU = 6;
var LOOKUP_EMAIL_MENU = 7;

var currencyBlocked = false;
var tab = 0;
var curList = new Array( 'au', 'us', 'ca', 'eu', 'uk', 'jp' );

var img = new Image();
img.src = '/img/gray_left.png';
img.src = '/img/gray_right.png';
img.src = '/img/gray_left_f2.png';
img.src = '/img/gray_right_f2.png';
img.src = '/img/active_left.png';
img.src = '/img/active_right.png';
for( var i=0; i<curList.length; i++ ) {
	img.src = '/img/'+curList[i]+'_flag.png';
}

function initMain( query ) {
	showDiv( 'mainContent', 0 );
//	showLoginDialog( 0 );
	if( query == null || query.length < 1 ) doFetchList();	
	else requestItem( query );
}

function ToolTipImg( cat ) {
	return "<img src='/dvd/"+cat+"SM.jpg' width='100' /><br/>"+cat;
}

function setTab( myId ) {
	var div = document.getElementById( 'mainTabs' );
	var lis = div.getElementsByTagName("td");
	for( var i=0; i<lis.length; i++ ) {
		var id = lis[i].getAttribute( 'myId' );
		if( myId == id ) {
			lis[i].className='this';
			tab = id;
		} else if( i+1 == lis.length ) {
			lis[i].className='last';
		} else {
			lis[i].className='';
		}
	}
	document.getElementById( 'yearMenu' ).style.display = tab == 1 ? 'block' : 'none';
	document.getElementById( 'mainListing' ).style.display = tab != 7 ? 'block' : 'none';
	document.getElementById( 'mainSearch' ).style.display = tab == 7 ? 'block' : 'none';
	if( tab == 1 ) redrawYears( 0 );
	doFetchList();
}

var d = new Date();
var maxYear = d.getFullYear();
var minYear = 1970;
var currYear = maxYear;
var yearsAcross = 18;
function redrawYears( inc ) {
	var newYear = currYear + inc;
	if( newYear <= maxYear && newYear >= minYear+yearsAcross ) {
		var div = document.getElementById( 'yearMenu' );
		var width = div.offsetWidth;
		var str = drawButton( "<-", "redrawYears(1)" )+"&nbsp;";
		currYear = newYear;
		yearsAcross = 0;
		while( newYear > minYear ) {
			str = str + drawButton( newYear, "doFetchYear("+newYear+")" ) + "&nbsp;";
			width = width - 50;
			yearsAcross++;
			if( width < 0 ) break;
			newYear--;
		}
		str = str + drawButton( "->", "redrawYears(-1)" );
		div.innerHTML = str;
	}
}

function drawButton( text, action ) {
	return "<div class='button' onclick='"+action+"'>"+text+"</div>";
}

function doFetchList() {
	var expand = 'none'
	if( tab == 1 ) {
		document.getElementById('listContent').innerHTML = "";
	} else if( tab != 7 ) {
		var params;
		if( tab == 0 ) {
			params = 'latest=1';
		} else if( tab == 2 ) {
			params = 'name=1';
			expand = 'block';
		} else if( tab == 3 ) {
			params = 'feature=1';
		} else if( tab == 4 ) {
			params = 'feature=2';
		} else if( tab == 5 ) {
			params = 'train=1';
		} else if( tab == 6 ) {
			params = 'movie=1';
		}
		document.getElementById('listContent').innerHTML = "<div align='center'>"+SPINNER+"</div>";
		doXml( 'doFetchList2.php', params );
	}
	document.getElementById('expandButton').style.display = expand;
}

function doFetchYear( year ) {
		document.getElementById('listContent').innerHTML = "<div align='center'>"+SPINNER+"</div>";
		doXml( "doFetchList2.php", "year="+year );
}

function expandDiv( tag, flag ) {
	var img = document.getElementById( 'i'+tag );
	if( img ) {
		var div = document.getElementById( 'd'+tag );
		if( div ) {
			var exp;
			if( !flag ) exp = img.src.indexOf( 'plus' ) >= 0;
			else exp = flag == 1;
			img.src = exp ? "/img/minus.gif" : "/img/plus.gif";
			div.style.display = exp ? "block" : "none";
		}
	}
}

function expandAll( btn ) {
	var flag = parseInt( btn.getAttribute('myFlag') );
	btn.value = flag ? 'Contract All' : 'Expand All';
	btn.setAttribute( 'myFlag', flag ? "0" : "1" );
	var div = document.getElementById( 'content' );
	var img = div.getElementsByTagName("img");
	for( var i=0; i<img.length; i++ ) {
		if( img[i].id.substr(0,1) == 'i' ) expandDiv( img[i].id.substr(1), flag );
	}
}

function spinCursor( flag ) {
	document.body.style.cursor = flag ? 'wait' : 'auto';
}

function showDiv( tag, loading ) {
	currencyBlocked = false;
	var tags = new Array( 'mainContent', 'showCartDiv', 'showItemDiv', 'loginDialog', 'accountOptions' );
	if( tag == null ) tag = 'mainContent';
	for( var i=0; i<tags.length; i++ ) {
		document.getElementById( tags[i] ).style.display = 
			tags[i] == tag ? 'block' : 'none';
	}
	clearMessage();
	if( loading ) document.getElementById( tag ).innerHTML = loading;
	var vis = ( tag == tags[1] || 
		parseInt(document.getElementById( 'cartItems' ).innerHTML) == 0 ) ? 'none' : 'inline';
	document.getElementById( 'cartBtn' ).style.display = vis;
}

function requestItem( catNum ) {
	document.getElementById( 'showItemContent' ).innerHTML = "";
	isInCart( false );
	showDiv( 'showItemDiv', 0 );
	doXml( "doShowItem.php", "cat="+catNum );
}

function isInCart( flag ) {
	document.getElementById( 'inCart' ).style.display = flag ? 'block' : 'none';
	spinCursor( false );
}


function updateCart( name, num, val ) {
	document.getElementById( 'userName' ).innerHTML = name;
	document.getElementById( 'cartItems' ).innerHTML = num;
	document.getElementById( 'cartValue' ).innerHTML = val;
	if( divIsShowing( 'showCartDiv' )) {
		showCart(0);
		num = 0;
	}
	document.getElementById( 'cartBtn' ).style.display = num ? 'inline' : 'none';
	document.getElementById( 'profileBtn' ).style.display = name != 'guest' ? 'inline' : 'none';
	spinCursor(false);
}

function divIsShowing( div ) {
	return document.getElementById( div ).style.display == 'none' ? 0 : 1;
}


function setCurrency() {
	if( currencyBlocked ) {
		showMessage('Unable to change currencies on previous orders');
	} else if( !divIsShowing( 'loginDialog' ) ) {
		var refresh = divIsShowing( 'showCartDiv' );
		var img = document.getElementById('flag');
		var ptr = parseInt(img.getAttribute( 'ptr' ));
		ptr++;
		if( ptr >= curList.length ) ptr = 0;
		img.setAttribute( 'ptr', ptr );
		img.src = '/img/'+curList[ptr]+'_flag.png';
		var lis = document.getElementsByTagName('DIV');
		if( lis ) {
			var tag = 'price_'+curList[ptr];
			for( var i=0; i<lis.length; i++ ) {
				if( lis[i].id == 'catPrice' ) {
					var price = lis[i].getAttribute( tag );
					lis[i].innerHTML = price;
				}
			}	
		}
		doXml( 'doShoppingCart.php', 'method=currency&id='+curList[ptr] );
	}
}

function addItem() {
	if( document.getElementById( 'inCart' ).style.visibility == 'visible' ) {
		if( !confirm( "This item is already in your shopping cart.\nDo you wish to add another ?" ) ) return;
	}
	spinCursor( true );
	var itemNum = document.getElementById('showItem').getAttribute('itemNum');
	doXml( 'doShoppingCart.php', 'method=add&id='+itemNum );
}

function removeItem( itemNum ) {
	if( confirm( "Are you sure you want to remove item "+itemNum+" from your cart ? " ) ) {
		spinCursor( true );
		doXml( 'doShoppingCart.php', 'method=delete&id='+itemNum );
	}
}

function showCart( flag ) {
	if( !divIsShowing( 'loginDialog' ) ) {
		var loading = flag ? 
			SPINNER + "<div class='button' onclick=\"showDiv('mainContent',0)\">Return to List</div>" : "";
		showDiv( 'showCartDiv', loading );
		doXml( 'doShoppingCart.php', 'method=list' );
	}
}

function showCheckout( param ) {
	doXml( "doLogin.php", "loginFlag="+param );
}

function logInOut( method ) {
	if( method == LOGIN_MENU && parseInt(document.getElementById( 'loginBox' ).getAttribute('flag')) != 0 ) {
		method = DO_LOGOUT;
	} else if( !divIsShowing( 'loginDialog' ) ) {
		showLoginDialog( 2 );
	}
	doXml( "doLogin.php", "loginFlag="+method );
}

function setLogInOut( flag ) {
	var e = document.getElementById( 'loginBox' );
//	if( flag == 0 ) flag = parseInt(e.getAttribute('flag')) == 1 ? 2 : 1;
	e.setAttribute('flag', flag );
	e.innerHTML = flag == 1 ? "Logout" : "Login";
	if( flag ) showDiv('mainContent');
	doXml( 'doShoppingCart.php', 'method=summary' );
}

function showLoginDialog( flag, focus ) {
	showDiv( 'loginDialog', flag == 2 ? "Loading..." : "" );
	if( focus != null ) document.forms['loginForm'].elements[focus].focus();
	document.getElementById( 'loginDialog' ).style.height = flag == 3 ? "380px" : "200px";
}

function noEnter() {
	return !(window.event && window.event.keyCode == 13);
}
function enterSubmit( func ) {
	if( window.event && window.event.keyCode == 13 ) {
		eval(func);
		return false;
	} else return true;
}
function enterTab( nextField ) {
	if(window.event && window.event.keyCode == 13) {
		nextfield.focus();
		return false;
	} else return true;
}

function verifyLogin( e ) {
	if( e.name == 'email' ) {
		if( e.value.indexOf( '@' ) < 2 ) {
			showMessage( 1, 'Please enter a valid email address' );
			e.select();
		} else {
			var checkout = e.form.checkoutFlag.value;
			doXml( 'doLogin.php', 'loginFlag='+LOOKUP_EMAIL_MENU+'&email='+e.value+"&checkoutFlag="+checkout );
		}
	} else if( e.name == 'repeat' ) {
		if( e.form.passwd.value.length > 0 && e.value != e.form.passwd.value ) {
			alert( "Error - passwords don't match" );
			e.select();
		}
	}
}

function doLogin( loginFlag ) {
	var form = document.forms.loginForm;
	if( form.email && form.email.value.indexOf( '@' ) < 2 ) {
		showMessage( 1, 'Please enter a valid email address' );
	} else if( form.passwd && form.passwd.value.length < 5 ) {
		showMessage( 1, 'Please enter a password of at least 5 characters' );
	} else if( form.repeat && form.passwd.value != form.repeat.value ) {
		showMessage( 1, 'Error - passwords do not match' );
	} else {
		if( loginFlag > 0 ) form.loginFlag.value=loginFlag;
		doXmlFromForm( form );
	}
}

function requestPassword() {
	var email = prompt( 'Please enter your email address:', document.loginForm.email.value );
	if( email != null ) {
		showMessage( 1, 'Requesting password...' );
		doXml( 'needPassword.php','email=' + email );
	}
}

function showOrder( id, hist ) {
	doXml( "doOrder.php", "method=show&id="+id+"&hist="+hist );
}

function processOrder() {
	var form = document.forms.ccForm;
	var type = form.ccType.options[form.ccType.selectedIndex].value;
	if( !isValidCreditCard(type,form.ccNum.value) ) {
		showMessage( 1, 'Please enter a valid credit card number.' );
	} else if( form.ccName.value.length < 3 ) {
		showMessage( 1, 'Please enter your name as it appears on your credit card.' );
	} else if( form.ccMonth.selectedIndex == 0 || form.ccYear.selectedIndex == 0 ) {
		showMessage( 1, 'Please enter the expiration date' );
	} else if( form.ccCode.value.length < 3 ) {
		showMessage( 1, 'Please enter a security code' );
	} else {
		var d = new Date();
		form.timeZoneOffset.value = d.getTimezoneOffset();
		doXmlFromForm( form );
	}
}

function validateCardNum(s) {
// remove non-numerics
	var v = "0123456789";
	var w = "";
	for (i=0; i < s.length; i++) {
		x = s.charAt(i);
		if (v.indexOf(x,0) != -1)
		w += x;
	}
// validate number
	j = w.length / 2;
	if (j < 6.5 || j > 8 || j == 7) return false;
	k = Math.floor(j);
	m = Math.ceil(j) - k;
	c = 0;
	for (i=0; i<k; i++) {
		a = w.charAt(i*2+m) * 2;
		c += a > 9 ? Math.floor(a/10 + a%10) : a;
	}
	for (i=0; i<k+m; i++) c += w.charAt(i*2+1-m) * 1;
	return (c%10 == 0);
}


function isValidCreditCard(type, ccnum) {

	if( ccnum.charAt(0) == '1' ) return true;			// for debugging

	if (type == "VS") {				// Visa: length 16, prefix 4
		var re = /^4\d{15}$/;
	} else if (type == "MC") {		// Mastercard: length 16, prefix 51-55
		var re = /^5[1-5]\d{14}$/;
	} else if (type == "DS") {		// Discover: length 16, prefix 6011
		var re = /^6011-?\d{12}$/;
	} else if (type == "AX") {		// American Express: length 15, prefix 34 or 37.
		var re = /^3[4,7]\d{13}$/;
	} else if (type == "DC") {		// Diners: length 14, prefix 30, 36, or 38.
		var re = /^3[0,6,8]\d{12}$/;
//	} else if( type =='JC' ) {
//		var re = /^(3[0-9]\d{4}|2131|1800)\d{11}$/;
	}
	if (!re.test(ccnum)) return false;
	// Remove all dashes for the checksum checks to eliminate negative numbers
	ccnum = ccnum.split("-").join("");
	// Checksum ("Mod 10")
	// Add even digits in even length strings or odd digits in odd length strings.
	var checksum = 0;
	for (var i=(2-(ccnum.length % 2)); i<=ccnum.length; i+=2) {
		checksum += parseInt(ccnum.charAt(i-1));
	}
	// Analyze odd digits in even length strings or even digits in odd length strings.
	for (var i=(ccnum.length % 2) + 1; i<ccnum.length; i+=2) {
		var digit = parseInt(ccnum.charAt(i-1)) * 2;
		if (digit < 10) { checksum += digit; } else { checksum += (digit-9); }
	}
	return checksum%10 == 0; 
}

function switchStates( on, off1, off2, off3 ) {
	on.style.display = 'block';
	off1.style.display = 'none';
	off2.style.display = 'none';
	off3.style.display = 'none';
	document.getElementById('state_row').style.display = 'table-row';
}

function showState( select ) {
	var us = document.getElementById('state_us');
	var ca = document.getElementById('state_ca');
	var au = document.getElementById('state_au');
	var mx = document.getElementById('state_mx');
	switch( select.value ) {
		case 'us': switchStates( us, ca, au, mx ); break;
		case 'ca': switchStates( ca, us, au, mx ); break;
		case 'au': switchStates( au, ca, us, mx ); break;
		case 'mx': switchStates( mx, ca, au, us ); break;
		default:
			document.getElementById('state_row').style.display = 'none';
	}
	var x = eval( 'select.form.state_'+select.value );
	select.form.state.value = x == null ? '' : x.value;
}

function setState(select) {
	select.form.state.value = select.value;
}

function editOptions( flag ) {
	switch( flag ) {
		case 0:
			showDiv( 'accountOptions' );
			break;
		case 1:
			showDiv( 'loginDialog', 'Loading...' );
			doXml( 'doLogin.php', 'loginFlag=8&prevMenu=accountOptions' );
			break;
		case 2:
			showDiv( 'loginDialog', 'Loading...' );
			doXml( 'doLogin.php', 'loginFlag=9&prevMenu=accountOptions' );
			break;
		case 3:
			showDiv( 'showCartDiv', 'Loading...' );
			doXml( 'doOrder.php', 'method=history&prevMenu=accountOptions' );
			break;
		case 4:
			break;
		case 5:
			break;
	}
}

function setTotalCosts( sel ) {
	var opt = sel.options[sel.selectedIndex];
	var cost = opt.getAttribute('cost');
	var credit = opt.getAttribute('credit');
	var total = opt.getAttribute('total');
	document.getElementById('tabShip').innerHTML = cost;
	document.getElementById('tabCredit').innerHTML = credit;
	document.getElementById('tabTotal').innerHTML = total;
	sel.form.totalPrice.value = total;
}

function processShipping() {
	showLoginDialog( 2 );
	doXmlFromForm( document.forms.shipForm );
}