//Javascript Sauce v1.0
//by: Blake Dy

////////////////////
//GLOBAL VARIABLES//
var MAX_SIMULTANEOUS_AJAX_REQUESTS = 50;
var AJAX_ARRAY	= new Array(MAX_SIMULTANEOUS_AJAX_REQUESTS);
var REQ_ARRAY	= new Array(MAX_SIMULTANEOUS_AJAX_REQUESTS);
var CACHE_ARRAY	= new Array();
var SERVER		= location.protocol + "//" + location.host; //app_url; //document.domain
var SSL_SERVER	= location.protocol + "//" + location.host; //app_ssl_url;
//GLOBAL VARIABLES//
////////////////////




///////////////
//JS INCLUDES//

function include(file){
	var script  = document.createElement('script');  
	script.src  = file;  
	script.type = 'text/javascript';  
	script.defer = true;  

	document.getElementsByTagName('head').item(0).appendChild(script);  
}  
   
//include('../js/Serializer.js');  
//include('../js/SerializerJS.js');

//JS INCLUDES//
///////////////

include('/js/jquery.no.conflict.min.js');

////////////////////////
//AJAX PROCESSING UNIT//

//make ajax request
function makeRequest(url,parameters,action,method) {
	if (CACHE_ARRAY[url + "?" + parameters] != null) {
		processAction(action,check_action(action),CACHE_ARRAY[url + "?" + parameters]);
		return;
	}

	jQuery.ajax({
	   type: method,
	   url: url,
	   data: parameters,
	   cache: true,
	   success: function(response){
			processAction(action,check_action(action),response);
			CACHE_ARRAY[url + "?" + parameters] = response;
		 },
		 error: function(response){
			//alert(msg);
		 }
	});
}

//make ajax request
function makeRequest_deprecated(url,parameters,action,method) {
	var index;
	//Check for valid action
	var actionType = check_action(action)
	if (!actionType) {return;}
	
	if (CACHE_ARRAY[url + "?" + parameters] != null) {
		processAction(action,actionType,CACHE_ARRAY[url + "?" + parameters]);
		return;
	}
	for (var i = 0; i < MAX_SIMULTANEOUS_AJAX_REQUESTS; i++) {
		if (AJAX_ARRAY[i] == null) {
			index = i;
			break;
		} else if (REQ_ARRAY[i].url == url) {
			return;
		}
	}
	if (index != null) {
		REQ_ARRAY[index] = {"action":action, "url":url, "parameters":parameters, "actionType":actionType};
	} else {
		alert("ERROR: MAX SIMULTANEOUS AJAX REQUESTS LIMIT " + MAX_SIMULTANEOUS_AJAX_REQUESTS);
	}
	AJAX_ARRAY[index] = false;
	
	// branch for native XMLHttpRequest object
	if(window.XMLHttpRequest && !(window.ActiveXObject)) {
		try {
			AJAX_ARRAY[index] = new XMLHttpRequest();
        } catch(e) {
			AJAX_ARRAY[index] = false;
        }
	// branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
       	try {
        	AJAX_ARRAY[index] = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		AJAX_ARRAY[index] = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		AJAX_ARRAY[index] = false;
        	}
		}
    }
	
	if(AJAX_ARRAY[index]) {
		AJAX_ARRAY[index].onreadystatechange = processRequest;
		switch(method){
		case "POST":
			AJAX_ARRAY[index].open("POST", url, true);
			AJAX_ARRAY[index].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    		AJAX_ARRAY[index].setRequestHeader("Content-length", parameters.length);
    		AJAX_ARRAY[index].setRequestHeader("Connection", "close");
			AJAX_ARRAY[index].send(parameters);
			break;
		case "GET":
			AJAX_ARRAY[index].open("GET", url, true);
			AJAX_ARRAY[index].send(null);
			break;
		default:
			AJAX_ARRAY[index].open("POST", url, true);
			AJAX_ARRAY[index].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    		AJAX_ARRAY[index].setRequestHeader("Content-length", parameters.length);
    		AJAX_ARRAY[index].setRequestHeader("Connection", "close");
			AJAX_ARRAY[index].send(parameters);
		}
	} else {
		AJAX_ARRAY[index] = null;
	}
}

//process response
function processRequest() {
	for (var i = 0; i < MAX_SIMULTANEOUS_AJAX_REQUESTS; i++) {
		if (AJAX_ARRAY[i] && AJAX_ARRAY[i].readyState == 4) {
			if (AJAX_ARRAY[i].status == 200) {
				var action = REQ_ARRAY[i].action;
				var actionType = REQ_ARRAY[i].actionType;
				var response = AJAX_ARRAY[i].responseText;
				CACHE_ARRAY[REQ_ARRAY[i].url + "?" + REQ_ARRAY[i].parameters] = response;
				processAction(action,actionType,response);
			} else {
				//alert(AJAX_ARRAY[i].status);
			}
			AJAX_ARRAY[i] = null;
		}
	}
}

//perform action
function processAction(action,type,response) {
	switch(type){
	case "id":
		document.getElementById(action).innerHTML = response;
		break;    
	case "function":
		var func = action;
		var args = null;
		var index = func.search(/\(.*\)/);
		if (index > 0) {
			args = func.slice(index+1,func.length-1);
			args = args.split(',');
			if(args[0].length == 0 && args.length == 1){args[0] = response;}
			else{
				for (var i = 0; i < args.length; i++) {
					args[i] = eval(args[i]);
				}
				args.push(response);
			}
			func = func.slice(0,index);
		} else { args = 0; }
		
		if (args.length > 0) {
			eval(func).apply(null,args);
		} else {
			eval(func)(response);
		}
		break;
	default:
		alert("JSAUCE ERROR: UNKNOWN");
	}
}

//checks if action exists
function check_action(action) {
	if(!action || action == "") {alert("JSAUCE ERROR\nmissing argument: action"); return false;}
	
	if(typeof action == "string"){
		var func = action;
		var index = func.search(/\(.*\)/);
		if (index > 0) {func = func.slice(0,index);}
		if (eval("typeof " + func + " == 'function'")) {return "function";}
		else if (document.getElementById(action)) {return "id";}
	}
	
	//if(typeof action == "function") {return "function";}
	//if(typeof action == "object") {return "id";}
	
	alert("JSAUCE ERROR\nnot a function or id: "+action); return false;
}

//dummy function for action calls
function dummy(){
	//alert(arguments[0]);
}

//AJAX PROCESSING UNIT//
////////////////////////




///////////////////
//CLIPS FUNCTIONS//

//find clip by rank (default search)
function get_by_clip_rank(search,action,format) {
	if(!search){ search = " "; }
	if(!format){ format = "xml"; }

	url = SERVER + "/find/clips/byrank/" + search + "/" + format;
	makeRequest(url,"",action,"GET");
}

//find clip by name
function get_by_clip_name(search,action,format) {
	if(!search){ search = " "; }
	if(!format){ format = "xml"; }
	
	url = SERVER + "/find/clips/byname/" + search + "/" + format;
	makeRequest(url,"",action,"GET");
}

//find clip by tag
function get_by_clip_tag(search,action,format) {
	if(!search){ search = " "; }
	if(!format){ format = "xml"; }
	
	url = SERVER + "/find/clips/bytag/" + search + "/" + format;
	makeRequest(url,"",action,"GET");
}

//find clip by category
function get_by_clip_category(search,action,format) {
	if(!search){ search = " "; }
	if(!format){ format = "xml"; }
	
	url = SERVER + "/find/clips/bycategory/" + search + "/" + format;
	makeRequest(url,"",action,"GET");
}

//find clip by author
function get_by_clip_author(search,action,format) {
	if(!search){ search = " "; }
	if(!format){ format = "xml"; }

	url = SERVER + "/find/clips/byauthor/" + search + "/" + format;
	makeRequest(url,"",action,"GET");
}

//find clip by id
function get_by_clip_id(search,action,format) {
	if(!format){ format = "xml"; }
	
	url = SERVER + "/find/clips/byid/" + search + "/" + format;
	makeRequest(url,"",action,"GET");
}

//get recent clips
function get_recent_clips(action,format) {
	if(!format){ format = "xml"; }

	url = SERVER + "/find/clips/recent/" + format;
	makeRequest(url,"",action,"GET");
}

//get favorite clips
function get_favorite_clips(action,format) {
	if(!format){ format = "xml"; }

	url = SERVER + "/find/clips/favorites/" + format;
	makeRequest(url,"",action,"GET");
}

//get featured clips
function get_featured_clips(action,format) {
	if(!format){ format = "xml"; }

	url = SERVER + "/find/clips/featured/" + format;
	makeRequest(url,"",action,"GET");
}

//get mostsent clips
function get_mostsent_clips(action,format) {
	if(!format){ format = "xml"; }

	url = SERVER + "/find/clips/mostsent/" + format;
	makeRequest(url,"",action,"GET");
}

//get shuffle clips
function get_shuffle_clips(action,format) {
	if(!format){ format = "xml"; }
	
	var date = new Date();
	url = SERVER + "/find/clips/shuffle/" + format + "?time=" + date.getTime();
	makeRequest(url,"",action,"GET");
}

//get suggested clips
function get_suggested_clips(action,format) {
	if(!format){ format = "xml"; }
	
	url = SERVER + "/find/clips/shuffle/" + format + "?time=" + date.getTime();
	makeRequest(url,"",action,"GET");	
}

//CLIPS FUNCTIONS//
///////////////////




/////////////////////////////////
//          TABLE DATA         //
//html_cache,hash_cache,article,marcom,memcached//

//get html from html_cache
function get_html_cache(search,action) {
	if(search == ""){return;}
	
	url = SERVER + "/read/html/" + search;
	makeRequest(url,"",action,"GET");
}

//get html from html_cache
function get_hash_cache(search,action) {
	if(search == ""){return;}
	
	url = SERVER + "/read/hash/" + search;
	makeRequest(url,"",action,"GET");
}

//get list of articles from articles database
function get_article_list(department,cat,subcat,limit,action,format){
	if(!format){ format = "xml"; }
	
	url = SERVER + "/read/articlelist/" + format;
	post = "department=" + escape(department) +
		   "&cat=" + escape(cat) +
		   "&subcat=" + escape(subcat) +
		   "&limit=" + escape(limit);
	makeRequest(url,post,action,"POST");
}

//get article from articles database
function get_article(articleid,action,format){
	if(!format){ format = "json"; }
	if(articleid == ""){return;}
	
	url = SERVER + "/read/article/" + format;
	post = "articleid=" + escape(articleid);
	makeRequest(url,post,action,"POST");
}

//get marcom from marcom database
function get_marcom(lang,campaign,carrier,type,subtype,action){
	url = SERVER + "/user/marcom";
	post = "lang=" + escape(lang) +
		   "&campaign=" + escape(campaign) +
		   "&carrier=" + escape(carrier) +
		   "&type=" + escape(type) +
		   "&subtype=" + escape(subtype);
	makeRequest(url,post,action,"POST");
}

//get transaction data from memcached
function get_transaction_data(hash,format,action){
	if(!format){ format = "xml"; }
	
	url = SERVER + "/read/transaction/" + hash + "/" + format;
	makeRequest(url,"",action,"GET");
}

//html_cache,hash_cache,article,marcom,memcached//
//          TABLE DATA         //
/////////////////////////////////




//////////////////
//USER FUNCTIONS//

//add user to the secret sauce
function join(phone,name,passwd,lang,action){
	if(!(phone = checkPhone(phone))) { get_marcom('us','','','default','web_phone_wrong',action); return }
	
	url = SSL_SERVER + "/secret/join"
	var date = new Date();
	post = "phone=" + escape(phone) +
		   "&name=" + escape(name) +
		   "&passwd=" + escape(passwd) +
		   "&lang=" + escape(lang) +
		   "&t=" + escape(date.getTime());
	makeRequest(url,post,action,"POST");
}

//login user to the secret sauce
function login(phone,passwd,action){
	if(!(phone = checkPhone(phone))) { get_marcom('us','','','default','web_phone_wrong',action); return }
	
	url = SSL_SERVER + "/secret/login"
	var date = new Date();
	post = "mobile=" + escape(phone) +
		   "&alias=" + escape('') +
		   "&password=" + escape(passwd) +
		   "&t=" + escape(date.getTime());
	makeRequest(url,post,action,"POST");
}

//logout user
function logout(action){
	url = SERVER + "/secret/logout"
	var date = new Date();
	post = 't=' + escape(date.getTime());
	makeRequest(url,post,action,"POST");
}

//get logged in user sauce id and phone
function get_session_user(action){
	url = SERVER + "/secret/get_user"
	makeRequest(url,"",action,"GET")
}

//get logged in user mogreet messaging stats
function get_session_user_messaging_stats(user_id,number,days_ago,action){
	var date = new Date();
	url = SERVER + "/user/messaging/stats";
	post = "user_id=" + escape(user_id) +
		   "&number=" + escape(number) +
		   "&days_ago=" + escape(days_ago) +
		   "&time=" + escape(date.getTime());
	makeRequest(url,post,action,"POST");
}

//get logged in user preferences
function get_session_user_preferences(type,key,action){
	url = SERVER + "/secret/get_prefs";
	post = "type=" + escape(type) +
		   "&key=" + escape(key);
	makeRequest(url,post,action,"POST");
}

//get public user preferences
function get_public_user_preferences(userid,userphone,type,key,action){
	url = SERVER + "/secret/get_pub_prefs";
	post = "user=" + escape(userid) +
		   "&phone=" + escape(userphone) +
		   "&type=" + escape(type) +
		   "&key=" + escape(key);
	makeRequest(url,post,action,"POST");
}

//add preference to logged in user preference private or public
function add_preference(type,key,value,privacy,action){
	//privacy is true or false
	if(!type){ alert("Missing Type"); return; }
	if(!key){ alert("Missing Key"); return; }
	if(!value){ alert("Missing Value"); return; }
	if(!privacy){ alert("Missing Privacy"); return; }
	
	url = SERVER + "/secret/add_pref";
	post = "private=" + escape(privacy) +
		   "&value=" + escape(value) +
		   "&type=" + escape(type) +
		   "&key=" + escape(key);
	makeRequest(url,post,action,"POST");
}

//get logged in user data
function get_session_user_data(type,key,action){
	url = SERVER + "/secret/get_data";
	post = "type=" + escape(type) +
		   "&key=" + escape(key);
	makeRequest(url,post,action,"POST");
}

//get public user data
function get_public_user_data(userid,userphone,type,key,action){
	url = SERVER + "/secret/get_pub_data";
	post = "user=" + escape(userid) +
		   "&phone=" + escape(userphone) +
		   "&type=" + escape(type) +
		   "&key=" + escape(key);
	makeRequest(url,post,action,"POST");
}

//add to logged in user data private or public
function add_data(type,key,value,privacy,action){
	//privacy is true or false
	if(!type){ alert("Missing Type"); return; }
	//if(!key){ alert("Missing Key"); return; }
	if(!value){ alert("Missing Value"); return; }
	if(!privacy){ alert("Missing Privacy"); return; }
	
	url = SERVER + "/secret/add_data";
	post = "private=" + escape(privacy) +
		   "&value=" + escape(value) +
		   "&type=" + escape(type) +
		   "&key=" + escape(key);
	makeRequest(url,post,action,"POST");
}

//update to logged in user data private or public
function update_data(type,key,value,privacy,action){
	//privacy is true or false
	if(!type){ alert("Missing Type"); return; }
	//if(!key){ alert("Missing Key"); return; }
	if(!value){ alert("Missing Value"); return; }
	if(!privacy){ alert("Missing Privacy"); return; }
	
	var date = new Date();
	url = SERVER + "/secret/update_data";
	post = "private=" + escape(privacy) +
		   "&value=" + escape(value) +
		   "&type=" + escape(type) +
		   "&key=" + escape(key) +
		   "&t=" + escape(date.getTime());
	makeRequest(url,post,action,"POST");
}

//delete to logged in user data private or public
function delete_data(type,key,privacy,action){
	//privacy is true or false
	if(!type){ alert("Missing Type"); return; }
	//if(!key){ alert("Missing Key"); return; }
	if(!privacy){ alert("Missing Privacy"); return; }
	
	var date = new Date();
	url = SERVER + "/secret/delete_data";
	post = "private=" + escape(privacy) +
		   "&type=" + escape(type) +
		   "&key=" + escape(key) +
		   "&t=" + escape(date.getTime());
	makeRequest(url,post,action,"POST");
}

//load data as an object
function load_data(action){
	var data = arguments[1];
	//alert(data);
	eval(data);
	eval(action);
}

//USER FUNCTIONS//
//////////////////




//////////////////////////
//USER PROFILE FUNCTIONS//

//profile constructor
function profile(){
	this.firstname = '';
	this.lastname = '';
	this.givername = '';
	this.gender = '';
	this.age = NaN;
	this.mobile = new Object;
	this.mobile.number = '';
	this.mobile.carrier = '';
	this.mobile.handset = '';
	this.email = '';
	this.dates = new Object;
	this.playlists = new Object;
}

//create profile
function create_profile(phone){
	var objProfile = new profile();
	objProfile.mobile.number = phone;
	
	//serialize profile
	objSerializer = new JSSerializer();
	objSerializer.Prefs.SmartIndent = true;
	objSerializer.Prefs.ShowLineBreaks = true;
	objSerializer.Prefs.ShowTypes = true;
	objSerializer.Serialize(objProfile);
	objProfileSerialized = objSerializer.GetJSString('userProfile');
	
	//add profile to secret data
	add_data('profile','',objProfileSerialized,'false','dummy');
	
	//load profile
	//get_user_profile(action);
}

//get user profile
function get_user_profile(action){
	get_session_user_data('profile','','load_data("' + action + '")');
}

//update profile
function update_profile(objProfile){
	//serialize profile
	objSerializer = new JSSerializer();
	objSerializer.Prefs.SmartIndent = true;
	objSerializer.Prefs.ShowLineBreaks = true;
	objSerializer.Prefs.ShowTypes = true;
	objSerializer.Serialize(objProfile);
	objProfileSerialized = objSerializer.GetJSString('userProfile');
	
	//update profile to secret data
	update_data('profile','',objProfileSerialized,'false','dummy');
}

//USER PROFILE FUNCTIONS//
//////////////////////////




///////////////////////////
//USER PLAYLIST FUNCTIONS//

//get playlists as a list
function get_playlists(action){
	get_session_user_data('playlist','',action);
}

//get playlist by id
function get_playlist_by_key(key,action){
	get_session_user_data('playlist',key,action);
}

//create new playlist
function playlist_new(key,action){
	var value = '<playlist id="' + key + '"></playlist>';
	add_data('playlist',key,'false',value,action);
}

//add clip to playlist
function playlist_clip_add(key,clip,action){
	
}

//delete clip from playlist
function playlist_clip_delete(key,clip,action){
	
}

//delete playlist
function playlist_delete(key,action){
	
}

//USER PLAYLIST FUNCTIONS//
///////////////////////////




//////////////////////////////
//USER ADDRESSBOOK FUNCTIONS//

//get addressbook
function get_addressbook(action){
	get_session_user_data('addressbook','',action);
}

//add contact to addressbook
function addressbook_contact_add(){
	
}

//delete contact from addressbook
function addressbook_contact_delete(){
	
}

//USER ADDRESSBOOK FUNCTIONS//
//////////////////////////////




//////////////////
//SEND FUNCTIONS//

//sender
//deprecated
function send_mogreet(campaign_id,flow_type,clip_id,from,givername,to,message,promo,tnc,player_key,player_val,action){
	if(!tnc){ get_marcom('us','','','default','web_tnc_uncheck',action); return }
	if(!clip_id){ get_marcom('us','','','default','web_clip_id_blank',action); return }
	if(!from){ get_marcom('us','','','default','web_phonefrom_blank',action); return }
	if(!to){ get_marcom('us','','','default','web_phoneto_blank',action); return }
	if(!(from = checkPhone(from))) { get_marcom('us','','','default','web_phonefrom_wrong',action); return }
	if(!(to = checkPhone(to))) { get_marcom('us','','','default','web_phoneto_wrong',action); return }
	
	var date = new Date();
	url = SERVER + "/send/campaign/" + campaign_id;
	post = "flow_type=" + escape(flow_type) +
		   "&clip_id=" + escape(clip_id) +
		   "&from=" + escape(from) +
		   "&givername=" + escape(givername) +
		   "&to=" + escape(to) +
		   "&message=" + escape(message) +
		   "&promo=" + escape(promo) +
		   "&player_key=" + escape(player_key) +
		   "&player_val=" + escape(player_val) +
		   "&time=" + escape(date.getTime());
	makeRequest(url,post,action,"POST")
	
}

//sender 2
function send_mogreet2(campaign_id,clip_id,from,from_name,to,to_name,message,promo,player_key,player_value,affiliate,action){
	var date = new Date();
	url = SERVER + "/send"
	post = "campaign_id=" + escape(campaign_id) +
	     "&clip_id=" + escape(clip_id) +
		   "&from=" + escape(from) +
		   "&from_name=" + escape(from_name) +
		   "&to=" + escape(to) +
		   "&to_name=" + escape(to_name) +
		   "&message=" + escape(message) +
		   "&promo=" + escape(promo) +
		   "&player_key=" + escape(player_key) +
		   "&player_value=" + escape(player_value) +
		   "&time=" + escape(date.getTime());
	makeRequest(url,post,action,"POST")
	
}

//send email
function send_email_mogreet(clip_id,email_to,email_from,givername,message,player_key,player_val,action){
	url = SERVER + "/send/campaign/" + campaign_id;
	post = "clip_id=" + escape(clip_id) +
		   "&email_from=" + escape(email_from) +
		   "&givername=" + escape(givername) +
		   "&email_to=" + escape(email_to) +
		   "&message=" + escape(message) +
		   "&player_key=" + escape(player_key) +
		   "&player_val=" + escape(player_val);
	makeRequest(url,post,action,"POST")
}

//submit pin
function submit_pin(campaign_id,from,pin,action){
	if(from = checkPhone(from)){ get_marcom('us','','','default','web_phone_wrong',action); return }
	
	url = SERVER + "/send/pin/" + campaign_id;
	post = "flow_type=" + escape('submit') +
		   "&from=" + escape(from) +
		   "&pin=" + escape(pin);
	makeRequest(url,post,action,"POST")
}

//request pin
function request_pin(campaign_id,from,action){
	if(from = checkPhone(from)){ get_marcom('us','','','default','web_phone_wrong',action); return }
	
	url = SERVER + "/send/pin/" + campaign_id;
	post = "flow_type=" + escape('request') +
		   "&from=" + escape(from);
	makeRequest(url,post,action,"POST")
}

//submit buylink notice
function submit_buylink_notice(ticket,shortcode,action){
	aggregator = "";
	switch(shortcode)
	{
		case '22095': aggregator = "vrsn";
					break;
		case '21534': aggregator = "opem";
					break;
		case '647338': aggregator = "mgreet";
					break;
		default: break;
	}
	
	url = SERVER + "/ws/" + aggregator;
	xml = '<?xml version="1.0" encoding="UTF-8"?>' +
		  '<buylinkNotice version="1.0">' +
		  '<status code="1">Success</status>' +
		  '<ticketId>' + ticket + '</ticketId>' +
		  '</buylinkNotice>';
	makeRequest(url,xml,action,"POST")
}

//SEND FUNCTIONS//
//////////////////




/////////////////
//LOG FUNCTIONS//

//player log
//deprecated
function log_player(key,player,clipId,versionId,personId,phoneFrom,phoneTo,playerVal,valInt,valFloat,valText,action){
	url = SERVER + "/log/player";
	
	var date = new Date();
	
	post = "key=" + escape(key) +
			"&player=" + escape(player) +
			"&clip=" + escape(clipId) +
			"&version=" + escape(versionId) +
			"&user=" + escape(personId) +
			"&from=" + escape(phoneFrom) +
			"&to=" + escape(phoneTo) +
			"&player_value=" + escape(playerVal) +
			"&val_int=" + escape(valInt) +
			"&val_float=" + escape(valFloat) +
			"&val_text=" + escape(valText) +			
			"&time=" + escape(date.getTime());
	makeRequest(url,post,action,"POST")
}

//player log 2
function log_player2(key,campaign_id,clip_id,player_key,player_value,affiliate,action){
	url = SERVER + "/log/player";
	
	var date = new Date();
	
	post = "key=" + escape(key) +
		"&clip_id=" + escape(clip_id) +
		"&campaign_id=" + escape(campaign_id) +
		"&player_key=" + escape(player_key) +
		"&player_value=" + escape(player_value) + 
		"&affiliate=" + escape(affiliate) + 
		"&time=" + escape(date.getTime());
	makeRequest(url,post,action,"POST") 
}

//LOG FUNCTIONS//
/////////////////




//////////////
//MISC FUNCS//

//find tags by clip ids
function get_tags_by_clipids(clips,action,format) {
	if(!clips){ alert('NO CLIP IDS PASSED'); return; }
	if(!format){ format = "xml"; }

	url = SERVER + "/find/tags/byclip/" + clips + "/" + format;
	makeRequest(url,"",action,"GET");
}

//carrier lookup for phone number
function carrier_supported(number,campaign,action){
	if(number == "" || campaign == ""){return;}
	var numericExpression = /^1[2-9][0-9]{9}$|^[2-9][0-9]{9}$/;
	if(!number.match(numericExpression)){alert('bad phone number input');return;}
	
	url = SERVER + "/user/carrier/supported";
	post = "number=" + escape(number) +
		   "&campaign=" + escape(campaign);
	makeRequest(url,post,action,"POST");
}

//vote popularity of a clip
function vote_popularity(clip_id,rank,action){
	if(clip_id == "" || rank == ""){return;}
	
	var date = new Date();
	url = SERVER + "/user/vote/popularity";
	post = "clip_id=" + escape(clip_id) +
		   "&rank=" + escape(rank) +
		   "&time=" + escape(date.getTime());
	makeRequest(url,post,action,"POST")
}

//check promo code status
function verify_promo(promo,action){
	url = SERVER + "/read/verifypromo/" + escape(promo);
	makeRequest(url,"",action,"GET");
}

//MISC FUNCS//
//////////////




////////////////////
//PHONE VALIDATION//

// declaring required variables
var digits = "0123456789";
// non-digit characters which are allowed in phone numbers
var phoneNumberDelimiters = "()- ";
// characters which are allowed in international phone numbers
// (a leading + is OK)
var validWorldPhoneChars = phoneNumberDelimiters + "+";
// Minimum no of digits in an international phone no.
var digitsInPhoneNumber = 10;
function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++)
    {   
        // check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}
function trim(s){
	var i;
    var returnString = "";
    // search through string's characters one by one.
    // if character is not a whitespace, append to returnString.
    for (i = 0; i < s.length; i++)
    {   
        // check that current character isn't whitespace.
        var c = s.charAt(i);
        if (c != " ") returnString += c;
    }
    return returnString;
}
function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    // search through string's characters one by one.
    // if character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++)
    {   
        // check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
	if (returnString.indexOf('1') == 0) returnString = returnString.substr(1,returnString.length)
    return returnString;
}
function checkPhone(strPhone){
	var bracket=3
	strPhone = trim(strPhone)
	if(strPhone.indexOf("+")>1) return false
	if(strPhone.indexOf("-")!=-1) bracket=bracket+1
	if(strPhone.indexOf("(")!=-1 && strPhone.indexOf("(")>bracket) return false
	var brchr = strPhone.indexOf("(")
	if(strPhone.indexOf("(")!=-1 && strPhone.charAt(brchr+4)!=")") return false
	if(strPhone.indexOf("(")==-1 && strPhone.indexOf(")")!=-1) return false
	s = stripCharsInBag(strPhone,validWorldPhoneChars);
	if (isInteger(s) && s.length == digitsInPhoneNumber) {
		return s;
	} else {
		return false;
	}
}

//PHONE VALIDATION//
////////////////////




////////////////////
//EMAIL VALIDATION//

function checkEmail(email){
	var filter=/^.+@.+\..{2,3}$/

 	if (filter.test(email))
		return true;
	else{
		return false;
	}
}

//EMAIL VALIDATION//
////////////////////




//////////////
//EASTER EGG//
document.onkeyup = konami_cheat;
var konami_code = [38,38,40,40,37,39,37,39,66,65];
var konami_mark = 0;
function konami_cheat(e){
	var key = (window.event) ? event.keyCode : e.keyCode;
	if(key == konami_code[konami_mark] && location.search.match("v=browse")){
		konami_mark += 1;
		if(konami_mark == 10){
			konami_mark = 0;
			search_string = 'Konami Cheat Code';
			search_type = 'key';
			//new_html = "<p/><br/><center><img src='images/loading.gif'></center>";
			//$('results').innerHTML = new_html;
			$('page_title').innerHTML = search_string;
			new_html = "<div id='search_text'></div><div id='my_clips'></div></center>";
			mogreets = get_html_cache('konami_cheat_mogreets','parse_search_results()');
			$('results').innerHTML = new_html;
			return false;
		}
	} else {
		konami_mark = 0;
	}
}
//EASTER EGG//
//////////////




//////////////////////////////
//IMAGE ROTATION            //
//should move to own js file//

var heroswap_pointer = 0;

function heroswap_playlist(){
	this.div = '';
	this.images = new Array;
}

function heroswap_image(){
	this.source = '';
	this.url = '';
	this.display = new Object;
	this.display.width = '';
	this.display.height = '';
	this.display.time = '';
}

function heroswap_initiate(objString){
	get_html_cache('heroswap','heroswap_load(\''+objString+'\')');
}

function heroswap_load(objString){
	var data = arguments[1];
	eval(data);
	heroswap_replace(objString);
}

function heroswap_replace(objString){
	var obj = eval(objString);
	var div = document.getElementById(obj.div);
	if(div && obj){
		var src = obj.images[heroswap_pointer].url;
		var url = obj.images[heroswap_pointer].source;
		var width = obj.images[heroswap_pointer].display.width;
		var height = obj.images[heroswap_pointer].display.height;
		var timeout = obj.images[heroswap_pointer].display.time;
		var info = '<a href="' + src + '">' +
				'<img border="0" src="' + url + '" width="' + width + '" height="' + height + '"/>' +
				'</a>';
		div.innerHTML = info;
		setTimeout('heroswap_rotate("'+objString+'")',timeout)
	} else { setTimeout('heroswap_replace("'+objString+'")',10); }
}

function heroswap_rotate(objString){
	var obj = eval(objString);
	heroswap_pointer+= 1;
	if (obj.images.length == heroswap_pointer) { heroswap_pointer = 0; }
	var div = document.getElementById(heroswap.div);
	var src = obj.images[heroswap_pointer].url;
	var url = obj.images[heroswap_pointer].source;
	var width = obj.images[heroswap_pointer].display.width;
	var height = obj.images[heroswap_pointer].display.height;
	var timeout = obj.images[heroswap_pointer].display.time;
	var info = '<a href="' + src + '">' +
			'<img border="0" src="' + url + '" width="' + width + '" height="' + height + '"/>' +
			'</a>';
	div.innerHTML = info;
	setTimeout('heroswap_rotate("'+objString+'")',timeout)
}

//should move to own js file//
//IMAGE ROTATION            //
//////////////////////////////
